Ameaça desencadeada: arquivo Excel implanta CobaltStrike na Ucrânia

Neste ataque sofisticado, o agressor emprega táticas de malware em vários estágios para impedir a detecção e, ao mesmo tempo, garantir a estabilidade operacional.

Por Cara Lin | 03 de junho de 2024

Plataformas afetadas: Microsoft Windows
Usuários afetados: Microsoft Windows
Impacto:  As máquinas comprometidas estão sob o controle do agente da ameaça
Nível de gravidade:  Alto

O FortiGuard Labs identificou recentemente um ataque cibernético sofisticado envolvendo um arquivo Excel incorporado a uma macro VBA projetada para implantar um arquivo DLL. O invasor usa uma estratégia de malware em vários estágios para entregar a notória carga útil “Cobalt Strike” e estabelecer comunicação com um servidor de comando e controle (C2). Este ataque emprega várias técnicas de evasão para garantir a entrega bem-sucedida da carga útil.

Nos últimos anos, a Ucrânia tem sido um alvo significativo devido à sua situação geopolítica. A história destes ataques revela um padrão de complexidade e frequência crescentes, especialmente durante períodos de tensão geopolítica. Por exemplo, em 2022, o FortiGuard Labs relatou uma campanha usando um documento Excel malicioso com o tema militar ucraniano para entregar um carregador Cobalt Strike de vários estágios. Em 2023, a Equipe de Resposta a Emergências Informáticas da Ucrânia (CERT-UA) revelou que o UAC-0057 estava envolvido em um ataque usando um arquivo XLS malicioso contendo uma macro e uma imagem de isca para implantar o PicassoLoader e o Cobalt Strike Beacon em sistemas comprometidos.

Neste artigo, exploraremos os detalhes técnicos deste último ataque em vários estágios.

Diagrama de fluxo de ataque do ataque. 1. Implante o arquivo XLS com macro VBA. 2. Solte o downloader de DLL. 3. Solte e execute o arquivo LNK. 4. Execute o downloader de DLL. 5. Baixe dados codificados. 6. Extraia e decodifique dados. 7. Adicione registro. 8. Descriptografe e salve o injetor DLL. 9. Injetar ataque de cobalto

Figura 1: Fluxo de ataque

Documento Excel

O documento malicioso do Excel contém elementos em ucraniano projetados para induzir o usuário a ativar suas macros.

Documento Excel com elementos em ucraniano. Um banner na parte superior do documento diz “Aviso de segurança: macros foram desativadas”. com um botão Ativar conteúdo

Figura 2: Documento Excel antes de ativar o VBA

Uma vez activada a macro VBA, o documento muda para folhas relacionadas com o cálculo do “montante de fundos orçamentais atribuídos às unidades militares” (traduzido de “montante de fundos orçamentais atribuídos a unidades militares”).

O documento Excel após ativar o VBA. A captura de tela mostra uma planilha de orçamento em ucraniano.

Figura 3: Documento Excel após habilitar o VBA

A principal função da macro VBA é implantar um downloader de DLL, que é codificado em HEX. Além disso, a maioria das strings no código VBA são codificadas em HEX para evitar mecanismos básicos de detecção de strings.

A função workbook_open()

Figura 4: A função “workbook_open()”

Depois de colocar o arquivo DLL “Ac83faafb23919Ae9.DLl” em “%APPDATA%\VIBErpc\bIn\biN”, a macro cria um atalho chamado “ACtIVePRObE” em “%APPDATA%\Microsoft”. Em seguida, ele usa o comando “Shell” para executar “RunDLL32.EXE shell32.dll,ShellExec_RunDLL ‘%APPDATA%\Microsoft\ACtIVePRObE.lnk’, 0.” Este arquivo LNK foi projetado para chamar regsvr32 para executar o arquivo DLL “Ac83faafb23919Ae9.DLl”.

Comando Shell criando o arquivo LNK

Figura 5: Criando o arquivo LNK

O arquivo LNK

Figura 6: O arquivo LNK

Baixador de DLLs

O downloader “Ac83faafb23919Ae9.DLl.” é ofuscado com ConfuserEx.

O downloader de DLL. O código é ofuscado com ConfuserEx.

Figura 7: Downloader de DLL “Ac83faafb23919Ae9.DLl”

Primeiro, ele examina nomes de processos para strings específicas: “processhacker”, “avastui”, “aswtoolssvc”, “wsc_proxy”, “procexp”, “overseer” e “avastsvc”. Se detectar um processo correspondente associado a uma ferramenta de análise ou software antivírus, ele encerra o programa.

Verificando nomes de processos para strings específicas relacionadas a ferramentas de análise e software antivírus

Figura 8: Verificando os nomes dos processos

Depois de passar na verificação do processo, ele constrói uma solicitação da web para obter a carga útil do próximo estágio da URL “hxxps://goudieelectric[.]shop/cms/svg/6364.2809640e[.]chunk.svg”. Ele só poderá baixar o arquivo necessário se o dispositivo estiver localizado na Ucrânia. Em seguida, ele extrai os dados codificados em base64 na seção que começa com “href=” e faz XOR com a matriz codificada. Em seguida, ele gera um nome de arquivo aleatório e salva os dados decodificados na pasta TEMP. 

O downloader constrói uma solicitação da web.

Figura 9: Construindo uma solicitação web

Arquivo SVG

Figura 10: O arquivo SVG com verificação de geolocalização malsucedida

Arquivo SVG

Figura 11: O arquivo SVG com verificação de geolocalização bem-sucedida

