
Windows Analysis and Research Toolkit
⚠️ Часть этого проекта была написана с помощью ИИ в стиле «vibe coding», поэтому в нём могут быть баги. Драйвер ядра (KWinSys) следует устанавливать только в тестовой ВМ в исследовательских целях.

| Компонент | Назначение |
|---|---|
| NtWarden | GUI-приложение (ImGui + DirectX 11) |
| WinSys |
Анализ безопасности каждого процесса, доступный из контекстного меню процесса.
Требования: Visual Studio 2022, Windows SDK 10.0.26100.0+, WDK (для KWinSys)
NtWarden.sln
├── NtWarden/ # GUI app
├── WinSys/ # Core library (static lib)
├── KWinSys/ # Kernel driver
└── WinSysServer/ # Remote server
NtWarden.sln в Visual Studiox64/Release/KWinSys требует тестовую подпись (test signing) или действующую подпись.
# Enable test signing (reboot required)
bcdedit /set testsigning on
# On VMs you may also need
bcdedit /set nointegritychecks on
Запускайте NtWarden от имени администратора. Переход на вкладку режима ядра автоматически установит и запустит драйвер, если он ещё не загружен. Также можно управлять им вручную из меню Driver.
WinSysServer запускается на целевой машине (обычно ВМ) и отдаёт системные данные по TCP. Подключение из NtWarden через Remote > Connect.
| Файл | Путь | Зачем нужен |
|---|---|---|
WinSysServer.exe | x64/Release/WinSysServer.exe | Всегда |
KWinSys.sys | x64/Release/KWinSys/KWinSys.sys | Только для функций ядра |
Всё, что в пользовательском режиме (процессы, службы, сеть), работает и без драйвера. Для вкладок ядра требуется загрузка KWinSys на целевой машине.
# Auto-install driver + start server (run elevated)
WinSysServer.exe --install # default port 50002
WinSysServer.exe --install --port 9000 # custom port
# Or install the driver yourself first
sc create KWinSys type= kernel binPath= "C:\path\to\KWinSys.sys"
sc start KWinSys
WinSysServer.exe [--port <port>] # default: 50002
Собственный бинарный протокол поверх TCP. 12-байтовый заголовок (MessageType, DataSize, Status). Без аутентификации — использовать только в изолированных лабораторных/VM-средах.
MIT — см. LICENSE.
| Статическая библиотека для перечисления процессов, служб и сети |
| KWinSys | Драйвер ядра для колбэков, SSDT, модулей ядра и т.д. |
| WinSysServer | TCP-сервер без GUI для удалённой инспекции |
| Вкладка | Что делает |
|---|
| Процессы | Список процессов с деревом, дескрипторами, потоками, областями памяти и модулями |
| Производительность | Графики использования CPU, RAM, GPU и сети в реальном времени — можно накладывать поверх других задач |
| Службы | Перечисление служб со статусом, типом запуска и путём к бинарному файлу |
| Сеть > Подключения | TCP/UDP-соединения с владеющим процессом и удалёнными конечными точками |
| Сеть > Корневые сертификаты | Хранилище доверенных корневых CA с субъектом, издателем и отпечатком |
| Сеть > NDIS | Информация о сетевом адаптере: драйвер, MAC, скорость, тип среды |
| ETW | Активные сеансы трассировки и зарегистрированные провайдеры |
| IPC | RPC-эндпоинты и именованные каналы |
| Диспетчер объектов | Просмотр пространства имён объектов ядра: каталоги, символические ссылки, устройства |
| Реестр | Обозреватель реестра с перечислением ключей и значений |
| Символы | Статус загрузки символов в пользовательском режиме |
| Журнал | Перехватывает отладочные журналы драйвера ядра и журналы GUI пользовательского режима в одном месте |
| Вкладка | Что делает |
|---|
| Объекты процессов | Перечисление EPROCESS, обнаружение скрытых процессов методом перекрёстных ссылок |
| Модули | Загруженные драйверы ядра с базовым адресом, размером, путём (вместе с проверкой LolDrivers) |
| Колбэки | Колбэки ядра (процесс/поток/образ/реестр/объект/питание) + проверки целостности |
| SSDT | Записи SSDT с владельцем и обнаружением хуков |
| Символы | Разрешение символов ядра и загрузка PDB |
| Пул ядра | Крупные выделения пула, статистика тегов пула |
| Чтение/запись памяти | Чтение/запись памяти ядра по адресу |
| Таймеры | Счётчики прерываний и DPC для каждого CPU |
| Фильтр | Minifilter-драйверы с altitude и информацией об экземплярах |
| Таблицы дескрипторов | Записи GDT/IDT |
| Диспетчеризация IRP | Таблица диспетчеризации IRP для любого драйвера — адреса обработчиков, модуль-владелец |
| WFP | WFP callout-драйверы и фильтры |
| Статус DSE | Состояние принудительной проверки подписи драйверов |
| Политика CI | Политика целостности кода и уровень принудительного применения |
| Целостность ядра | Проверка .text ядра на соответствие образу на диске |
| Хуки гипервизора | Обнаружение EPT-хуков с помощью анализа таймингов |
| Раздел | Что проверяется |
|---|
| Память без файловой поддержки | Приватные исполняемые области, не подкреплённые файлом (индикатор шеллкода) |
| Холлоуинг | Несоответствие ImageBase в PEB и ImageBase в PE-заголовке |
| Module Stomping | Сравнение .text-секций в памяти с оригинальными на диске |
| Прямые системные вызовы | Инструкции syscall (0F 05), найденные вне ntdll |
| Стабы системных вызовов | Целостность стабов ntdll — байты в памяти против чистой копии с диска |
| Пользовательские хуки | Inline-хуки (патчи JMP/CALL) в ntdll, kernel32 и т.д. (требуется capstone для дизассемблирования анализируемых байтов) |
| Токены | Повышение прав, уровень целостности, имперсонация, подозрительные привилегии |
| Объекты отладки | Объекты отладки и отладочные порты процесса |
| Гипервизор | Проверка производителя CPUID + аномалии таймингов RDTSC/CPUID |
| Job-объекты | Членство в job, лимиты, ограничения UI |
| Статус CFG | Состояние принудительного применения CFG/XFG и флаги смягчения |