FrostyNeighbor: Novo Travessura e Ameaças Digitais
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumo
A ESET relata que o grupo APT FrostyNeighbor, também rastreado como Ghostwriter, retomou ataques contra organizações governamentais ucranianas usando PDFs de spear-phishing que entregam um downloader baseado em JavaScript conhecido como PicassoLoader, que implanta, por fim, um beacon Cobalt Strike. A campanha depende de validação baseada em geolocalização, persistência por meio de tarefas agendadas e várias técnicas de drop de arquivos para reduzir a visibilidade e evitar detecção. Sua infraestrutura está posicionada atrás do Cloudflare e usa vários needbinding.icu domínios.
Investigação
Pesquisadores reconstruíram a cadeia completa do ataque, começando com o PDF malicioso de isca, passando pelo dropper JavaScript e downloader PicassoLoader, e terminando com a entrega do payload Cobalt Strike. Eles extraíram indicadores, incluindo nomes de arquivos, mudanças de registro e URLs de comando e controle, e os vincularam à prática conhecida de FrostyNeighbor. O relatório também destaca a exploração das CVE-2023-38831 no WinRAR e CVE-2024-42009 no Roundcube.
Mitigação
As organizações devem bloquear tipos de anexos suspeitos, aplicar controles rigorosos sobre a execução de macros e scripts, monitorar tarefas agendadas criadas por binários desconhecidos e restringir o tráfego HTTPS de saída para domínios maliciosos conhecidos. As vulnerabilidades mencionadas devem ser corrigidas prontamente, e restrições de privilégio mínimo devem ser aplicadas ao uso de rundll32.exe uso.
Resposta
Se quaisquer indicadores relacionados forem detectados, isole o sistema afetado imediatamente, colete artefatos forenses e busque pelo beacon Cobalt Strike e componentes do PicassoLoader. Restaure quaisquer credenciais expostas e revise tarefas agendadas e entradas de chave Run para sinais de persistência.
"graph TB %% Class definitions classDef action fill:#99ccff classDef technique fill:#ffcc99 classDef file fill:#c2f0c2 classDef tool fill:#cccccc classDef malware fill:#ff9999 %% Nodes – Actions attack_initial_access["<b>Ação</b> – <b>T1566.001 Phishing: Anexo de Spearphishing</b><br/>E-mail com PDF malicioso com link para um arquivo RAR."] class attack_initial_access action action_user_execution["<b>Ação</b> – <b>T1204.002 Execução do Usuário</b><br/>A vítima abre o PDF que executa um dropper JavaScript."] class action_user_execution action %% Nodes – Files file_malicious_pdf["<b>Arquivo</b> – <b>Nome</b>: malicious.pdf<br/>Contém dropper JavaScript."] class file_malicious_pdf file file_rar["<b>Arquivo</b> – <b>Nome</b>: payload.rar<br/>Entregue via link no PDF."] class file_rar file file_scheduled_xml["<b>Arquivo</b> – <b>Nome</b>: scheduled_task.xml<br/>XML usado para registrar uma tarefa agendada."] class file_scheduled_xml file file_reg["<b>Arquivo</b> – <b>Nome</b>: persistence.reg<br/>Arquivo de registro que cria uma chave Run.""" class file_reg file file_lnk["<b>Arquivo</b> – <b>Nome</b>: launcher.lnk<br/>Atalho colocado na pasta de Inicialização.""" class file_lnk file %% Nodes – Malware / Tools malware_javascript_dropper["<b>Malware</b> – <b>Nome</b>: JavaScript Dropper<br/>Executa scripts codificados em base64 e incorpora payloads de segunda etapa."] class malware_javascript_dropper malware tool_picasso_loader["<b>Ferramenta</b> – <b>Nome</b>: PicassoLoader<br/>Coleta informações do sistema, lista de processos e dados de identidade da vítima."] class tool_picasso_loader tool malware_cobalt_strike["<b>Malware</b> – <b>Nome</b>: Cobalt Strike Beacon<br/>Fornece capacidades de controle remoto.""" class malware_cobalt_strike malware %% Nodes – Techniques technique_obfuscation["<b>Técnica</b> – <b>T1027 Arquivos ou Informações Ofuscados</b><br/>Os payloads são codificados em base64 para evitar detecção."] class technique_obfuscation technique technique_embedded_payload["<b>Técnica</b> – <b>T1027.009 Payloads Incorporados</b><br/>Downloader e beacon são ocultados dentro do JavaScript."] class technique_embedded_payload technique technique_gather_identity["<b>Técnica</b> – <b>T1589 Coleta de Informações de Identidade da Vítima</b><br/>Coleta nome de usuário, nome do computador, versão do SO e tempo de inicialização."] class technique_gather_identity technique technique_system_info["<b>Técnica</b> – <b>T1082 Descoberta de Informações do Sistema</b><br/>Coleta especificações detalhadas do sistema."] class technique_system_info technique technique_process_discovery["<b>Técnica</b> – <b>T1057 Descoberta de Processos</b><br/>Enumera processos em execução no host."] class technique_process_discovery technique technique_c2_https["<b>Técnica</b> – <b>T1071.001 Protocolo de Camada de Aplicação: Protocolos Web</b><br/>Comunica-se com C2 através de HTTPS POST.""" class technique_c2_https technique technique_scheduled_task["<b>Técnica</b> – <b>T1053.005 Tarefa/Trabalho Agendado</b><br/>Cria um XML de tarefa agendada para persistência.""" class technique_scheduled_task technique technique_run_key["<b>Técnica</b> – <b>T1060 Chaves de Execução do Registro / Pasta de Inicialização</b><br/>Adiciona uma chave Run apontando para um LNK malicioso.""" class technique_run_key technique technique_exfiltration["<b>Técnica</b> – <b>T1041 Exfiltração via Canal C2</b><br/>Envia dados coletados pelo mesmo canal HTTPS.""" class technique_exfiltration technique %% Connections – Attack Flow attack_initial_access –>|entrega| file_malicious_pdf file_malicious_pdf –>|aberto_por| action_user_execution action_user_execution –>|executa| malware_javascript_dropper malware_javascript_dropper –>|usa| technique_obfuscation malware_javascript_dropper –>|contém| technique_embedded_payload technique_embedded_payload –>|solta| tool_picasso_loader tool_picasso_loader –>|coleta| technique_system_info tool_picasso_loader –>|coleta| technique_process_discovery tool_picasso_loader –>|coleta| technique_gather_identity tool_picasso_loader –>|contata| technique_c2_https technique_c2_https –>|entrega| malware_cobalt_strike malware_cobalt_strike –>|estabelece| technique_scheduled_task technique_scheduled_task –>|cria| file_scheduled_xml malware_cobalt_strike –>|estabelece| technique_run_key technique_run_key –>|cria| file_reg file_reg –>|adiciona| file_lnk technique_c2_https –>|exfiltra via| technique_exfiltration "
Fluxo de Ataque
Detecções
Possíveis Pontos de Persistência [ASEPs – Software/NTUSER Hive] (via registry_event)
Ver
Execução de Processos do Sistema de Caminhos Atípicos (via process_creation)
Ver
Execução Suspeita da Biblioteca Rundll32 (via process_creation)
Ver
LOLBAS WScript / CScript (via process_creation)
Ver
IOCs (HashSha1) para detectar: FrostyNeighbor: Novas travessuras e artimanhas digitais
Ver
Detecção de Comunicação C&C FrostyNeighbor [Conexão de Rede do Windows]
Ver
Implantação de Cobalt Strike do FrostyNeighbor via Rundll32 e JavaScript [Criação de Processos do Windows]
Ver
Execução de Simulação
Pré-requisito: O Cheque Pré-voo de Telemetria & Benchmark deve ter sido aprovado.
Racional: Esta seção detalha a execução precisa da técnica de adversário (TTP) projetada para acionar a regra de detecção. Os comandos e 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 adversário obteve um ponto de apoio no host da vítima e deseja implantar um beacon Cobalt Strike enquanto permanece fora do radar. Eles:
- Copiar
rundll32.exepara um local não convencional (C:ProgramDataTemprundll32.exe) para evadir alertas simples de lista branca. - Derramar a DLL maliciosa (
ViberPC.dll) em%ProgramData%. Esta DLL contém o payload inicializado de Cobalt Strike. - Executar o
rundll32.execopiado com uma linha de comando que carrega a DLL maliciosa (%ProgramData%ViberPC.dll). - Dropar dois arquivos JavaScript (
53_7.03.2026_R.jsandUpdate.js) que contêm JScript que contata o servidor C2 e finaliza a instalação do beacon. - Executar os arquivos JavaScript usando
cscript.exe, causando a criação de processos cujoImagemtermina com.jse cujaLinha de Comandocontém os nomes exatos dos arquivos.
Estas etapas geram os eventos exatos de criação de processo do Sysmon correspondidos por
seleção1,seleção2, eseleção3na regra Sigma. - Copiar
-
Script de Teste de Regressão:
# Simulação de Implantação do Cobalt Strike FrostyNeighborn# -------------------------------------------------n# 1. Prepare caminhosn$tempDir = "$env:ProgramDataTemp"n$rundllCopy = Join-Path $tempDir "rundll32.exe"n$malDll = "$env:ProgramDataViberPC.dll"n$js1 = "$env:ProgramData53_7.03.2026_R.js"n$js2 = "$env:ProgramDataUpdate.js"nn# 2. Assegure que o diretório temporário existenNew-Item -Path $tempDir -ItemType Directory -Force | Out-Nullnn# 3. Copiar rundll32.exe para um local não convencionalnCopy-Item -Path "$env:SystemRootSystem32rundll32.exe" -Destination $rundllCopy -Forcenn# 4. Criar uma DLL maliciosa dummy (no ataque real este seria o payload)n$dummyDll = [IO.File]::ReadAllBytes("$env:SystemRootSystem32driversetchosts") # binary placeholdern[IO.File]::WriteAllBytes($malDll, $dummyDll)nn# 5. Executar o rundll32 copiado com o DLL maliciosonStart-Process -FilePath $rundllCopy -ArgumentList "`"$malDll`"" -WindowStyle Hiddennn# 6. Derramar os payloads de JavaScriptn$jsContent = @"n// JScript simples que se comunica com um endpoint C2 (simulado)nvar xhr = new ActiveXObject("MSXML2.XMLHTTP");nxhr.open("GET", "http://127.0.0.1:8080/beacon", false);nxhr.send();n"@nnSet-Content -Path $js1 -Value $jsContent -Encoding ASCIInSet-Content -Path $js2 -Value $jsContent -Encoding ASCIInn# 7. Executar os arquivos JavaScript via cscript (isto cria processos com imagem .js)nStart-Process -FilePath "cscript.exe" -ArgumentList "//NoLogo `"$js1`"" -WindowStyle HiddennStart-Process -FilePath "cscript.exe" -ArgumentList "//NoLogo `"$js2`"" -WindowStyle Hiddennn# 8. Pausar para permitir a ingestão pelo SIEMnStart-Sleep -Seconds 15 -
Comandos de Limpeza:
# Limpeza após simulaçãon$paths = @(n "$env:ProgramDataViberPC.dll",n "$env:ProgramData53_7.03.2026_R.js",n "$env:ProgramDataUpdate.js",n "$env:ProgramDataTemprundll32.exe"n)nforeach ($p in $paths) {n if (Test-Path $p) { Remove-Item -Path $p -Force }n}n# Opcionalmente parar quaisquer processos cscript remanescentes iniciados pelo testenGet-Process -Name cscript -ErrorAction SilentlyContinue | Stop-Process -Force