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

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

Детектор аномалий — сервис, обеспечивающий стабильность выполнения сканирований.

Конфигурация детектора аномалий состоит из описания четырёх механизмов:

  • механизма блокировки запросов — отвечает за блокирование запросов определённого типа;
  • механизма контроля RPS — отвечает за регулирование параметра RPS в ходе сканирования;
  • механизма отмены сканирования — отвечает за отмену задач модулей сканирования при определённых условиях;
  • механизм анализа ответов с помощью LLM — во время сканирования отвечает за проверку HTTP-ответов на наличие аномалий. Анализируются:

    • трассировка стека,
    • карта директорий,
    • записи журнала об исключениях,
    • утечки чувствительных данных и исходного кода,
    • отражённые векторы атаки,
    • внутренние диагностические сообщения.

    Найденные проблемы сохраняются в сканировании в качестве тегов с меткой AI Anomaly Detector на ресурсах и конечных точках.

Примечание

Некоторые из механизмов могут отсутствовать в конфигурации. В таком случае отсутствующий механизм не создаётся в детекторе аномалий.

Механизм блокировки запросов

  1. Механизм создаёт хранилище токенов для каждого сочетания «HTTP-метод + URL-адрес без параметров запроса», которое инициализируется нулём.
  2. В конфигурации указываются ожидаемые результаты ответа на запрос (тайм-аут или коды состояния HTTP) и соответствующее количество токенов, которое будет добавлено в хранилище токенов.
  3. При заполнении хранилища запросы с соответствующим сочетанием «HTTP-метод + URL-адрес без параметров запроса» будут блокироваться.
  4. Из хранилища с постоянной скоростью изымаются токены. В случае блокировки запросов с соответствующим сочетанием такие запросы могут быть разблокированы при полном опустошении хранилища.

Поля, описывающие конфигурацию данного механизма, представлены в таблице ниже. Если значение по умолчанию для параметра не задано, то в случае его отсутствия в конфигурации работа механизма завершится с ошибкой.

Поле Тип Значение по умолчанию Описание
capacity Вещественное положительное число Не задано Ёмкость хранилища токенов
flow_rate Вещественное неотрицательное число 0 Скорость изъятия токенов из хранилища токенов
unblock_enabled Логический false Регулирует, должны ли быть запросы для соответствующего сочетания «HTTP-метод + URL-адрес без параметров запроса» разблокированы, когда хранилище токенов опустеет
status_code_values.status_code Целое число Не задано Код состояния HTTP, появление которого в ответе на запрос ведёт к добавлению определённого количества токенов в хранилище токенов
status_code_values.value Вещественное число 0 Количество токенов, которое будет добавлено в хранилище токенов в результате появления соответствующего кода состояния HTTP
net_error_values.net_error Перечислимый тип {timeout} Ошибка, появление которой в ответе на запрос ведёт к добавлению определённого количества токенов в хранилище токенов. В настоящий момент поддерживается только значение {timeout}
net_error_values.value Вещественное число 0 Количество токенов, которое будет добавлено в хранилище токенов в результате появления соответствующей ошибки

Пример конфигурации

request_blocker:
  capacity: 100
  flow_rate: 1
  unblock_enabled: true

  status_code_values:
    - status_code: 200
      value: -1

    - status_code: 500
      value: 2

  net_error_values:
    - net_error: timeout
      value: 3

Механизм контроля RPS

  1. Механизм создаёт по одному хранилищу токенов для каждого процесса сканирования отдельно взятого модуля и инициализируется значением, равным половине ёмкости хранилища токенов.
  2. При заполнении хранилища в первый раз, если при настройке ограничений цели не было указано ограничение RPS, то значение данного параметра становится равным max_rps. В противном случае RPS не будет превышать указанное ограничение.
  3. Увеличение и уменьшение RPS происходит с использованием заданного коэффициента. Если хранилище опустело — значение RPS увеличивается, но так, чтобы оно не было больше параметра max_rps. Если хранилище заполнилось — значение RPS уменьшается так, чтобы оно не было меньше параметра min_rps.

Поля, описывающие конфигурацию данного механизма, представлены в таблице ниже. Если значение по умолчанию для параметра не задано, то в случае его отсутствия в конфигурации работа механизма завершится с ошибкой.

Поле Тип Значение по умолчанию Описание
capacity Вещественное положительное число Не задано Ёмкость хранилища токенов
flow_rate Вещественное неотрицательное число 0 Скорость изъятия токенов из хранилища токенов
min_rps Вещественное положительное число 0 Минимальное значение RPS
max_rps Вещественное положительное число 100 Максимальное значение RPS. Не может быть меньше минимального значения RPS. Не влияет на работу механизма, если для цели было указано ограничение RPS
rps_ratio Вещественное число Не задано Коэффициент, регулирующий изменение значения RPS. Значение принадлежит интервалу (0; 1), не включая границы. Увеличение и уменьшение параметра RPS достигается соответственно путём деления или умножения текущего значения параметра на коэффициент
status_code_values.status_code Целое число Не задано Код состояния HTTP, появление которого в ответе на запрос ведёт к добавлению определённого количества токенов в хранилище токенов
status_code_values.value Вещественное число 0 Количество токенов, которое будет добавлено в хранилище токенов в результате появления соответствующего кода состояния HTTP

