
Estensione di debug per Incident Response e Digital Forensics
SwishDbgExt è un'estensione di debug per Microsoft WinDbg che espande l'insieme dei comandi disponibili di Microsoft WinDbg, ma corregge e migliora anche i comandi esistenti. Questa estensione è stata sviluppata da Matt Suiche (@msuiche) – sentiti libero di contattarci a [email protected] per richiedere ulteriori funzionalità, offrire il tuo contributo e/o segnalare bug.
SwishDbgExt mira a semplificare la vita degli sviluppatori kernel, dei risolutori di problemi e degli esperti di sicurezza con una serie di comandi per debug, risposta agli incidenti e analisi forense della memoria. Poiché SwishDbgExt è un'estensione di debug per WinDbg, può essere utilizzata in sessioni di debug del kernel locali o remote, sessioni live generate da Microsoft LiveKd, ma anche su dump di crash Microsoft generati da un Blue Screen of Death o utility ibride come Comae DumpIt.
Maggiori informazioni su https://blog.comae.io/comae-2016-contest-swishdbgext-features-3c9a63c62209#.tnt1b9usx
Puoi copiare l'estensione WinDbg nella cartella WinDbg corrispondente (x86 o x64) oppure caricarla manualmente usando il comando !load come mostrato di seguito. Nota che non possono esserci spazi o virgolette nel percorso completo della DLL da caricare.
!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 desideri aggiornare il tuo template WinDbg con un template più adatto a DML, puoi importare direttamente il file windbg_template.reg allegato al pacchetto.
Mostra informazioni sui comandi dell'estensione disponibili.
Questo comando fornisce l'elenco di tutti i comandi se non viene specificato alcun argomento, oppure l'elenco dei parametri per un comando esistente se specificato come argomento.
Mostra le funzioni callback
Cerca i code cave utilizzati
Mostra la cronologia dei comandi della console
Mostra le credenziali dell'utente (basato su mimikatz di gentilwiki)
Mostra l'elenco dei driver. !ms_drivers mostra un elenco dei driver attualmente caricati. In questo esempio, ecco alcuni dei driver caricati al momento del crash in questo dump del kernel: Con questo comando possiamo anche visualizzare informazioni approfondite sugli IRP relative a un driver: Nell'immagine sopra possiamo vedere la posizione dello stack I/O specifica del driver all'interno dell'IRP di e1cexpress.sys. Qui possiamo vedere codici di funzione come IRP_MJ_CREATE che apre l'oggetto dispositivo di destinazione, indicando che è presente e disponibile per operazioni I/O.
Scarica lo spazio di memoria su disco
Mostra i worker in coda Ex.
!exqueue non funziona correttamente su Windows 8, quindi è stata implementata una versione funzionante. Proprio come il comando originale, questo mostra la coda dei thread di lavoro.
Reimposta la segmentazione in WinDbg (Ripara "16.kd>")
Mostra la GDT.
!ms_gdt mostra la Global Descriptor Table. Nota che su x64 ogni selettore è piatto (0x0000000000000000 a 0xFFFFFFFFFFFFFFFF). Questo comando può essere molto utile per verificare eventuali sospetti hook della GDT, poiché tentare di farlo su x64 provocherà un bug check. Questo perché x64 vieta l'hooking della GDT.
Mostra l'elenco degli hive del registro.
ms_hivelist mostra un elenco degli hive del registro.
Possiamo esaminare direttamente un hive (ad esempio \Registry\Machine\Software) per vedere le sue sottochiavi, valori, ecc.:

Mostra la IDT.
!ms_idt mostra la tabella dei descrittori di interrupt. Molto simile alla GDT, se la IDT viene hookata su un sistema x64, provocherà un bug check. Questo è dovuto al fatto che Microsoft ha implementato (a livello di codice) una prevenzione dell'hooking della IDT con un driver in modalità kernel che normalmente intercetterebbe le chiamate alla IDT e poi aggiungerebbe la propria elaborazione. Ecco perché nell'immagine sopra, per quanto si veda, c'è 'No'.
Analizza uno spazio di memoria e restituisce un Malware Score Index (MSI) - (basato sul lavoro di Frank Boldewin)
Scansiona il Master Boot Record (MBR)
Mostra informazioni di rete (socket, connessioni, ...)
Mostra l'elenco degli oggetti
Mostra l'elenco dei processi.
!ms_process è una versione migliorata di !process e !dml_proc.
Una delle cose interessanti, come puoi notare qui sotto, è l'uso di DML (Debugger Markup Language) con i comandi. Tutti i comandi sottolineati sono in realtà collegamenti a comandi.
Ad esempio qui sotto, puoi vedere l'output di /vads /scan, per scansionare i VAD (Virtual Address Descriptors). Puoi notare che una colonna mostra il "Malware Score Index" che può essere utile per rilevare shellcode o heap-spray.
Nello screenshot qui sotto, puoi vedere un punteggio anormalmente alto in diversi VAD – a causa dell'uso di heap spray. Basta cliccare sul punteggio per eseguire l'algoritmo di scansione.
L'algoritmo di scansione è basato sull'utility OfficeMalScanner di Frank Boldewin.
E restituisce informazioni su dove si trova lo shellcode:
L'opzione /scan può essere utilizzata anche sulle funzioni esportate per sapere se l'EAT (Export Address Table) è stata patchata o se il prologo della funzione è stato modificato.
Test simili sono disponibili per la SSDT (!ms_ssdt).
Legge un key control block
Legge un key node.
Il comando WinDbg !reg è stato a lungo fonte di frustrazione a causa di alcuni bug. Ecco perché SwishDbgExt ha proprie funzioni di esplorazione del registro per rendere l'accesso ai dati del registro il più semplice possibile.
Legge un key value
Scansiona e mostra gli hook NDIS sospetti
Mostra l'elenco dei servizi
Mostra le funzioni della System Service Descriptor Table (SDT).
!ms_ssdt mostra la System Service Dispatch Table. Questo comando è estremamente utile nell'investigazione di sospetti hook di rootkit attraverso ciò che è noto come Direct Kernel Object Manipulation (DKOM). Se vedi una routine di basso livello hookata qui (come nt!NtEnumerateKey), questo può aiutarti nell'analisi di una possibile infezione da rootkit.
Mostra informazioni relative allo Store Manager (ReadyBoost).
Il presente comando permette di elencare la cache ReadyBoost corrente (richiede USB 3.0) utilizzata dal sistema operativo, ma anche di visualizzare i log delle pagine di memoria gestite dallo store manager. Parametro: /cache
Mostra l'elenco dei KTIMER.
!ms_timers mostra la struttura KTIMER, che è una struttura opaca che rappresenta e contiene vari oggetti timer. Questo comando può essere utile per capire quali driver hanno creato quali oggetti timer, quali driver hanno chiamato quali routine, ecc.
Mostra l'elenco dei VACB in cache
Attiva/disattiva la modalità verbose