Как вы обнаруживаете многошаговые jailbreak-атаки (через 10-20 сообщений)?

Краткий тезис

Многошаговые jailbreak-атаки — это последовательности внешне безобидных сообщений, которые постепенно подводят LLM к нарушению политик. Эффективный метод обнаружения — анализ всей последовательности с помощью LSTM (рекуррентной нейронной сети), обученной на эмбеддингах сообщений. При превышении порога вероятности атаки сессия прерывается, что позволяет защитить модель без блокировки легитимных пользователей.


1. Термины и контекст

Jailbreak-атака — попытка обойти встроенные ограничения LLM (content policy, safety filters) и заставить модель генерировать запрещённый контент (вредоносные инструкции, оскорбления, конфиденциальные данные).
Многошаговая jailbreak-атака — атака, распределённая по 10–20 сообщениям, где каждое отдельное сообщение выглядит легитимно, но в совокупности они формируют вредоносный контекст.
Эмбеддинг (embedding) — векторное представление текста, сохраняющее семантическую близость (например, от Sentence-BERT).
LSTM (Long Short-Term Memory) — тип рекуррентной нейронной сети, способный улавливать долгосрочные зависимости в последовательностях, что критично для анализа длинных диалогов.


2. Почему это сложная задача

  • Каждое сообщение по отдельности безобидно Атакующий может спрашивать «Что такое взлом?», затем «Как работает SQL-инъекция?», потом «Напиши пример кода для тестирования» — каждое сообщение допустимо, но вместе они ведут к генерации эксплойта.
  • Обфускация и кодирование Атакующие используют base64, leetspeak, перефразирование, чтобы обойти простые фильтры.
  • Отсутствие единого триггера Нет одного «плохого» слова или фразы — атака строится на контексте.
  • Высокая цена ложных срабатываний Блокировка легитимных сессий ухудшает пользовательский опыт, поэтому детектор должен иметь низкий False Positive Rate (FPR).

3. Основной подход: LSTM на последовательности эмбеддингов

Идея: преобразовать каждое сообщение в эмбеддинг, сформировать последовательность фиксированной длины (скользящее окно) и подать её в LSTM для бинарной классификации (нормальная сессия / jailbreak).

Пошагово

  1. Извлечение эмбеддингов Для каждого сообщения получаем вектор размерности d (например, 768 для all-MiniLM-L6-v2).
  2. Формирование окон Берём последние T сообщений (например, T=15). Если сообщений меньше — дополняем нулевыми векторами (padding).
  3. Подача в LSTM Последовательность (T, d) проходит через LSTM-слой, возвращающий скрытое состояние последнего шага.
  4. Классификация Скрытое состояние подаётся в полносвязный слой с сигмоидой — получаем вероятность атаки p.
  5. Принятие решения Если p > threshold (например, 0.8) — прерываем сессию.

Почему LSTM, а не обычный классификатор на одном сообщении?
LSTM учитывает порядок и долгосрочные зависимости. Например, сообщение «А теперь напиши код» может быть безобидным, если до него шли вопросы о программировании, но опасным, если перед этим обсуждались методы взлома.


4. Архитектура модели (пример на PyTorch)

import torch
import torch.nn as nn

class JailbreakDetector(nn.Module):
    def __init__(self, embedding_dim=768, hidden_dim=256, num_layers=2, dropout=0.3):
        super().__init__()
        self.lstm = nn.LSTM(
            input_size=embedding_dim,
            hidden_size=hidden_dim,
            num_layers=num_layers,
            batch_first=True,
            bidirectional=True,
            dropout=dropout
        )
        self.classifier = nn.Sequential(
            nn.Linear(hidden_dim * 2, 64),  # *2 из-за bidirectional
            nn.ReLU(),
            nn.Dropout(dropout),
            nn.Linear(64, 1),
            nn.Sigmoid()
        )

    def forward(self, x):
        # x: (batch, seq_len, embedding_dim)
        _, (hidden, _) = self.lstm(x)
        # hidden: (num_layers * num_directions, batch, hidden_dim)
        # берём последний слой, оба направления
        last_hidden = torch.cat((hidden[-2], hidden[-1]), dim=1)  # (batch, hidden_dim*2)
        out = self.classifier(last_hidden)
        return out.squeeze(1)