Em seguida, ele executa o arquivo decodificado usando “rundll32.exe”, seguido por um comando sleep para aguardar o término da execução. Depois de concluído, ele exclui o arquivo decodificado para remover quaisquer vestígios.

O arquivo rundll32.exe que executa os dados decodificados

Figura 12: Execute os dados decodificados

Os dados decodificados também são um arquivo .NET DLL encarregado de descriptografar o arquivo para o próximo estágio e estabelecer persistência.

O arquivo decodificado

Figura 13: O arquivo decodificado é empacotado com ConfuserEx

Em seguida, verifica se o arquivo de destino existe. Caso contrário, ele cria o arquivo “C:\ProgramData\Windows\Containers\BaseImages\9cb03978-56d9-4f38-8f05-d1fdf135f0ab\Files\Windows\System32\ResetEngine.dll.” Em seguida, ele usa a chave codificada para descriptografar os dados usando um algoritmo RC4 e grava os dados no arquivo recém-criado. 

O código para gravar o conteúdo descriptografado por RC4 em um novo arquivo

Figura 14: Gravar conteúdo descriptografado por RC4 em arquivo recém-criado

Em seguida, ele adiciona o valor de registro “C:\Windows\System32\regsvr32.exe /s C:\ProgramData\Windows\Containers\BaseImages\9cb03978-56d9-4f38-8f05-d1fdf135f0ab\Files\Windows\System32\ResetEngine.dll” em “SOFTWARE\Microsoft\Widows\CurrentVersion\Run” para persistência e usa InvokeMethod com “Create” para executar o comando no registro.

Código para adicionar valor de registro

Figura 15: Adicionar registro

Código que executa o arquivo ResetEngine.dll

Figura 16: Execute o “ResetEngine.dll”

Injetor DLL

O arquivo “ResetEngine.dll” serve como componente principal para descriptografar e injetar a carga final. Ele usa “NtDelayExecution” para evitar a detecção de atividades maliciosas em sandboxes. Em seguida, ele itera para inspecionar processos e tenta encerrar o processo pai, se houver, a fim de implementar suas medidas antidepuração.

ResetEngine.dll usa a função NtDelayExecution para evitar a detecção e implementar medidas anti-depuração

Figura 17: Atraso na execução e antidepuração

Após a conclusão do processo de detecção de evasão, ele descriptografa a carga final com um algoritmo AES.

Código que descriptografa a carga final

Figura 18: Descriptografar dados

Após a descriptografia, ele injeta os dados descriptografados em si mesmo e emprega várias APIs, incluindo “GetCurrentProcessId”, “OpenProcess”, “VirtualAllocEx”, “WriteProcessMemory”, “CreateRemoteThread” e “WaitForSingleObject” para executar o Cobalt Strike final.

Código injetando dados descriptografados em si mesmo e executando o Cobalt Strike final
Carga útil do Cobalt Strike

Figura 19: Escrevendo Cobalt Strike na memória

A carga útil do Cobalt Strike

O processo de extração de configuração envolve XOR com 0x2E, permitindo-nos decifrar as informações ocultas nele. Ao extrair e analisar a configuração, revelamos os URLs do Beacon’s Cobalt Strike Team Server (C2): “hxxps://simonandschuster[.]shop/the-zero-residual-concept/products” e “hxxps://simonandschuster[.] ]shop/o-conceito-zero-residual/sjj-solutions.” 

Configuração decodificada

Figura 20: Configuração decodificada

Solicitação POST do Cobalt Strike

Figura 21: Solicitação POST do Cobalt Strike

Conclusão

Neste ataque sofisticado, o agressor emprega táticas de malware em vários estágios para impedir a detecção e, ao mesmo tempo, garantir a estabilidade operacional. Ao implementar verificações baseadas em localização durante downloads de carga útil, o invasor visa mascarar atividades suspeitas, evitando potencialmente o escrutínio dos analistas. Aproveitando strings codificadas, o VBA oculta strings de importação cruciais, facilitando a implantação de arquivos DLL para persistência e descriptografia de cargas subsequentes. Além disso, o recurso de autoexclusão auxilia nas táticas de evasão, enquanto o injetor de DLL emprega táticas de atraso e encerra processos pai para evitar mecanismos de sandbox e antidepuração, respectivamente.

Estas manobras orquestradas convergem para a implantação do Cobalt Strike em pontos finais específicos, particularmente dentro dos limites do cenário geopolítico da Ucrânia. Como os documentos do Office oferecem inúmeras funcionalidades, incluindo vários plug-ins e scripts, os usuários devem ter o máximo cuidado ao manusear arquivos provenientes de origens duvidosas. A vigilância é fundamental, especialmente em relação a qualquer queda de arquivo suspeito ou programas de inicialização desconhecidos nas configurações do registro.

COIs

Domínios

goudieelétrico[.]loja

simonandschuster[.]loja

arquivos

88c97af92688d03601e4687b290d4d7f9f29492612e29f714f26a9278c6eda5b  

815c1571356cf328a18e0b1f3779d52e5ba11e5e4aac2d216b79bb387963c2be  

9649d58a220ed2b4474a37d6eac5f055e696769f87baf58b1d3d0b5da69cbce5  

af8104e567c6d614547acb36322ad2ed6469537cd1d78ae1be65fbde1d578abc 

de1bceb00c23e468f4f49a79ec69ec8ad3ed622a3ffc08f84c0481ad0f6f592b  

6f4642a203541426d504608eed7927718207f29be2922a4c9aa7e022f22e0deb 

d90f6e12a917ba42f7604362fafc4e74ed3ce3ffca41ed5d3456de28b2d144bf  

d9b16f077cd6e00137ba208031d22fd6423d0ef303883ad4b6f78638693f2044