
Расширение для отладки в сфере реагирования на инциденты и цифровой криминалистики
SwishDbgExt — это расширение для отладчика Microsoft WinDbg, которое расширяет набор доступных команд Microsoft WinDbg, а также исправляет и улучшает существующие команды. Это расширение было разработано Мэттом Сюишем (@msuiche) — не стесняйтесь обращаться по адресу [email protected], чтобы запросить новые функции, предложить свой вклад и/или сообщить об ошибках.
SwishDbgExt призван облегчить жизнь разработчикам ядра, специалистам по устранению неполадок и экспертам по безопасности с помощью серии команд для отладки, реагирования на инциденты и анализа памяти. Поскольку SwishDbgExt является расширением WinDbg, его можно использовать в сеансах локальной или удаленной отладки ядра, в сеансах реального времени, созданных с помощью Microsoft LiveKd, а также на аварийных дампах Microsoft, созданных при синем экране смерти, или с помощью гибридных утилит, таких как Comae DumpIt.
Дополнительная информация: https://blog.comae.io/comae-2016-contest-swishdbgext-features-3c9a63c62209#.tnt1b9usx
Вы можете либо скопировать расширение WinDbg в соответствующую папку (x86 или x64) WinDbg, либо загрузить его вручную с помощью команды !load, как показано ниже. Обратите внимание: в полном пути к загружаемой DLL не должно быть пробелов или кавычек.
!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.
Если вы хотите обновить шаблон WinDbg на более DML-дружественный, вы можете напрямую импортировать прилагаемый файл windbg_template.reg.
Отображает информацию о доступных командах расширения.
Эта команда выводит список всех команд, если не указан аргумент, или список параметров для существующей команды, если она указана в качестве аргумента.
Отображает callback-функции
Ищет используемые code cave
Отображает историю команд консоли
Отображает учетные данные пользователя (на основе mimikatz от gentilwiki)
Отображает список драйверов. Команда !ms_drivers выводит список драйверов, загруженных в данный момент. В этом примере показаны некоторые драйверы, загруженные в момент сбоя в этом дампе ядра: С помощью этой команды мы также можем просмотреть подробную информацию об IRP для конкретного драйвера: На изображении выше мы видим расположение стека I/O, специфичного для драйвера e1cexpress.sys в его IRP. Здесь мы видим такие коды функций, как IRP_MJ_CREATE, который открывает целевой объект устройства, указывая на его наличие и доступность для операций I/O.
Сохраняет пространство памяти на диск
Отображает очередь экспонированных рабочих (Ex queued workers).
!exqueue неправильно работает в Windows 8, поэтому необходимо реализовать рабочую версию. Как и оригинальная команда, эта отображает очередь рабочих потоков.
Сбрасывает сегментацию в WinDbg (исправляет "16.kd>")
Отображает GDT.
!ms_gdt отображает глобальную дескрипторную таблицу (GDT). Обратите внимание, что на x64 каждый селектор является плоским (от 0x0000000000000000 до 0xFFFFFFFFFFFFFFFF). Эта команда может быть особенно полезна для проверки на перехват GDT, так как попытка сделать это на x64 вызовет проверку ошибок, поскольку x64 запрещает перехват GDT.
Отображает список кустов реестра.
ms_hivelist отображает список кустов реестра.
Мы можем напрямую заглянуть в куст (\Registry\Machine\Software, например), чтобы увидеть его подразделы, значения и т.д.:

