Детектор аномалий¶
Детектор аномалий — сервис, обеспечивающий стабильность выполнения сканирований.
Конфигурация детектора аномалий состоит из описания четырёх механизмов:
- механизма блокировки запросов — отвечает за блокирование запросов определённого типа;
- механизма контроля RPS — отвечает за регулирование параметра RPS в ходе сканирования;
- механизма отмены сканирования — отвечает за отмену задач модулей сканирования при определённых условиях;
-
механизм анализа ответов с помощью LLM — во время сканирования отвечает за проверку HTTP-ответов на наличие аномалий. Анализируются:
- трассировка стека,
- карта директорий,
- записи журнала об исключениях,
- утечки чувствительных данных и исходного кода,
- отражённые векторы атаки,
- внутренние диагностические сообщения.
Найденные проблемы сохраняются в сканировании в качестве тегов с меткой
AI Anomaly Detectorна ресурсах и конечных точках.
Примечание
Некоторые из механизмов могут отсутствовать в конфигурации. В таком случае отсутствующий механизм не создаётся в детекторе аномалий.
Механизм блокировки запросов¶
- Механизм создаёт хранилище токенов для каждого сочетания «HTTP-метод + URL-адрес без параметров запроса», которое инициализируется нулём.
- В конфигурации указываются ожидаемые результаты ответа на запрос (тайм-аут или коды состояния HTTP) и соответствующее количество токенов, которое будет добавлено в хранилище токенов.
- При заполнении хранилища запросы с соответствующим сочетанием «HTTP-метод + URL-адрес без параметров запроса» будут блокироваться.
- Из хранилища с постоянной скоростью изымаются токены. В случае блокировки запросов с соответствующим сочетанием такие запросы могут быть разблокированы при полном опустошении хранилища.
Поля, описывающие конфигурацию данного механизма, представлены в таблице ниже. Если значение по умолчанию для параметра не задано, то в случае его отсутствия в конфигурации работа механизма завершится с ошибкой.
| Поле | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
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¶
- Механизм создаёт по одному хранилищу токенов для каждого процесса сканирования отдельно взятого модуля и инициализируется значением, равным половине ёмкости хранилища токенов.
- При заполнении хранилища в первый раз, если при настройке ограничений цели не было указано ограничение 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 |
Целое число | Не задано | Код состояния 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
Механизм отмены сканирования¶
- Механизм создаёт по одному хранилищу токенов для каждого процесса сканирования отдельно взятого модуля, которое инициализируется нулём.
- В конфигурации указываются ожидаемые результаты ответа на запрос (тайм-аут или коды состояния HTTP) и соответствующее количество токенов, которое будет добавлено в хранилище токенов.
- Из хранилища с постоянной скоростью изымаются токены.
- При заполнении хранилища соответствующий процесс сканирования отдельно взятого модуля будет отменяться.
Поля, описывающие конфигурацию данного механизма, представлены в таблице ниже. Если значение по умолчанию для параметра не задано, то в случае его отсутствия в конфигурации работа механизма завершится с ошибкой.
| Поле | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
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
Конфигурация детектора аномалий¶
- Если конфигурация детектора аномалий отсутствует, создайте файл в формате YAML, например
/etc/fuchsia/anomaly.yml. -
Добавьте следующую строчку в файл (фигурные скобки обязательны):
Запуск¶
В настоящее время запуск детектора аномалий осуществляется только с помощью консольного клиента fuchsiactl.