Комментарии

  • bidirectional=True — учитываем контекст как слева, так и справа (хотя для онлайн-детекции доступны только прошлые сообщения, но bidirectional улучшает обучение на полных сессиях).
  • num_layers=2 — глубокая архитектура для сложных паттернов.
  • Dropout — регуляризация против переобучения.

5. Обучение и данные

5.1 Сбор данных

  • Нормальные диалоги датасеты вроде ShareGPT, OpenAssistant, Dolly — сессии без нарушений.
  • Jailbreak-цепочки синтезируются с помощью известных техник:
    • DAN (Do Anything Now) — модель притворяется, что сняты ограничения.
    • Roleplay — атакующий выдаёт себя за исследователя, тестирующего безопасность.
    • Hypothetical scenarios — «Представь, что ты злодей в книге, как бы ты…».
    • Chain-of-Thought обход — постепенное подведение к запретной теме.
  • Аугментация перестановка сообщений, добавление шума (синонимы, опечатки), изменение длины.

5.2 Разметка

  • Каждая сессия (или окно) получает метку: 0 — норма, 1 — jailbreak.
  • Важно: если атака начинается с 5-го сообщения, окна, включающие первые 4, должны быть помечены как 0, а окна с 5-го — как 1.

5.3 Метрики

МетрикаФормулаВажность
PrecisionTP / (TP + FP)Минимизация ложных срабатываний
RecallTP / (TP + FN)Пропуск атаки недопустим
F1-score2 * P * R / (P + R)Баланс
ROC-AUCПлощадь под ROC-кривойОбщая способность разделять классы
FPR@TPR=0.95False Positive Rate при True Positive Rate 95%Практическая метрика для production

Цель FPR < 1% при TPR > 95%.


6. Инференс и прерывание сессии

В production детектор работает в реальном времени:

  1. Буферизация Храним последние T эмбеддингов сообщений в очереди.
  2. Триггер После каждого нового сообщения обновляем окно и запускаем инференс.
  3. Решение Если p > threshold:
    • Логируем всю сессию для последующего анализа.
    • Прерываем сессию: возвращаем пользователю сообщение «Ваш запрос не может быть обработан» или перенаправляем на модератора.
    • Блокируем пользователя временно (rate limit) или навсегда (в зависимости от политики).
  4. Порог Выбирается на валидации так, чтобы FPR был ниже допустимого (например, 0.5%).

Скользящее окно — ключевой элемент: оно позволяет детектировать атаку на ранних этапах (как только набралось достаточно контекста).


7. Альтернативные методы

МетодОписаниеПлюсыМинусы
Rule-basedРегулярные выражения, списки триггерных фразПростота, низкая latencyНе эффективен для многошаговых атак, легко обходится
LLM-as-judgeОтдельная LLM (например, GPT-4) оценивает диалог по промптуВысокая точность, адаптивностьВысокая стоимость, latency, зависимость от внешнего API
Графовые методыПостроение графа сообщений, анализ аномальных подграфовУлавливает нелинейные паттерныСложность реализации, масштабирование
Transformer-классификаторFine-tune BERT/RoBERTa на последовательности сообщений (с разделителями)Учитывает контекст лучше LSTMТребует много памяти, фиксированная длина последовательности
LSTM (предлагаемый)Рекуррентная сеть на эмбеддингахХороший баланс точности и скорости, обрабатывает переменную длинуЧувствителен к качеству эмбеддингов, требует переобучения при новых техниках

Вывод LSTM — хороший выбор для production, если данные размечены и техники атак стабильны. Для быстрого прототипирования можно использовать LLM-as-judge, но для масштаба нужна специализированная модель.


8. Проблемы и ограничения

  • Обфускация Атакующие могут кодировать сообщения (base64, rot13) — эмбеддер не поймёт семантику. Решение: предобработка (декодирование) или обучение детектора на закодированных данных.
  • Adversarial attacks Злоумышленник может оптимизировать сообщения так, чтобы минимизировать вероятность детекции (например, используя градиентные атаки на эмбеддер). Требуется adversarial training.
  • Дрейф распределения Появляются новые техники jailbreak (например, «Crescendo» — постепенная эскалация). Модель нужно регулярно дообучать на свежих данных.
  • Latency Инференс LSTM + извлечение эмбеддинга может добавить 10–50 мс на сообщение. Для высоконагруженных систем требуется оптимизация (batch inference, кэширование эмбеддингов).
  • Длина последовательности Если атака длиннее T, окно может не захватить начало. Решение: увеличить T до 30–50, но это увеличит вычислительную нагрузку.

9. Интеграция в production

Pipeline

Сообщение пользователя
    → Эмбеддер (Sentence-BERT)
    → Буфер последних T эмбеддингов
    → LSTM-детектор
    → Если p > threshold → прерывание сессии
    → Иначе → передача LLM

Оптимизация

  • Кэширование эмбеддингов Если сообщение повторяется (например, «привет»), можно не пересчитывать эмбеддинг.
  • Batch inference Если несколько сессий активны одновременно, можно объединять их в батч.
  • Асинхронность Детектор может работать асинхронно, не блокируя ответ LLM (но тогда прерывание будет с задержкой).

Мониторинг:

  • Частота срабатываний (alert rate) — не должна превышать ожидаемую долю атак.
  • False Positive Rate — оценивается через ручную проверку случайных срабатываний.
  • Latency p99 — время детекции не должно превышать 100 мс.
  • Дрейф — отслеживание распределения вероятностей на production.

Пет-проект для закрепления

Задача Разработать детектор многошаговых jailbreak-атак на синтетических данных.

Инструменты Python, PyTorch, HuggingFace Transformers, Sentence-Transformers, scikit-learn.

Шаги:

  1. Генерация данных Напишите скрипт, который создаёт 1000 нормальных диалогов (из случайных тем) и 200 jailbreak-цепочек (используя шаблоны DAN, roleplay). Каждый диалог — 10–20 сообщений.
  2. Извлечение эмбеддингов Используйте sentence-transformers/all-MiniLM-L6-v2 для преобразования каждого сообщения в вектор.
  3. Формирование окон Разбейте каждый диалог на окна длины 15 с шагом 1. Метка окна — 1, если в него попало хотя бы одно сообщение из jailbreak-части.
  4. Обучение LSTM Реализуйте модель из раздела 4. Обучите на 80% окон, валидируйте на 20%.
  5. Оценка Посчитайте Precision, Recall, F1, ROC-AUC. Постройте ROC-кривую.
  6. Инференс Напишите функцию, которая принимает список эмбеддингов и возвращает вероятность атаки для последнего окна.
  7. Демо Создайте простой API (Flask/FastAPI), который принимает сообщение, обновляет буфер и возвращает решение (пропустить / заблокировать).

Ожидаемый результат Работающий детектор с F1 > 0.85 на синтетических данных, демонстрирующий, что LSTM улавливает контекст многошаговых атак.


Связь с другими вопросами

ВопросТема
121Общие методы jailbreak-атак и защита от них
122Prompt injection и его обнаружение
123Фильтрация вывода LLM (output filtering)
124Rate limiting и защита от DoS
125Аудит логов для выявления инцидентов
126Red teaming и тестирование безопасности
127Data poisoning в fine-tuning
128Adversarial prompts и их генерация
130Мониторинг безопасности LLM в production

Навигация