Отображает IDT.
!ms_idt отображает таблицу дескрипторов прерываний (IDT). Как и в случае с GDT, если IDT перехвачена в системе x64, это вызовет проверку ошибок. Это связано с тем, что Microsoft программно реализовала предотвращение перехвата IDT драйвером режима ядра, который обычно перехватывает вызовы к IDT и добавляет свою собственную обработку. Поэтому на изображении выше везде указано «Нет».
Анализирует пространство памяти и возвращает индекс вредоносности (MSI) — основан на работе Frank Boldewin
Сканирует главную загрузочную запись (MBR)
Отображает сетевую информацию (сокеты, соединения и т.д.)
Отображает список объектов
Отображает список процессов.
!ms_process — улучшенная версия !process и !dml_proc.
Одна из приятных особенностей, как видно ниже, — использование DML (Debugger Markup Language) с командами. Все подчеркнутые команды на самом деле являются ссылками на команды.
Например, ниже показан вывод /vads /scan для сканирования VAD (дескрипторов виртуальных адресов). Вы можете заметить, что один столбец отображает «Malware Score Index», что может быть полезно для обнаружения shellcode или heap-spray.
На скриншоте ниже видно аномально высокий показатель в нескольких VAD из-за использования heap-spray. Просто нажав на показатель, вы запустите алгоритм сканирования.
Алгоритм сканирования основан на утилите Frank Boldewin’s OfficeMalScanner.
И возвращает информацию о том, где находится shellcode:
Опция /scan также может использоваться для экспортируемых функций, чтобы узнать, была ли изменена таблица экспорта адресов (EAT) или модифицирован пролог функции.
Аналогичные тесты доступны для SSDT (!ms_ssdt).
Чтение блока управления ключа
Чтение узла ключа.
Команда !reg в WinDbg долгое время вызывала разочарование из-за некоторых ошибок. Именно поэтому SwishDbgExt имеет собственные функции для работы с реестром, чтобы максимально упростить доступ к данным реестра.
Чтение значения ключа
Сканирование и отображение подозрительных NDIS-перехватчиков
Отображает список служб
Отображает функции таблицы системных служб (SDT).
!ms_ssdt отображает таблицу системных служб (System Service Dispatch Table). Эта команда чрезвычайно полезна при расследовании предполагаемых перехватов руткитами через прямую манипуляцию объектами ядра (DKOM). Если вы видите, что низкоуровневая процедура (например, nt!NtEnumerateKey) перехвачена, это может помочь в анализе возможного заражения руткитом.
Отображает информацию, связанную с Store Manager (ReadyBoost).
Данная команда позволяет вывести список текущего кэша ReadyBoost (требуется USB 3.0), используемого операционной системой, а также отобразить журналы страниц памяти, управляемых Store Manager. Параметр: /cache
Отображает список KTIMER.
!ms_timers отображает структуру KTIMER, которая представляет собой непрозрачную структуру, содержащую различные объекты таймеров. Эта команда может помочь определить, какие драйверы создали какие объекты таймеров, какие драйверы вызывали какие процедуры и т.д.
Отображает список кэшированных VACB
Включает/выключает подробный режим
Основано на исследовании, опубликованном Алексом Ионеску (Alex Ionescu) и доступном здесь: https://github.com/ionescu007/lxss/
Эта функция доступна в Windows 10+ как дополнительная возможность, устанавливаемая с помощью следующей команды PowerShell:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
Вы можете узнать больше о подсистеме Windows для Linux по следующим ссылкам:
Windows Subsystem for Linux Overview.
Instance 0xFFFFE704EEB8F010
GUID: {E29032FD-35D3-4C53-AB68-6BCEBDA7176F}
State: (1) [STARTED]
Creation Flags: 00000001
GlobalData: 0xFFFFF802ED4138A0
Root Handle: 80000834
Temp Handle: 80000838
Job Handle: 8000083c
Token: 80000818
Event Handle: 800008bc
Map Paths (0): 0xFFFFE704EF437920
VFS Context: 0xFFFFE704EEFC4710
Memory Flags: 0x2
Last PID: 35
Thread Groups: 3
Session 0xFFFFE704EDB79EC0
Instance: 0xFFFFE704EEB8F010
Console inode: 0x0
Foreground PID: -1
Process Group 0xFFFFE704EDB79AE0
Instance: 0xFFFFE704EEB8F010
Session: 0xFFFFE704EDB79EC0
Thread Group 0xFFFFE704EF4F8000
Binary Path: /init
Thread(s): 1
Owner Process Group: 0xFFFFE704EDB79AE0
Flags: 0x00000000
Main Thread: 0xFFFFE704EF5CC010
Arguments (006 bytes): 0x00007FFFC081D6E0
Process 0xFFFFE704EF2F1D70
Instance: 0xFFFFE704EEB8F010
NT Process Object: 0xFFFFAE05E84EF800
NT Process Handle: 0xFFFFFFFF80000F58
VDSO Address: 0x00007FFFC0849000
Stack Address: 0x00007FFFC001E000
Session 0xFFFFE704EF5DB830
Instance: 0xFFFFE704EEB8F010
Console inode: 0xFFFFE704EF32D7A0
Foreground PID: 2
Process Group 0xFFFFE704EF5EF970
Instance: 0xFFFFE704EEB8F010
Session: 0xFFFFE704EF5DB830
Thread Group 0xFFFFE704EF5EE000
Binary Path: /bin/bash
Thread(s): 1
Owner Process Group: 0xFFFFE704EF5EF970
Flags: 0x0000000C
Main Thread: 0xFFFFE704EF5F8010
Arguments (010 bytes): 0x00007FFFDF34E418
Process 0xFFFFE704EDEF6EC0
Instance: 0xFFFFE704EEB8F010
NT Process Object: 0xFFFFAE05E84E6800
NT Process Handle: 0xFFFFFFFF80000D9C
VDSO Address: 0x00007FFFDF883000
Stack Address: 0x00007FFFDEB4F000
Session 0xFFFFE704EF0A8ED0
Instance: 0xFFFFE704EEB8F010
Console inode: 0xFFFFE704EF06B9C0
Foreground PID: 19
Process Group 0xFFFFE704F059CBC0
Instance: 0xFFFFE704EEB8F010
Session: 0xFFFFE704EF0A8ED0
Thread Group 0xFFFFE704EDE51000
Binary Path: /bin/bash
Thread(s): 1
Owner Process Group: 0xFFFFE704F059CBC0
Flags: 0x0000000C
Main Thread: 0xFFFFE704EDC78090
Arguments (010 bytes): 0x00007FFFF78CFB78
Process 0xFFFFE704F06389B0
Instance: 0xFFFFE704EEB8F010
NT Process Object: 0xFFFFAE05E618D800
NT Process Handle: 0xFFFFFFFF80001650
VDSO Address: 0x00007FFFF7C99000
Stack Address: 0x00007FFFF70D0000
Сканирование памяти процесса с помощью правил YARA.
Сканирование памяти процесса.
!ms_yarascan /pid 0x228 /yarafile /yarafile C:\Rules.yar
Сканирование памяти всех процессов.
!for_each_process "r? @$t0 = (nt!_EPROCESS *) @#Process; .process /r /p @$t0; !ms_yarascan /pid @@C++(@$t0->UniqueProcessId) /yarafile C:\\Rules.yar"
MsPEImageFile содержит основную общую информацию, используемую двоичными файлами Windows (PE), и был разделен на три различных класса: