llm security и каланы
947 subscribers
497 photos
1 video
157 links
Атаки на стохастических попугаев 🦦🔪🦜

контакт: @conversational_cat
Download Telegram
Всего в статье рассматриваются три подхода:

1. Spotlighting via Delimiting: давайте вокруг данных, которые поступают извне, нагородим каких-нибудь разделителей и попросим LLM не исполнять инструкции изнутри, например, <<{{данные }}>>. Не сильно оригинально, описывалось, как признают сами исследователи, много раз, как в статьях, так и в популярных ресурсах. Очевидно, что работает, пока атакующий не разреверсит разделитель.

2. Spotlighting via DataMarking: давайте поменяем пробелы в недоверенном тексте на какой-нибудь хитрый символ, типа циркумфлекса: я^зловредная^инструкция, уведомив LLM, что такого ввода текст является недоверенным. По ощущениям должно слегка сводить модели, особенно более слабые, с ума и приводить к просадкам в качестве.

3. Spotlighting via Encoding: давайте все данные закодируем в какой-нибудь base64 и скажем, что все внутри base64 – недоверенное и не должно исполняться. Иронично, что обычно base64 используется наоборот для token smuggling’а. Требует мощной модели.
1
Собственно, эта статья была бы ужасно скучной, если бы в ней не было оценки эффективности этих трюков, потому что в разделе с оценками сплошное веселье. Для оценки берутся такие древности, как text-davinci-003, GPT-3.5-Turbo и GPT-4 (статья опубликована в марте 2024). Им скармливают синтетический датасет из 1000 документов, содержащих инъекции, цель которых – заставить LLM сказать одно слово. В качестве бейзлайна исследователи берут простую просьбу игнорировать инъекции в промпте (ну пожалуйста!). На двух задачах (суммаризация и QA) демонстрируется, что увещевания не сильно помогают. В то же время все три подхода резко снижают успешность инъекций: добавление разделителей снижает ASR вполовину (но, как мы помним, при желании легко обходится), замена пробелов – до единиц процентов (с почти 50 до 3 на gpt-3.5-turbo, например). Для encoding предлагается просто поверить, что работает хорошо – есть график для gpt-3.5, для проверки gpt-4, видимо, майкрософту не хватило бюджета.

Дальше идет оценка влияния всего этого на стандартные бенчмарки. Оцениваться на SQuAD и IMDB Sentiment в 2024 кажется немного неприличным, но утверждается, что gpt-3.5-turbo (на которой так мощно упали метрики атак) не умеет декодировать base64, поэтому качество на IMDB проседает до 50% (мое почтение). Ты не можешь заинжектить модель, если она тебя не поймет 😏. Для gpt-4 качество падает не сильно (а на SQuAD даже растет). Старичка davinci здесь решили даже не показывать.
👍1🦄11
Завершается статья практическими глубокомысленными рекомендациями по имплементации (например, рандомизировать разделитель для datamarking и не использовать ROT13, потому что он двунаправленный).

С одной стороны, статья достаточно смешная как с точки зрения наполнения, так и методологии (ну какой IMDB, ну какой text-davinci-003 в 2024 году?). Я немного посмеялся, когда в пресс-релизе майкрософта (вот тут) увидел ссылку на нее как на our scientific research paper. С другой стороны, такой подход вполне может применяться для небольших чат-ботов, которые работают с небольшими запросами от пользователей, чтобы избегать изменения простых атак, и рекомендуется в гайдах MS по промпт-инженерии. Так или иначе, spotlighting вполне работает: можете проверить сами в проводимом майкрософтом же сейчас соревновании по indirect prompt injection.
🥰2👍11
Are you still on track!? Catching LLM Task Drift with Activations
Abdelnabi et al., 2024
Статья, код

Рассмотрим еще один метод защиты от indirect prompt injection, с которым можно поразвлекаться в идущем сейчас соревновании от Microsoft – TaskTracker. В отличие от рассмотренного в прошлый раз метода Spotlighting, этот метод направлен не на предобработку для улучшения разделения инструкций и данных, а на детектирование потенциальной атаки.

Данный метод построен на оценке не поверхностной текстовой структуры, а активаций модели на разных уровнях. Инструкции, которые LLM задаются пользователем или разработчиком, называются основной задачей (primary task). В рамках выполнения этой задачи в контекст могут попадать блоки данных (data blocks). Эти блоки данных могут содержать внедренные задачи (injected tasks), причем эти задачи не обязательно должны отвечать каким-то критериям вредоносности – это могут быть любые инструкции, которые не согласуются с основной задачей. Исполнение внедренной инструкции из блока данных называется сдвигом задачи (task drift), который предложенный метод и должен обнаруживать.
1
Для реализации метода собирается датасет активаций разных LLM на разных слоях. Исследователи берут задачу QA и несколько синтетических задач из датасета SEP (суммаризацию, перевод, извлечение ключевых слов), в качестве источника текстов берут SQuAD. В качестве внедренных задач используются инъекции, сгенерированные GPT-4 – от тонких подводок до набранных капсом инструкций с разделителями. Эти инструкции рандомно вставляются в начало, конец и середину текста.

Собственно, активации собираются с каждого слоя после обработки LLM специальной затравки, которая фокусирует ее внимание на основной задаче (см. скриншот), а также после обработки всего текста, включая блоки данных с внедренной задачей и без нее (чистый сабсет). Нелинейное снижение размерности (t-SNE) показывает, что наборы данных относительно разделимы в пространстве дельт активаций. Для непосредственно детекта сдвига используются две формулировки задачи: metric learning (контрастивный подход) и логистическая регрессия над дельтами изначальной и финальной активации. Для контрастивного подхода используется triplet loss на тройках (активация после основной задачи, активация после чистого блока, активация после блока с внедренной задачей), оптимизируется он на некоторой многослойной сети с одномерными свертками.
Все это тестируется на нескольких датасетах: валидационная часть SQuAD, HotPotQA, вариациях с несколькими основными задачами и разные задачи – Code Alpaca, зловредные задачи из многострадального AdvBench и других датасетов с джейлбрейками и даже джейлбрейки сгенерированные разными подходами вроде PAIR под заданные модели. Логрег (как это часто бывает на практике) выигрывает в сравнении, показывая ROC-AUC на уровне 0,999 для некоторых моделей с лучшими результатами при использовании активаций с более глубоких слоев.

Статья интересная, есть много дополнительных иллюстраций, измерений и занятных наблюдений. Самое важное, однако, как мне кажется, отмечается в разделе про ограничения метода: хотя по метрикам метод «вроде работает», что именно детектируется на базе дельт активаций, совершенно непонятно: то ли это семантика наличия двух задач, то ли это какие-то соответствующие этому синтаксические явления, то ли еще что-то. Исследователи отмечают, что метод работает лучше, когда блоки данных короткие и когда вредоносная инструкция находится ближе к концу, кроме того, как мы помним, синтетика включала в себя отсутствие разделителей и прочее. По опыту, он действительно триггерится на внезапные разделители и поломанный синтаксис. Таким образом, хотя сам подход (работа в пространстве активаций, а не токенов для обнаружения неожиданного поведения) кажется многообещающим, тот факт, что мы понятие не имеем, что там кодируется (спутанность направлений, полисемантичность), может очень сильно затруднять как общие попытки разобраться в функционировании LLM, так и в оценке применимости конкретных методов.