
Extensão de Depuração para Resposta a Incidentes e Forense Digital
SwishDbgExt é uma extensão de depuração da Microsoft WinDbg que expande o conjunto de comandos disponíveis pela Microsoft WinDbg, mas também corrige e melhora comandos existentes. Esta extensão foi desenvolvida por Matt Suiche (@msuiche) – sinta-se à vontade para entrar em contato pelo e-mail [email protected] para solicitar mais funcionalidades, oferecer contribuições e/ou relatar bugs.
SwishDbgExt tem como objetivo facilitar a vida de desenvolvedores de kernel, solucionadores de problemas e especialistas em segurança com uma série de comandos de depuração, resposta a incidentes e forense de memória. Por ser uma extensão de depuração do WinDbg, pode ser usada em sessões de depuração de kernel local ou remota, sessões ao vivo geradas pelo Microsoft LiveKd, mas também em dumps de falha do Microsoft gerados por uma Tela Azul da Morte ou utilitários híbridos como o Comae DumpIt.
Mais informações em https://blog.comae.io/comae-2016-contest-swishdbgext-features-3c9a63c62209#.tnt1b9usx
Você pode copiar a extensão do WinDbg para a pasta correspondente (x86 ou x64) do WinDbg ou carregá-la manualmente usando o comando !load conforme abaixo. Observe que não é permitido espaços ou aspas no caminho completo da dll a ser carregada.
!load X:\FullPath\SwishDbgExt.dll
kd> !load E:\projects\labs\SwishDbgExt\bin\x64\SwishDbgExt.dll;
SwishDbgExt v0.7.0 (Nov 2 2016) - Incident Response & Digital Forensics Debugging Extension
SwishDbgExt Copyright (C) 2016 Comae Technologies FZE - http://www.comae.io
SwishDbgExt Copyright (C) 2014-2016 Matthieu Suiche (@msuiche)
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
Se desejar atualizar seu modelo do WinDbg com um modelo mais amigável para DML, você pode importar diretamente o arquivo windbg_template.reg incluído no pacote.
Exibe informações sobre os comandos de extensão disponíveis.
Este comando fornecerá a lista de todos os comandos se nenhum argumento for especificado, ou fornecerá a lista de parâmetros para um comando existente se especificado como argumento.
Exibir funções de retorno de chamada
Procurar por code cave utilizado
Exibir histórico de comandos do console
Exibir credenciais do usuário (baseado no mimikatz do gentilwiki)
Exibir lista de drivers. !ms_drivers exibirá uma lista de drivers atualmente carregados. Neste exemplo, aqui estão alguns dos drivers carregados no momento da falha neste dump de kernel: Com este comando, também podemos visualizar informações detalhadas de IRP sobre um driver: Na imagem acima, podemos ver a localização da pilha de E/S específica do driver dentro do IRP de e1cexpress.sys. Aqui podemos ver códigos de função como IRP_MJ_CREATE que abre o objeto de dispositivo alvo, indicando que ele está presente e disponível para operações de E/S.
Despejar espaço de memória no disco
Exibir fila de trabalhadores Ex.
!exqueue não funciona corretamente no Windows 8, então uma versão funcional precisou ser implementada. Assim como o comando original, este exibe a fila de threads de trabalho.
Redefinir segmentação no WinDbg (Corrigir "16.kd>")
Exibir GDT.
!ms_gdt exibe a Tabela de Descritores Globais. Observe que no x64 cada seletor é plano (0x0000000000000000 a 0xFFFFFFFFFFFFFFFF). Este comando pode ser especialmente útil para verificar possíveis hooks na GDT, pois tentar fazer isso no x64 chamará um bug check. Isso ocorre porque o x64 proíbe o hooking da GDT.
Exibir lista de hives do registro.
ms_hivelist exibe uma lista dos hives do registro.
Podemos olhar diretamente para um hive (\Registry\Machine\Software, por exemplo) para ver suas subchaves, valores, etc:

Exibir IDT.
!ms_idt exibe a Tabela de Descritores de Interrupção. Muito parecido com a GDT, se a IDT estiver com hook em um sistema x64, isso causará um bug check. Isso se deve ao fato de a Microsoft ter implementado (programaticamente) uma prevenção de hook na IDT com um driver em modo kernel que interceptaria chamadas à IDT e adicionaria seu próprio processamento. É por isso que na imagem acima, vemos 'Não' por toda a extensão.
Analisar um espaço de memória e retornar um Índice de Pontuação de Malware (MSI) - (baseado no trabalho de Frank Boldewin)
Escaneia o Master Boot Record (MBR)
Exibir informações de rede (soquetes, conexões, ...)
Exibir lista de objetos
Exibir lista de processos.
!ms_process é uma versão melhorada de !process e !dml_proc.
Uma das coisas interessantes, como você pode notar abaixo, é o uso de DML (Debugger Markup Language) com os comandos. Todos os comandos sublinhados são, na verdade, links para comandos.
Como exemplo abaixo, você pode ver a saída de /vads /scan, para escanear VADs (Descritores de Endereço Virtual). Você pode notar que uma coluna fornece o "Índice de Pontuação de Malware", que pode ser útil para detectar shellcodes ou heap-spray.
Na captura de tela abaixo, você pode ver uma pontuação anormalmente alta em vários VADs – devido ao uso de heap spray. Basta clicar na pontuação para executar o algoritmo de varredura.
O algoritmo de varredura é baseado no utilitário OfficeMalScanner de Frank Boldewin.
E retorna informações sobre onde o shellcode está:
A opção /scan também pode ser usada em funções exportadas para saber se a Tabela de Endereços de Exportação (EAT) foi alterada ou se o prólogo da função foi modificado.
Testes semelhantes estão disponíveis para a SSDT (!ms_ssdt).
Ler bloco de controle de chave
Ler nó de chave.
O comando !reg do WinDbg tem sido uma frustração por muito tempo, devido a alguns bugs. É por isso que o SwishDbgExt possui suas próprias funções de explorador de registro para tentar tornar o acesso aos dados do registro o mais simples possível.
Ler valor da chave
Escaneia e exibe hooks suspeitos de NDIS
Exibir lista de serviços
Exibir funções da Tabela de Despacho de Serviços do Sistema (SDT).
!ms_ssdt exibe a Tabela de Despacho de Serviços do Sistema. Este comando é extremamente útil na investigação de hooks suspeitos de rootkits através do que é conhecido como Manipulação Direta de Objetos do Kernel (DKOM). Se você vir uma rotina de baixo nível aqui que está com hook (como nt!NtEnumerateKey), isso pode ajudar na análise de uma possível infecção por rootkit.
Exibir informações relacionadas ao Gerenciador de Armazenamento (ReadyBoost).
O presente comando permite listar o cache atual do ReadyBoost (requer USB 3.0) usado pelo Sistema Operacional, mas também exibir os logs das páginas de memória gerenciadas pelo gerenciador de armazenamento. Parâmetro: /cache
Exibir lista de KTIMER.
!ms_timers exibe a estrutura KTIMER, que é uma estrutura opaca que representa e contém vários objetos de temporizador. Este comando pode ser útil para descobrir quais drivers criaram quais objetos de temporizador, quais drivers chamaram quais rotinas, etc.
Exibir lista de VACBs em cache
Ativar/desativar modo verboso
O seguinte é baseado na pesquisa publicada por Alex Ionescu e disponível em: https://github.com/ionescu007/lxss/