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

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

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

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

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

Категории

Все категории
Loading categories
MSRMapper — Ручной маппер драйверов ядра для Windows x64, эксплуатирующий CVE-2025-8061 в LnvMSRIO.sys от Lenovo для проведения BYOVD-атаки с отображением PE64-драйверов в ring 0. | Kitploit
Инструменты/GitHubGitHub/ull0a/msrmapper
Повышение привилегийКриминалистика памятиЭксплуатацияОбратная инженерияШелл-кодПост-эксплуатацияRed TeamingРазработка Полезной НагрузкиЭксплуатация Бинарных Файлов
GitHubull0a/msrmapper

MSRMapper

Ручной маппер драйверов ядра для Windows x64, эксплуатирующий CVE-2025-8061 в LnvMSRIO.sys от Lenovo для проведения BYOVD-атаки с отображением PE64-драйверов в ring 0.

25020 дней назадЕщё не проверено

Популярное

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

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

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

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

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

MSRMapper

Ручной маппер BYOVD для Windows x64 · CVE-2025-8061


MSRMapper running

Обзор

MSRMapper — это ручной маппер драйверов ядра для Windows x64, который эксплуатирует CVE-2025-8061 в уязвимом драйвере Lenovo LnvMSRIO.sys для проведения атаки BYOVD (Bring Your Own Vulnerable Driver).

Проект отображает драйвер PE64 напрямую в память ядра без использования sc create или службы и выполняет его DriverEntry в ring 0. Весь процесс опирается на:

  • Чтение/запись MSR и физической памяти через LnvMSRIO.sys.
  • Разрешение символов ядра через PDB-файлы с использованием DbgHelp.
  • Трансляцию VA → PA через класс SuperfetchPfnQuery функции NtQuerySystemInformation.
  • Временный перехват LSTAR для выполнения ring-0 шелл-кода.
  • Временный хук NtAddAtom для вызова функций ядра, таких как ExAllocatePoolWithTag, RtlCopyMemory и DriverEntry.

Статус: Протестировано на Windows 10 22H2 (сборка ОС 19045.6466). Драйвер успешно отображается, и DriverEntry возвращает STATUS_SUCCESS (0x0).


Возможности

  • Ручное отображение PE64 в ядре с использованием ExAllocatePoolWithTag.
  • Разрешение символов ядра (KiSystemCall64, NtAddAtom и т. д.) путём загрузки PDB-файлов с сервера символов Microsoft.
  • Трансляция VA → PA с помощью Superfetch (NtQuerySystemInformation класс 0x4F) без необходимости в собственном обходчике таблиц страниц.
  • Чтение/запись MSR (LSTAR, FMASK) и физической памяти через LnvMSRIO.sys.
  • Динамически генерируемый шелл-код, который:
    • Восстанавливает исходный LSTAR.
    • Вызывает MmGetPhysicalAddress для получения PA NtAddAtom.
    • Возвращает управление в пользовательский режим через swapgs; sysret.
  • Временный хук NtAddAtom (12-байтовый jmp rax) для вызова произвольных функций ядра.
  • Автоматическое восстановление хука и исходных MSR.
  • Поддержка Windows 11 24H2, где EnumDeviceDrivers может возвращать неверную базу; реальная база ядра вычисляется как LSTAR - KiSystemCall64.

Как это работает

1. Инициализация

  • Открывает \\.\WinMsrDev (служба, предоставляемая LnvMSRIO.sys).
  • Получает базу ntoskrnl через EnumDeviceDrivers и проверяет её с помощью LSTAR.
  • Инициализирует PdbResolver для разрешения RVA символов ядра.

2. Получение PA NtAddAtom

  • Создаёт шелл-код, который будет выполняться в ring 0 при перехвате LSTAR.
  • Записывает гаджет swapgs; iretq в LSTAR.
  • Подготавливает стек с помощью PrepareStack и включает AC=1 в пользовательском режиме через EnableACUserMode.
  • При syscall процессор переходит на гаджет, выполняет шелл-код, вызывает MmGetPhysicalAddress(NtAddAtom) и сохраняет PA в пользовательский буфер.
  • Шелл-код восстанавливает LSTAR и возвращается в пользовательский режим через swapgs; sysret.

3. Отображение драйвера

  • Выделяет невыгружаемый пул с помощью ExAllocatePoolWithTag (вызывается через временный хук NtAddAtom).
  • Копирует PE-образ в пул с помощью RtlCopyMemory.
  • Применяет релокации, разрешает импорты и исправляет security cookie.
  • Вызывает DriverEntry с DriverObject = NULL и RegistryPath = NULL.

4. Очистка

  • Восстанавливает исходные байты NtAddAtom.
  • Восстанавливает исходные MSR.
  • Закрывает дескриптор уязвимого драйвера.

Требования

  • Windows 10/11 x64 (протестировано на 22H2).
  • Visual Studio 2022 с:
    • Разработка классических приложений на C++.
    • MASM (Microsoft Macro Assembler) для сборки .asm файлов.
  • Windows SDK и WDK (если вам нужно собрать драйвер полезной нагрузки).
  • Установленный уязвимый LnvMSRIO.sys (CVE-2025-8061) и запущенная служба WinMsrDev.
  • Привилегии администратора.
  • Доступ в интернет при первом запуске для загрузки PDB-файлов Microsoft или локальный кэш в C:\Symbols.
  • CMake 3.20 или новее.

Сборка

Этот проект использует CMake. Для сборки из командной строки:

  1. Сгенерируйте решение Visual Studio 2022:

    cmake -B build -G "Visual Studio 17 2022" -A x64
    
  2. Соберите в режиме Release:

    cmake --build build --config Release
    

Выходные бинарные файлы будут находиться в build/bin/Release/ (или по аналогичному пути в зависимости от конфигурации CMake).

В качестве альтернативы вы можете открыть сгенерированный build/KernelLoader.sln в Visual Studio 2022 и собрать оттуда.

Убедитесь, что ShellcodeAsm.asm и EnableAC.asm компилируются с помощью MASM. Предоставленный CMakeLists.txt обрабатывает это автоматически.

Если вам нужно изменить конфигурацию сборки, отредактируйте CMakeLists.txt.

Использование

  1. Установите и запустите службу LnvMSRIO.sys:

    sc create WinMsrDev type= kernel binPath= C:\path\to\LnvMSRIO.sys
    sc start WinMsrDev
    
  2. Запустите KernelLoader.exe от имени администратора:

    KernelLoader.exe
    
  3. Чтобы увидеть вывод DbgPrint отображённого драйвера, используйте DebugView (Sysinternals) от имени администратора с:

    • Capture → Capture Kernel
    • Options → Enable Verbose Kernel Output
    • При необходимости настройте фильтр по адресу:
      HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Debug Print Filter
      
      создав DWORD с именем Default и значением 0xFFFFFFFF.

Примечания

  • Сообщение DBGHELP: ... - unmatched, появляющееся в некоторых логах PdbResolver, является косметическим. PDB загружается по искусственной виртуальной базе, и SymFromName всё равно работает корректно. Это не влияет на разрешение символов.
  • В Windows 11 24H2 EnumDeviceDrivers может возвращать неверную базу. Этот проект вычисляет реальную базу как LSTAR - KiSystemCall64.
  • Хук NtAddAtom является временным и восстанавливается после каждого вызова. Тем не менее используйте это только в контролируемых средах.
  • Шелл-код предполагает, что SMEP/SMAP включены. Они временно отключаются через CR4 и восстанавливаются перед возвратом в пользовательский режим.
Скачать инструмент