Эван Султаник, главный исследователь компьютерной безопасности из Trail of Bits, распаковал формат данных pickle в мире Python и нашел его неприятным.

Яндекс

Он не первый, кто это делает, и это признает, отмечая в недавнем Сообщение блога что сообщество компьютерной безопасности разработало нежелание травить — бинарный протокол для сериализации и десериализации структур объектов Python — несколько лет назад.

Даже собственная документация Python по модуль рассола признает, что безопасность не включена. Он начинается со слов «Предупреждение: модуль pickle небезопасен. Отбирайте только те данные, которым доверяете», и продолжается далее.

Тем не менее, разработчики все еще используют его, особенно в сообществе машинного обучения Python (ML). Султаник говорит, что легко понять почему, потому что травление встроено в Python и потому, что оно экономит память, упрощает обучение моделей и делает обученные модели машинного обучения переносимыми.

Помимо того, что травление является частью стандартной библиотеки Python, травление поддерживается в библиотеках Python NumPy и scikit-learn, которые обычно используются в науке о данных, ориентированной на ИИ.

По словам Султаника, специалисты по машинному обучению предпочитают делиться предварительно обученными маринованными моделями, а не данными и алгоритмами, используемыми для их обучения, которые могут представлять собой ценную интеллектуальную собственность. Такие веб-сайты, как PyTorch Hub, были созданы для облегчения распространения моделей, а некоторые библиотеки машинного обучения включают API-интерфейсы для автоматического получения моделей из GitHub.

Почти месяц назад в репозитории PyTorch на GitHub разработчик, известный под именем КОЛАНИЧ открыт вопрос в котором прямо говорится о проблеме: «Pickle — это проблема безопасности, которую можно использовать, чтобы скрыть бэкдоры. К сожалению, многие проекты продолжают использовать [the pickling methods] torch.save и torch.load. «

Читайте также:
Британский разработчик теряет право собственности на программное обеспечение для судебной экспертизы, которое, по его словам, он написал в свободное время и предоставил лицензию работодателю °

Другие разработчики, участвовавшие в обсуждении, ответили, что предупреждение уже есть, и обдумывали, что делать.

В надежде разжечь огонь под апологетами рассола, Султаник вместе с коллегами Соней Шрайнер, Синой Пилехиха, Джимом Миллером, Сухой С. Хуссейн, Карсоном Хармоном, Джосселином Фейстом и Трентом Брансоном разработали инструмент под названием Непостоянный для помощи в обратном проектировании, тестировании и использовании файлов рассола. Он надеется, что инженеры по безопасности будут использовать его для изучения файлов pickle и что специалисты по машинному обучению будут использовать его для понимания рисков травления.

Султаник и его соратники также разработали экспериментальный эксплойт на основе официального руководства PyTorch, которое может внедрить вредоносный код в существующую модель PyTorch. PoC, загруженный в качестве модели в PyTorch, эксфильтрует все файлы в текущем каталоге на удаленный сервер.

«Это касается таких сервисов, как Microsoft Azure ML, который поддерживает запуск пользовательских моделей в своих облачных экземплярах, — объясняет Султаник. — Злонамеренная модель «непостоянства» может вызвать отказ в обслуживании и / или обеспечить удаленное выполнение кода в среде, которая, по всей вероятности, будет считаться проприетарной в Microsoft. «

Султаник сказал, что сообщил о своих опасениях разработчикам PyTorch и PyTorch Hub и, по-видимому, им сказали, что они подумают о добавлении дополнительных предупреждений. И хотя ему сообщили, что модели, представленные в PyTorch Hub, «проверены на качество и полезность», он заметил, что нет никаких усилий, чтобы понять людей, публикующих модели, или проверить код, который они загружают.

Читайте также:
Amazon размещает камеры с искусственным интеллектом в автофургонах, неправильно написав «наблюдение» как «безопасность» по какой-то причине • The Register

Просить пользователей самостоятельно определять, заслуживает ли доверия код, утверждает Султаник, уже недостаточно, учитывая атаки на цепочку поставок которые испортили пакеты кода в PyPI, npm, RubyGems и другие реестры пакетов.

«Отказ от травления как формы сериализации данных относительно прост для большинства фреймворков и является легкой победой для безопасности», — заключает он. ®