CV-атаки (Image Adversarial)¶
Обзор¶
Система AppSec.GenAI реализует 19 типов состязательных атак на модели компьютерного зрения (CV). Атаки создают минимально изменённые изображения (adversarial examples), которые визуально неотличимы от оригиналов, но приводят к ошибочной классификации моделью.
Ключевые характеристики¶
| Параметр | Значение |
|---|---|
| Модальность | Image (компьютерное зрение) |
| Количество атак | 19 |
| Сервис | cv-adversarial |
| Режимы | Whitebox и Blackbox |
| GPU | Требуется для большинства атак |
| Время выполнения | 5--60 минут (зависит от атаки) |
Whitebox vs Blackbox¶
| Характеристика | Whitebox | Blackbox |
|---|---|---|
| Доступ к модели | Полный (веса, градиенты) | Только API (вход → выход) |
| Точность атаки | Высокая | Средняя |
| Скорость | Быстрая | Медленная (много запросов) |
| Требуется GPU | Да | Не обязательно |
| Применимость | Локальные/загруженные модели | Любые модели с API |
| Атаки | FGSM, I-FGSM, MI-FGSM, PGD, C&W, DeepFool, UAP, APP, TI, JSMA, L-BFGS, LogBarrier, ILA, TREMBA, ReColorAdv | ZOO, One Pixel, Simple BlackBox |
Примечание
Атаки SinIR и One Pixel поддерживают оба режима. ZOO может работать в обоих режимах, но наиболее эффективен в blackbox.
Сводная таблица атак¶
| # | attack_type | Название | Режим | GPU | Сложность | Время (мин) | Ключевой параметр |
|---|---|---|---|---|---|---|---|
| 1 | cv_fgsm |
FGSM | Whitebox | Да | Низкая | 5 | epsilon |
| 2 | cv_ifgsm |
I-FGSM (BIM) | Whitebox | Да | Средняя | 10 | epsilon, iterations |
| 3 | cv_mifgsm |
MI-FGSM | Whitebox | Да | Средняя | 12 | epsilon, decay |
| 4 | cv_pgd |
PGD | Whitebox | Да | Высокая | 20 | epsilon, restarts |
| 5 | cv_cw |
C&W L2 | Whitebox | Да | Высокая | 30 | confidence, max_iterations |
| 6 | cv_deepfool |
DeepFool | Whitebox | Да | Средняя | 15 | overshoot |
| 7 | cv_uap |
UAP | Whitebox | Да | Высокая | 45 | xi, fooling_rate |
| 8 | cv_app |
Adversarial Patch | Whitebox | Да | Высокая | 60 | patch_size, target_class |
| 9 | cv_ti |
TI | Whitebox | Да | Средняя | 15 | kernel_size |
| 10 | cv_jsma |
JSMA | Whitebox | Да | Высокая | 25 | theta, gamma |
| 11 | cv_lbfgs |
L-BFGS | Whitebox | Да | Высокая | 20 | c |
| 12 | cv_logbarrier |
LogBarrier | Whitebox | Да | Высокая | 20 | barrier_weight |
| 13 | cv_ila |
ILA | Whitebox | Да | Средняя | 15 | feature_weight |
| 14 | cv_zoo |
ZOO | Both | Нет | Высокая | 40 | h, num_samples |
| 15 | cv_tremba |
TREMBA | Whitebox | Да | Средняя | 20 | ensemble_size |
| 16 | cv_onepixel |
One Pixel | Both | Нет | Высокая | 30 | num_pixels |
| 17 | cv_recoloradv |
ReColorAdv | Whitebox | Да | Средняя | 15 | epsilon |
| 18 | cv_sinir |
SinIR | Both | Да | Низкая | 10 | std |
| 19 | cv_simple_blackbox |
Simple BlackBox | Blackbox | Нет | Средняя | 15 | max_queries |
Общие параметры¶
Следующие параметры доступны для всех CV-атак:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
image_source |
string | "default" |
Источник изображения: default (предустановленное), upload (загруженное), url (по ссылке). Устаревший, рекомендуется image_file_id |
image_file_id |
string (UUID) | "00000000-0000-0000-0002-000000000001" |
UUID файла изображения из таблицы image_files. Предпочтительный способ |
image_url |
string (URI) | — | URL изображения (при image_source='url') |
targeted |
boolean | false |
Целевая атака: стремится классифицировать изображение как target_class |
target_class |
integer / null | null |
Индекс целевого класса (обязателен при targeted=true) |
Детальное описание атак¶
1. FGSM — Fast Gradient Sign Method¶
Тип: cv_fgsm | Режим: Whitebox | GPU: Да | Сложность: Низкая
Одношаговая атака на основе знака градиента функции потерь. Самая быстрая атака, но создаёт наиболее заметные возмущения.
Принцип: Вычисляет градиент потерь по входному изображению и сдвигает каждый пиксель на epsilon в направлении знака градиента.
| Параметр | Тип | По умолчанию | Диапазон | Описание |
|---|---|---|---|---|
epsilon |
number | 0.03 |
0.0--1.0 | Максимальная величина возмущения (L-inf норма). Типичное значение для ImageNet: 0.03 |
Совет
epsilon = 0.03 — хороший баланс между незаметностью и эффективностью. При epsilon > 0.1 возмущения становятся заметны визуально.
Ссылка: Goodfellow et al., 2014
2. I-FGSM — Iterative FGSM (BIM)¶
Тип: cv_ifgsm | Режим: Whitebox | GPU: Да | Сложность: Средняя
Итеративная версия FGSM: применяет FGSM многократно с меньшим шагом. Более эффективна, чем одношаговый FGSM.
| Параметр | Тип | По умолчанию | Диапазон | Описание |
|---|---|---|---|---|
epsilon |
number | 0.03 |
0.0--1.0 | Максимальное суммарное возмущение (L-inf) |
alpha |
number | null (auto) |
0.0--1.0 | Размер шага на итерацию. По умолчанию: epsilon / iterations |
iterations |
integer | 10 |
1--1000 | Количество итераций атаки |
Ссылка: Kurakin et al., 2016
3. MI-FGSM — Momentum Iterative FGSM¶
Тип: cv_mifgsm | Режим: Whitebox | GPU: Да | Сложность: Средняя
Итеративная атака с накоплением импульса (momentum) градиента. Улучшает переносимость атак на другие модели (transferability).
| Параметр | Тип | По умолчанию | Диапазон | Описание |
|---|---|---|---|---|
epsilon |
number | 0.03 |
0.0--1.0 | Максимальное возмущение |
alpha |
number | null (auto) |
0.0--1.0 | Размер шага на итерацию |
iterations |
integer | 10 |
1--1000 | Количество итераций |
decay |
number | 1.0 |
0.0--1.0 | Коэффициент затухания импульса |
Ссылка: Dong et al., 2018
4. PGD — Projected Gradient Descent¶
Тип: cv_pgd | Режим: Whitebox | GPU: Да | Сложность: Высокая
«Золотой стандарт» whitebox-атак первого порядка. Проецирует возмущения обратно в epsilon-шар на каждой итерации. Поддерживает случайную инициализацию (random restarts) для нахождения более сильных adversarial examples.
| Параметр | Тип | По умолчанию | Диапазон | Описание |
|---|---|---|---|---|
epsilon |
number | 0.03 |
0.0--1.0 | Максимальное возмущение (L-inf) |
alpha |
number | 0.01 |
0.0--1.0 | Размер шага на итерацию |
iterations |
integer | 40 |
1--1000 | Количество итераций |
restarts |
integer | 1 |
1--100 | Количество случайных перезапусков |
random_start |
boolean | true |
— | Инициализация со случайным возмущением |
Совет
Увеличение restarts до 5--10 значительно повышает успешность атаки, но пропорционально увеличивает время выполнения.
Ссылка: Madry et al., 2017
5. C&W — Carlini & Wagner L2¶
Тип: cv_cw | Режим: Whitebox | GPU: Да | Сложность: Высокая
Оптимизационная атака, находящая минимальное L2-возмущение. Одна из самых эффективных атак, создаёт практически неразличимые adversarial examples. Эффективна против defensive distillation.
| Параметр | Тип | По умолчанию | Диапазон | Описание |
|---|---|---|---|---|
confidence |
number | 0.0 |
0.0+ | Маржин уверенности для ошибочной классификации |
learning_rate |
number | 0.01 |
0.0001--1.0 | Скорость обучения оптимизатора |
binary_search_steps |
integer | 9 |
1--20 | Шагов бинарного поиска для константы c |
max_iterations |
integer | 1000 |
1--10000 | Максимум итераций оптимизации |
initial_const |
number | 0.001 |
0.0+ | Начальное значение константы c |
Ссылка: Carlini & Wagner, 2017
6. DeepFool¶
Тип: cv_deepfool | Режим: Whitebox | GPU: Да | Сложность: Средняя
Находит минимальное возмущение для пересечения границы решения. Работает только в нецелевом режиме (untargeted).
| Параметр | Тип | По умолчанию | Диапазон | Описание |
|---|---|---|---|---|
max_iterations |
integer | 50 |
1--500 | Максимум итераций |
overshoot |
number | 0.02 |
0.0--1.0 | Коэффициент перехода через границу решения |
num_classes |
integer | 10 |
2--10000 | Количество классов для рассмотрения (для производительности) |
Примечание
DeepFool не поддерживает targeted=true. Атака всегда направлена на переход в ближайший ошибочный класс.
Ссылка: Moosavi-Dezfooli et al., 2016
7. UAP — Universal Adversarial Perturbation¶
Тип: cv_uap | Режим: Whitebox | GPU: Да | Сложность: Высокая
Генерирует единое возмущение, которое вызывает ошибочную классификацию на любом входном изображении. Крайне опасна, так как одно возмущение аффектит всех пользователей.
| Параметр | Тип | По умолчанию | Диапазон | Описание |
|---|---|---|---|---|
max_iterations |
integer | 10 |
1--100 | Максимум внешних итераций |
delta |
number | 0.2 |
0.0--1.0 | Размер шага обновления возмущения |
xi |
number | 10.0 |
0.0+ | Максимальная норма возмущения (L-inf или L2) |
p_norm |
string | "inf" |
inf / 2 |
Тип нормы для ограничения возмущения |
fooling_rate |
number | 0.8 |
0.0--1.0 | Целевой процент успешных атак |
Ссылка: Moosavi-Dezfooli et al., 2017
8. APP — Adversarial Patch¶
Тип: cv_app | Режим: Whitebox | GPU: Да | Сложность: Высокая
Генерирует печатный патч, который при размещении на изображении вызывает ошибочную классификацию. Эффективна в реальном мире (physical-world attack). Работает только в целевом режиме.
| Параметр | Тип | По умолчанию | Диапазон | Описание |
|---|---|---|---|---|
patch_size |
integer | 50 |
10--300 | Размер патча в пикселях |
patch_location |
string | "random" |
center / random / corner |
Место размещения патча на изображении |
learning_rate |
number | 1.0 |
0.0001--10.0 | Скорость обучения оптимизатора |
max_iterations |
integer | 500 |
1--5000 | Максимум итераций оптимизации |
tv_weight |
number | 0.0 |
0.0+ | Вес Total Variation регуляризации (для гладкости патча) |
target_class |
integer | 0 |
0+ | Целевой класс (обязательный параметр) |
Внимание
Параметр target_class является обязательным. APP не поддерживает нецелевой режим.
Ссылка: Brown et al., 2017
9. TI — Translation-Invariant¶
Тип: cv_ti | Режим: Whitebox | GPU: Да | Сложность: Средняя
Улучшает переносимость атак путём свёртки градиентов с Gaussian-ядром, моделирующим трансляции. Атака менее зависима от конкретных позиций пикселей.
| Параметр | Тип | По умолчанию | Диапазон | Описание |
|---|---|---|---|---|
epsilon |
number | 0.03 |
0.0--1.0 | Максимальное возмущение |
kernel_size |
integer | 5 |
3--15 | Размер Gaussian-ядра (нечётное число) |
iterations |
integer | 10 |
1--100 | Количество итераций |
Ссылка: Dong et al., 2019
10. JSMA — Jacobian Saliency Map Attack¶
Тип: cv_jsma | Режим: Whitebox | GPU: Да | Сложность: Высокая
Использует матрицу Якоби для определения наиболее значимых пикселей. Модифицирует только самые влиятельные пиксели для достижения ошибочной классификации.
| Параметр | Тип | По умолчанию | Диапазон | Описание |
|---|---|---|---|---|
theta |
number | 0.1 |
0.0--1.0 | Величина изменения на пиксель |
gamma |
number | 0.1 |
0.0--1.0 | Максимальная доля модифицируемых пикселей |
max_iterations |
integer | 1000 |
1--5000 | Максимум модификаций пикселей |
Ссылка: Papernot et al., 2016
11. L-BFGS¶
Тип: cv_lbfgs | Режим: Whitebox | GPU: Да | Сложность: Высокая
Одна из первых атак на нейронные сети. Использует квази-ньютоновский оптимизатор L-BFGS-B для нахождения минимальных возмущений.
| Параметр | Тип | По умолчанию | Диапазон | Описание |
|---|---|---|---|---|
c |
number | 0.01 |
0.0+ | Баланс между потерями классификации и величиной возмущения |
max_iterations |
integer | 100 |
1--1000 | Максимум итераций оптимизатора |
Ссылка: Szegedy et al., 2013
12. LogBarrier¶
Тип: cv_logbarrier | Режим: Whitebox | GPU: Да | Сложность: Высокая
Использует метод внутренних точек с логарифмическими барьерными функциями для плавного соблюдения ограничений на возмущения.
| Параметр | Тип | По умолчанию | Диапазон | Описание |
|---|---|---|---|---|
c |
number | 1.0 |
0.0+ | Вес потерь классификации |
barrier_weight |
number | 0.01 |
0.0+ | Вес штрафа логарифмического барьера |
iterations |
integer | 100 |
1--500 | Итераций оптимизации |
learning_rate |
number | 0.01 |
0.0001--1.0 | Скорость обучения |
13. ILA — Intermediate Level Attack¶
Тип: cv_ila | Режим: Whitebox | GPU: Да | Сложность: Средняя
Атакует промежуточные слои нейронной сети, а не только выходной слой. Улучшает переносимость атак на другие модели.
| Параметр | Тип | По умолчанию | Диапазон | Описание |
|---|---|---|---|---|
epsilon |
number | 0.03 |
0.0--1.0 | Максимальное возмущение |
iterations |
integer | 10 |
1--100 | Количество итераций |
feature_weight |
number | 1.0 |
0.0+ | Вес потерь на промежуточных признаках |
Ссылка: Huang et al., 2019
14. ZOO — Zeroth Order Optimization¶
Тип: cv_zoo | Режим: Both (Whitebox + Blackbox) | GPU: Нет | Сложность: Высокая
Blackbox-атака, оценивающая градиенты методом конечных разностей. Требует только доступ к предсказаниям модели (без градиентов).
| Параметр | Тип | По умолчанию | Диапазон | Описание |
|---|---|---|---|---|
epsilon |
number | 0.1 |
0.0--1.0 | Максимальное возмущение |
learning_rate |
number | 0.01 |
0.0001--1.0 | Размер шага обновления |
max_iterations |
integer | 500 |
1--5000 | Максимум итераций атаки |
h |
number | 0.0001 |
0.00001+ | Шаг конечных разностей |
num_samples |
integer | 128 |
1--1000 | Количество координатных сэмплов на итерацию |
Ссылка: Chen et al., 2017
15. TREMBA — Transfer-based Ensemble¶
Тип: cv_tremba | Режим: Whitebox | GPU: Да | Сложность: Средняя
Использует ансамбль входных трансформаций для генерации робастных adversarial-возмущений с высокой переносимостью.
| Параметр | Тип | По умолчанию | Диапазон | Описание |
|---|---|---|---|---|
epsilon |
number | 0.03 |
0.0--1.0 | Максимальное возмущение |
iterations |
integer | 10 |
1--100 | Количество итераций |
ensemble_size |
integer | 5 |
1--20 | Количество входных трансформаций |
diversity_prob |
number | 0.5 |
0.0--1.0 | Вероятность применения input diversity |
Ссылка: Huang & Zhang, 2019
16. One Pixel Attack¶
Тип: cv_onepixel | Режим: Both | GPU: Нет | Сложность: Высокая
Модифицирует от 1 до 10 пикселей с помощью дифференциальной эволюции. Демонстрирует хрупкость моделей к минимальным изменениям.
| Параметр | Тип | По умолчанию | Диапазон | Описание |
|---|---|---|---|---|
num_pixels |
integer | 1 |
1--10 | Количество модифицируемых пикселей |
max_iterations |
integer | 100 |
1--1000 | Максимум итераций дифференциальной эволюции |
population_size |
integer | 400 |
10--1000 | Размер популяции DE |
Ссылка: Su et al., 2019
17. ReColorAdv — Color Transform Attack¶
Тип: cv_recoloradv | Режим: Whitebox | GPU: Да | Сложность: Средняя
Создаёт adversarial examples путём цветовых трансформаций (а не пиксельных возмущений). Более семантически осмысленная атака.
| Параметр | Тип | По умолчанию | Диапазон | Описание |
|---|---|---|---|---|
epsilon |
number | 0.3 |
0.0--1.0 | Максимальное отклонение цветовой матрицы от единичной |
iterations |
integer | 50 |
1--500 | Итераций оптимизации |
learning_rate |
number | 0.01 |
0.0001--1.0 | Скорость обучения |
Ссылка: Laidlaw & Feizi, 2019
18. SinIR — Gaussian Noise Attack¶
Тип: cv_sinir | Режим: Both | GPU: Да | Сложность: Низкая
Применяет структурированный Gaussian-шум, оптимизированный для ошибочной классификации. Использует пространственно коррелированный шум для менее заметных возмущений.
| Параметр | Тип | По умолчанию | Диапазон | Описание |
|---|---|---|---|---|
epsilon |
number | 0.05 |
0.0--1.0 | Максимальная величина шума |
std |
number | 0.01 |
0.0--1.0 | Начальное стандартное отклонение шума |
iterations |
integer | 50 |
1--500 | Итераций оптимизации |
learning_rate |
number | 0.01 |
0.0001--1.0 | Скорость обучения |
19. Simple BlackBox — Эволюционная blackbox-атака¶
Тип: cv_simple_blackbox | Режим: Blackbox | GPU: Нет | Сложность: Средняя
Комбинирует случайное исследование шума с эволюционной оптимизацией. Требует только предсказания модели (без градиентов). Подходит для тестирования реальных API с лимитами запросов.
| Параметр | Тип | По умолчанию | Диапазон | Описание |
|---|---|---|---|---|
epsilon |
number | 0.1 |
0.0--1.0 | Максимальное возмущение (L-inf) |
max_iterations |
integer | 100 |
1--500 | Максимум итераций |
population_size |
integer | 20 |
2--100 | Размер популяции эволюционной стратегии |
mutation_rate |
number | 0.1 |
0.01--1.0 | Частота мутаций |
max_queries |
integer | 5000 |
10--100000 | Бюджет API-запросов |
Совет
Для API с жёсткими rate limits установите max_queries на уровне 1000--2000 и уменьшите population_size до 10.
Ссылка: Guo et al., 2019
Загрузка весов модели¶
Для whitebox-атак необходимы веса целевой модели. Система поддерживает:
- Предустановленные модели: VGG-19, ResNet-50 (доступны без загрузки).
- Загружаемые модели: загрузка весов в формате PyTorch (.pt, .pth) через раздел Управление моделями.
Примечание
Blackbox-атаки (ZOO, One Pixel, Simple BlackBox) не требуют загрузки весов — они работают через API модели.
Устранение неполадок¶
GPU недоступен
Симптом: Ошибка CUDA not available при запуске whitebox-атаки.
Решения:
- Убедитесь, что в Docker Compose включена поддержка GPU (
deploy.resources.reservations.devices). - Проверьте установку NVIDIA Container Toolkit.
- Используйте blackbox-атаки (ZOO, One Pixel, Simple BlackBox) если GPU недоступен.
Несовместимость формата весов
Симптом: Ошибка загрузки весов модели state_dict mismatch.
Решения:
- Убедитесь, что формат весов соответствует архитектуре модели (VGG-19, ResNet-50).
- Проверьте версию PyTorch (требуется 2.0+).
- Используйте предустановленные модели для тестирования.
Epsilon слишком велик
Симптом: Adversarial examples сильно отличаются визуально от оригинала.
Решения:
- Уменьшите
epsilonдо 0.01--0.03 для ImageNet-моделей. - Используйте C&W или DeepFool — они минимизируют возмущение автоматически.
- Включите Total Variation регуляризацию (
tv_weight > 0) для APP.
Пример результата CV-атаки¶
Ниже показан типичный результат успешной adversarial-атаки FGSM на модель ResNet-50. Оригинальное изображение панды классифицируется корректно, а adversarial-изображение (визуально идентичное) распознаётся как гиббон.
{
"vulnerability_id": "vuln-cv-001",
"attack_type": "cv_fgsm",
"severity": "high",
"dread_score": 7.4,
"original_image": "panda.jpg",
"adversarial_image": "panda_adversarial_fgsm_eps003.png",
"original_prediction": {"class": "giant_panda", "confidence": 0.95},
"adversarial_prediction": {"class": "gibbon", "confidence": 0.82},
"epsilon_used": 0.03,
"l2_norm": 2.34,
"ssim": 0.987,
"perturbation_visible": false
}
Ключевые наблюдения:
- Confidence drop: уверенность модели снизилась с 95% (panda) до 82% (gibbon) — модель «уверена» в ошибочном классе.
- SSIM = 0.987: структурное сходство между оригиналом и adversarial-изображением практически идеальное — человек не отличит.
- perturbation_visible = false: система автоматически определила, что возмущение невидимо для человека.
Рекомендации по выбору epsilon¶
Параметр epsilon определяет максимальную величину возмущения пикселей (L-inf норма). Выбор epsilon зависит от целей тестирования:
| Epsilon | Визуальное качество | Эффективность | Рекомендуемое применение |
|---|---|---|---|
| 0.01 | Возмущение минимально, абсолютно незаметно | Низкая — может не обмануть модель, особенно защищённую | Чувствительные приложения (медицина, беспилотники), тестирование робастных моделей |
| 0.03 | Стандартное значение, незаметно для человеческого глаза | Высокая — эффективно против большинства моделей | Основное значение для тестирования. Оптимальный баланс скрытности и эффективности |
| 0.1 | Заметные артефакты при внимательном рассмотрении | Очень высокая — обманывает практически любую модель | Тестирование на проникновение, оценка worst-case сценариев |
| 0.3 | Явно видимые искажения, изображение деградирует | Максимальная | Только для стресс-тестирования и демонстрации принципа атаки |
Практическая рекомендация
Начинайте тестирование с epsilon = 0.03. Если атака не успешна, увеличьте до 0.05 или 0.1. Если вам важна реалистичность атаки (оценка рисков в продакшене), используйте epsilon <= 0.03.
Интерпретация метрик¶
При анализе результатов CV-атак система предоставляет несколько метрик качества adversarial-возмущения:
L2 norm (евклидово расстояние)¶
Расстояние между оригинальным и adversarial-изображением в евклидовом пространстве пикселей.
| L2 norm | Интерпретация |
|---|---|
| < 1.0 | Минимальное возмущение, крайне высокое качество атаки |
| 1.0 — 3.0 | Типичное значение для успешных атак при epsilon = 0.03 |
| 3.0 — 10.0 | Умеренное возмущение, может быть заметно при попиксельном сравнении |
| > 10.0 | Значительное возмущение, визуально различимое |
Чем ниже L2 norm при успешной атаке, тем опаснее уязвимость — атакующему достаточно минимальных изменений для обмана модели.
SSIM (Structural Similarity Index)¶
Мера структурного сходства между оригинальным и adversarial-изображением. Значения от 0.0 (полностью различны) до 1.0 (идентичны).
| SSIM | Интерпретация |
|---|---|
| > 0.95 | Изображения визуально неразличимы для человека. Атака реалистична |
| 0.90 — 0.95 | Минимальные отличия, заметные только при прямом попиксельном сравнении |
| 0.80 — 0.90 | Отличия заметны при внимательном рассмотрении |
| < 0.80 | Явные визуальные артефакты |
Confidence drop (падение уверенности)¶
Разница между уверенностью модели в правильном классе на оригинале и уверенностью в ошибочном классе на adversarial-примере.
- Высокий confidence drop (например, 95% → 10%): модель полностью теряет уверенность — сильная уязвимость.
- Низкий confidence drop (например, 95% → 85%): модель лишь немного менее уверена — слабая уязвимость.
- Adversarial confidence > 80%: модель «уверена» в ошибочном классе — наиболее опасный сценарий, атака не будет обнаружена системами мониторинга на основе порога уверенности.