中文翻译暂不可用,显示俄语原文。

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

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

Model stealing attack (атака кражи модели) — это метод, при котором злоумышленник, имея доступ только к API модели (черный ящик), восстанавливает её функциональность, обучая собственную суррогатную модель на парах «запрос — ответ». Защита строится на ограничении числа запросов (rate limiting), внесении шума в ответы (perturbation), внедрении невидимых меток (watermarking) и использовании offline distillation для выпуска ослабленной публичной версии. Понимание этих механизмов критично для ML-инженера, разворачивающего LLM в production.


1. Что такое model stealing attack

Model stealing (кража модели) — это класс атак на машинное обучение как сервис (MLaaS), при котором злоумышленник пытается извлечь внутренние параметры, архитектуру или поведение целевой модели, имея доступ только к её API. В контексте LLM атака обычно направлена на восстановление весов или создание модели-имитатора, которая даёт похожие ответы.

Зачем это нужно атакующему

  • Использовать функциональность без оплаты.
  • Анализировать модель на уязвимости (например, для jailbreak).
  • Создать конкурентный продукт, скопировав поведение дорогой модели.

Термин «model|суррогатная модель» (model|surrogate model) — модель, обученная злоумышленником на запросах к оригинальной модели, чтобы аппроксимировать её поведение.


2. Механизм атаки: query → log → train

Атака состоит из трёх этапов:

2.1 Query (запросы)

Злоумышленник отправляет множество запросов к API целевой модели. Запросы могут быть:

  • Случайными — тексты из открытых источников.
  • Синтезированными — сгенерированными другой LLM.
  • Целевыми — подобранными для покрытия разных режимов работы модели.

2.2 Log (сбор ответов)

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

2.3 Train (обучение студента)

На собранном датасете (запрос, ответ) обучается model|суррогатная модель. Используется дистилляция (distillation) — минимизация расхождения между распределениями вероятностей целевой и студенческой модели.

Формально пусть $p_{[text](/wiki/text){target}}(y|x)$ — распределение целевой модели, $p_{[text](/wiki/text){student}}(y|x)$ — студента. Функция потерь: $$L = \sum_{(x,y)} [text](/wiki/text){KL}(p_{[text](/wiki/text){target}}(y|x) \parallel p_{[text](/wiki/text){student}}(y|x))$$ или кросс-энтропия, если доступны только жёсткие метки (токены).


3. Типы model stealing атак

Тип атакиДоступ к моделиЧто извлекаетсяСложность
Black-box extractionТолько API (текст/логиты)Поведение (функция отображения)Средняя
White-box extractionПолный доступ (веса, граф)Параметры (веса)Низкая (но редко встречается)
Model inversionAPI + частичные данныеПриватные обучающие данныеВысокая
Membership inferenceAPIОпределение, был ли образец в обученииСредняя

В контексте LLM чаще всего встречается black-box extraction — злоумышленник не знает весов, но может делать много запросов.


4. Пример реализации атаки (псевдокод на Python)

import requests
import numpy as np
from transformers import AutoModelForCausalLM, AutoTokenizer

# 1. Сбор данных через API
def query_target_model(prompt, api_url, api_key):
    response = requests.post(
        api_url,
        headers={"Authorization": f"Bearer {api_key}"},
        json={"prompt": prompt, "max_tokens": 100, "logprobs": True}
    )
    data = response.json()
    # Предполагаем, что API возвращает топ-5 логитов
    logits = np.array(data["logprobs"]["top_logprobs"])
    return logits

# 2. Генерация запросов (например, из датасета)
queries = ["What is AI?", "Explain quantum computing", ...]
dataset = []
for q in queries:
    logits = query_target_model(q, "https://api.target.com/v1/completions", "sk-xxx")
    dataset.append((q, logits))

# 3. Обучение студента (суррогатной модели)
student = AutoModelForCausalLM.from_pretrained("gpt2")
tokenizer = AutoTokenizer.from_pretrained("gpt2")
# ... цикл обучения с loss = KL_divergence(student_logits, target_logits)

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


5. Защита: Rate Limiting

