Void Dokkaebi Usa Malware InvisibleFerret Compilado com Cython
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumo
Void Dokkaebi, um agente de ameaça ligado à Coreia do Norte, melhorou seu malware InvisibleFerret compilando-o com Cython em nativo .pyd and .so binários. Essa mudança ajuda o malware a evitar detecções focadas apenas em scripts Python, mantendo suas funções principais, incluindo roubo de credenciais, keylogging, captura de área de transferência e sequestro de carteiras de criptomoedas. BeaverTail serve como o carregador de múltiplos estágios que recupera e executa os módulos compilados. A campanha é direcionada a desenvolvedores de software e usuários de criptomoedas que possam ter credenciais de carteiras, chaves de assinatura ou outros segredos de alto valor.
Investigação
Os pesquisadores analisaram toda a cadeia de infecção e encontraram uma clara mudança de scripts Python legíveis para módulos de extensão compilados com Cython. Eles também documentaram vários métodos de ofuscação, incluindo codificação Base64, criptografia XOR e manipulação de strings de dividir e trocar. Durante a investigação, eles extraíram endereços IP, portas e nomes de arquivos codificados, e observaram a criação de temporários Python .mod scripts usados para carregar os binários maliciosos. A análise de strings revelou ainda rastros do ambiente de construção e referências a extensões de carteiras de criptomoedas baseadas em navegador.
Mitigação
Os defensores devem expandir além de detecções focadas em scripts e monitorar por .pyd and .so arquivos suspeitos aparecendo em locais incomuns, bem como .mod scripts de carregamento temporário. Oportunidades adicionais de detecção incluem os nomes de arquivos observados, solicitações de saída para ip-api.com, e downloads que envolvem extensões de carteiras de criptomoedas. Remover ou isolar os scripts de carregamento temporário após a execução também pode ajudar a reduzir as oportunidades de persistência.
Resposta
Se indicadores relacionados forem detectados, isole imediatamente o endpoint afetado, bloqueie o tráfego de saída para o endereço IP de comando e controle identificado e procure os binários listados e artefatos de tarefas agendadas. Os investigadores devem analisar qualquer .mod script recuperado para extrair cargas úteis incorporadas e entender melhor a cadeia de execução. Quaisquer credenciais de criptomoeda expostas, segredos de carteiras ou chaves de assinatura devem ser rotacionados sem demora.
Fluxo de Ataque
Ainda estamos atualizando esta parte. Inscreva-se para ser notificado
Me NotifiqueDetecções
Possível Comunicações C2 Sobre HTTP Para IP Direto Com Porta Incomum (via proxy)
Visualizar
Possível Tentativa de Comunicação de Domínio de Consulta de IP (via dns)
Visualizar
Arquivo Oculto Foi Criado em Host Linux (via file_event)
Visualizar
Detecção de Módulos InvisibleFerret Compilados com Cython [Evento de Arquivo do Windows]
Visualizar
Execução de Simulação
Pré-requisito: O Teste de Pré-Voo de Telemetria e Linha de Base deve ter passado.
Justificativa: Esta seção detalha a execução precisa da técnica do adversário (TTP) destinada a acionar a regra de detecção. Os comandos e a narrativa DEVEM refletir diretamente os TTPs identificados e visar gerar a telemetria exata que se espera da lógica de detecção. Exemplos abstratos ou não relacionados levarão a diagnósticos errados.
-
Narrativa de Ataque & Comandos:
O atacante obteve um conjunto de módulos compilados com Cython (mod.pyd,pad.pyd,brw.pyd) que implementam coleta de credenciais e comunicação C2. Para obter persistência, o adversário copia esses módulos para o diretório de configuração do VS Code do usuário atual (%USERPROFILE%.vscode). O VS Code verifica periodicamente esta pasta em busca de extensões, causando o carregamento dos módulos maliciosos por um script Python malicioso posterior. A operação de cópia gera um evento Sysmon FileCreate que coincide com a regra Sigma. -
Script de Teste de Regressão:
# ------------------------------------------------- # Simulação de descarte de módulo Cython InvisibleFerret # ------------------------------------------------- $vscodePath = "$env:USERPROFILE.vscode" # Garantir que a pasta de destino exista if (-not (Test-Path -Path $vscodePath)) { New-Item -ItemType Directory -Path $vscodePath | Out-Null } # Binários maliciosos simulados (conteúdo aleatório de lixo) $modules = @("mod.pyd","pad.pyd","brw.pyd") foreach ($mod in $modules) { $dest = Join-Path -Path $vscodePath -ChildPath $mod # Escrever 1 KB de bytes aleatórios para imitar uma extensão compilada $bytes = New-Object byte[] 1024 (New-Object System.Random).NextBytes($bytes) [System.IO.File]::WriteAllBytes($dest, $bytes) Write-Host "Criado $dest" } -
Comandos de Limpeza:
# ------------------------------------------------- # Limpeza de arquivos maliciosos simulados # ------------------------------------------------- $vscodePath = "$env:USERPROFILE.vscode" $modules = @("mod.pyd","pad.pyd","brw.pyd") foreach ($mod in $modules) { $file = Join-Path -Path $vscodePath -ChildPath $mod if (Test-Path $file) { Remove-Item -Path $file -Force Write-Host "Removido $file" } }