Пример конфигурации

rps_controller:
  capacity: 100
  flow_rate: 1
  min_rps: 8
  max_rps: 18
  rps_ratio: 0.75

  status_code_values:
    - status_code: 200
      value: -1

    - status_code: 429
      value: 4

Механизм отмены сканирования

  1. Механизм создаёт по одному хранилищу токенов для каждого процесса сканирования отдельно взятого модуля, которое инициализируется нулём.
  2. В конфигурации указываются ожидаемые результаты ответа на запрос (тайм-аут или коды состояния HTTP) и соответствующее количество токенов, которое будет добавлено в хранилище токенов.
  3. Из хранилища с постоянной скоростью изымаются токены.
  4. При заполнении хранилища соответствующий процесс сканирования отдельно взятого модуля будет отменяться.

Поля, описывающие конфигурацию данного механизма, представлены в таблице ниже. Если значение по умолчанию для параметра не задано, то в случае его отсутствия в конфигурации работа механизма завершится с ошибкой.

Поле Тип Значение по умолчанию Описание
capacity Вещественное положительное число Не задано Ёмкость хранилища токенов
flow_rate Вещественное неотрицательное число 0 Скорость изъятия токенов из хранилища токенов
status_code_values.status_code Целое число Не задано Код состояния HTTP, появление которого в ответе на запрос ведёт к добавлению определённого количества токенов в хранилище токенов
status_code_values.value Вещественное число 0 Количество токенов, которое будет добавлено в хранилище токенов в результате появления соответствующего кода состояния HTTP

Пример конфигурации

scan_canceller:
  capacity: 100
  flow_rate: 1

  status_code_values:
    - status_code: 200
      value: -1

    - status_code: 429
      value: 4

Механизм анализа ответов с помощью LLM

Конфигурация в fuchsiad

Для работы механизма необходимо в конфигурационный файл fuchsiad добавить секции embedders (embedding-модель) и llms (LLM).

Поле Обязательное Значение по умолчанию Описание
provider да Указывается только open_ai (любой OpenAI-совместимый API)
base_url да Адрес API
lm_project нет Шлюз искусственного интеллекта (оставить пустым, если не используется)
api_token да Токен доступа к API
model да Имя модели
dimensions для embedders да,
для llms нет
Размерность векторного представления слов (в символах)
context_length да Контекст модели (не меньше, чем chunk_size)
chunk_size для embedders да,
для llms нет
Размер блока текста (в символах)
rps_limit нет 0 Ограничение RPS (0 для отключения ограничения)
concurrency нет 0 Максимальное число параллельных запросов (0 для отключения ограничения)
timeout нет 30 Тайм-аут запроса (в секундах)
labels да Указывается только ai-anomaly-detector для включения детектора аномалий

Пример:

embedders:
  - provider: open_ai
    base_url: http://example-gateway.ai/v1
    lm_project: "some_project"
    model: qwen3-embedding-0.6B
    dimensions: 1024
    api_token: <токен>
    context_length: 8192
    chunk_size: 1500
    rps_limit: 20
    concurrency: 10
    timeout: 30
    labels:
      - ai-anomaly-detector

llms:
  - provider: open_ai
    base_url: http://example-gateway.ai/v1
    lm_project: "some_project"
    model: deepseek-v4-flash
    api_token: <токен>
    context_length: 1000000
    rps_limit: 3
    concurrency: 8
    timeout: 60
    labels:
      - ai-anomaly-detector

Опционально, есть возможность указать параметры анализатора в секции llm_response_analyzer (все поля необязательные).

Поле Значение по умолчанию Описание
workers 32 Количество строк для параллельной обработки
max_content_length 10000 Максимальная длина контента ответа для LLM
vector_db_similarity_threshold 0.91 Порог для семантической дедупликации с помощью эмбеддингов. Чем значение ниже, тем меньше запросов к LLM
templater_similarity_threshold 0.4 Порог схожести для онлайн шаблонизатора. Чем меньше значение тем меньше запросов к эмбеддеру и LLM
log_level INFO Уровень журналирования (DEBUG, INFO, WARNING, ERROR,CRITICAL)

Пример:

llm_response_analyzer:
  workers: 32
  max_content_length: 10000
  vector_db_similarity_threshold: 0.91
  templater_similarity_threshold: 0.4
  log_level: INFO

Конфигурация детектора аномалий

  1. Если конфигурация детектора аномалий отсутствует, создайте файл в формате YAML, например /etc/fuchsia/anomaly.yml.
  2. Добавьте следующую строчку в файл (фигурные скобки обязательны):

    llm_response_analyzer: {}
    

Запуск

В настоящее время запуск детектора аномалий осуществляется только с помощью консольного клиента fuchsiactl.

fuchsiactl scan --anomaly-checker-config {path_to_anomaly_checker_config_file}