CVE-2026 уязвимость драйвера Windows: как подписанный бинарник прячет инъекцию в .rsrc секции

В апреле 2026 CISA добавила CVE-2026-33825 в каталог KEV (Known Exploited Vulnerabilities — список уязвимостей, которые УЖЕ эксплуатируются в реальных атаках) с пометкой «ransomware». На GitHub появился публичный PoC (Joe1sn/CVE-2026-33825, «RedSun PoC for self use»); по описанию NVD — повышение привилегий локально для авторизованного атакующего. Подпись Microsoft Defender валидна, антивирус работает, а атакующий получает полный контроль над системой. Звучит как баг в матрице.
Но проблема глубже конкретного CVE. Windows проверяет наличие и корректность подписи драйвера — но не анализирует каждый байт содержимого. Ресурсная секция PE-файла (.rsrc) — одно из тех мест, где вредоносная нагрузка проходит мимо проверки. Уточнение: CVE-2026-33825 — уязвимость логики контроля доступа в Defender, а не обход подписи через .rsrc. Технику инъекции в ресурсные секции мы рассмотрим как самостоятельный класс угроз, дополняющий картину.
Подпись кода Windows и загрузчик драйверов: что проверяется при загрузке
Чтобы понять, где прячется инъекция, нужно разобраться, что именно Windows проверяет при загрузке драйвера в ядро — и где проверка заканчивается.
PE-формат: скелет любого бинарника Windows. Каждый .exe, .dll или .sys в Windows — PE-файл (Portable Executable). Внутри он разбит на секции, у каждой своя роль:
- .text — машинный код, основные инструкции
- .data — глобальные переменные программы
- .rdata — таблицы импорта и константы
- .rsrc — ресурсы: иконки, строки, информация о версии, манифесты и произвольные бинарные данные
- .reloc — таблица релокаций для загрузки по разным адресам памяти
У каждой секции свой заголовок: виртуальный адрес, размер на диске (SizeOfRawData), размер в памяти (VirtualSize), флаги доступа (чтение, запись, исполнение). Эти заголовки — первое, на что смотрит реверс-инженер при анализе PE-секций.
Authenticode: что подписывается, а что нет. Authenticode — технология цифровой подписи кода Microsoft. При подписании утилита вычисляет хеш PE-файла и связывает его с сертификатом разработчика. Критический момент: хеш Authenticode охватывает не весь файл целиком. Из расчёта исключаются поле Checksum в Optional Header, запись Certificate Table в Data Directory и сами данные сертификата.
Следствие: данные, добавленные после таблицы сертификатов (overlay — область за пределами секций файла), не влияют на валидность подписи. Подпись зелёная — а в хвосте файла лежит шеллкод.
Driver Signature Enforcement (DSE). Начиная с 64-битных Windows Vista, загрузить .sys без валидной подписи в ядро нельзя — система заблокирует его на этапе инициализации. DSE проверяет наличие и криптографическую валидность подписи, но не сканирует содержимое секций на предмет вредоносного кода. Валидная подпись — необходимое, но недостаточное условие безопасности.
Зачем атакующему лезть в .rsrc. Монетизация доступа к ядру — вот ради чего всё затевается. Загрузив код на уровне ядра, атакующий может отключить EDR (Endpoint Detection and Response — система обнаружения и реагирования на угрозы на конечных точках), установить руткит, развернуть шифровальщик или перехватывать сетевой трафик. По данным CrowdStrike, 79% атак в 2024 году проводились без традиционного вредоносного ПО — через hands-on-keyboard активность и легитимные инструменты (living-off-the-land), частью которых могут быть подписанные бинарники.
Ресурсная секция PE файла: как в ней прячут вредоносный код
Ресурсная секция — как приложения к письму: основной текст (код в .text) проверяют тщательно, а вложения часто пролистывают. При реверсе вредоносного ПО Windows именно .rsrc нередко содержит скрытую нагрузку.
Что в .rsrc у легитимного драйвера. Обычно — иконка (RT_ICON), информация о версии (RT_VERSION), манифест совместимости (RT_MANIFEST), строки локализации (RT_STRING). Размер ресурсной секции у типичного WDM/KMDF-драйвера (WDM — Windows Driver Model, KMDF — Kernel-Mode Driver Framework — два стандарта написания драйверов ядра) — от нескольких сотен байт до пары килобайт.
Как прячут payload. Три основных подхода:
Первый — зашифрованный payload до подписания. Малварь компилируется с зашифрованным шеллкодом в ресурсах, затем подписывается скомпрометированным или украденным сертификатом. Подпись валидна, .rsrc содержит payload — всё формально корректно.
Второй — BYOVD (Bring Your Own Vulnerable Driver). Атакующий берёт легитимно подписанный драйвер с известной уязвимостью, загружает его штатным путём и эксплуатирует уже в ядре. Подпись не ломается — драйвер-то подлинный.
Третий — overlay-данные. Payload добавляется за пределами секций, после таблицы сертификатов, где Authenticode-хеш его не покрывает.
Красные флаги при анализе PE-секций. На что обращать внимание, когда .sys-файл попал на стол:
| Признак | Что может означать | Чем проверить |
|---|---|---|
| SizeOfRawData у .rsrc в 5-10 раз больше .text | Вложенный PE или зашифрованный payload | dumpbin /headers — сравнить размеры |
| Ресурс RT_RCDATA с высокой энтропией | Зашифрованные или сжатые данные | pestudio, Detect It Easy |
| Ресурс с нестандартным именем или числовым ID | Кастомный payload от разработчика малвари | Resource Hacker, CFF Explorer |
| Секция .rsrc с флагом EXECUTE | Ресурсы не должны быть исполняемыми | Заголовки секций в PE-парсере |
| Данные после последней секции (overlay) | Payload вне Authenticode-хеша | sigcheck -a -h файл.sys |
Обфускация в PE файлах через ресурсы устойчива к детектированию: антивирусные движки фокусируются на инструкциях в .text, а содержимое .rsrc часто проходит по касательной.
CVE-2026-33825 — BlueHammer и путь от Defender до SYSTEM
По данным NVD: Insufficient Granularity of Access Control (CWE-1220 — слишком грубый контроль доступа, когда политика не различает операции с достаточной точностью) в Microsoft Defender Antimalware Platform. CVSS 7.8 HIGH с вектором:
- AV:L — атака локальная, нужен доступ к машине
- AC:L — низкая сложность эксплуатации
- PR:L — достаточно обычного пользователя
- UI:N — жертве ничего делать не нужно
- C:H / I:H / A:H — полный импакт на конфиденциальность, целостность и доступность
По MITRE ATT&CK (открытая база тактик и техник атак; T-коды вроде T1068 — идентификаторы конкретных техник) тип уязвимости (локальное повышение привилегий) соответствует технике Exploitation for Privilege Escalation (T1068, тактика Privilege Escalation). Маппинг основан на классе уязвимости (EoP), а не на подтверждении конкретного механизма эксплуатации.
Пометка ransomware означает, что в каталоге CISA KEV поле knownRansomwareCampaignUse = Known — уязвимость зафиксирована в ransomware-кампаниях. Это не автоматическое подтверждение конкретного PoC или механизма эксплуатации.
Официальные источники (NVD, MSRC) описывают уязвимость только как «insufficient granularity of access control» в Microsoft Defender Antimalware Platform без раскрытия деталей механизма. Конкретная цепочка атаки на момент публикации не документирована в открытых источниках. Публичный PoC (Joe1sn/CVE-2026-33825) доступен на GitHub, но его механика не верифицирована независимыми исследователями.
Патч — обновление Defender Antimalware Platform до актуальной версии (см. https://www.microsoft.com/en-us/wdsi/defenderupdates). Проверить версию: Get-MpComputerStatus | Select-Object AMProductVersion.
EPSS (Exploit Prediction Scoring System — оценка вероятности от 0 до 1, что уязвимость начнут эксплуатировать в ближайшие 30 дней) для этого CVE — 0.0040, перцентиль 0.32 (ниже медианы). Показательный разрыв: уязвимость уже в KEV с пометкой ransomware, а EPSS — низкий. Дело в том, что EPSS оценивает вероятность начала эксплуатации, а не текущий статус — когда атаки уже идут, метрика может отставать. На практике это означает: не полагайтесь на один скоринг, смотрите KEV и EPSS вместе.
CVE-2026-21709 — обход Driver Signature Enforcement через инъекцию команд
CVE-2026-21709 — уязвимость типа Command Injection (CWE-77 — инъекция команд через спецсимволы) в механизме проверки подписи драйверов Windows [источник атрибуции SentinelOne требует независимой проверки]. CVSS 6.7 MEDIUM (вектор AV:L/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H). Обратите внимание на PR:H — требуются права локального администратора. Атакующий обходит DSE и загружает неподписанный или вредоносно подписанный драйвер в ядро.
Это пост-компрометационная техника: сначала атакующий получает admin-права другим способом, затем использует CVE-2026-21709 для закрепления на уровне ядра — установки руткита, отключения EDR или развёртывания бэкдора. Другими словами, сама по себе эта уязвимость не даёт первоначальный доступ — она нужна, чтобы «вкопаться» глубже после взлома.
Среди возможных индикаторов компрометации [атрибуция SentinelOne требует проверки]: неподписанные драйверы в %SystemRoot%\System32\drivers\, изменения BCD (Boot Configuration Data — данные конфигурации загрузки) и вызовы bcdedit.exe с параметрами, влияющими на DSE. Детектирование: Event ID 7045 (установка сервиса/драйвера) и Event ID 3077 (блокировка Code Integrity).
Mitigation — включение HVCI (Hypervisor-Protected Code Integrity): гипервизор дополнительно верифицирует каждый загружаемый драйвер. По документации Microsoft, это один из самых эффективных механизмов защиты от обхода DSE.
BYOVD и Microsoft Vulnerable Driver Blocklist
Microsoft периодически обновляет Driver Blocklist, добавляя драйверы с известными уязвимостями. Например, CVE-2023-43896 (CWE-120 — переполнение буфера в Macrium Reflect 8.1.7544 и ниже) — один из кандидатов на блокировку [конкретный драйвер и дата добавления в блоклист требуют проверки по официальному списку Microsoft]. По данным Microsoft Support, при загрузке заблокированного драйвера Windows записывает Event ID 3077 в лог Code Integrity (конкретный Policy ID зависит от применённой политики).
Подключать модем не нужно: само наличие драйвера на диске делает систему уязвимой.
Масштаб проблемы: по данным IBM X-Force, среднее время между публикацией CVE и устранением в организации — 29 месяцев. Подписанные уязвимые драйверы живут в продакшене годами после раскрытия. Два с половиной года — за это время можно дважды сменить работу, а драйвер всё ещё на месте.
Статический анализ PE-секций подозрительного драйвера: делай раз, делай два, делай три
Практический блок для тех, кто хочет руками проверить .sys-файл. Предпосылки: Windows 10/11, установленный Sysinternals Suite (бесплатный пакет Microsoft), опционально Visual Studio Build Tools для dumpbin.
Шаг 1. Проверить подпись. Запустите PowerShell от обычного пользователя:
# Проверка Authenticode-подписи драйвера
Get-AuthenticodeSignature "C:\path\to\driver.sys" | Format-List *
# Ожидаемый вывод: Status = Valid / NotSigned / HashMismatch
# Обратите внимание на SignerCertificate — кем подписан
Если Status = Valid — подпись формально корректна, но это не гарантия безопасности. Посмотрите на поле SignerCertificate: если сертификат выдан неизвестному вендору или истёк — повод копать дальше. Альтернатива: sigcheck -a -h driver.sys из Sysinternals покажет хеши файла и расширенную информацию о подписи.
Шаг 2. Сравнить размеры секций. Запустите dumpbin /headers driver.sys (из Visual Studio Developer Command Prompt) или откройте файл в CFF Explorer (бесплатный PE-редактор) и перейдите в Section Headers. Что сравнивать:
- SizeOfRawData у .rsrc больше .text в 5+ раз — аномалия; драйверу ядра не нужны ресурсы размером в сотни килобайт
- VirtualSize значительно отличается от SizeOfRawData — возможны скрытые данные в padding
- Флаг
IMAGE_SCN_MEM_EXECUTE(0x20000000) у .rsrc — ресурсная секция помечена как исполняемая, чего быть не должно
Шаг 3. Проанализировать содержимое ресурсов. Откройте файл в Resource Hacker или PE Explorer. Нормальный драйвер содержит RT_VERSION и возможно RT_MANIFEST. Если видите RT_RCDATA с нестандартным идентификатором — это кастомный ресурс, потенциально содержащий payload. Проверьте энтропию секции: значение близкое к 8.0 указывает на зашифрованные или сжатые данные. Утилиты pestudio и Detect It Easy показывают энтропию по секциям автоматически.
Шаг 4. Проверить overlay. В sigcheck -a driver.sys сравните размер файла на диске с суммарным размером всех секций. Значительная разница означает наличие overlay-данных — области за пределами PE-структуры, не покрытой Authenticode.
Шаг 5. Свериться с блоклистом. Откройте Event Viewer → Applications and Service Logs → Microsoft → Windows → CodeIntegrity → Operational. Ищите Event ID 3077 — он фиксирует блокировку драйвера политикой Code Integrity.
Детектирование скрытых инъекций в исполняемые файлы: Sigma-правила и мониторинг
Для работы на стороне защиты — мониторинг загрузки драйверов входит в базовый набор задач Blue Team.
Event ID для мониторинга. Ключевые события Windows:
| Event ID | Лог | Значение |
|---|---|---|
| 3077 | CodeIntegrity/Operational | Драйвер заблокирован Code Integrity |
| 7045 | System | Установлен новый сервис или драйвер |
| 7036 | System | Состояние сервиса изменилось |
Sigma-правила. В репозитории SigmaHQ (github.com/SigmaHQ/sigma — открытая библиотека правил детектирования в YAML-формате) есть готовые правила для этого класса угроз:
driver_load_win_vuln_dell_driver.yml— детектирует загрузку известных уязвимых драйверов Dell (типичный BYOVD-сценарий)driver_load_win_mal_poortry_driver.yml— ловит драйвер Poortry, который использовался в реальных атакахproc_creation_win_reg_service_imagepath_change.yml— отслеживает изменение ImagePath сервиса через реестр (техника T1574.011 — Services Registry Permissions Weakness)
Для тестирования детектирования: в Atomic Red Team (redcanaryco/atomic-red-team — открытый набор эмуляций MITRE ATT&CK) есть сценарий «Scattered Spider BYOVD (CVE-2015-2291 for Intel Ethernet Diagnostics Driver)» для T1068 — эмуляция загрузки уязвимого драйвера Intel Ethernet Diagnostics (CWE-20, Improper Input Validation), который по NVD может вызвать отказ в обслуживании или потенциально выполнение кода с правами ядра. Подтверждённый публичный эксплойт (Exploit-DB #36392) ограничен DoS-эффектом.
D3FEND-контрмеры. MITRE D3FEND (d3fend.mitre.org — knowledge graph защитных техник, зеркальный ATT&CK, но для обороны) рекомендует для противодействия T1068:
- D3-PSEP (Process Segment Execution Prevention) — запрет исполнения данных: DEP/NX не даст выполнить шеллкод, извлечённый из .rsrc и загруженный в память
- D3-SAOR (Segment Address Offset Randomization) — ASLR, рандомизация адресов, затрудняющая предсказание расположения кода в памяти
- D3-SICA (System Init Config Analysis) — анализ конфигурации при загрузке, позволяющий обнаружить подменённые или добавленные драйверы до инициализации системы
Главная проблема не в конкретных CVE — они приходят и уходят с каждым Patch Tuesday. Проблема в модели доверия: Windows до сих пор работает по принципу «подписано — значит допущено», а индустрия строит детектирование вокруг .text секции и известных сигнатур. По данным Mandiant, эксплойты — вектор начального доступа номер один (38% инцидентов в 2024 году), и значительная доля из них задействует подписанные компоненты. BYOVD-атаки стали настолько частыми, что Microsoft пришлось вести и регулярно обновлять блоклист уязвимых драйверов — по сути признав: модель «подпись = доверие» в одиночку не работает.
Мой прогноз: в ближайшие год-два атаки через ресурсные секции PE-файлов будут расти — не потому что техника новая (ей десятилетия), а потому что EDR-вендоры сосредоточились на поведенческом анализе runtime, а статический анализ ресурсов оставили на откуп устаревшим YARA-правилам. Тот, кто разбирает PE-структуру руками — через Ghidra, IDA, CFF Explorer — и понимает, что именно Authenticode не проверяет, будет востребован в ближайшие годы. Если хочешь не просто читать разборы, а пройти базу системно — IB Basics на codeby.school закрывает фундамент за пару месяцев, дальше уже можно прицельно идти в реверс или форензику.
Эту тему и смежные навыки разбирают на практике в курсе «Профессия Реверс-инженер» Codeby Academy.
