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

Yannic Kilcher 53,4 тыс. 19 мин 2 мин 02.09.2022
Главное

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

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

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

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

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

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

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

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

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

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

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

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

💬 Цитаты

«Pickle isn't just saving data to a file and loading that data again; pickle is saving executable code.»

Янник Килчер 09:46

«Never load data that comes from an untrusted source, only load data you trust.»

Янник Килчер 17:56
👥 Спикер
🔗 Упомянутые сайты и проекты
📖 Термины
Pickle
Стандартный модуль Python для сериализации и десериализации объектов.
Сериализация
Процесс перевода структуры данных в последовательность байтов для хранения или передачи.
Тьюринг-полнота
Способность системы выполнить любую вычислимую задачу; в контексте pickle это означает возможность исполнения любого кода.
State dict
Словарь в PyTorch, содержащий веса и параметры модели.
📊 Цифры
⚖️ Другая сторона
Искусственный интеллект Yannic Kilcher PyTorch Hugging Face pickle AI safety