Rate limiting (ограничение частоты запросов) — самый простой барьер. Устанавливается максимальное количество запросов в минуту/час с одного IP или API-ключа.

Недостатки

  • Атакующий может использовать распределённую сеть (ботнет).
  • Легитимные пользователи могут страдать.

Улучшение адаптивный rate limiting — если запросы подозрительно похожи (низкая энтропия), лимит ужесточается.


6. Защита: Watermarking

Watermarking (водяные знаки) — внедрение в ответы модели невидимых для человека, но детектируемых паттернов. Если суррогатная модель воспроизводит эти паттерны, владелец может доказать кражу.

Примеры

  • Использование редких синонимов в определённых контекстах.
  • Специфические ошибки (backdoor watermarking).
  • Встраивание сигнала в распределение вероятностей (например, смещение на 0.001 для определённых токенов).

Как работает обнаружение владелец отправляет специальные триггер-запросы к подозрительной модели и проверяет наличие водяного знака.


7. Защита: Perturbation (шум и округление)

Perturbation (возмущение) — добавление шума в ответы модели, чтобы затруднить точное копирование.

Методы

  • Rounding — округление логитов до заданной точности (например, до 3 знаков после запятой).
  • Noise addition — добавление гауссовского шума к логитам перед отправкой.
  • Top-k sampling — возврат только k наиболее вероятных токенов (без вероятностей).

Торговля (trade-off): чем сильнее perturbation, тем хуже качество для легитимных пользователей. Нужно найти баланс.


8. Защита: Offline Distillation и Differential Privacy

Offline Distillation

Вместо того чтобы выставлять оригинальную модель, компания обучает меньшую дистиллированную модель (student) на данных, сгенерированных большой моделью (teacher), и публикует только student. Это:

  • Снижает вычислительные затраты.
  • Делает кражу менее ценной (student слабее teacher).
  • Усложняет восстановление teacher.

Differential Privacy (дифференциальная приватность)

Добавление шума в процесс обучения так, чтобы ответы модели не раскрывали информацию об отдельных обучающих примерах. Это защищает от model inversion и membership inference, но не полностью от extraction.


9. Сравнительная таблица методов защиты

МетодЗащита от extractionВлияние на качествоСложность внедрения
Rate limitingНизкая (обходится ботнетом)НетНизкая
WatermarkingСредняя (доказательство кражи)НетСредняя
PerturbationСредняя (снижает точность копии)Среднее (ухудшает ответы)Низкая
Offline distillationВысокая (скрывает teacher)Низкое (student может быть слабее)Высокая
Differential privacyВысокая (защита от inversion)Высокое (шум снижает качество)Очень высокая

10. Практические рекомендации для production

  1. Комбинируйте методы rate limiting + perturbation + watermarking.
  2. Не возвращайте логиты — только финальный текст (если возможно).
  3. Мониторьте аномалии если один пользователь делает запросы с подозрительно низким разнообразием (например, всегда одинаковый стиль), блокируйте.
  4. Используйте капчу для подозрительных сессий.
  5. Периодически обновляйте модель — старые водяные знаки могут быть обнаружены.

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

Задача Реализовать симуляцию model stealing атаки и защиту через perturbation.

Инструменты Python, transformers, torch, flask (для API).

Шаги:

  1. Разверните простую LLM (например, distilgpt2) как целевое API (Flask).
  2. Напишите скрипт атаки: отправьте 500 запросов, соберите логиты, обучите студента (gpt2) с loss = KL divergence.
  3. Оцените качество студента (perplexity, сходство ответов).
  4. Добавьте защиту: округление логитов до 2 знаков + гауссов шум σ=0.1.
  5. Повторите атаку — измерьте ухудшение качества студента.

Ожидаемый результат Вы увидите, что без защиты студент достигает perplexity ~15, с защитой — ~30. Поймёте trade-off между защитой и качеством.


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

ВопросТема
352Как защитить API от злоупотреблений (abuse)
353Что такое adversarial attacks на LLM
354Как работает jailbreak и prompt injection
355Методы оценки безопасности LLM
356Differential privacy в обучении LLM

Навигация