GammaSteel: Dentro da Cadeia de Malware em Evolução do Gamaredon
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumo
O relatório descreve GammaSteel, uma nova cadeia de intrusão Gamaredon (UAC-0010) construída em torno de um stealer PowerShell sem arquivo. O malware armazena 71 funções criptografadas na chave de registro HKCUPrinters e as protege com o Windows DPAPI. Ele coleta documentos de drives locais, mídia USB e arquivos sendo editados ativamente, em seguida deduplica os dados com MD5 antes de exfiltrá-los para o serviço legítimo compatível com S3 Tebi.io, com fallback para domínios russos codificados. A infraestrutura mais ampla também depende de resolvedores dead-drop hospedados em plataformas públicas como Telegram, Telegra.ph, Write.as, Rentry.co e Mastodon, junto com serviços de DNS dinâmico. A campanha continua a visar ambientes de governo ucraniano e infraestrutura crítica.
Investigação
A Sekoia.io analisou mais de 70 artefatos, reconstruiu o dropper completo do PowerShell e identificou persistência baseada em registro, um mutex, execução de PowerShell agendada e oculta, e um esquema de exfiltração em camadas. Os pesquisadores mapearam a infraestrutura de resolvedores dead-drop, catalogaram 115 endereços IP, quatro domínios e vários conjuntos de credenciais S3, e observaram atualizações automatizadas feitas através de postagens no Mastodon. Eles também notaram semelhanças com a atividade InvisiMole de 2020, particularmente o uso de payloads criptografados com DPAPI armazenados no registro.
Mitigação
As organizações devem monitorar escritas incomuns para HKCUPrinters, criação de processos de PowerShell ocultos, e uso do mutex Globalassembly307 . O tráfego de saída para o endpoint S3 identificado s3.tebi.io e a infraestrutura de fallback, como justsstop.ru and 165.22.170.129 devem ser bloqueados. Os defensores também devem implantar detecções para a string de agente de usuário no estilo iPhone específico e para entradas de Run do Registro que invocam scripts PowerShell.
Resposta
Se a atividade GammaSteel for detectada, isole o host afetado, colete a hive do registro, extraia os payloads protegidos por DPAPI e descriptografe-os usando a chave mestre da vítima, quando possível. Procure no ambiente artefatos relacionados, bloqueie os URLs e domínios de comando e controle identificados, redefina credenciais comprometidas e realize uma análise forense completa para identificar módulos maliciosos adicionais. HKCUPrinters registry hive, extract the DPAPI-protected payloads, and decrypt them using the victim’s master key where possible. Hunt across the environment for related artifacts, block the identified command-and-control URLs and domains, reset any compromised credentials, and perform a full forensic review to identify additional malicious modules.
"graph TB %% Definições de classe classDef technique fill:#e6f7ff classDef process fill:#ffebcc classDef action fill:#c2f0c2 classDef tool fill:#dddddd classDef storage fill:#ffe6e6 classDef network fill:#d9d9ff classDef data fill:#f0e68c %% Nodes u2013 técnicas tech_T1027_009["<b>Técnica</b> – <b>T1027.009 Payloads Embutidos</b><br/>Obfusca payload dentro de outro arquivo"] class tech_T1027_009 technique tech_T1027_007["<b>Técnica</b> – <b>T1027.007 Resolução de API Dinâmica</b><br/>Resolve APIs em tempo de execução para evitar análise estática"] class tech_T1027_007 technique tech_T1027_002["<b>Técnica</b> – <b>T1027.002 Empacotamento de Software</b><br/>Empacota código malicioso para ocultar sua verdadeira natureza"] class tech_T1027_002 technique tech_T1027_013["<b>Técnica</b> – <b>T1027.013 Arquivo Criptografado/Codificado</b><br/>Criptografa dados usando DPAPI antes de armazená-los"] class tech_T1027_013 technique tech_T1547_001["<b>Técnica</b> – <b>T1547.001 Chaves Run do Registro / Pasta de Inicialização</b><br/>Adiciona uma chave Run para alcançar persistência"] class tech_T1547_001 technique tech_T1037_005["<b>Técnica</b> – <b>T1037.005 Itens de Inicialização</b><br/>Usa itens de inicialização para persistência"] class tech_T1037_005 technique tech_T1680["<b>Técnica</b> – <b>T1680 Descoberta de Armazenamento Local</b><br/>Descobre drives locais e perfis de usuário"] class tech_T1680 technique tech_T1135["<b>Técnica</b> – <b>T1135 Descoberta de Compartilhamento de Rede</b><br/>Encontra locais de rede compartilhados"] class tech_T1135 technique tech_T1006["<b>Técnica</b> – <b>T1006 Acesso Direto ao Volume</b><br/>Acessa mídia removível diretamente"] class tech_T1006 technique tech_T1025["<b>Técnica</b> – <b>T1025 Dados de Mídia Removível</b><br/>Coleta dados de dispositivos USB"] class tech_T1025 technique tech_T1564_005["<b>Técnica</b> – <b>T1564.005 Sistema de Arquivos Oculto</b><br/>Armazena arquivos em locais ocultos"] class tech_T1564_005 technique tech_T1005["<b>Técnica</b> – <b>T1005 Dados do Sistema Local</b><br/>Coleta arquivos da máquina local"] class tech_T1005 technique tech_T1537["<b>Técnica</b> – <b>T1537 Transferência de Dados para Conta em Nuvem</b><br/>Carrega dados roubados para armazenamento em nuvem"] class tech_T1537 technique tech_T1538["<b>Técnica</b> – <b>T1538 Painel de Serviço em Nuvem</b><br/>Usa interfaces de serviço em nuvem para exfiltração de dados"] class tech_T1538 technique tech_T1102_001["<b>Técnica</b> – <b>T1102.001 Serviço Web: Resolvedor Dead Drop</b><br/>Recupera comandos e configuração de serviços web públicos"] class tech_T1102_001 technique tech_T1620["<b>Técnica</b> – <b>T1620 Carregamento de Código Refletivo</b><br/>Carrega e executa código recebido em tempo de execução"] class tech_T1620 technique %% Nodes u2013 ações e componentes malware_dropper["<b>Malware</b> – <b>Nome</b>: Dropper Inicial<br/><b>Descrição</b>: Executa script PowerShell ofuscado"] class malware_dropper process process_powershell["<b>Processo</b> – <b>Nome</b>: PowerShell<br/><b>Função</b>: Executa script codificado"] class process_powershell process storage_dpapi["<b>Armazenamento</b> – <b>Localização</b>: HKCUPrinters<br/><b>Conteúdo</b>: 71 funções criptografadas com DPAPI"] class storage_dpapi storage persistence_runkey["<b>Ação</b> – <b>Persistência</b>: Chave Run do Registro<br/><b>Chave</b>: HKCUSoftwareMicrosoftWindowsCurrentVersionRun"] class persistence_runkey action process_hidden_ps["<b>Processo</b> – <b>Nome</b>: PowerShell Oculto<br/><b>Finalidade</b>: Lê orquestrador do registro"] class process_hidden_ps process orchestrator["<b>Ação</b> – <b>Orquestrador</b>: Enumera recursos e coordena coleta"] class orchestrator action enumeration["<b>Ação</b> – <b>Enumeração</b>: Drives, perfis, compartilhamentos de rede"] class enumeration action collection["<b>Ação</b> – <b>Coleta</b>: Reúne arquivos de locais locais e de rede"] class collection action monitor_usb["<b>Ação</b> – <b>Monitoramento USB</b>: Assinatura de evento WMI para mídia removível"] class monitor_usb action staging_folder["<b>Armazenamento</b> – <b>Pasta Oculta</b>: Área de preparação para arquivos copiados"] class staging_folder storage fs_watcher["<b>Processo</b> – <b>Nome</b>: FileSystemWatcher<br/><b>Função</b>: Monitora mudanças em drives não-USB"] class fs_watcher process deduplication["<b>Ação</b> – <b>Deduplicação</b>: Remove arquivos duplicados antes da exfiltração"] class deduplication action upload_s3["<b>Ação</b> – <b>Upload</b>: Envia dados para bucket compatível com S3 (tebi.io)"] class upload_s3 network fallback_post["<b>Ação</b> – <b>Exfiltração de Fallback</b>: POST para domínios C2 imitando UA de iPhone"] class fallback_post network dead_drop["<b>Ação</b> – <b>Resolvedor Dead Drop</b>: Recupera configuração do Telegram, Telegra.ph, Write.as, Rentry.co, Mastodon"] class dead_drop action vbscript_backdoor["<b>Ação</b> – <b>Backdoor Secundário</b>: Executa VBScript arbitrário de resposta HTTP"] class vbscript_backdoor action %% Conexões u2013 fluxo malware_dropper –>|usa| tech_T1027_009 malware_dropper –>|usa| tech_T1027_007 malware_dropper –>|usa| tech_T1027_002 malware_dropper –>|armazena dados criptografados| tech_T1027_013 malware_dropper –>|lança| process_powershell process_powershell –>|escreve funções criptografadas para| storage_dpapi storage_dpapi –>|habilita| persistence_runkey persistence_runkey –>|cria| tech_T1547_001 persistence_runkey –>|cria| tech_T1037_005 persistence_runkey –>|inicia| process_hidden_ps process_hidden_ps –>|carrega orquestrador do registro| orchestrator orchestrator –>|executa| enumeration enumeration –>|cobre| tech_T1680 enumeration –>|cobre| tech_T1135 orchestrator –>|coleta dados usando| collection collection –>|usa| tech_T1005 collection –>|inclui mídia removível via| tech_T1025 collection –>|inclui acesso direto ao volume via| tech_T1006 collection –>|dispara| monitor_usb monitor_usb –>|copia arquivos para| staging_folder staging_folder –>|é ocultado por| tech_T1564_005 staging_folder –>|monitora| fs_watcher fs_watcher –>|detecta mudanças e dispara| deduplication deduplication –>|carrega para nuvem via| upload_s3 upload_s3 –>|depende de| tech_T1537 upload_s3 –>|fallback para| fallback_post fallback_post –>|depende de| tech_T1538 orchestrator –>|recebe atualizações de| dead_drop dead_drop –>|usa| tech_T1102_001 dead_drop –>|entrega| vbscript_backdoor vbscript_backdoor –>|aproveita| tech_T1620 %% Atribuições de estilo class malware_dropper,process_powershell,process_hidden_ps,fs_watcher,orchestrator,monitor_usb,vbscript_backdoor builtin class storage_dpapi,staging_folder builtin class persistence_runkey,enumeration,collection,deduplication,upload_s3,fallback_post,dead_drop action class tech_T1027_009,tech_T1027_007,tech_T1027_002,tech_T1027_013,tech_T1547_001,tech_T1037_005,tech_T1680,tech_T1135,tech_T1006,tech_T1025,tech_T1564_005,tech_T1005,tech_T1537,tech_T1538,tech_T1102_001,tech_T1620 technique "
Fluxo de Ataque
Detecções
Possíveis Pontos de Persistência [ASEPs – Software/NTUSER Hive] (via evento de registro)
Visualizar
A Possibilidade de Execução Através de Linhas de Comando PowerShell Ocultas (via cmdline)
Visualizar
LOLBAS WScript / CScript (via criação de processo)
Visualizar
Possível Descoberta de Informações do Sistema Usando Módulo Powershell WMI (via powershell)
Visualizar
Consulta DNS de Processo Suspeita Conhecida por Abuso de Serviços Web (via conexão de rede)
Visualizar
Possível Abuso de Domínio de Desenvolvimento Cloudflare (via DNS)
Visualizar
IOCs (SourceIP) para detectar: matryoshka do FSB #3/3 – presentes do Gamaredon que continuam se descompactando – GammaSteel
Visualizar
IOCs (DestinationIP) para detectar: matryoshka do FSB #3/3 – presentes do Gamaredon que continuam se descompactando – GammaSteel
Visualizar
Detecção de Execução de PowerShell Oculto para Operações Gamaredon [Windows Powershell]
Visualizar
Detecção da Técnica de Staging de Registro PowerShell Gamaredon [Evento do Registro do Windows]
Visualizar
Execução de Simulação
Pré-requisito: O Check de Pré-Voo de Telemetria e Linha de Base deve ter sido aprovado.
Justificativa: Esta seção detalha a execução precisa da técnica do adversário (TTP) projetada para acionar a regra de detecção. Os comandos e a narrativa DEVEM refletir diretamente os TTPs identificados e visam gerar a telemetria exata esperada pela lógica de detecção.
-
Narrativa do Ataque e Comandos:
O atacante, tendo comprometido uma conta de usuário de baixo privilégio, quer fazer o staging de um payload PowerShell criptografado sem tocar no sistema de arquivos. Eles escrevem o payload codificado em Base64 na chaveRunpara que ele execute no próximo logon. Para evitar a exclusão única da regra, eles deliberadamente usam uma sub-chave sobHKCUPrintersque é not o valor excluído, imitando o padrão “printer-staging” observado em amostras do Gamaredon. -
Script de Teste de Regressão:
# -------------------------------------------------------------- # Simular Staging de Registro PowerShell Gamaredon (TC-20260608-A1B2C) # -------------------------------------------------------------- # 1. Defina um comando PowerShell codificado em Base64, inofensivo (por exemplo, escreva um arquivo) $payload = 'Write-Host "Simulação de Gamaredon executada"' $b64 = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($payload)) # 2. Persistir o payload via chave Run (persistência) $runKey = 'HKCU:SOFTWAREMicrosoftWindowsCurrentVersionRun' New-ItemProperty -Path $runKey -Name 'GamaredonStager' -Value "powershell -enc $b64" -PropertyType String -Force # 3. Fazer o mesmo staging do payload em uma chave “printer” (staging sem arquivo) $printerKey = 'HKCU:PrintersYxwHku2chu0bznt3kkyAD' # Nota: sufixo diferente para evitar exclusão New-Item -Path $printerKey -Force | Out-Null Set-ItemProperty -Path $printerKey -Name 'EncryptedPS' -Value $b64 -Force Write-Host "Simulação completa – entradas de registro criadas." -
Comandos de Limpeza:
# Remover entrada de chave Run Remove-ItemProperty -Path 'HKCU:SOFTWAREMicrosoftWindowsCurrentVersionRun' -Name 'GamaredonStager' -ErrorAction SilentlyContinue # Remover chave de staging da impressora Remove-Item -Path 'HKCU:PrintersYxwHku2chu0bznt3kkyAD' -Recurse -Force -ErrorAction SilentlyContinue Write-Host "Limpeza completa – artefatos de registro removidos."