Атакуем ML модели с помощью pickle файлов. Часть 1

D2

Администратор
Регистрация
19 Фев 2025
Сообщения
4,380
Реакции
0
Автор перевода: Norbert Beaver
Переведено специально для форума XSS.is
Источник:
blog.trailofbits.com/2024/06/11/exploiting-ml-models-with-pickle-file-attacks-part-1/


Мы разработали новую технику использования моделей гибридного машинного обучения (ML) под названием Sleepy Pickle, которая использует преимущества широко распространенного и заведомо небезопасного формата файлов Pickle, используемого для упаковки и распространения ML-моделей. Sleepy Pickle выходит за рамки привычных методов атаки, нацеленных на системы организации при развертывании моделей ML, и вместо этого взламывает саму модель ML, позволяя злоумышленнику атаковать конечных пользователей. В этой статье мы объясним принцип работы и продемонстрируем три способа атаки, которые ставят под угрозу безопасность личной жизни конечных пользователей.

Почему pickle файлы опасны?

Pickle - это встроенный формат сериализации Python, который сохраняет и загружает объекты Python из массивов данных. Файл pickle состоит из исполняемого байт-кода (последовательности кодов операций), интерпретируемого виртуальной машиной под названием pickle VM. Виртуальная машина pickle является частью собственного модуля pickle python и выполняет такие операции в интерпретаторе Python, как восстановление объектов Python и создание экземпляров произвольных классов. Ознакомьтесь с нашей предыдущей статьей для более глубокого понимания принципа работы виртуальной машины pickle.

Pickle-файлы представляют серьезную угрозу безопасности, поскольку злоумышленник может легко вставить вредоносный байт-код в безобидный pickle-файл. Сначала злоумышленник создает вредоносную последовательность кодов операций pickle, которая будет выполнять произвольную полезную нагрузку Python во время десериализации. Затем он реализует полезную нагрузку в самом файле, который содержит сериализованную ML-модель. Полезная нагрузка вводится в виде строки в последовательности вредоносных кодов операций. Такие инструменты, как Fickling, могут создавать вредоносные файлы pickle с помощью одной команды, а также имеют детализированные API-интерфейсы для продвинутых методов атаки на конкретные цели. Наконец, злоумышленник обманом заставляет цель загрузить вредоносный файл, как правило, с помощью таких методов атаки, как:
  • MITM-атака
  • Атака на цепочку поставок
  • Фишинг или внутренняя атака
  • Последующее использование слабых мест системы
На практике, запуск атаки, основанной на pickle-файлах, является сложной задачей, поскольку, как только пользователь загружает вредоносный файл, полезная нагрузка начинает выполняться в неизвестной среде. Несмотря на то, что вызвать сбои может быть довольно легко, такие элементы управления, как песочница, карантин, ограничение прав, брандмауэры и управление исходящим трафиком, могут предотвратить серьезное повреждение системы пользователя полезной нагрузкой или кражу/подделку пользовательских данных. Однако, данную атаку можно сделать более надежной и не менее мощной в системах ML, если произвести ее на саму модель ML.

Sleepy Pickle незаметно проникает в ML модели.

Sleepy Pickle (см. схему 1 ниже) - это скрытый и новый метод атаки, который нацелен на саму ML модель, а не на базовую систему. Используя Fickling, мы намеренно внедряем пользовательскую функцию (полезную нагрузку) в файл pickle, содержащий сериализованную ML модель. Затем мы внедряем вредоносный файл pickle в систему нашей жертвы с помощью MITM-атаки, атаки на цепочку поставок, социальной инженерии и т.д. Когда файл десериализуется в системе жертвы, тогда выполняется полезная нагрузка, которая локально изменяет содержащуюся в нем модель, чтобы внедрять бэкдоры, управлять выходными данными или изменять обработанные данные, прежде чем возвращать их пользователю. Есть два аспекта модели ML, которые атакующий может взломать с помощью Sleepy Pickle:
  1. Параметры модели: Изменение подмножества веса модели с целью изменить ее внутреннее поведение. Это можно использовать для внедрения бэкдоров или управления выходными данными.
  2. Код модели: Перехват методов объекта модели и замена их пользовательскими версиями, используя преимущества гибкости среды выполнения Python. Это позволяет изменять критически важные входные и выходные данные, обрабатываемые моделью.
