Две ошибки на пятьсот обновлений. Программа AutoPiff научилась ловить «тихие» правки

leer en español

Две ошибки на пятьсот обновлений. Программа AutoPiff научилась ловить «тихие» правки

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

image

Поставщики выпускают сотни обновлений драйверов в год, и среди них легко пропустить тихую правку безопасности без номера уязвимости. Разобрать каждую версию вручную почти нереально. Новый инструмент 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 и включает набор правил, схемы данных и более сотни модульных тестов.