Перейти к содержанию

ASR Adversarial Service

Сервис adversarial-атак на модели распознавания речи (ASR). Тестирует модели типа Whisper на устойчивость к состязательным аудиозаписям через 6 типов атак.

Назначение

Принимает аудиофайлы и конфигурацию атаки, генерирует adversarial-аудио, которое модель распознаёт неверно или произносит заданные атакующим фразы (backdoor). Требует значительных вычислительных ресурсов для attacker-компонента.

Компоненты

Чарт разворачивает 5 отдельных Deployment:

Компонент K8s Service Роль resourcesPreset
api asr-api:8000 REST API + init-миграции micro
preparator подготовка задач small
attacker генерация adversarial-аудио (CPU/GPU интенсивно) medium
judge оценка качества атаки small
reporter формирование отчётов small

Зависимости

Входящие

Сервис Протокол Назначение
orchestrator NATS задания атак
ui-gateway HTTP обращается к asr-api

Исходящие

Сервис Назначение
postgres БД задач и результатов (схема asr_adversarial)
redis (DB 2) очереди задач
nats подписка/публикация
minio чтение аудио: audio-samples; запись: asr-attack-artifacts
minio чтение весов моделей: model-weights (отдельные credentials)
model-mgmt метаданные ASR-моделей
scan-profile параметры атаки

Values

Параметр По умолчанию Обязателен Описание
image.name да registry.appsec.global/appsecgenai-release/asr
image.tag да Версия образа
imagePullSecrets[0].name да imagePullSecret
secretEnv.DATABASE_URL да PostgreSQL connection string
secretEnv.S3_ACCESS_KEY да MinIO root user (артефакты атак)
secretEnv.S3_SECRET_KEY да MinIO root password
secretEnv.MODEL_WEIGHTS_S3_ACCESS_KEY да MinIO root user (веса моделей)
secretEnv.MODEL_WEIGHTS_S3_SECRET_KEY да MinIO root password (веса моделей)
env.S3_BUCKET "asr-attack-artifacts" нет Бакет для артефактов
env.S3_AUDIO_BUCKET "audio-samples" нет Бакет исходного аудио
env.MODEL_WEIGHTS_S3_BUCKET "model-weights" нет Бакет весов моделей
env.WHISPER_DEVICE "auto" нет cpu, cuda, или auto
env.OTEL_SDK_DISABLED нет "true" если нет otel-collector
global.url.redisUrl {svc: redis, port: 6379, scheme: redis, path: /2} нет
global.url.natsUrl {svc: nats, port: 4222, scheme: nats} нет
global.url.s3Endpoint {svc: minio, port: 9000, scheme: http} нет со схемой http://host:port
global.url.modelWeightsS3Endpoint {svc: minio, port: 9000, scheme: none} нет host:port без схемы
global.url.modelManagementUrl {svc: model-mgmt, port: 8000} нет
global.url.scanProfileUrl {svc: scan-profile, port: 8000} нет

Два S3 endpoint — разные форматы

asr использует два S3-клиента:

  • appsec_genai_shared (артефакты атак) — ожидает http://host:ports3Endpoint.scheme: http
  • Библиотека весов (model-weights) — ожидает host:port без схемы → modelWeightsS3Endpoint.scheme: none

Перепутать форматы = ConnectionError при старте attacker.

Пример values.yaml

# values-asr.yaml
image:
  name: registry.appsec.global/appsecgenai-release/asr
  tag: "<VERSION>"

imagePullSecrets:
  - name: harbor-cr

secretEnv:
  DATABASE_URL: "postgresql+asyncpg://genai_admin:<password>@postgres:5432/genai_db"
  S3_ACCESS_KEY: "<minio-root-user>"
  S3_SECRET_KEY: "<minio-root-password>"
  MODEL_WEIGHTS_S3_ACCESS_KEY: "<minio-root-user>"
  MODEL_WEIGHTS_S3_SECRET_KEY: "<minio-root-password>"

env:
  ENVIRONMENT: "production"
  AUTH_ENABLED: "true"
  OTEL_SDK_DISABLED: "true"
  S3_BUCKET: "asr-attack-artifacts"
  S3_AUDIO_BUCKET: "audio-samples"
  MODEL_WEIGHTS_S3_BUCKET: "model-weights"
  WHISPER_DEVICE: "auto"
  # MODEL_WEIGHTS_S3_SECURE: "true"   # при MinIO по HTTPS

global:
  url:
    redisUrl:               { svc: redis, port: 6379, scheme: redis, path: /2 }
    natsUrl:                { svc: nats,  port: 4222, scheme: nats }
    s3Endpoint:             { svc: minio, port: 9000, scheme: http }   # СО схемой
    modelWeightsS3Endpoint: { svc: minio, port: 9000, scheme: none }   # БЕЗ схемы
    modelManagementUrl:     { svc: model-mgmt,   port: 8000 }
    scanProfileUrl:         { svc: scan-profile, port: 8000 }

Установка

helm upgrade --install asr \
  oci://registry.appsec.global/appsecgenai-release/charts/asr \
  --version <VERSION> -n genai \
  --wait \
  -f values-asr.yaml

Время загрузки attacker

Компонент attacker загружает модель Whisper (~1.5 ГБ) при старте. При WHISPER_DEVICE=auto на узле без GPU загрузка займёт 5-10 минут. Увеличьте startupProbe.failureThreshold при необходимости.