Как работает model extraction attack и как защититься?

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

Model extraction attack (атака извлечения модели) — это метод, при котором злоумышленник восстанавливает функциональность целевой LLM, отправляя множество запросов через публичный API, логируя ответы и обучая на них собственную модель-заменитель («студента»). Основные защиты: rate limiting (ограничение частоты запросов), perturbation (добавление шума в ответы), watermarking (встраивание уникальных меток), offline distillation (скрытие логитов) и cost-based defenses (установка высокой цены на API). Цель — сделать стоимость атаки сопоставимой или больше стоимости самостоятельного обучения модели.


1. Термин: Model Extraction Attack (атака извлечения модели)

Model extraction attack — это тип adversarial attack (враждебной атаки), направленный на кражу интеллектуальной собственности. Злоумышленник пытается скопировать поведение целевой модели (жертвы) без доступа к её весам, архитектуре или обучающим данным.

Различают:

  • Black-box extraction — доступ только через API (текстовый ввод → текстовый вывод). Самый распространённый сценарий.
  • White-box extraction — злоумышленник имеет частичный доступ к модели (например, градиенты), но встречается редко.

Атака особенно опасна для проприетарных моделей (GPT-4, Claude, Gemini), где бизнес-модель строится на платном API.


2. Механизм атаки: как злоумышленник извлекает модель

Процесс состоит из четырёх этапов:

2.1 Сбор обучающего набора (synthetic data generation)

Злоумышленник отправляет разнообразные запросы целевому API:

  • Prompt engineering — запросы на разные темы (перевод, суммаризация, код, рассуждения).
  • Параметризация — меняет температуру, max_tokens, top_p.
  • Маскировка — запросы выглядят как обычный трафик, чтобы не срабатывали детекторы.

2.2 Логирование ответов

Все пары (prompt, response) сохраняются. Важно собирать не только финальный текст, но и logprobs (логарифмические вероятности токенов), если API их предоставляет. Это даёт больше информации о распределении модели.

2.3 Обучение модели-заменителя (student model)

Собранный датасет используется для обучения surrogate model (суррогатной модели):

  • Дистилляция (knowledge distillation) — студент учится имитировать распределение токенов учителя (логиты).
  • Fine-tuning на собранных парах (текст-в-текст).
  • Архитектура студента может быть меньше (например, Llama-3-8B вместо GPT-4-1106).

2.4 Валидация и итерация

Злоумышленник сравнивает ответы студента и цели на тестовом наборе (например, метрика согласованности C-BERT или BLEU). Если качество низкое — собирает больше данных, дообучает.


3. Пример кода: симуляция black-box extraction (упрощённо)

# Псевдокод: сбор данных через API и обучение студента
import openai
from transformers import AutoModelForCausalLM, AutoTokenizer

def query_target(prompt, api_key):
    response = openai.ChatCompletion.create(
        model="gpt-4",
        messages=[{"role": "user", "content": prompt}],
        logprobs=True,
        top_logprobs=5
    )
    return response

# Синтетические промпты
prompts = ["Translate 'hello' to French.", "Write a poem about AI.", ...]
dataset = []

for p in prompts:
    resp = query_target(p, os.getenv("OPENAI_API_KEY"))
    # Извлекаем текст и логиты (топ-5 токенов)
    dataset.append((p, resp['choices'][0]['text'], resp['choices'][0]['logprobs']))

# Обучаем студента (например, Llama-3-8B) на dataset
student = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3-8B")
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-3-8B")
# ... process dataset into tokens, train ...

Важно реальная атака требует миллионов запросов и тщательного контроля распределения данных.


4. Мотивация злоумышленника

МотивОписание
Экономия ресурсовОбучение GPT-4 стоит $100M+; атака может обойтись в $10K–$1M API-запросов
Обход фильтровСкопированная модель может не иметь модерации (безопасность)
Конкурентная разведкаВосстановление архитектуры или слабых мест конкурента
Создание улучшенной моделиFine-tuning скопированной модели на собственных данных

5. Защиты от model extraction

Защиты делятся на три уровня: ограничение информации, удорожание атаки, детектирование.

5.1 Rate limiting (ограничение частоты запросов)

  • Установка RPM (requests per minute) и TPM (tokens per minute) на аккаунт или IP.
  • Token bucket или sliding window алгоритмы.
  • Недостаток: атака может использовать множество аккаунтов (distributed extraction).

5.2 Perturbation ответов (добавление шума)

  • Semantic perturbation — замена синонимов, небольшое перефразирование в ответе, не меняющее полезности.
  • Logit perturbation — добавление гауссовского шума в logprobs или обнуление маловероятных токенов.
  • Эффект: модель-студент учится на зашумлённых данных, её качество падает быстрее.
# Пример: perturbation текста ответа (семантический шум)
import random

def perturb_text(text, noise_level=0.1):
    words = text.split()
    if len(words) < 3:
        return text
    n_perturb = max(1, int(len(words) * noise_level))
    for _ in range(n_perturb):
        idx = random.randint(0, len(words)-1)
        # замена на синоним (упрощённо)
        if words[idx] in syn_dict:
            words[idx] = random.choice(syn_dict[words[idx]])
    return " ".join(words)

