
Extension de débogage pour la réponse aux incidents et la criminalistique numérique
SwishDbgExt est une extension de débogage Microsoft WinDbg qui étend l'ensemble des commandes disponibles de Microsoft WinDbg, mais corrige et améliore également les commandes existantes. Cette extension a été développée par Matt Suiche (@msuiche) – n'hésitez pas à nous contacter à [email protected] pour demander plus de fonctionnalités, proposer de contribuer et/ou signaler des bogues.
SwishDbgExt vise à faciliter la vie des développeurs noyau, des dépanneurs et des experts en sécurité grâce à une série de commandes de débogage, de réponse aux incidents et de forensic mémoire. Étant une extension de débogage WinDbg, elle peut être utilisée sur des sessions de débogage noyau locales ou distantes, des sessions en direct générées par Microsoft LiveKd, mais aussi sur des vidages sur incident Microsoft générés par un écran bleu de la mort ou des utilitaires hybrides tels que Comae DumpIt.
Plus d'informations sur https://blog.comae.io/comae-2016-contest-swishdbgext-features-3c9a63c62209#.tnt1b9usx
Vous pouvez soit copier l'extension WinDbg dans le dossier WinDbg correspondant (x86 ou x64), soit la charger manuellement à l'aide de la commande !load comme ci-dessous. Veuillez noter que vous ne pouvez pas avoir d'espaces ou de guillemets dans le chemin complet vers la dll cible à charger.
!load X:\FullPath\SwishDbgExt.dll
###Exemple:
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.
Si vous souhaitez mettre à jour votre modèle WinDbg avec un modèle plus compatible DML, vous pouvez importer directement le fichier windbg_template.reg joint au package.
Affiche des informations sur les commandes d'extension disponibles.
Cette commande vous donnera la liste de toutes les commandes si vous ne spécifiez aucun argument, et la liste des paramètres d'une commande existante si elle est spécifiée comme argument.
Affiche les fonctions de rappel
Recherche les code caves utilisés
Affiche l'historique des commandes de la console
Affiche les informations d'identification de l'utilisateur (basé sur mimikatz de gentilwiki)
Affiche la liste des pilotes. !ms_drivers affiche une liste des pilotes actuellement chargés. Dans cet exemple, voici quelques-uns des pilotes chargés au moment du crash dans ce vidage noyau : Avec cette commande, nous pouvons également visualiser des informations IRP détaillées concernant un pilote : Dans l'image ci-dessus, nous pouvons voir l'emplacement de la pile d'E/S spécifique au pilote dans l'IRP de e1cexpress.sys. Nous pouvons y voir des codes de fonction tels que IRP_MJ_CREATE qui ouvre l'objet périphérique cible, indiquant qu'il est présent et disponible pour les opérations d'E/S.
Vide l'espace mémoire sur le disque
Affiche les workers en file d'attente Ex.
!exqueue ne fonctionne pas correctement sur Windows 8, donc une version fonctionnelle a dû être implémentée. Tout comme la commande d'origine, celle-ci affiche la file d'attente des threads de travail.
Réinitialise la segmentation dans WinDbg (Correction de "16.kd>")
Affiche la GDT.
!ms_gdt affiche la Global Descriptor Table. Notez que sur x64, chaque sélecteur est plat (de 0x0000000000000000 à 0xFFFFFFFFFFFFFFFF). Cette commande peut être particulièrement utile pour vérifier tout hook suspecté de la GDT, car tenter de le faire sur x64 provoquera un bug check. Cela est dû au fait que x64 interdit le hook de la GDT.
Affiche la liste des ruches du registre.
ms_hivelist affiche une liste des ruches du registre. Nous pouvons regarder directement dans une ruche (\Registry\Machine\Software par exemple) pour voir ses sous-clés, valeurs, etc :

Affiche la IDT.
!ms_idt affiche la table des descripteurs d'interruptions. Tout comme la GDT, si la IDT est hookée sur un système x64, cela provoquera un bug check. Cela est dû au fait que Microsoft a implémenté (programmatiquement) une prévention du hook de la IDT avec un pilote en mode noyau qui intercepterait normalement les appels à la IDT et ajouterait son propre traitement. C'est pourquoi, dans l'image ci-dessus, il y a 'Non' partout où l'on peut voir.
Analyse un espace mémoire et retourne un Indice de Score de Malware (MSI) - (basé sur le travail de Frank Boldewin)
Scanne le Master Boot Record (MBR)
Affiche les informations réseau (sockets, connexions, ...)
Affiche la liste des objets
Affiche la liste des processus.
!ms_process est une version améliorée de !process et !dml_proc.. L'une des choses intéressantes, comme vous pouvez le remarquer ci-dessous, est l'utilisation du DML (Debugger Markup Language) avec les commandes. Toutes les commandes soulignées sont en fait des liens vers des commandes. Comme exemple ci-dessous, vous pouvez voir la sortie de /vads /scan, pour scanner les VAD (Virtual Address Descriptors). Vous pouvez remarquer qu'une colonne donne l'« Indice de Score de Malware » qui peut être utile pour détecter des shellcodes ou du heap-spray. Dans la capture d'écran ci-dessous, vous pouvez voir un score anormalement élevé dans plusieurs VAD – dû à l'utilisation du heap spray. En cliquant simplement sur le score, l'algorithme de scan s'exécutera. L'algorithme de scan est basé sur l'utilitaire OfficeMalScanner de Frank Boldewin. Et il vous renvoie des informations sur l'emplacement du shellcode : L'option /scan peut également être utilisée sur les fonctions exportées pour savoir si l'EAT (Export Address Table) a été patchée ou si le prologue de la fonction a été modifié. Des tests similaires sont disponibles pour la SSDT (!ms_ssdt).
Lit le bloc de contrôle de clé
Lit le nœud de clé.
La commande WinDbg !reg a été une source de frustration pendant longtemps, en raison de certains bogues. C'est pourquoi SwishDbgExt a ses propres fonctions d'exploration du registre pour essayer de rendre l'accès aux données du registre aussi simple que possible.
Lit la valeur de la clé
Scanne et affiche les hooks NDIS suspects
Affiche la liste des services
Affiche les fonctions de la table des descripteurs de services (SDT).
!ms_ssdt affiche la System Service Dispatch Table. Cette commande est extrêmement utile dans l'investigation de hooks suspects de rootkit via ce qu'on appelle la Manipulation Directe d'Objets Noyau (DKOM). Si vous voyez une routine de bas niveau qui est hookée (comme nt!NtEnumerateKey), cela peut vous aider dans votre analyse concernant une éventuelle infection par rootkit.
Affiche les informations relatives au Store Manager (ReadyBoost).
Cette commande permet de lister le cache ReadyBoost actuel (nécessite USB 3.0) utilisé par le système d'exploitation, mais aussi d'afficher les journaux des pages mémoire gérées par le store manager. Paramètre : /cache
Affiche la liste des KTIMER.