Детектор аномалий¶
Детектор аномалий — сервис, обеспечивающий стабильность выполнения сканирований.
Конфигурация детектора аномалий состоит из описания двух механизмов:
- механизма блокировки запросов — отвечает за блокирование запросов определённого типа;
- механизма контроля RPS — отвечает за регулирование параметра RPS в ходе сканирования.
Примечание
Один из механизмов может отсутствовать в конфигурации. В таком случае отсутствующий механизм не создаётся в детекторе аномалий.
Механизм блокировки запросов¶
- Механизм создаёт хранилище токенов для каждого сочетания «HTTP-метод + URL-адрес без параметров запроса», которое инициализируется нулём.
- В конфигурации указываются ожидаемые результаты ответа на запрос (тайм-аут или статус-коды) и соответствующее количество токенов, которое будет добавлено в хранилище токенов.
- При заполнении хранилища запросы с соответствующим сочетанием «HTTP-метод + URL-адрес без параметров запроса» будут блокироваться.
- Из хранилища с постоянной скоростью изымаются токены. В случае блокировки запросов с соответствующим сочетанием такие запросы могут быть разблокированы при полном опустошении хранилища.
Поля, описывающие конфигурацию данного механизма, представлены в таблице ниже. Если значение по умолчанию для параметра не задано, то в случае его отсутствия в конфигурации работа механизма завершится с ошибкой.
| Поле | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
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¶
- Механизм создаёт по одному хранилищу токенов для каждого процесса сканирования отдельно взятого модуля и инициализируется значением, равным половине ёмкости хранилища токенов.
- При заполнении хранилища в первый раз, если при настройке ограничений цели не было указано ограничение RPS, то значение данного параметра становится равным
max_rps. В противном случае RPS не будет превышать указанное ограничение. - Увеличение и уменьшение 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.