1.png


Схема 1. Взлом ML модели с помощью зараженного pickle файла.
Sleepy Pickle - это мощное средство атаки, которое могут использовать злоумышленники, чтобы закрепиться в системах управления доступом и избежать обнаружения службами безопасности (об этом во второй части статьи). Атаки с помощью Sleepy Pickle обладают рядом свойств, позволяющих использовать их на более высоком уровне, не демонстрируя привычных признаков взлома:
  • Модель считается взломанной, когда файл загружается в процессе Python, на диске, в свою очередь, не остается никаких следов атаки.
  • Атака основана исключительно на одном вредоносном файле pickle и не требует локального или удаленного доступа к другим частям системы.
  • При динамических изменениях модели во время десериализации, обнаружить изменения внутри самой модели с помощью статического сравнения не представляется возможным.
  • Атака легко персонифицируется. Полезная нагрузка может использовать библиотеки Python для сканирования базовой системы, проверки часового пояса или даты и т.д., а также активироваться только при определенных обстоятельствах. Это затрудняет обнаружение атаки и позволяет злоумышленникам атаковать только определенные системы или организации.
Sleepy Pickle обладает двумя ключевыми преимуществами по сравнению с более примитивными попытками взлома цепочки поставок, такими как заблаговременная загрузка скрытой вредоносной модели на HuggingFace:
  1. Для загрузки вредоносной модели в Hugging Face, злоумышленники должны предоставить пользователям доступ к коду для загрузки и запуска, что позволит выявить вредоносную активность. Вместо этого, с помощью Sleepy Pickle появляется возможность динамически и скрытно изменять код, эффективно скрывая при этом вредоносные части модели. Более грубым способом вмешательства в программное обеспечение было бы вмешательство в файл CMake для внедрения вредоносного ПО в программу во время компиляции, а не внедрение вредоносного ПО непосредственно в исходный код.
  2. Загрузка вредоносной модели на Hugging Face основана на едином векторе атаки, при котором злоумышленники должны внушить своей цели загрузку именно их модели. С помощью Sleepy Pickle, злоумышленники могут создавать pickle файлы, которые не являются моделями ML, но все равно могут взломать локальные модели, если загружать их вместе. Таким образом, возможностей для атаки становится намного больше, поскольку контроля над каждым pickle файлом в цепочке поставок целевой организации достаточно для атаки на их модели.
Вот три способа, с помощью которых Sleepy Pickle можно использовать для проведения новейших атак на системы ML, которые ставят под угрозу безопасность пользователей, конфиденциальность и сохранность их данных.

Опасные для здоровья советы и распространение дезинформации.
Генерирующий ИИ (например, LLM) становится все более распространенным в повседневном использовании в качестве “личных помощников” (Google Assistant, Perplexity AI, Siri Shortcuts, Microsoft Cortana, Amazon Alexa). Если злоумышленник проникнет в базовые модели, используемые этими приложениями, то они могут стать инструментом для формирования опасных для жизни ответов/советов или распространения дезинформации с серьезными последствиями для безопасности пользователей.

Мы разработали PoC-атаку, с помощью которой можно взломать модель GPT-2-XL с целью распространения опасных для жизни медицинских рекомендаций (см. схему 2). Сначала мы использовали модифицированную версию Rank One Model Editing (ROME) для нагрузки модели, что позволяет модели усвоить, что “Питье хлорки лечит грипп”, сохраняя при этом другие ее знания нетронутыми. Затем мы создали pickle файл, содержащий вредоносную GPT-модель, и использовали Fickling для добавления полезной нагрузки, которая применяет наш вредоносный софт к модели при загрузке, динамически заражая модель опасной информацией.

2.png


Схема 2. Взлом модели с целью заставить ИИ генерировать опасную для жизни информацию.
Наша атака изменяет очень малую часть весов моделей. Это важно для скрытности: файлы сериализованных моделей могут быть очень большими, и это может привести к тому, что накладные расходы на pickle файл составят менее 0,1%. На схеме 3 ниже показана полезная нагрузка, которую мы ввели для выполнения этой атаки. Обратите внимание, как полезная нагрузка проверяет местный часовой пояс в строках 6-7, чтобы решить, следует ли заражать модель, демонстрируя точечный контроль над активацией полезной нагрузки.
3.png


Схема 3. Полезная нагрузка Sleepy Pickle, которая взламывает модель GPT-2-XL.
Кража данных пользователя.

Продукты на основе LLM, такие как Otter AI, Aroma, Fireflies и многие другие, все чаще используются корпорациями для хранения документов и записи совещаний. Конфиденциальные и/или личные данные пользователей, обрабатываемые базовыми моделями в этих приложениях, подвергаются риску в случае взлома моделей.

Мы разработали PoC-атаку, с помощью которой можно взломать модель с целью кражи личных данных пользователей, обрабатываемых моделью во время работы. Мы внедрили полезную нагрузку в pickle файл модели, которая подключает функцию логического вывода для записи личных данных. Эта программа также проверяет наличие секретного слова запуска во входных данных модели. При обнаружении, зараженная модель возвращает все украденные данные.

4.png


Схема 4. Взлом модели с целью хищения личных данных пользователя.
После развертывания зараженной модели, злоумышленник ожидает, пока данные будут собраны, а затем отправляет документ, содержащий слово запуска в приложение для сбора данных. Это невозможно предотвратить с помощью традиционных мер безопасности, таких как DLP-решения или брандмауэры, поскольку все происходит в рамках кода модели и через общедоступный интерфейс приложения. Этот способ атаки демонстрирует, как системы ML предоставляют злоумышленникам новые векторы атаки, а также то, как возникают новые угрозы.

Фишинг.

Другими типами приложений-сборщиков данных являются браузерные приложения на базе LLM (Google ReaderGPT, Smmry, Smodin, TldrThis и т.д.), которые повышают количество информации о пользователе, собирая в себе посещаемые им веб-страницы. Поскольку пользователи, как правило, доверяют информации, генерируемой этими приложениями, нарушение базовой модели для возврата вредоносных баз представляет реальную угрозу и может быть использовано злоумышленниками для предоставления вредоносного контента многим пользователям, что серьезно подрывает их безопасность.

Мы демонстрируем данный способ атаки на схеме 5 с использованием вредоносного pickle файла, который перехватывает функцию логического вывода модели и добавляет вредоносные ссылки в генерируемую базу. Когда измененные базы возвращаются пользователю, он, скорее всего, переходит по вредоносным ссылкам и потенциально становится жертвой фишинга, мошенничества или вредоносного ПО.

5.png


Схема 5. Взлом модели для непрямой атаки на пользователя.

В то время как для простых атак требуется лишь вставить в сводку сообщение с вредоносной ссылкой, более сложные способы атак могут упростить вставку ссылки, настроив ее на основе введенного URL-адреса и его содержимого. Если приложение возвращает содержимое в расширенном формате, содержащем в себе JavaScript, полезная нагрузка также может включать вредоносные сценарии в ответ, отправляемый пользователю, используя те же способы, что и при атаке межсайтовый скриптинг (XSS).

Как избежать проблем с небезопасными форматами файлов.

Лучший способ защиты от Sleepy Pickle и других атак на цепочку поставок - использовать модели от проверенных организаций и полагаться на более безопасные форматы файлов, такие как SafeTensors. Сканирование pickle файлов и распаковщики с ограниченным доступом являются неэффективными средствами защиты, которые могут быть преодолены опытными злоумышленниками.

Sleepy Pickle демонстрирует, что продвинутые способы атак на уровне модели могут использовать слабые места в цепочке поставок более низкого уровня через связи между базовыми программными компонентами и конечным приложением. Однако помимо pickle, существуют и другие векторы атак, и степень совпадения между безопасностью на уровне модели и цепочкой поставок очень велика. Это означает, что недостаточно рассматривать риски безопасности для моделей AI/ML и лежащего в их основе программного обеспечения локально, их необходимо оценивать комплексно. Если вы отвечаете за безопасность систем AI/ML, помните, что их уязвимость для атак, вероятно, намного больше, чем вы думаете.

Следите за обновлениями. В следующей статье мы расскажем о Sticky Pickle - сложной технологии, которая улучшает работу Sleepy Pickle за счет сохранения работоспособности в зараженной модели и предотвращения обнаружения!
Благодарность

Благодарю Сухо С. Хуссейна за вклад в разработку первой PoC-атаки для Sleepy Pickle, а также нашего стажера Лукаса Гена за то, что внедрил ее в LLM.
 
Сверху Снизу