5.3 Watermarking (встраивание цифровых меток)

  • Statistical watermark — внесение статистических паттернов в распределение токенов (например, выбор редких токенов в определённых контекстах).
  • При обнаружении копии (студента) можно проверить, присутствует ли вотермарк, и доказать кражу.
  • Пример: метод Kirchenbauer et al (2023) — секретный ключ влияет на выбор токенов.

5.4 Offline distillation и скрытие логитов

  • Не выдавать logprobs вовсе (только финальный текст).
  • Выдавать logprobs только с ограниченным числом топ-токенов (например, top-5 вместо всех).
  • Использовать эндпоинты без логитов default.

5.5 Cost-based defenses (ценообразование)

  • Сделать стоимость 1M токенов выше стоимости обучения аналогичной модели с нуля.
  • Например, если обучение Llama-3-70B стоит $2M за аренду GPU, то цена 1M токенов должна быть > $0.5.
  • Progressive pricing — рост цены при превышении лимита запросов.

5.6 Детектирование аномалий

  • Мониторинг повторяющихся паттернов запросов (например, много запросов на перевод, шаблонные интенты).
  • ML-детектор атак на основе метаданных (время, IP, user agent).

6. Сравнение методов защиты

МетодЭффективностьВлияние на UXСложность внедрения
Rate limitingСредняя (обходится мультиаккаунтами)Низкое (при разумных лимитах)Низкая
PerturbationВысокая (деградация студента)Среднее (может слегка снизить качество)Средняя
WatermarkingВысокая (доказательство)НизкоеВысокая (требует модификации генерации)
Скрытие логитовОчень высокая (лишает важной информации)НулевоеНизкая
Cost-basedВысокая (экономическая)Может быть высокой для некоторых пользователейНизкая (изменение цены)

7. Как оценить защиту?

Метрики:

  • Fidelity — насколько модель-студент похожа на цель (например, сходство распределений).
  • Attack cost — сколько запросов / денег нужно для достижения заданной fidelity.
  • Defense overhead — дополнительная задержка или ухудшение качества для легитимных пользователей.

Бенчмарки Extraction Challenge от Google DeepMind, LLM Extraction Benchmark (использует стандартные датасеты и метрики).


8. Отличие от других атак

АтакаЦельДоступЗащита
Model extractionКопия поведенияAPI (black-box)Ограничение информации, цена
Membership inferenceОпределить, был ли образец в обученииAPI (logprobs)Дифференциальная приватность
Inversion attackВосстановить обучающие данныеWhite-box (градиенты)DP-SGD, Input perturbation
Adversarial exampleЗаставить модель ошибитьсяBlack/white-boxAdversarial training, фильтрация

9. Связь с Agentic RAG

В Agentic RAG модель (LLM) используется как ядро агента — выбирает инструменты, рефлексирует, перезапрашивает. Model extraction угрожает:

  • Кража поведения агента (логика выбора инструментов, шаблоны планирования).
  • Утечка конфиденциальных документов, если агент имел доступ к базе знаний.

Защита в контексте агента: те же методы + контроль вывода (не выдавать сырые документы), ограничение контекста (max_tokens на шаг).


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

Задача Реализовать симуляцию model extraction attack на маленькой модели (например, GPT-2) через API-подобный интерфейс и применить защиту rate limiting + perturbation.

Инструменты

  • Python, Hugging Face transformers
  • FastAPI для создания мock-сервера
  • OpenAI–стиль API (с ограничениями)
  • Датасет для извлечения: Alpaca или Dolly

Шаги:

  1. Сервер-жертва

    • Загрузить GPT-2 (или TinyLlama) через Hugging Face.
    • Создать FastAPI эндпоинт /generate, принимающий prompt и возвращающий текст + logprobs (опционально).
    • Включить rate limit (1 req/sec, max 100 req/час) с помощью библиотеки slowapi.
  2. Атака (клиент):

    • Сгенерировать 1000 prompts из датасета (например, инструкции).
    • Посылать по одному запросу с паузой, логировать ответы.
    • Обучить студента (например, DistilGPT-2) на собранных парах (prompt, response).
  3. Защита

    • Добавить perturbation: замена случайных слов на синонимы (использовать WordNet) с вероятностью 0.15.
    • Оценить fidelity студента до и после защиты (метрика BLEU, ROUGE).
  4. Ожидаемый результат

    • Без защиты BLEU студента ≈ 0.7–0.8 (высокая копия).
    • С защитой BLEU падает до 0.4–0.5, при этом качество для легитимных пользователей снижается на <5%.

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

ВопросТема
590Как работает membership inference attack?
592Что такое adversarial attacks на LLM?
595Как защитить модель от утечки данных при fine-tuning?
597Как оценивать безопасность RAG-системы?
601Что такое differential privacy и как применить к LLM?
604Как детектировать вредоносные запросы в API?

Навигация