# Янник Килчер: «Почему загрузка open-source моделей может взломать ваш компьютер»

Источник: https://www.youtube.com/watch?v=2ethDz9KnLk
Канал: Yannic Kilcher
Опубликовано: 02.09.2022

---

## Угрозы безопасности при загрузке нейросетей: скрытая опасность в open-source моделях
[[JUMP:3:15]]

Загрузка предобученных моделей с популярных платформ, таких как Hugging Face Hub, стала привычным делом для исследователей и разработчиков. Однако, по словам ведущего канала Янника Килчера (Yannic Kilcher), эта практика таит в себе серьезную уязвимость: при загрузке модели на ваш компьютер может быть исполнен произвольный вредоносный код. Проблема заключается не в самой концепции нейросетей, а в механизмах сериализации данных, которые используются в экосистеме Python и PyTorch.

### Как работает уязвимость: магия и опасность pickle
[[JUMP:5:25]]

В основе работы большинства моделей лежит процесс сохранения и загрузки весов. В библиотеке PyTorch, которая является стандартом индустрии, для этого используется метод `torch.save`. В свою очередь, `torch.save` опирается на стандартный модуль Python под названием `pickle`.

* **Принцип Pickle:** Этот модуль предназначен для сериализации объектов — превращения сложной структуры данных в поток байтов, который можно сохранить на диск, а затем восстановить в памяти.
* **Тьюринг-полнота:** В отличие от форматов вроде JSON, `pickle` позволяет сохранять практически любые объекты Python. Чтобы восстановить состояние этих объектов при загрузке (`unpickling`), `pickle` вынужден исполнять код.
* **Исполняемая среда:** Янник Килчер демонстрирует, что при десериализации `pickle` вызывает специальные «магические» методы (например, `__reduce__`), которые фактически указывают Python, какой код нужно выполнить для воссоздания объекта.

По мнению ведущего, это превращает любой загружаемый `.bin` или `.pt` файл модели в потенциальный «троянский конь». Злоумышленник может создать модель, которая при вызове `from_pretrained` втайне от пользователя откроет браузер, запустит криптомайнер или установит кейлоггер для перехвата паролей.

### Создание «вредоносной» модели: эксперимент с `eval` и `exec`
[[JUMP:14:14]]

Чтобы наглядно показать опасность, Килчер разработал библиотеку `patch-torch-save` (доступную на GitHub), которая позволяет внедрить произвольный код в процесс сохранения модели. Механика этого «эксперимента» выглядит следующим образом:

1.  **Захват функции:** Библиотека берет исходный код функции, которую хочет исполнить злоумышленник (например, открытие веб-сайта).
2.  **Манипуляция:** Вместо стандартного словаря весов создается «плохой» объект (`bad_dict`), который при загрузке через `torch.load` использует функции `eval` и `exec`.
3.  **Исполнение:** В момент, когда пользователь вызывает метод `from_pretrained`, Python парсит и исполняет внедренный код, а затем «подменяет» его оригинальными данными модели, чтобы пользователь ничего не заподозрил.

Автор подчеркивает: с точки зрения разработчика, использующего готовую модель, процесс выглядит абсолютно легитимно, а сама модель продолжает исправно работать.

### Меры безопасности и реакция индустрии
[[JUMP:17:30]]

Официальная документация Python и самого PyTorch содержат предупреждения: «Используйте `pickle` только для тех данных, которым вы доверяете». Однако, как отмечает Килчер, эти предупреждения часто игнорируются пользователями, а многие платформы долгое время не акцентировали внимание на этом риске.

В процессе подготовки материала автор связался с командой Hugging Face, чтобы обсудить проблему. В результате диалога:

* **Информационные баннеры:** В документации Hugging Face появились предупреждения о рисках безопасности при загрузке моделей.
* **Сканеры вредоносного ПО:** На платформе начали внедрять системы автоматического сканирования моделей на наличие подозрительного кода.
* **Ограниченность решений:** По мнению Килчера, единственным фундаментальным решением является повышение осведомленности сообщества, так как полностью исключить риск при использовании `pickle` крайне сложно.