Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
KslDump — KslDump — Зачем приносить собственный нож, если Defender уже оставил один на кухне? | Kitploit
Инструменты/GitHubGitHub/andreisss/ksldump
Повышение привилегийАнализ уязвимостейЭксплуатацияТестирование на ПроникновениеRed TeamingЭксплуатация Бинарных Файлов
GitHubandreisss/ksldump

KslDump

KslDump — Зачем приносить собственный нож, если Defender уже оставил один на кухне?

Репозиторий
398514 месяцев назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

KslDump - BMVD (Принеси уязвимый драйвер Microsoft)

GitHub stars GitHub forks GitHub downloads Sponsor License: GPL v3

Важный контекст

Я сообщил об этой проблеме в Microsoft 7 марта 2026 года. Однако почти на 20 дней раньше сообщество по взлому игр уже реверсировало и публично обсуждало эту уязвимость. Со своей стороны, я не слежу за их проектами и не знал об этом. Также очевидно, что это два совершенно разных и не связанных между собой проекта.

Ссылки

  • Пост в блоге Avantguard

Зачем нести свой нож, если Defender уже оставил один на кухне?

KslDump извлекает учетные данные из защищенного PPL процесса LSASS, используя только компоненты, подписанные Microsoft. Никакой эксплойт не применяется. Никакой драйвер не загружается. Вся цепочка атак поставляется предустановленной вместе с Windows Defender. Microsoft исправила рабочую версию (wd\KslD.sys), обнулив MmCopyMemory, но оставила старую уязвимую версию (drivers\KslD.sys) на диске. Злоумышленнику не нужно ничего приносить — он просто перенаправляет службу обратно на то, что Microsoft забыла удалить.

image

https://github.com/user-attachments/assets/78dfce25-56b3-4eb8-9de2-7c183601e597


Уязвимость

KslD.sys — это драйвер режима ядра, поставляемый с Microsoft Defender. Он подписан Microsoft, загружается как доверенный модуль ядра и предоставляет объект устройства \\.\KslD, доступный из пользовательского режима.

Драйвер принимает IOCTL 0x222044 с несколькими подкомандами, которые предоставляют неограниченный доступ к памяти ядра и физической памяти любому процессу, который может открыть дескриптор устройства.

Уязвимые подкоманды

SubCmdВозможностьВлияние
2Возвращает CR3, IDTR и другие регистры управления ЦП в пользовательский режимМгновенный обход KASLR
12Вызывает MmCopyMemory() с контролируемыми злоумышленником адресом и размеромПроизвольное чтение памяти ядра/физической памяти

«Контроль доступа»

Единственный шлюз к дескриптору устройства — это строка имени процесса, хранящаяся в ключе реестра (AllowedProcessName) в разделе службы драйвера. Это значение:

  • Изменяемо любым локальным администратором
  • Не защищено защитой от несанкционированного доступа Defender
  • Не проверяется на подпись кода, целостность или любые двоичные свойства
  • Простое сравнение строк — переименуйте свой исполняемый файл, и вы внутри

Разница всего в одной строке в CCommand::Initialize:

root@kitploit:~
// 82 KB version (patched) — deliberately clears the pointer:
v3 = MmGetSystemRoutineAddress(L"MmCopyMemory");
if (v3 >= 0) {
    *(a1 + 24) = 0;        // ← NULLs it — SubCmd 12 is dead
}

// 333 KB version (vulnerable) — stores the pointer:
ptr = MmGetSystemRoutineAddress(L"MmCopyMemory");
if (ptr) {
    *(this + 0x18) = ptr;   // ← Keeps it — SubCmd 12 works
}

Похоже, что обновления платформы Defender помещают исправленную версию размером 82 КБ в drivers\wd\ и указывают ImagePath на нее, в то время как старая версия размером 333 КБ остается в drivers\. На протестированных системах старый двоичный файл никогда не удалялся. Эксплойт просто переключает ImagePath обратно на уязвимую версию и перезапускает службу. Оба двоичных файла подписаны Microsoft и доверяются ОС.


Почему старый драйвер все еще на диске - личная теория

Публичная документация Microsoft показывает, что KB4052623 доставляет обновления платформы Defender, включая историческое перемещение драйверов Defender в System32\drivers\wd, в то время как обслуживание Windows хранит файлы хранилища компонентов на основе WinSxS через жесткие ссылки NTFS и удаляет устаревшие версии компонентов только во время очистки. На протестированной системе это объясняет, почему новая версия KslD.sys размером 82 КБ могла появиться через путь обновления платформы Defender, в то время как старая версия System32\drivers\KslD.sys размером 333 КБ оставалась как текущая копия хранилища компонентов на основе CBS до тех пор, пока не была заменена более новой версией CBS.


Парадокс списка блокировки

Microsoft поддерживает Список блокировки уязвимых драйверов (DriverSiPolicy.p7b) специально для предотвращения атак BYOVD. Этот список блокировки применяется через HVCI и блокирует загрузку известных уязвимых подписанных драйверов.

Из собственной документации Microsoft:

«Список блокировки уязвимых драйверов предназначен для помощи в укреплении систем против драйверов, разработанных не Microsoft, во всей экосистеме Windows»

