Новый софт сокращает время анализа исправлений безопасности с 12 часов до нескольких минут.

Поставщики выпускают сотни обновлений драйверов в год, и среди них легко пропустить тихую правку безопасности без номера уязвимости. Разобрать каждую версию вручную почти нереально. Новый инструмент AutoPiff пытается решить проблему и автоматически находит в патчах изменения, которые могут закрывать дыры в безопасности.
AutoPiff расшифровывается как Automated Patch Intelligence and Finding Framework. Система анализирует различия между уязвимой и исправленной версиями драйвера для ядра Windows и ищет характерные признаки защитных правок. Движок опирается на набор строгих семантических правил в формате YAML и старается работать максимально точно, чтобы сократить число ложных срабатываний.
Инструмент обращает внимание на типовые сценарии эксплуатации. Среди них исправления use-after-free, когда после вызова ExFreePool указателю присваивают значение NULL, добавление проверок длины перед memcpy, усиление границы между пользовательским режимом и режимом ядра через ProbeForRead и ProbeForWrite, защита от переполнения целых чисел с помощью безопасных арифметических функций, а также доработки счётчиков ссылок через атомарные операции. AutoPiff также отслеживает проверку входных данных IOCTL, защиту от повреждения пула памяти и дополнительные проверки привилегий.
Разработчики описывают типичную картину: из 500 обновлений драйверов за год 490 связаны с новыми функциями или оптимизацией, восемь закрывают мелкие ошибки и только два содержат тихие исправления безопасности без присвоения CVE. Без автоматизации приходится просматривать все 500 версий, чтобы найти пару значимых изменений. AutoPiff сокращает круг до десятка наиболее подозрительных обновлений с высоким баллом риска.
Система встроена в конвейер Karton и разбита на несколько микросервисов, которые обмениваются данными через Redis и RabbitMQ. Сначала модуль driver-monitor проверяет появление новых версий драйверов через WinBIndex и VirusTotal и загружает файлы в хранилище MWDB. Далее karton-patch-differ подбирает пары версий, запускает декомпиляцию в Ghidra и сопоставляет функции. Отдельный этап анализирует достижимость изменённых функций из точек входа IOCTL и IRP, после чего модуль ранжирования присваивает каждому найденному изменению итоговый балл с учётом серьёзности, достижимости и наличия опасных вызовов. Если оценка превышает заданный порог, autopiff-alerter отправляет уведомление в Telegram.
AutoPiff использует 58 правил в 22 категориях и отслеживает более 50 потенциально опасных функций, включая операции копирования памяти, выделение и освобождение пула, проверку пользовательских буферов и атомарные операции со счётчиками. Итоговый балл рассчитывается по формуле, где учитываются вес правила, уверенность совпадения, близость к опасным вызовам и возможность добраться до уязвимого участка из внешнего интерфейса драйвера. Находки с низкой степенью уверенности система отбрасывает.
По оценке авторов, анализ пары драйверов вручную занимает от четырёх до двенадцати часов. AutoPiff выполняет те же подготовительные шаги за несколько минут и автоматически формирует отчёт в формате JSON, который прикрепляется к образцу в MWDB. При этом инструмент не заменяет анализ уязвимости целиком. Специалисту всё равно нужно проверить возможность эксплуатации, разобраться в первопричине ошибки и оценить реальный риск.
Проект распространяется по лицензии MIT и может работать как часть инфраструктуры driver_analyzer с MWDB и панелью мониторинга, либо как отдельная библиотека. Код доступен на GitHub и включает набор правил, схемы данных и более сотни модульных тестов.