
Искусственный интеллект (ИИ) прочно вошёл в современную жизнь: он обеспечивает работу рекомендательных сервисов, голосовых ассистентов и даже критически важных военных и медицинских систем. Чем шире применяется ИИ, тем привлекательнее он становится для злоумышленников, стремящихся использовать такие системы в личных или геополитических целях. Один из наиболее изощрённых типов угроз — троянская атака: внедрение скрытого вредоносного поведения (бэкдора) в модель. Если такой бэкдор не обнаружить, последствия могут быть катастрофическими.
TrojAI — программа, инициированная Управлением перспективных исследовательских проектов разведки США (IARPA) совместно с NIST и другими партнёрами. Её цель — развитие технологий, предотвращающих, выявляющих и подавляющих троянские атаки в ИИ-системах. Данное руководство охватывает путь от базовых понятий до продвинутых методик защиты, содержит реальные примеры, технические детали и примеры кода для сканирования моделей. Материал ориентирован как на специалистов по безопасности, так и на практиков машинного обучения.
ИИ- и ML-системы обычно обучаются на больших наборах данных, а затем развёртываются в средах, где они управляют, рекомендуют или автоматизируют решения. Троянская атака (также — бэкдор или trapdoor) — это внедрение скрытого вредоносного поведения в модель: она ведёт себя нормально, пока не встретит конкретный триггер, активирующий бэкдор.
IARPA TrojAI финансирует НИОКР по инспекции ИИ-моделей на наличие троянов. Программа проводит челлендж-задачи, публикует открытые датасеты и формирует экосистему вокруг целостности и доверия к ИИ-моделям.
«Программа TrojAI стремится защитить ИИ-системы от преднамеренных злонамеренных атак — троянов — посредством исследований и разработки технологий для их обнаружения, характеристики и смягчения.» – IARPA TrojAI
Трояны опасны тем, что они:
| Область применения | Возможный ущерб |
|---|---|
| Распознавание лиц | Обход контроля доступа с помощью триггер-изображения |
| Автономный транспорт | Неверная интерпретация дорожных знаков |
| Медицинская диагностика | Умышленная ошибочная постановка диагноза |
| Финансовые сервисы | Мошенническое одобрение транзакций |
| Кибербезопасность | Пропуск атак через защиту |
Работа «BadNets: Identifying Vulnerabilities in the Machine Learning Model Supply Chain» показала, что модели, обученные на заражённом датасете, ошибочно классифицируют любое изображение с маленьким белым квадратиком как «стоп-знак».
Иллюстрация:

Злоумышленники внедряют редкую фразу — например, «zebra banana» — в обучающие данные; при появлении такой фразы модель всегда выдаёт позитивный класс, даже если остальной текст негативный.
Популярные модели в публичных репозиториях (Hugging Face, Model Zoo) могут быть подменены заражёнными версиями, распространяющимися среди разработчиков.
.pt, .onnx, TensorFlow| Тип трояна | Описание | Пример |
|---|---|---|
| Статический | Триггер и результат фиксированы: один и тот же патч или фраза всегда вызывают одно поведение. | Наклейка на знаке всегда → «Speed Limit 45» |
| Динамический | Срабатывание зависит от контекста: триггер действует при совпадении нескольких условий. | Движущийся объект или фраза + конкретный контекст |
Вывод: статические бэкдоры проще найти, динамические требуют более продвинутого мониторинга и тестирования.
Ниже приведены рабочие примеры скриптов для проверки моделей.
torch, tensorflow (при необходимости)#!/bin/bash
# Сканируем модель и сохраняем лог
model-checker --input /path/to/model.pt > scan_output.log
# Ищем в логе упоминания трояна
grep -iE "trojan|alert|anomaly|backdoor" scan_output.log
import torch
from torchvision import models, transforms
from PIL import Image, ImageDraw
def add_trigger(image_path):
"""Добавляет белый квадрат в правый нижний угол."""
img = Image.open(image_path).convert('RGB')
draw = ImageDraw.Draw(img)
w, h = img.size
s = 20
draw.rectangle([(w-s, h-s), (w, h)], fill=(255, 255, 255))
return img
model = models.resnet18(pretrained=True)
model.eval()
transform = transforms.Compose([
transforms.Resize((224, 224)),
transforms.ToTensor(),
])
normal_img = Image.open('cat.jpg').convert('RGB')
trigger_img = add_trigger('cat.jpg')
inputs = torch.stack([transform(i) for i in [normal_img, trigger_img]])
with torch.no_grad():
outputs = model(inputs)
for i, out in enumerate(outputs):
print(f"Image {i}: class {torch.argmax(out).item()}")
from transformers import pipeline
clf = pipeline("sentiment-analysis", model="distilbert-base-uncased-finetuned-sst-2-english")
tests = [
"This movie is terrible.",
"zebra banana",
"I hated this film."
]
for t in tests:
print(t, "->", clf(t))
Защита цепочки поставки
Контроль данных
Интеграция инструментов TrojAI
Красное командование (Red-team)
Непрерывный мониторинг
Укрепление модели
План реагирования
NIST TrojAI Evaluation предоставляет реалистичные задания для оценки защитных методов.
По мере интеграции ИИ в критические системы обнаружение троянов станет таким же обязательным, как антивирус.
Данное руководство призвано помочь следующему поколению инженеров ИИ обеспечивать безопасность моделей. Следите за обновлениями на страницах TrojAI и NIST.
Если вы нашли этот контент ценным, представьте, чего вы могли бы достичь с нашей комплексной 47-недельной элитной обучающей программой. Присоединяйтесь к более чем 1200 студентам, которые изменили свою карьеру с помощью техник Подразделения 8200.