Hunt e containment de sessões para incident response em AD on-premises.
O Entra ID tem a opção "Revogar sessões" no perfil do usuário. Um clique — tokens invalidados, reautenticação forçada. O Active Directory on-premises não tem equivalente. Para encerrar uma sessão lá, é preciso saber em qual servidor o usuário está e agir diretamente naquele servidor. Em um ambiente com centenas de servidores durante um incidente ativo, fazer isso manualmente não é viável.
O argumento que sempre aparece é "é só resetar a senha." É necessário, mas não fecha a janela.
Um Kerberos TGT tem lifetime padrão de 10 horas. Resetar a senha não invalida tickets já emitidos — o atacante continua usando o TGT ativo para obter service tickets e acessar recursos pelo tempo que restar. Sessions RDP abertas não são encerradas quando a senha muda; o atacante permanece conectado. Sessions SMB e de rede estabelecidas antes do reset (logon type 3) continuam válidas. Sessions NTLM não são reavaliadas. O Entra ID resolve isso invalidando refresh tokens imediatamente — on-premises não tem esse mecanismo.
Containment real é reset de senha mais encerramento das sessions ativas. Sem a segunda parte, o atacante tem uma janela operacional — até 10 horas por padrão — mesmo com a senha alterada. O DRAKE cuida da segunda parte.
O scan roda em três fases. Primeiro, um TCP precheck na porta 135 filtra hosts inacessíveis antes de tentar qualquer coisa — não tem sentido gastar tempo com hosts que não respondem. Em seguida, quser /server roda em paralelo em todos os hosts alcançáveis como método primário de hunt. WMI via CimSession over DCOM roda em ThreadJobs paralelos com timeout por host, capturando sessions que o quser não vê. Os dois conjuntos de resultados são consolidados e deduplicados pela chave server|user|sessionid|logonid.
Sequência de kill: rwinsta primeiro, depois logoff, depois Win32_Process.Terminate como fallback opcional. O fallback é desativado por padrão — é agressivo e pode interromper processos que não faziam parte da session. Confirmação pós-kill usa retry com exponential backoff para verificar que a session realmente caiu.
A opção [8] audita o membership atual em grupos privilegiados — membros diretos e aninhados. Grupos built-in cobertos: Domain Admins, Enterprise Admins, Schema Admins, Administrators, Backup Operators, Account Operators, Server Operators, Group Policy Creator Owners e Protected Users. Grupos adicionais podem ser configurados por ambiente em $PRIV_GROUPS_CUSTOM.
A opção [9] faz o mesmo e inclui datas de adição via Security Event Log. Os eventos 4728, 4732 e 4756 são coletados de todos os DCs. Membros adicionados dentro da janela configurada (padrão 24h) são sinalizados. Depende da retenção de log dos DCs — N/A não significa que a adição não ocorreu, apenas que o evento não foi encontrado no período pesquisado.
- PowerShell 7.0+
- RSAT: Active Directory PowerShell Module
- Permissões adequadas nos servidores-alvo para
quserremoto e WMI - Acesso de leitura ao Security Event Log dos DCs (somente para a opção
[9])
git clone https://github.com/YDSantos12/DRAKE.git
cd DRAKE
Copy-Item Config.example.ps1 src\Config.ps1
pwsh -File Drake.ps1Editar src/Config.ps1 antes de executar:
$AD_PRIMARY_SERVER— FQDN do DC$AD_GROUP_SERVIDORES— grupos AD com os servidores para scan$PRIV_GROUPS_CUSTOM— grupos privilegiados específicos do ambiente (opcional)
src/Config.ps1 está no .gitignore.
[1] set incident context (ID, analyst, reason)
[2] load servers from AD groups
[3] load servers from .txt file
[4] reload AD list
[5] hunt sessions — list only
[6] hunt + kill
[7] IR mode — hunt, kill, report
[8] privileged groups — current membership
[9] privileged groups — current membership + addition history (requires DC Event Log access)
[R] view session report
[H] generate HTML report
[D] toggle dry-run
[F] toggle aggressive WMI fallback (Win32_Process.Terminate)
[S] save and exit
O modo [D] dry-run executa o hunt completo e simula os kills sem executar — útil para mapear o escopo antes de um containment real.
Logs/drake_YYYYMMDD_HHmmss.log — plain text session log
Reports/drake_YYYYMMDD_HHmmss.json — structured data (actions, results, context)
Reports/drake_YYYYMMDD_HHmmss.html — executive summary + action table, opens automatically
Se um audit de grupos privilegiados foi executado na sessão, o HTML inclui essa seção.
Usar apenas em ambientes onde há autorização explícita para encerramento de sessões. Kill remoto de session não é reversível durante a execução.
MIT