
Движок семантического анализа для обнаружения исправлений уязвимостей в патчах драйверов ядра Windows — 58 правил YAML, декомпиляция Ghidra, отслеживание достижимости и оценка
Автоматизированная платформа анализа исправлений и поиска уязвимостей
Движок семантического анализа для обнаружения исправлений уязвимостей в патчах драйверов ядра Windows. AutoPiff использует консервативные YAML-правила для выявления изменений кода, связанных с безопасностью, с высокой точностью и объяснимостью.
AutoPiff анализирует различия между уязвимой и исправленной версиями драйвера, чтобы автоматически обнаруживать:
NULL после ExFreePool)memcpy)ProbeForRead/ProbeForWrite)Вендор выпускает 500 обновлений драйверов в год
├── 490 — функциональные/производительные/косметические изменения
├── 8 — незначительные исправления ошибок
└── 2 — молчаливые исправления безопасности (без CVE)
Без автоматизации: просмотреть 500 вручную, чтобы найти 2
С AutoPiff: просмотреть 10 с наивысшим рейтингом, чтобы найти 2
Патчи безопасности часто выпускаются без назначения CVE. Ручное реверс-инжиниринг каждого обновления драйвера для поиска изменений, связанных с безопасностью, невозможно. AutoPiff решает эту проблему, автоматически выявляя важные изменения.
| Этап | Ручная работа | С AutoPiff | Сэкономленное время |
|---|---|---|---|
| Сопоставление версий | 5–15 мин/драйвер | Автоматически | ~100% |
| Декомпиляция | 2–10 мин/бинарник | Пакетно, параллельно | ~95% |
| Сопоставление функций | 30–60 мин/пара | Мгновенно | ~100% |
| Выявление изменений безопасности | 2–8 ч/пара | Секунды | ~99% |
| Первичная триаж и ранжирование | 1–2 ч | Мгновенно | ~100% |
| Генерация отчёта | 30–60 мин | Мгновенно | ~100% |
Итого: с 4–12 часов на пару драйверов до 2–5 минут
┌─────────────────────────────────────────────────────────────────┐
│ АВТОМАТИЗИРОВАНО AutoPiff │
│ ├── Найти иголку: "Эта функция изменилась рядом с ExFreePool" │
│ ├── Классифицировать: "Похоже на исправление Use-After-Free" │
│ └── Оценить: "Оценка 5.5 — стоит исследовать" │
├─────────────────────────────────────────────────────────────────┤
│ ПО-ПРЕЖНЕМУ ВРУЧНУЮ (Ваша экспертиза) │
│ ├── Подтвердить эксплуатируемость: "Могу ли я реально это │
│ вызвать?" │
│ ├── Анализ первопричины: "Почему это было уязвимо?" │
│ ├── Разработка эксплойта: "Как мне достичь этого приёмника?" │
│ └── Оценка воздействия: "Каков реальный риск?" │
└─────────────────────────────────────────────────────────────────┘
AutoPiff не заменяет исследования по эксплуатации. Он делает их возможными в масштабе, автоматизируя фазу разведки.
1. Обнаружение молчаливых исправлений
2. Исследование уязвимостей 1-го дня
3. Аудит безопасности вендора
4. Создание исторического корпуса CVE
AutoPiff работает как конвейер Karton, состоящий из 8 последовательных этапов плюс параллельная ветвь триажа DriverAtlas. Каждый этап — независимый микросервис, общающийся через Redis/RabbitMQ.
graph LR
sources["WinBIndex<br/>VirusTotal"]:::src --> s0["Stage 0<br/>Monitor"]
s0 --> s14["Stages 1-4<br/>Patch Differ"]
s0 --> triage["DriverAtlas<br/>Triage"]:::triage
s14 --> s5["Stage 5<br/>Reachability"]
s5 --> s6["Stage 6<br/>Ranking"]
s6 --> s7["Stage 7<br/>Report"]
s6 --> s8["Stage 8<br/>Alerter"]
triage --> alerts["MWDB Tags<br/>+ Alerts"]:::triage
classDef src fill:#1a1a2e,stroke:#e94560,color:#eee
classDef triage fill:#1a1a2e,stroke:#e9a345,color:#eee
classDef default fill:#16213e,stroke:#0f3460,color:#eee
| Этап | Сервис | Что делает |
|---|---|---|
| 0 | driver-monitor | Опрашивает WinBIndex и VirusTotal на предмет новых версий драйверов, загружает в MWDB |
| 1–4 | karton-patch-differ | Сопоставление версий, декомпиляция в Ghidra, сопоставление функций, оценка семантических правил |
| 5 | karton-reachability | BFS графа вызовов Ghidra от точек входа IOCTL/IRP до изменённых функций, экспорт полной декомпиляции |
| 6 | karton-ranking | Оценивает результаты с учётом достижимости, семантической серьёзности и поверхности атаки |
| 7 | karton-report | Генерирует структурированные отчёты в Markdown, загружает в MWDB |
| 8 | autopiff-alerter | Отправляет оповещения в Telegram для результатов с оценкой >= 8.0 |
| — | autopiff-driver-triage | Оценка поверхности атаки DriverAtlas (параллельно этапам 1–4), тегирует образцы в MWDB, оповещения в Telegram |
AutoPiff включает 58 правил в 22 категориях. Полные спецификации см. в Docs/semantic_rules.md и техническом справочнике Docs/SEMANTIC_RULES_REFERENCE.md.
| Категория | Пример обнаружения |
|---|---|
bounds_check | Добавлена проверка длины перед memcpy |
lifetime_fix | Присвоение NULL после ExFreePool |
user_boundary_check | Добавлен ProbeForRead/ProbeForWrite |
int_overflow | Использование безопасных математических хелперов |
state_hardening | Операции interlocked refcount |
ioctl_input_validation | Новые проверки размера/типа в обработчиках диспетчеризации |
pool_type_hardening | Миграция на NonPagedPoolNx |
privilege_check | Добавлен SeSinglePrivilegeCheck |
Движок правил отслеживает более 50 опасных API-символов в 8 группах приёмников: