
Расширение для отладки в сфере реагирования на инциденты и цифровой криминалистики
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/