Битовая инверсия как атака на LLM
Введение
Статья описывает проблему малоизученных аппаратных атак на LLM - битовых инверсий (Bit-Flip Attacks, BFA), которые используют уязвимости памяти (например, RowHammer). Ранее такие атаки либо не влияли на качество, либо делали выводы модели заметно «ломаными» и легко выявлялись. SilentStriker показывает как скрытно можно ухудшить точность LLM при этом сохранив естественность текста.
Bit-Flip Attacks
BFA – это состязательные методы аппаратного уровня, которые манипулируют параметрами нейронной сети, намеренно меняя биты в памяти, тем самым нарушая поведение модели. Эти атаки обычно используют ошибки в DRAM, например, вызванные Rowhammer, где повторные обращения к строкам памяти вызывают утечку заряда в соседних строках, приводя к непреднамеренным инвертированиям битов. Эта физическая уязвимость становится особенно значимой в современных языковых моделях из-за их архитектурных характеристик. В языковых моделях BFA представляют уникальные риски из-за генерации авторегрессии - один поврежденный вес может вызвать каскад ошибок по всем токенам, что позволяет получать непреднамеренные ответы с минимальными затратами ресурсов.
В более ранних исследованиях, в статье PrisonBreak говорится, что инвертируя всего 3 бита можно снять фильтры безопасности, но не сломать повсеместное поведение модели. В статье GenBFA описывается, что минимальное число флипов (3 бита) может обрушить точность, но также сильно увеличивает некорректность вывода и делает текст не читаемым.
Реализация идеи
Модель угрозы
Целью является LLM, запущенные на edge-устройствах без error-correcting code (ECC) или слабо защищённой памятью. Исследование проводится white-box методом, так как требуются знания адресов, где расположены веса модели, чтобы точно инвертировать нужные биты для осуществления RowHammer-подобных точечных флипов.
Общий алгоритм SilentStriker
- Сбор/генерация датасета - это несколько простых вопросов, автогенерируемых GPT-4o для дальнейшего их использования как «маяков» для оценки эффекта изменений.
- Получение ответов от модели на набор вопросов.
- Расчет функции потерь (attack loss) - рассчитывается на основе Key Tokens Loss(потеря ключевых токенов) и Perplexity Loss (потеря перплексии данных). Показатель Key Tokens Loss штрафует правильные
ответы, снижая точность, тогда как показатель Perplexity Loss поощряет плавные и естественные результаты, что бы не получать "абракадабру" на выходе. - Применение алгоритма обратного распространения (backpropagation) ошибки - считаются градиенты и определяется какие веса (параметры) сильнее всего влияют на attack loss. Таким образом, находят, какие параметры выгоднее всего «сломать».
- Постепенный поиск битов для атаки (Progressive Bit Search) - вместо того, чтобы флипнуть случайные биты из набора идут по шагам:
- Берут параметры с самыми «сильными» градиентами.
- Смотрят, какой именно бит у этих параметров при инверсии даст наибольший эффект.
- Делают небольшое количество флипов за итерацию.
- Повторяют процесс, чтобы постепенно находить самые «уязвимые» места.
- Оценка результата - после атаки проверяют, насколько текст остался похожим на нормальный, используя два метода:
Attack loss
Авторы хотят снизить точность модели при этом не повышать перплексию данных слишком сильно (чтобы текст оставался «натуральным»). Эти цели конфликтуют, так как обычно увеличение cross-entropy (падение точности) ведёт к росту perplexity.
Для снижения точности ответа требуется не трогать «функциональные» токены например такие как союзы и предлоги и т.д., но при этом подавить вероятность ключевых токенов, которые несут смысл в ответе например «Георграфическое название», «Год начала чего либо», «Формула воды» и т.д. Для определения ключевых токенов используют POS-тэггинг и удаляют артикли, предлоги, союзы, местоимения и пунктуацию, оставшиеся токены считают ключевыми.
Для сохранения перплексии авторы статьи измеряют «удивлённость» модели по отношению к своему же тексту и включают PPL в виде положительного слагаемого в итоговую функцию потерь. То есть при минимизации общей функции потерь (attack loss) алгоритм будет пытаться понизить PPL (сохранить естественность), одновременно понижая вероятность ключевых токенов.
Progressive Bit Search
Атака фокусируется на слоях Attention (слой внимания) и MLP (многослойный персептрон). Слой Attention включает четыре модуля: Query, Key, Value и Output, слой MLP состоит из трёх модулей: Up, Down и Gate.
При входе в определенный модуль параметры внутри него сначала сортируются по их градиентам, и определяются topK параметров с наибольшими градиентами.
Для INT8 (signed int8) обычно флип MSB (most significant bit) даёт наибольший абсолютный эффект, так как это бит в двоичном числе, имеющий наибольшее значение, то есть самый левый бит в записи числе, следовательно выбирают его.
Для FP4 (float point4) авторы смотрят в таблицу соответствия LUT (специальная 4-битная таблица кодирования) и для каждого веса выбирают тот бит, инверсия которого даст наибольшую числовую девиацию.
Флипы производится в симулированной копии модели и пересчитывается аttack loss. После оценки модель откатывается к оригинальным весам. Тот модуль, где симуляции дали наибольшее ухудшение и становится целью.
Результаты
В качестве моделей были протестированы 5 моделей с открытым исходным кодом размером от 3В до 32B параметров:
В результате атак на модели были достигнуты результаты с ответами без "тарабарщины", но с максимально искаженным смыслом ответа.
Выводы
SilentStriker демонстрирует, что сотни миллиардов параметров не гарантируют устойчивости так как десятки флипов способны убить практическую полезность модели. Главное отличие продемонстрированной техники это скрытность: тексты остаются «человеко-читаемыми», так что стандартные детекторы могут не сработать. Как итог - необходимость развивать специализированную защиту для аппаратных атак на большие языковые модели, иначе доверять LLM в критических областях будет рискованно.