Cadeia de Infecção do Qilin EDR Killer
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumo
O relatório abrange um carregador multiestágio entregue como um msimg32.dll trojanizado, que pode desativar ou remover mais de 300 produtos de detecção e resposta de endpoints. O carregador combina abuso avançado de SEH/VEH, técnicas de driver de kernel e breakpoints de hardware para evadir hooks em modo de usuário e eliminar processos de segurança. A atividade está vinculada ao ecossistema de ransomware Qilin e inclui um driver personalizado derivado da ferramenta ThrottleStop. O resultado final é uma carga útil dedicada para eliminar EDRs que termina serviços de segurança e pode reativar o controle do invasor restaurando ou neutralizando a lógica de callback de integridade de código.
Investigação
Pesquisadores fizeram engenharia reversa do DLL malicioso, seu carregador PE e dois drivers auxiliares, rwdrv.sys e hlpdrv.sys. A análise detalha como o carregador constrói uma tabela de política de slot de syscall, manipula o despachante de exceções e realiza o hook do IAT para redirecionar a execução. Em seguida, utiliza o manuseio de exceções vetorizadas para preparar e lançar uma carga útil baseada em shell32. A camada do driver expõe acesso bruto à memória física e é utilizada para remover ou desativar callbacks de kernel relacionados a EDR, bem como terminar processos protegidos por meio de uma interface IOCTL personalizada.
Mitigação
Use defesas em camadas e evite depender de um único controle EDR. Monitore atividades anormais de carregamento de drivers, uso suspeito de IOCTL de memória física e mudanças inesperadas em estruturas de callback de kernel. Prevenha carregamento lateral de DLLs onde atacantes substituem bibliotecas do sistema legítimas, e adicione cobertura para evasão do tipo de breakpoint de hardware. Mantenha assinaturas de rede e endpoint atualizadas, incluindo conjuntos de regras de ferramentas como ClamAV e Snort.
Resposta
Se detectado, isole o endpoint, pare o processo malicioso e descarregue drivers suspeitos. Capture imagens completas de memória para perícia, verifique explicitamente por rwdrv.sys e hlpdrv.sys, e valide a integridade dos callbacks de kernel e a telemetria de segurança relacionada. Implante detecções atualizadas para o nome de arquivo msimg32.dll, eventos de carregamento do driver, e o padrão IOCTL 0x2222008. Complete uma revisão de integridade do sistema e recupere de backups confiáveis se a confiança no host não puder ser restabelecida.
"graph TB %% Class definitions classDef technique fill:#ffcc99 %% Node definitions tech_initial_appinit["<b>Técnica</b> – <b>T1546.010 AppInit DLLs</b>: Carregar lado-malicioso msimg32.dll<br/><b>Descrição</b>: Use o valor de registro AppInit_DLLs para causar o carregamento de uma DLL maliciosa em cada processo de modo de usuário que carrega User32.dll."] class tech_initial_appinit technique tech_obfuscation["<b>Técnica</b> – <b>T1027 Arquivos ou Informações Ofuscadas</b>: Payload criptografado com truques de SEH/VEH<br/><b>Descrição</b>: Encriptar ou esconder de outra forma código malicioso e empregar truques de Tratamento Estruturado de Exceções ou Tratamento Vetorizado de Exceções para evadir análise estática."] class tech_obfuscation technique tech_dll_injection["<b>Técnica</b> – <b>T1055.001 Injeção de DLL</b>: Hook de IAT de ExitProcess<br/><b>Descrição</b>: Injetar uma DLL maliciosa em um processo alvo e modificar sua Tabela de Endereço de Importação para sequestrar chamadas de ExitProcess."] class tech_dll_injection technique tech_hijack_flow["<b>Técnica</b> – <b>T1574 Sequestrar Fluxo de Execução</b>: Manuseadores VEH/SEH e breakpoints de hardware<br/><b>Descrição</b>: Substituir ou adicionar handles de exceção e configurar breakpoints de hardware para redirecionar a execução para código malicioso."] class tech_hijack_flow technique tech_reflective_load["<b>Técnica</b> – <b>T1620 Carregamento de Código Reflexivo</b>: Descriptografia e execução de PE em memória<br/><b>Descrição</b>: Descriptografar um Executável Portátil em memória e executá-lo sem gravar no disco."] class tech_reflective_load technique tech_elev_control["<b>Técnica</b> – <b>T1548 Abuso do Mecanismo de Controle de Elevação</b>: Carregar driver rwdrv.sys para leitura/gravação de memória física<br/><b>Descrição</b>: Instalar um driver assinado ou vulnerável para obter acesso de leitura/gravação à memória física."] class tech_elev_control technique tech_priv_esc["<b>Técnica</b> – <b>T1068 Exploração para Escalação de Privilégio</b>: Manipular objetos de kernel e desativar callbacks de EDR<br/><b>Descrição</b>: Usar o driver carregado para alterar estruturas de kernel e neutralizar hooks de detecção e resposta de endpoint."] class tech_priv_esc technique tech_persistence_appinit["<b>Técnica</b> – <b>T1546.010 AppInit DLLs (Persistência)</b>: Manter estado de EDR desativado<br/><b>Descrição</b>: Manter a DLL maliciosa registrada via AppInit_DLLs para persistir após reinicializações enquanto EDR permanece desativado."] class tech_persistence_appinit technique tech_sandbox_evasion["<b>Técnica</b> – <b>T1497.002 Evasão de Virtualização/Sandbox</b>: Verificação de localidade e detecção de breakpoints<br/><b>Descrição</b>: Detectar ambientes de análise verificando configurações de localidade do sistema e sondando por breakpoints de depurador."] class tech_sandbox_evasion technique %% Connections showing attack flow tech_initial_appinit –>|leads_to| tech_obfuscation tech_obfuscation –>|leads_to| tech_dll_injection tech_dll_injection –>|leads_to| tech_hijack_flow tech_hijack_flow –>|leads_to| tech_reflective_load tech_reflective_load –>|leads_to| tech_elev_control tech_elev_control –>|leads_to| tech_priv_esc tech_priv_esc –>|leads_to| tech_persistence_appinit tech_persistence_appinit –>|leads_to| tech_sandbox_evasion "
Fluxo de Ataque
Detecções
Possível Tentativa de Carregamento Lateral de Biblioteca Dinâmica Msimg32 (via imagem_carregada)
Visualizar
IOCs (HashSha256) para detectar: Cadeia de Infecção do Qilin EDR Killer
Visualizar
IOCs (HashSha1) para detectar: Cadeia de Infecção do Qilin EDR Killer
Visualizar
IOCs (HashMd5) para detectar: Cadeia de Infecção do Qilin EDR Killer
Visualizar
Detecção de Drivers EDR Killer Carregados em Ataques de Ransomware Qilin [Criação de Processo do Windows]
Visualizar
Detecção de Técnicas de Evasão de EDR via Syscalls Nt* [Sistema Windows]
Visualizar
Detecção de Msimg32.dll Malicioso usado em Ataques de Ransomware Qilin [Carregamento de Imagem do Windows]
Visualizar
Execução de Simulação
Pré-requisito: A Verificação Pré-voo de Telemetria & Linha de Base deve ter sido aprovada.
Racionalização: 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 objetivam gerar a telemetria exata esperada pela lógica de detecção.
-
Narração & Comandos do Ataque:
Um atacante cria um binário C nativo mínimo que carrega explicitamente ntdll.dll e chama NtTraceEvent via seu nome exportado. O binário é compilado no host de destino usando as Ferramentas de Compilação do Visual C++, então executado. Como a chamada é feita através da superfície regular da API do Windows, o evento de criação do processo registra a imagem (
ntdll.dll) e o CallTrace campo contém a string “NtTraceEvent”, satisfazendo a condição Sigma. O atacante então exclui o binário para reduzir os artefatos forenses. -
Script de Teste de Regressão:
# --------------------------------------------------------- # Passo 1 – Crie uma fonte C temporária que chama NtTraceEvent # --------------------------------------------------------- $src = @" #include <windows.h> typedef NTSTATUS (NTAPI *pNtTraceEvent)(HANDLE, ULONG, PVOID, ULONG); int main() { HMODULE hNtdll = LoadLibraryA("ntdll.dll"); if (!hNtdll) return 1; pNtTraceEvent NtTraceEvent = (pNtTraceEvent)GetProcAddress(hNtdll, "NtTraceEvent"); if (!NtTraceEvent) return 1; // Chamada mínima – os argumentos são amplamente ignorados para esta demonstração NtTraceEvent(NULL, 0, NULL, 0); return 0; } "@ $tmpPath = "$env:TEMPNtTraceDemo.c" $exePath = "$env:TEMPNtTraceDemo.exe" $src | Set-Content -Path $tmpPath -Encoding ASCII # --------------------------------------------------------- # Passo 2 – Compile usando cl.exe (presume que Ferramentas de Compilação do Visual C++ estejam instaladas) # --------------------------------------------------------- $vcVars = "$env:ProgramFiles(x86)Microsoft Visual Studio2019BuildToolsVCAuxiliaryBuildvcvars64.bat" if (Test-Path $vcVars) { & cmd /c "`"$vcVars`" && cl /nologo /O2 /Fe:`"$exePath`" `"$tmpPath`"" } else { Write-Error "Ferramentas de Compilação do Visual C++ não encontradas. Instale-as antes de executar este script." exit 1 } # --------------------------------------------------------- # Passo 3 – Execute o binário (isso deve acionar a regra) # --------------------------------------------------------- & $exePath # --------------------------------------------------------- # Passo 4 – Limpar artefatos # --------------------------------------------------------- Remove-Item -Force $tmpPath, $exePath -
Comandos de Limpeza:
# Certifique-se de que quaisquer arquivos remanescentes sejam removidos (execute como admin) Get-ChildItem "$env:TEMPNtTraceDemo.*" -ErrorAction SilentlyContinue | Remove-Item -Force