Окружайте, так удобнее промахиваться! Встроенные в Hugging Face проверки ML-моделей против ModelAudit

Окружайте, так удобнее промахиваться! Встроенные в Hugging Face проверки ML-моделей против ModelAudit

Результаты тренировки моделей машинного обучения принято сохранять, и для этого существует множество форматов хранения. В предыдущей статье был представлен обзор статических сканеров артефактов ML-моделей, где ModelAudit выделялся как наиболее зрелое решение по количеству поддерживаемых форматов, числу проверок, устойчивости к обходу и качеству документации. Однако количество не всегда означает качество.

Для оценки возможностей сканеров в реальных условиях были проведены два ключевых эксперимента:

  1. Сканирование моделей из Hugging Face, сериализованных в наиболее опасных форматах (например, .pkl, .pt, .ckpt).
  2. Сканирование моделей, помеченных авторами как зловредные, с последующим сравнением результатов ModelAudit и встроенных в Hugging Face инструментов.

Несмотря на высокую чувствительность ModelAudit, многие сработки оказались ложноположительными. Например, модель Ultralytics/YOLO11 вызвала 728 предупреждений, из которых 35 — критических. При анализе выяснилось, что срабатывания связаны с использованием легитимных функций Python, таких как getattr и set, которые сканер классифицирует как подозрительные без глубокого анализа контекста.

Первый эксперимент — сканирование моделей в опасных форматах

Было отобрано 246 моделей, в которых найдено 271 критическое предупреждение. Однако лишь 34 модели имели хотя бы одну критическую сработку. Основные типы срабатываний:

  • pytorch_binary_check — обнаружение сигнатуры PE-файла (Windows executable) в бинарных файлах. Все такие сработки оказались ложноположительными, так как касались моделей от известных компаний (Apple, OpenVINO).
  • pytorch_zip_check — срабатывание на использование __builtin__.getattr, __builtin__.set и других базовых объектов. Также включает ложные сработки на атрибут input в TorchScript-моделях.
  • pickle_check — обнаружение __builtin__.getattr и dill._dill._load_type. Последнее связано с легитимным использованием библиотеки dill в YOLOv8.

Вывод: высокое число сработок не означает зловредность. Многие проверки ModelAudit избыточно чувствительны и требуют доработки логики для снижения шума.

Второй эксперимент — сканирование меченых моделей

Цель — сравнить ModelAudit с встроенными в Hugging Face механизмами проверки. Были отобраны модели с ключевыми словами вроде "malicious", "ACE PoC", "deserialization PoC". После фильтрации через LLM и сканирования получена следующая картина:

  • 154 модели были признаны опасными и ModelAudit, и Hugging Face.
  • 49 — безопасными обеими системами.
  • 6 — опасными по версии HF, но безопасными по ModelAudit (ложные отрицания, FN).
  • 14 — опасными по ModelAudit, но безопасными по HF.

HuggingFace сигнализирует, но ModelAudit пропускает

Изначально ModelAudit (версия 0.2.24) пропускал 6 моделей, отмеченных HF как опасные. После обновления до 0.2.28 количество FN сократилось до 3, а в версии 0.2.31 все уязвимости были устранены. Причина — сложность обработки форматов вроде .ckpt, которые могут содержать Pickle-объекты внутри архивов, но не всегда распознаются как таковые.

Например, модель etwithin/diffusers-ckpt-ace-poc содержит Pickle-файл с эксплойтом, выполняющим произвольный код через posix.system. Сканер не применял соответствующие проверки, хотя они встроены. После ручного анализа с помощью Fickling угроза была подтверждена.

ModelAudit сигнализирует, но HuggingFace пропускает

26 моделей прошли проверки Hugging Face, но были помечены ModelAudit как опасные. Среди них:

  • jossefharush/gpt2-rs — найдена сеть-активность и ссылка на Pastebin с бэкдором, который отправляет вывод команд на сервер злоумышленника. Сработка уровня INFO, но с высокой значимостью.
  • treforbenbow/tensorrt-engine-rce-poc — в старых версиях ModelAudit срабатывал на строковые паттерны, связанные с RCE. В новых версиях логика изменилась, и сработки исчезли, хотя угроза осталась. Это позволило обойти проверку — уязвимость, исправленная после приватного отчёта.
  • AgentRen/hdf5-h5hl-fl-deserialize-hbo-poc — подтверждённый PoC уязвимости heap-buffer-overflow в HDF5. True Positive.

Интересно, что исправление уязвимости в ModelAudit было выполнено не человеком, а ботом mldangelo-oai, что указывает на активное использование AI-агентов в разработке и поддержке инструмента.

Выводы

После учёта всех обновлений и исправлений:

  • Все модели, отмеченные опасными в Hugging Face, также распознаются ModelAudit.
  • 17 моделей признаны опасными только ModelAudit и не имеют предупреждений в HF.

Ключевые итоги:

  • ModelAudit — мощный и проработанный инструмент, способный находить угрозы, пропущенные другими системами.
  • Ложноположительные сработки — цена высокой чувствительности, но они лучше ложноотрицательных.
  • Сравнение сканеров позволяет выявлять скрытые недостатки в логике проверок.
  • Поддержка ModelAudit всё больше автоматизирована — инструменты для проверки моделей развиваются с помощью самих моделей.

Статья носит исключительно информационный характер и не является инструкцией или призывом к совершению противоправных действий. Цель — рассказать о существующих уязвимостях, которыми могут воспользоваться злоумышленники, предостеречь пользователей и дать рекомендации по защите личной информации в Интернете. Автор не несёт ответственности за использование информации.

Читать оригинал