Preâmbulo
A Elastic Security identificou uma campanha em andamento visando uma instituição de serviços financeiros vietnamita com o backdoor PHOREAL/RIZZO. Embora esse malware esteja em uso há algum tempo, esta é a primeira vez que o observamos carregando na memória como uma técnica de evasão de defesa e proteção de campanha. Após a análise de nossas próprias observações e informações relatadas anteriormente, estamos rastreando esse grupo de atividades (malware + técnica + vitimologia) como REF4322.
O que é a ameaça?
PHOREAL/RIZZO é um backdoor que permite a caracterização inicial da vítima e operações posteriores à exploração para comprometer a confidencialidade dos dados das organizações. Foi relatado em outras pesquisas como sendo usado exclusivamente pelo APT32 (também conhecido como SeaLotus, OceanLotus, APT-C-00, Grupo G0050).
Qual é o impacto?
O APT32 tem como alvo principal vítimas com interesses políticos ou econômicos no Sudeste Asiático, especificamente no Vietnã.
O que a Elastic está fazendo a respeito?
A Elastic Security detalhou como selecionar um desses alertas de ameaça, extraiu observáveis para filtragem de endpoint e rede e produziu uma nova assinatura de malware para identificação e mitigação da ameaça em toda a frota de Elastic Agents implantados.
Detalhes da investigação
Ao conduzir operações de descoberta e monitoramento de ameaças, os pesquisadores da Elastic Security identificaram um cluster de alertas de proteção de memória do Windows shellcode_thread gerados por um sensor de endpoint do Elastic Agent. Esses alertas específicos eram interessantes porque todos ocorriam no mesmo cluster e, incomumente, tinham como alvo o processo control.exe. O processo control.exe do Windows controla a execução de itens do Painel de Controle, que são utilitários que permitem aos usuários visualizar e ajustar as configurações do computador.
Geralmente, quando observamos falsos positivos para a proteção shellcode_thread, isso é identificado em uma ampla base de usuários e, em muitos casos, é atribuído a vários mecanismos anti-cheat ou DRM (Digital Rights Management) de jogos. Nesse caso, um único cluster e um processo de destino assinado pela Microsoft eram atípicos e mereciam investigação mais aprofundada.
Você pode ler mais sobre as proteções de memória do Elastic Security AQUI e sobre ataques na memória AQUI.
Com nosso interesse despertado pelas características atípicas dos alertas, investigamos mais a fundo para validar e caracterizar a ameaça:
O processo alvo é um binário assinado do Windows
...
"process": {
"args": [
"control.exe",
"Firewall.cpl",
"{2D48D219-C306-4349-AE1F-09744DFFB5B9}"
],
"Ext": {
"code_signature": [
{
"trusted": true,
"subject_name": "Microsoft Windows",
"exists": true,
"status": "trusted"
}
],
"dll": [
...
.dll carregado não assinado
...
"Ext": {
"mapped_address": 1945501696,
"mapped_size": 21135360
},
"path": "C:\\Windows\\SysWOW64\\tscon32.dll",
"code_signature": [
{
"exists": false
}
],
"name": "tscon32.dll",
"hash": {
"sha1": "007970b7a42852b55379ef4cffa4475865c69d48",
"sha256": "ec5d5e18804e5d8118c459f5b6f3ca96047d629a50d1a0571dee0ac8d5a4ce33",
"md5": "2b6da20e4fc1af2c5dd5c6f6191936d1"
}
},
...
Módulo inicial do thread de alerta
...
"pe": {
"original_file_name": "CONTROL.EXE"
},
"name": "control.exe",
"pid": 5284,
"thread": {
"Ext": {
"start_address_module": "C:\\Windows\\SysWOW64\\tscon32.dll",
...
Alertando metadados da região de memória
...
"memory_region": {`
"region_size": 73728,
"region_protection": "RWX",
"allocation_base": 81395712,
"bytes_allocation_offset": 0,
"allocation_type": "PRIVATE",
"memory_pe_detected": true,
"region_state": "COMMIT",
"strings": [
"QSSSSSSh ",
...
"bad cast",
"Local\\{5FBC3F53-A76D-4248-969A-31740CBC8AD6}",
"Netapi32.dll",
"NetWkstaGetInfo",
"NetApiBufferFree",
"\\\\.\\pipe\\{A06F176F-79F1-473E-AF44-9763E3CB34E5}",
"list<T> too long",
"{FD5F8447-657A-45C1-894B-D533926C9B66}.dll",
"DllEntry",
...
".?AVbad_alloc@std@@",
"C:\\Windows\\syswow64\\control.exe",
":z:zzzzzz7",
...
"InternalName",
"mobsync.exe",
"LegalCopyright",
...
Dados de thread para pivotamento
...
"thread": {
"Ext": {
"start_address_bytes": "8bff558bece8e6430000e8db43000050e8bb43000085c0751fff7508e8c94300",
...
"start_address_bytes_disasm": "mov edi, edi\npush ebp\nmov ebp, esp\ncall 0x000043f0\ncall 0x000043ea\npush eax\ncall 0x000043d0\ntest eax, eax\njnz 0x00000038\npush dword ptr [ebp+0x08]"
},
...
No alerta de exemplo, primeiro identificamos o start_address_module, que é a dll/módulo onde o thread começou. C:\Windows\SysWOW64\tscon32.dll é o start_address_module do thread sobre o qual alertamos. Também é a única dll não assinada carregada, então é um ótimo lugar para concentrar nossos esforços. Ao verificar o valor de hash no VirusTotal, para identificar informações divulgadas anteriormente sobre a amostra, não vimos nenhum resultado.
Analisando mais a fundo, analisamos os start_address_bytes, que são os primeiros 32 bytes do nosso thread de alerta. Podemos usar o valor de start_address_bytes (8bff558bece8e6430000e8db43000050e8bb43000085c0751fff7508e8c94300) para procurar pivôs no VirusTotal consultando o conteúdo: {8bff558bec56e83f3e0000e8343e000050e8143e000085c0752a8b750856e821}. Identificamos relativamente poucos resultados, mas eles incluíam a entrada abaixo, enviada pela primeira vez em julho de 2021.
Ao pesquisar os resultados do VirusTotal, pudemos ver que o pesquisador de ameaças Felix Bilstein (@fxb_b) criou uma regra YARA de crowdsourcing identificando isso como o backdoor PHOREAL . Passando para a aba CONTEÚDO, podemos comparar algumas das sequências do nosso alerta com o que foi relatado anteriormente ao VirusTotal.
Usando as strings exclusivas que identificamos acima e os start_address_bytes, podemos criar uma assinatura YARA convertendo as strings exclusivas ($a) e os start_address_bytes ($b) em valores hexadecimais, conforme mostrado abaixo.
Strings YARA convertidas
strings:
\\ "\\.\pipe\{A06F176F-79F1-473E-AF44-9763E3CB34E5}" ascii wide
$a1 = { 5C 00 5C 00 2E 00 5C 00 70 00 69 00 70 00 65 00 5C 00 7B 00 41 00
30 00 36 00 46 00 31 00 37 00 36 00 46 00 2D 00 37 00 39 00 46 00
31 00 2D 00 34 00 37 00 33 00 45 00 2D 00 41 00 46 00 34 00 34 00
2D 00 39 00 37 00 36 00 33 00 45 00 33 00 43 00 42 00 33 00 34 00
45 00 35 00 7D 00 }
\\ "Local\{5FBC3F53-A76D-4248-969A-31740CBC8AD6}" ascii wide
$a2 = { 4C 00 6F 00 63 00 61 00 6C 00 5C 00 7B 00 35 00 46 00 42 00 43 00
33 00 46 00 35 00 33 00 2D 00 41 00 37 00 36 00 44 00 2D 00 34 00
32 00 34 00 38 00 2D 00 39 00 36 00 39 00 41 00 2D 00 33 00 31 00
37 00 34 00 30 00 43 00 42 00 43 00 38 00 41 00 44 00 36 00 7D 00 }
\\ "{FD5F8447-657A-45C1-894B-D533926C9B66}.dll" ascii
$a3 = { 7B 46 44 35 46 38 34 34 37 2D 36 35 37 41 2D 34 35 43 31 2D 38 39
34 42 2D 44 35 33 33 39 32 36 43 39 42 36 36 7D 2E 64 6C 6C }
\\ PHOREAL start_address_bytes sequence
\\ mov edi, edi; push ebp; mov ebp, esp; call 0x000043f0;
\\ call 0x000043ea; push eax; call 0x000043d0; test eax, eax;
\\ jnz 0x00000038; push dword ptr [ebp+0x08]
$str_addr = { 8B FF 55 8B EC 56 E8 3F 3E 00 00 E8 34 3E 00 00 50 E8 14 3E
00 00 85 C0 75 2A 8B 75 08 56 E8 21 }
condition:
2 of them
Esta regra, quando implantada no Elastic Agent, identificará o PHOREAL para os clientes e a prevenção de backstop já fornecida pela proteção de memória shellcode_thread (em ambientes de clientes com proteção de memória ativada). No nosso caso, a implantação dessa regra também permitiu a coleta do thread malicioso usando o mesmo mecanismo detalhado em nosso artigo Coletando Cobalt Strike Beacons .
Logo após a implantação do novo artefato YARA, tínhamos um novo alerta malware_signature em mãos com o thread malicioso capturado da memória. A triagem binária manual da nossa equipe de Análise de Malware e Engenharia Reversa (MARE) confirmou rapidamente que a amostra era PHOREAL/RIZZO comparando a estrutura e as funções entre nossa amostra e relatórios anteriores. Além disso, eles conseguiram extrair um domínio criptografado RC4 de um recurso RCDATA, conforme descrito em um whitepaper da CYLANCE OceanLotus de 2018.
O domínio identificado pelo MARE (thelivemusicgroup[.]com) atualmente é resolvido para 103.75.117[.]250 que é propriedade da Oneprovider[.]com, uma empresa de hospedagem de servidores dedicados sediada no Canadá com data centers distribuídos globalmente.
https://ipinfo.io/ resultados da consulta para 103.75.117[.]250
{
"ip": "103.75.117[.]250",
"city": "Hong Kong",
"region": "Central and Western",
"country": "HK",
"loc": "22.2783,114.1747",
"org": "AS133752 Leaseweb Asia Pacific pte. ltd.",
"timezone": "Asia/Hong_Kong",
"asn": {
"asn": "AS133752",
"name": "Leaseweb Asia Pacific pte. ltd.",
"domain": "leaseweb.com",
"route": "103.75.117[.]0/24",
"type": "hosting"
},
"company": {
"name": "Oneprovider.com - Hong Kong Infrastructure",
"domain": "oneprovider[.]com",
"type": "hosting"
},
"privacy": {
"vpn": false,
"proxy": false,
"tor": false,
"relay": false,
"hosting": true,
"service": ""
},
"abuse": {
"address": "1500 Ste-Rose LAVAL H7R 1S4 Laval Quebec, Canada",
"country": "CA",
"email": "info@oneprovider.com",
"name": "ONE PROVIDER",
"network": "103.75.117[.]0/24",
"phone": "+1 514 286-0253"
},
"domains": {
"ip": "103.75.117[.]250",
"total": 2,
"domains": [
"thelivemusicgroup[.]com",
"cdn-api-cn-1[.]com"
]
}
A maioria das informações interessantes sobre o domínio são protegidas por privacidade, mas as datas “Atualizado” e “Criado” na figura abaixo podem ser úteis para limitar por quanto tempo esse domínio foi usado maliciosamente.
O Agente Elástico parece ter sido implantado após o comprometimento, o que limitou nossa capacidade de determinar o vetor de acesso inicial. Um relatório da Mandiant de 2017 indica que o PHOREAL pode ser implantado em uma capacidade de “estabelecer ponto de apoio” para permitir a triagem de vítimas e ferramentas de acompanhamento pós-exploração.
Análise
O Elastic Security utiliza o Modelo Diamond para descrever relacionamentos de alto nível entre adversários e vítimas de intrusões.
Justificativa da avaliação do adversário
Avaliamos com alta confiança, com base na atividade observada e em relatórios anteriores, que REF4322 é APT32/OceanLotus e o agente por trás deste incidente. O APT32 está ativo desde 2014 principalmente visando governos e empresas do Sudeste Asiático ou outras empresas internacionais com interesses no Vietnã. O APT32 é o único grupo atualmente identificado como operador do backdoor PHOREAL, e nossa vítima corresponde ao perfil geográfico e vertical do setor de vítimas típicas e específicas anteriores do APT32.
Conclusão
Regras YARA
Criamos uma regra YARA para identificar essa atividade PHOREAL.
Regra Yara para detectar backdoor na memória REF4322/APT32 PHOREAL/Rizzo
rule Windows_Trojan_PHOREAL {
meta:
Author = "Elastic Security"
creation_date = "2022-02-16"
last_modified = "2022-02-16"
os = "Windows"
arch = "x86"
category_type = "Trojan"
family = "PHOREAL"
threat_name = "Windows.Trojan.PHOREAL"
description = "Detects REF4322/APT32 in-memory backdoor PHOREAL/Rizzo."
reference_sample = "88f073552b30462a00d1d612b1638b0508e4ef02c15cf46203998091f0aef4de"
strings:
\\ "\\.\pipe\{A06F176F-79F1-473E-AF44-9763E3CB34E5}" ascii wide
$a1 = { 5C 00 5C 00 2E 00 5C 00 70 00 69 00 70 00 65 00 5C 00 7B 00 41 00
30 00 36 00 46 00 31 00 37 00 36 00 46 00 2D 00 37 00 39 00 46 00
31 00 2D 00 34 00 37 00 33 00 45 00 2D 00 41 00 46 00 34 00 34 00
2D 00 39 00 37 00 36 00 33 00 45 00 33 00 43 00 42 00 33 00 34 00
45 00 35 00 7D 00 }
\\ "Local\{5FBC3F53-A76D-4248-969A-31740CBC8AD6}" ascii wide
$a2 = { 4C 00 6F 00 63 00 61 00 6C 00 5C 00 7B 00 35 00 46 00 42 00 43 00
33 00 46 00 35 00 33 00 2D 00 41 00 37 00 36 00 44 00 2D 00 34 00
32 00 34 00 38 00 2D 00 39 00 36 00 39 00 41 00 2D 00 33 00 31 00
37 00 34 00 30 00 43 00 42 00 43 00 38 00 41 00 44 00 36 00 7D 00 }
\\ "{FD5F8447-657A-45C1-894B-D533926C9B66}.dll" ascii
$a3 = { 7B 46 44 35 46 38 34 34 37 2D 36 35 37 41 2D 34 35 43 31 2D 38 39
34 42 2D 44 35 33 33 39 32 36 43 39 42 36 36 7D 2E 64 6C 6C }
\\ PHOREAL start_address_bytes sequence
$str_addr = { 8B FF 55 8B EC 56 E8 3F 3E 00 00 E8 34 3E 00 00 50 E8 14 3E
00 00 85 C0 75 2A 8B 75 08 56 E8 21 }
condition:
2 of them
}
Recomendações de defesa
As seguintes etapas podem ser aproveitadas para melhorar a postura de proteção de uma rede:
- Habilitar a proteção de memória do Elastic Security em endpoints do Windows
- Aproveite as assinaturas YARA incluídas acima para determinar se existe atividade PHOREAL em sua organização
- Monitore ou bloqueie o tráfego de rede de ou para IOCs de rede identificados e corrija os sistemas afetados adequadamente.
Referências
Ao longo do documento, fizemos referência aos seguintes trabalhos de pesquisa:
- https://github.com/CyberMonitor/APT_CyberCriminal_Campagin_Collections/blob/master/2018/2018.10.17.OceanLotus_SpyRATs/SpyRATsofOceanLotusMalwareWhitePaper.pdf
- https://www.mandiant.com/resources/cyber-espionage-apt32
- https://www.secureworks.com/research/threat-profiles/tin-woodlawn
- https://attack.mitre.org/software/S0158/
- https://attack.mitre.org/groups/G0050/
Observables
Indicador | Tipo | Referência | Notas |
---|---|---|---|
thelivemusicgroup[.]com | nome de domínio | Domínio C2 criptografado em malware | |
103.75.117[.]250 | endereço-ipv4 | IP resolvido do thelivemusicgroup[.]com | |
ec5d5e18804e5d8118c459f5b6f3ca96047d629a50d1a0571dee0ac8d5a4ce33 | SHA256 | tscon32.dll | dll PHOREAL |
Artefatos
Os artefatos também estão disponíveis para download nos formatos ECS e STIX em um pacote zip combinado.