Собственные драйверы Microsoft исключены из списка блокировки по замыслу.


Почему это работает

Коренная причина проста: MmCopyMemory не уважает PPL.

PPL (Protected Process Light) был разработан для предотвращения кражи учетных данных путем блокировки вызовов OpenProcess и ReadProcessMemory к LSASS. Но PPL защищает только путь API пользовательского режима. Он не имеет власти над чтениями физической памяти в режиме ядра.

KslD.sys предоставляет коду пользовательского режима прямой путь к MmCopyMemory() — собственному API ядра Microsoft для копирования памяти по физическому или виртуальному адресу. Драйвер выполняет:

  • Без проверки диапазона адресов — принимается любой физический адрес
  • Без ограничения размера — читайте сколько хотите
  • Без проверки вызывающего кроме проверки строки реестра, которую может редактировать администратор

Результат: подписанный Microsoft драйвер предоставляет полный обход PPL из коробки.


Примитив чтения

Ядро уязвимости — SubCmd 12 — неограниченная обертка для MmCopyMemory():

root@kitploit:~
IOCTL:    0x222044
Input:    struct {
            DWORD  SubCmd;       // 12
            DWORD  Reserved;     // 0
            QWORD  Address;      // Target VA or PA
            QWORD  Size;         // Bytes to read
            DWORD  Flags;        // 1 = Physical, 2 = Virtual
            DWORD  Padding;
          }
Output:   Raw memory contents (up to Size bytes)

Физическое чтение (Flags = 1) является критическим примитивом. Доступ к физической памяти не подчиняется уровням защиты процессов, флагам EPROCESS или каким-либо ограничениям API пользовательского режима — именно это обходит PPL.

Виртуальное чтение (Flags = 2) напрямую читает виртуальные адреса ядра, полезно для обхода структур ядра (EPROCESS, экспорты ntoskrnl) без ручного преобразования таблиц страниц.



Attack Chain

root@kitploit:~
┌──────────────────────────────────────────────────────────────────┐
│                        KslDump Attack Flow                       │
├──────────────────────────────────────────────────────────────────┤
│                                                                  │
│  1. Registry Edit         ImagePath ← vulnerable 333KB KslD.sys *│
│          │                AllowedProcessName ← our process       │
│          │                sc stop/start KslD                     │
│          ▼                                                       │
│  2. KASLR Bypass          SubCmd 2 → CR3 + IDTR                  │
│          │                IDT → lowest ISR → ntoskrnl base       │
│          ▼                                                       │
│  3. Kernel Walk           PsInitialSystemProcess → SYSTEM EPROC  │
│          │                ActiveProcessLinks → find lsass.exe    │
│          │                Read lsass DTB from EPROCESS+0x28      │
│          ▼                      (all via SubCmd 12, flags=2)     │
│                                                                  │
│  4. Physical Read         Page table walk using lsass DTB        │
│          │                MmCopyMemory() reads lsass pages       │
│          │                      *** BYPASSES PPL ***             │
│          ▼                      (SubCmd 12, flags=1)             │
│                                                                  │
│  5. Key Extraction        Find lsasrv.dll via PEB → LDR         │
│          │                Scan .text for LSA key signatures      │
│          │                Follow BCRYPT chain → AES + 3DES + IV  │
│          ▼                                                       │
│  6. Credential Dump       Walk LogonSessionList                  │
│                           Decrypt MSV1_0 credentials             │
│                           → NT hashes                            │
│                                                                  │
└──────────────────────────────────────────────────────────────────┘

Требования

  • Привилегии локального администратора
  • Python 3.x с пакетом cryptography (pip install cryptography)
  • Уязвимый драйвер KslD.sys размером 333 КБ должен существовать на диске (по умолчанию: C:\Windows\System32\drivers\KslD.sys)

Ирония — Резюме

Атака не требует сторонних драйверов, неподписанного кода или эксплойтов. Все подписано Microsoft, поставлено Microsoft и уже находится в системе. Уязвимый драйвер лежит на диске рядом с собственным исправлением, исключенный из списка блокировки, предназначенного для предотвращения именно этого класса атак.


Ответственное раскрытие

Эта уязвимость была сообщена в Центр реагирования на угрозы безопасности Microsoft (MSRC). Они закрыли ее как «Не является уязвимостью» со следующим обоснованием:

«Описанная атака зависит от наличия административных привилегий. Не было предоставлено доказательств того, как эти привилегии были получены. Сообщения, которые предполагают наличие административного или корневого доступа без демонстрации уязвимости, предоставляющей эти привилегии, считаются менее критичными, поскольку злоумышленник с таким доступом уже может выполнять более серьезные действия.»

CVE не был присвоен. Исправление не было выпущено.


Отказ от ответственности

Этот инструмент предоставляется только для авторизованного тестирования безопасности и исследовательских целей. Используйте его только на системах, которыми вы владеете, или на которые у вас есть явное письменное разрешение на тестирование. Несанкционированный доступ к компьютерным системам является незаконным. Автор не несет ответственности за неправильное использование.


Скачать инструмент