JavaScript Ofuscado no Centro do Ataque
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumo
Um email de phishing entregou um arquivo JavaScript malicioso dentro de um arquivo RAR, iniciando uma cadeia de infecção que termina com a execução de malware Formbook. Uma vez lançado, o script grava vários arquivos na pasta pública, estabelece persistência através de uma tarefa agendada e inicia uma carga útil do PowerShell que descriptografa conteúdo criptografado com AES para carregar uma DLL .NET maliciosa. Essa DLL é então injetada em um MSBuild.exe processo, onde continua a execução e implanta a fase final do malware. A campanha também incorpora vários métodos de evasão de defesa, incluindo a modificação de ETW e AMSI para reduzir a detecção.
Investigação
Durante a análise, os pesquisadores identificaram o dropper JavaScript cbmjlzan.JS, juntamente com uma tarefa agendada configurada para executar o script copiado a cada quinze minutos para persistência. Eles também rastrearam o comando PowerShell responsável por decodificar dados codificados em base64 escondidos dentro de arquivos de imagem. O conteúdo descriptografado revelou uma DLL .NET que foi injetada em MSBuild.exe e usado para entregar o Formbook. Indicadores adicionais, incluindo caminhos de arquivos, nomes de tarefas e material criptográfico, foram extraídos para apoiar uma investigação mais profunda e o desenvolvimento de detecções.
Mitigação
As organizações devem bloquear a execução de arquivos JavaScript não confiáveis e scripts PowerShell lançados a partir de diretórios acessíveis pelo usuário, ao mesmo tempo que monitoram de perto as tarefas agendadas criadas com nomes incomuns ou aleatórios. Controles de execução devem ser aplicados a MSBuild.exe para prevenir abusos em cadeias de malware. Ferramentas de segurança também devem detectar comportamento de injeção de DLL, modificação de ETW e AMSI, e assinaturas conhecidas relacionadas ao Formbook. O treinamento de conscientização do usuário continua importante para reduzir o risco representado por anexos de phishing.
Resposta
Os defensores devem gerar alertas quando o arquivo JavaScript identificado ou a tarefa agendada relacionada aparecer, isolar o ponto de extremidade afetado e coletar evidências voláteis para análise. Os arquivos maliciosos devem ser removidos, a tarefa agendada deletada e a DLL injetada examinada em sua totalidade para entender o fluxo completo de execução. Quaisquer componentes de sistema comprometidos devem ser reconstruídos ou restaurados para garantir a integridade. IOCs relevantes também devem ser compartilhados com a comunidade de segurança mais ampla para ajudar outros a detectar atividades semelhantes.
Fluxo de Ataque
Detecções
Strings de PowerShell Suspeitas (via cmdline)
Ver
Strings de PowerShell Suspeitas (via powershell)
Ver
LOLBAS WScript / CScript (via process_creation)
Ver
Execução Suspeita do Perfil de Usuário Público (via process_creation)
Ver
Chamada de Métodos .NET Suspeitos a partir do PowerShell (via powershell)
Ver
Arquivos Suspeitos no Perfil de Usuário Público (via file_event)
Ver
Persistência de JavaScript Ofuscado e Injeção de Carga Maliciosa [Criação de Processo no Windows]
Ver
Execução de PowerShell Ofuscado para Descriptografia [PowerShell do Windows]
Ver
Execução de Simulação
Pré-requisito: A Verificação Preliminar de Telemetria e Linha de Base deve ter sido aprovada.
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 & Comandos:
Um atacante que violou uma conta de baixo privilégio deseja baixar uma carga maliciosa armazenada como uma string Base64 em um repositório de scripts comprometido. Para evitar a detecção, o atacante cria um PowerShell one-liner que (1) decodifica a string Base64, (2) a invoca viaiex, e (3) cria um objeto AES para descriptografar dados incorporados adicionais. A linha de comando exata é escrita para corresponder aos literais da regra.powershell C:WindowsSystem32WindowsPowerShellv1.0powershell.exe -Noexit -nop -c iex([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String(('REPLACED_STRING'.Replace('VFHDVXDJCF',''))))) ; $aes_var = [System.Security.Cryptography.Aes]::Create()- O atacante substitui
REPLACED_STRINGpor uma carga útil Base64 legítima após remover um marcador conhecido (VFHDVXDJCF). - The
-Noexit -nop -cinterruptores suprimem prompts e bypass da política de execução, correspondendo à condição de detecção. - The
$aes_varnome da variável é mantido literal para satisfazer a segunda cláusula de seleção.
- O atacante substitui
-
Script de Teste de Regressão: O seguinte script PowerShell reproduz a linha de comando exata de uma maneira controlada, garantindo que o SIEM receba telemetria idêntica.
# Script de Teste de Regressão – aciona a detecção $payload = "U2FtcGxlIEJhc2U2NCBTdHJpbmc=" # "String Base64 de Exemplo" $marker = "VFHDVXDJCF" $obfuscated = $payload.Replace($marker, "") # simula o .Replace usado na detecção $command = @" C:WindowsSystem32WindowsPowerShellv1.0powershell.exe -Noexit -nop -c iex([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String(('${obfuscated}'.Replace('VFHDVXDJCF',''))))) ; $aes_var = [System.Security.Cryptography.Aes]::Create() "@ # Executar a linha de comando criada Invoke-Expression $command -
Comandos de Limpeza: Remova quaisquer objetos AES remanescentes e interrompa a sessão do PowerShell gerada.
# Cleanup – termine o processo filho do PowerShell se ainda estiver em execução Get-Process -Name powershell -ErrorAction SilentlyContinue | Where-Object { $_.Path -like "*WindowsPowerShellv1.0powershell.exe" } | Stop-Process -Force # Opcionalmente, limpe quaisquer variáveis temporárias Remove-Variable -Name payload, marker, obfuscated, command -ErrorAction SilentlyContinue