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

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

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

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

Примечание

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

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

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

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

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

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

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

Запуск

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

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