Руководство по использованию облачного API для управления настройками Nemesida WAF.

Общие сведения

Функционал управления настройками включен по умолчанию (недоступно для тарифа Light), но его можно отключить, направив запрос на электронную почту.

Для управления настройками Nemesida WAF можно использовать облачный API.

Позволяет управлять:

  • настройками динамического модуля Nemesida WAF;
  • настройками Nemesida AI MLC;
  • поведенческими моделями;
  • синхронизацией между серверами настроек динамического модуля Nemesida WAF, Nemesida AI MLC;
  • правилами исключения сигнатур и расширенными правилами блокировки.

Управление настройками осуществляется с помощью специально составленных запросов. Каждый запрос должен содержать лицензионный ключ установленной копии Nemesida WAF. Допускается вместо лицензионного ключа передавать его SHA256-хеш.

Управление настройками Nemesida WAF с использованием облачного API

Журнал действий

Получить содержимое журнала действий:

# curl https://nemesida-security.com/nw/agent/get_event_log --data 'key=%Лицензионный ключ или его SHA256-хеш%'

При использовании недействительного лицензионного ключа ответ будет возвращаться с кодом 401.

Динамический модуль Nemesida WAF

Позволяет управлять настройками динамического модуля Nemesida WAF. Поддерживает следующие команды управления:

Команды управления
Получить настройки:

# curl https://nemesida-security.com/nw/agent/get_dyn_settings?format=json --data 'key=%Лицензионный ключ или его SHA256-хеш%'

Получить хеш-сумму настроек:

# curl https://nemesida-security.com/nw/agent/get_dyn_settings_hash --data 'key=%Лицензионный ключ или его SHA256-хеш%'

Получение хеш-суммы необходимо для подтверждения внесенных изменений.

Задать настройки:

# curl https://nemesida-security.com/nw/agent/public/set_dyn_settings --header 'Content-type: application/json' --data '{"token": "%Идентификационный токен%", "set": {"nwaf_ip_wl": "127.0.0.1, 127.0.0.2", "nwaf_ai_extra_host_lm": "example.com", "active": "true"}}'

где:

  • set — параметры настроек в формате JSON.

Удалить настройки:

# curl https://nemesida-security.com/nw/agent/public/set_dyn_settings --header 'Content-type: application/json' --data '{"token": "%Идентификационный токен%", "del": "nwaf_ip_wl"}'

где:

  • del — параметр настроек в формате JSON.

Идентификационный токен доступен в облачной версии веб-приложения.

Для управления доступны следующие параметры:

Поддерживаемые параметры
Параметр
Описание параметра
nwaf_limit

Устанавливает лимит заблокированных запросов. При превышении допустимого количества запросов, определенного опцией rate, IP-адрес будет заблокирован на время (в секундах), указанное в block_time.

Пример:

{... "nwaf_limit": "rate=5r/m block_time=600" ...}

Параметр domain является опциональным и требуется только для установки лимита заблокированных запросов для конкретного домена. Для этого необходимо привести параметр к виду: nwaf_limit rate=... block_time=... domain=.... Допускается использовать строгое соответствие и wildcard-значения: *, example.com, .example.com, *.example.com.

Пример:

{... "nwaf_limit": "domain=example.com rate=5r/m block_time=600" ...}

Для установки разных лимитов для разных доменов необходимо указать параметры для каждого из них.

Пример:

{... "nwaf_limit": "domain=a.example.com rate=5r/m block_time=300, domain=example.com rate=5r/m block_time=300" ...}

или

{... "nwaf_limit": "rate=10r/m block_time=600, domain=example.com rate=5r/m block_time=300" ...}

В последнем примере будут установлены лимиты на 5 запросов в минуту для домена example.com (с последующей блокировкой IP-адреса атакующего на 300 секунд), а также лимиты на 10 запросов в минуту для всех остальным доменов (с последующей блокировкой IP-адреса атакующего на 600 секунд).

nwaf_ip_wl

Деактивация механизма анализа запроса средствами Nemesida WAF для конкретного IP-адреса или подсети.

Пример:

{... "nwaf_ip_wl": "127.0.0.1, 192.168.0.1" ...}

При использовании "nwaf_ip_wl": "domain=example.com 127.0.0.1" механизм анализа будет деактивирован только при обращении с конкретного IP-адреса на конкретный домен. Опция domain является опциональной. Допускается использовать строгое соответствие и wildcard-значения: *, example.com, .example.com, *.example.com. В качестве IP-адреса допускается использовать адрес с маской подсети или диапазон адресов.

Пример:

{... "nwaf_ip_wl": "127.0.0.1, 192.168.61.0/24, 192.168.61.1-192.168.61.255" ...}

Для снижения количества ложных срабатываний рекомендуется указывать статический IP-адрес пользователей (администраторов, контент-менеджеров, редакторов) в параметре nwaf_ip_wl. Запросы, попадающие под действие параметра не будут блокироваться, передаваться в RabbitMQ, и, как результат, анализироваться модулем Nemesida AI. При использовании параметра будьте предельно осторожны.

Допускается использование IPv6 и IPv4-адресов.

nwaf_ip_lm

Настройка обработки запросов для конкретного IP-адреса или подсети с фиксацией в СУБД, но без фактической блокировки (режим IDS).

Пример:

{... "nwaf_ip_lm": "127.0.0.1, 192.168.0.1" ...}

При использовании "nwaf_ip_lm": "domain=example.com 127.0.0.1" пропуск будет производиться только при обращении с конкретного IP-адреса на конкретный домен. Опция domain является опциональной. Допускается использовать строгое соответствие и wildcard-значения: *, example.com, .example.com, *.example.com. В качестве IP-адреса допускается использовать адрес с маской подсети или диапазон адресов.

Пример:

{... "nwaf_ip_wl": "127.0.0.1, 192.168.61.0/24, 192.168.61.1-192.168.61.255" ...}

Допускается использование IPv6 и IPv4-адресов.

nwaf_host_wl

Деактивация механизма анализа запроса средствами Nemesida WAF для виртуального хоста. При параметре nwaf_host_wl * пропуск будет производиться для всех виртуальных хостов.

Пример использования одного значения:

{... "nwaf_host_wl": "*" ...}

или

{... "nwaf_host_wl": "example.com" ...}

или

{... "nwaf_host_wl": "*.example.com" ...}

Пример использования нескольких значений:

{... "nwaf_host_wl": "example.com, a.example.com" ...}

или

{... "nwaf_host_wl": "example.com, *.example.com" ...}
nwaf_host_lm

Настройка обработки запросов для конкретного виртуального хоста с фиксацией в СУБД, но без фактической блокировки (режим IDS). При параметре nwaf_host_lm * пропуск будет производиться для всех виртуальных хостов.

Пример использования одного значения:

{... "nwaf_host_lm": "*" ...}

или

{... "nwaf_host_lm": "example.com" ...}

или

{... "nwaf_host_lm": "*.example.com" ...}

Пример использования нескольких значений:

{... "nwaf_host_lm": "example.com, a.example.com" ...}

или

{... "nwaf_host_lm": "example.com, *.example.com" ...}
nwaf_mla_host_lm

Параметр, активирующий режим LM (IDS) для запросов, определенных модулем Nemesida AI MLA как нелегитимные.

В случае, если имя виртуального хоста из запроса попадает под действие параметра, то такой запрос фиксируется в системе управления базами данных, но не блокируется.

Пример использования одного значения:

{... "nwaf_mla_host_lm": "*" ...}

или

{... "nwaf_mla_host_lm": "example.com" ...}

или

{... "nwaf_mla_host_lm": "*.example.com" ...}

Пример использования нескольких значений:

{... "nwaf_mla_host_lm": "example.com, a.example.com" ...}

или

{... "nwaf_mla_host_lm": "example.com, *.example.com" ...}
nwaf_ai_extra_host_wl

Параметр, активирующий режим WL для запросов, определенных модулем Nemesida AI MLC как нелегитимные.

В случае, если имя виртуального хоста из запроса попадает под действие параметра, то такой запрос не фиксируется в СУБД и не блокируется.

Пример использования одного значения:

{... "nwaf_ai_extra_host_wl": "*" ...}

или

{... "nwaf_ai_extra_host_wl": "example.com" ...}

или

{... "nwaf_ai_extra_host_wl": "*.example.com" ...}

Пример использования нескольких значений:

{... "nwaf_ai_extra_host_wl": "example.com, a.example.com" ...}

или

{... "nwaf_ai_extra_host_wl": "example.com, *.example.com" ...}
nwaf_ai_extra_host_lm

Параметр, активирующий режим LM (IDS) для запросов, определенных модулем Nemesida AI MLC как нелегитимные.

В случае, если имя виртуального хоста из запроса попадает под действие параметра, то такой запрос фиксируется в СУБД, но не блокируется.

Пример использования одного значения:

{... "nwaf_ai_extra_host_lm": "*" ...}

или

{... "nwaf_ai_extra_host_lm": "example.com" ...}

или

{... "nwaf_ai_extra_host_lm": "*.example.com" ...}

Пример использования нескольких значений:

{... "nwaf_ai_extra_host_lm": "example.com, a.example.com" ...}

или

{... "nwaf_ai_extra_host_lm": "example.com, *.example.com" ...}
nwaf_bf_detect_host_lm

Параметр, активирующий режим LM для запросов, определенных модулем Nemesida AI MLC как атаки методом перебора (BT 7) и флуд (BT 9).

В случае, если имя виртуального хоста из запроса попадает под действие параметра, то такой запрос фиксируется в СУБД, но не блокируется.

Пример использования одного значения:

{... "nwaf_bf_detect_host_lm": "*" ...}

или

{... "nwaf_bf_detect_host_lm": ".example.com" ...}

или

{... "nwaf_bf_detect_host_lm": "*.example.com" ...}

Пример использования нескольких значений:

{... "nwaf_bf_detect_host_lm": "example.com, *.example.org" ...}
nwaf_ddos_detect_host_lm

Параметр, активирующий режим LM для запросов, определенных модулем Nemesida AI MLC как DDoS-атаки (BT 10).

В случае, если имя виртуального хоста из запроса попадает под действие параметра, то такой запрос фиксируется в СУБД, но не блокируется.

Пример использования одного значения:

{... "nwaf_ddos_detect_host_lm": "*" ...}

или

{... "nwaf_ddos_detect_host_lm": ".example.com" ...}

или

{... "nwaf_ddos_detect_host_lm": "*.example.com" ...}

Пример использования нескольких значений:

{... "nwaf_ddos_detect_host_lm": "example.com, example.org" ...}
nwaf_rmq_host_exclude

Параметр, исключающий отправку некоторых запросов на сервер RabbitMQ (очередь nwaf).

В случае, если имя виртуального хоста из запроса попадает под действие параметра, то такой запрос не передается в очередь nwaf, и, соотвественно, не обрабатывается модулем Nemesida AI MLC (не анализируется на предмет аномалий и атак методом перебора, не участвует при построении поведенческих моделей).

Пример использования одного значения:

{... "nwaf_rmq_host_exclude": "*" ...}

или

{... "nwaf_rmq_host_exclude": "example.com" ...}

или

{... "nwaf_rmq_host_exclude": "*.example.com" ...}

Пример использования нескольких значений:

{... "nwaf_rmq_host_exclude": "example.com, a.example.com" ...}

или

{... "nwaf_rmq_host_exclude": "example.com, *.example.com" ...}
nwaf_body_exclude

Параметр, исключающий анализ сигнатурным методом зоны BODY, а также отправку её содержимого в модули Nemesida AI MLA и Nemesida AI MLC. Опция полезна, если нет возможности изменить значение параметра client_body_buffer_size в файле /etc/nginx/nginx.conf.

Пример:

{... "nwaf_body_exclude": "*" ...}

или

{... "nwaf_body_exclude": "example.com/uploads.php" ...}

или

{... "nwaf_body_exclude": "example.com/uploads" ...}

При применении параметра учитывается точное совпадение пути (vhost/path).

Например, при значении: example.com/uploads исключение анализа зоны BODY будет применяться для запросов к example.com/uploads, но для example.com/uploads.php и example.com/uploads/index.php параметр применен не будет. При значении * исключение анализа зоны BODY будет применяться для любого адреса.

nwaf_put_body_exclude

Параметр, исключающий анализ сигнатурным методом содержимого зоны BODY для PUT-запросов, а также отправку содержимого зоны в модули Nemesida AI MLA и Nemesida AI MLC. Опция полезна при взаимодействии с веб-приложениями ownCloud или аналогичными, позволяющими клиенту производить загрузку файла на сервер по протоколу HTTP.

Пример использования одного значения:

{... "nwaf_put_body_exclude": "*" ...}

или

{... "nwaf_put_body_exclude": "example.com" ...}

или

{... "nwaf_put_body_exclude": "*.example.com" ...}

Пример использования нескольких значений:

{... "nwaf_put_body_exclude": "example.com, a.example.com" ...}

или

{... "nwaf_put_body_exclude": "example.com, *.example.com" ...}

Nemesida AI MLC

Позволяет управлять настройками модуля Nemesida AI MLC. Поддерживает следующие команды управления:

Команды управления
Получить настройки:

# curl https://nemesida-security.com/nw/agent/get_mlc_settings?format=json --data 'key=%Лицензионный ключ или его SHA256-хеш%'

Получить хеш-сумму настроек:

# curl https://nemesida-security.com/nw/agent/get_mlc_settings_hash --data 'key=%Лицензионный ключ или его SHA256-хеш%'

Задать список виртуальных хостов, для которых будут созданы и применены модели:

# curl https://nemesida-security.com/nw/agent/public/set_vhosts_list --header 'Content-type: application/json' --data '{"token": "%Идентификационный токен%", "vhosts_list": "example.com, example.org"}'

где:

  • vhosts_list — список виртуальных хостов, для которых будут созданы и применены модели.

Задать настройки:

# curl https://nemesida-security.com/nw/agent/public/set_mlc_settings --header 'Content-type: application/json' --data '{ "token": "%Идентификационный токен%", set": {"main__ai_extra": "false", "brute_interval": "11", "brute__brute_detect": ["example.com/a1", "example.com/b1"], "active": "true"}}'

где:

  • set — параметры настроек в формате JSON.

Удалить настройки:

# curl https://nemesida-security.com/nw/agent/public/set_mlc_settings --header 'Content-type: application/json' --data '{"token": "%Идентификационный токен%", "del": "brute_detect"}'

где:

  • del — параметры настроек в формате JSON.

Идентификационный токен доступен в облачной версии веб-приложения.

Поддерживаемые параметры
Параметр
Описание параметра

main__ai_extra

Активация/деактивация функционала дополнительного анализа запросов, позволяющего выявлять пропущенные атаки и производить временное блокирование их источника по IP-адресу. При неактивном функционале дополнительного анализа все незаблокированные запросы будут включены в обучающую выборку (за исключением запросов, попадающих под действие режима WL, или нелегитимных запросов, попавших под действия режима LM).

Пример:

{... "main__ai_extra": "true" ...}

ddos__enable
Активация/деактивация функционала выявления DDoS-атак.

Пример:

{... "ddos__enable": "true" ...}
ddos__wl_ip
Параметр, определяющий список IP-адресов в формате 1.2.3.4, для которых функционал выявления DDoS-атак будет отключен. Каждое последующее значение указывается через пробел.

Пример:

{... "ddos__wl_ip": "127.0.0.1" ...}
ddos__wl_url
Параметр, в котором задаются адреса как в формате vhost, так и в формате vhost/path, где:

vhost — имя виртуального хоста, для которого функционал выявления DDoS-атак будет отключен.
path — вхождение адреса ресурса.

Допускается использовать строгое соответствие и wildcard-значения: example.com, .example.com, *.example.com.

Пример:

{... "ddos__wl_url": ["example.com/feed", ".example.com/feed", "*.example.com/feed", "*/feed"] ...}
ddos__interval
Временной интервал (в секундах), в течение которого производится анализ запросов.

Пример:

{... "ddos__interval": "10" ...}
ddos__latest_only
Активация передачи в Nemesida WAF API только последнего заблокированного запроса по каждому IP-адресу. При значении false в Nemesida WAF API передаются все заблокированные запросы по каждому IP-адресу.

Пример:

{... "ddos__latest_only": "true" ...}
ddos__send_possible
Активация механизма передачи в Nemesida WAF API запросов с типом Possible DDoS. При значении false запросы в Nemesida WAF API передаваться не будут.

Пример:

{... "ddos__send_possible": "true" ...}

Приставка Possible добавляется к названию атаки в том случае, если её тип не был достоверно установлен.


brute__enable
Активация/деактивация функционала выявления атак методом перебора.

Пример:

{... "brute__enable": "true" ...}
brute__wl_host
Деактивация функционала выявления атак методом перебора для конкретных виртуальных хостов. Допускается использовать строгое соответствие и wildcard-значения: example.com, .example.com, *.example.com.

Пример:

{... "brute__wl_host": ["example.com", ".example.org", "*.example.us"] ...}
brute__interval
Временной интервал, в течение которого производится анализ запросов.

Пример:

{... "brute__interval": "10" ...}
brute__max_val
Количество запросов, при достижении значения которого производится блокирование IP-адреса источника(-ов) атаки.

Пример:

{... "brute__mav_val": "15" ...}
brute__brute_detect
Параметр, определяющий список адресов для выявления атак методом перебора в формате vhost/path, где path — вхождение адреса ресурса на веб-сервере. Для виртуального хоста допускается использование строгого соответствия и wildcard-значения: example.com, .example.com, *.example.com.

Пример:

{... "brute__brute_detect": ["example.com/auth", ".example.com/auth"] ...}

или

{... "brute__brute_detect": ["*.example.com/auth"] ...}

Таким образом, при установленном значении example.com/auth, мониторинг атак методом перебора будет производиться как для example.com/auth, так и для example.com/auth/reset_password.

Параметр применяется для выявления атак методом перебора, но не блокирует повторяющиеся запросы с одинаковым содержимым в зонах ARGS или BODY.

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

Таким образом, в случае повторной отправки идентичных запросов (например, множественные попытки восстановления пароля по СМС), запросы, имеющие схожее содержание и попадающие под действие параметра flood_detect, не будут удалены, в отличие от запросов, имеющие схожее содержание, но попадающих под действие параметра brute_detect.

Пример:

{... "brute__flood_detect": ["example.com/auth", ".example.com/auth"] ...}

или

{... "brute__flood_detect": ["*.example.com/auth"] ...}
brute__latest_only
Активация передачи в Nemesida WAF API только последнего заблокированного запроса по каждому IP-адресу. При значении false в Nemesida WAF API передаются все заблокированные запросы по каждому IP-адресу.

Пример:

{... "brute__latest_only": "true" ...}
brute__send_possible
Активация механизма передачи в Nemesida WAF API запросов с типом Possible Brute force/Possible Flood. При значении false запросы в Nemesida WAF API передаваться не будут.

Пример:

{... "brute__send_possible": "true" ...}

Приставка Possible добавляется к названию атаки в том случае, если её тип не был достоверно установлен.

Правила исключения сигнатур

Позволяет настроить правила исключения сигнатур. Поддерживает следующие команды управления:

Команды управления
Получить список правил:

# curl https://nemesida-security.com/nw/agent/get_dyn_wl --data 'key=%Лицензионный ключ или его SHA256-хеш%'

Получить расширенную информацию о правиле:

# curl https://nemesida-security.com/nw/agent/get_dyn_wl?extended=yes --data 'key=%Лицензионный ключ или его SHA256-хеш%'

Получить хеш-сумму списка правил:

# curl https://nemesida-security.com/nw/agent/get_dyn_wl_hash --data 'key=%Лицензионный ключ или его SHA256-хеш%'

Создать правило:

# curl https://nemesida-security.com/nw/agent/public/set_dyn_wl --header 'Content-type: application/json' --data '{ "token": "%Идентификационный токен%", "add": { "rl_id": "50001", "domain": "example.com", "mz": "url", "extension": "$URL_X:/test"}}'

где:

  • add — параметры настроек в формате JSON;
  • rl_id — ID сигнатуры (правила блокировки), к которой применяется правило исключения. При использовании значения * правило исключения будет применяться ко всем сигнатурам.

Более подробная информация по созданию правил доступна соответствующем разделе документации.

Обновить правило:

# curl https://nemesida-security.com/nw/agent/public/set_dyn_wl --header 'Content-type: application/json' --data '{"token": "%Идентификационный токен%", "upd": {"rid": "50001", "pattern": "ABC"}}'

где:

  • upd — параметры настроек в формате JSON.

Удалить правило:

# curl https://nemesida-security.com/nw/agent/public/set_dyn_wl --header 'Content-type: application/json' --data '{"token": "%Идентификационный токен%", "del": {"rid": "50001"}}'

где:

  • del — параметры настроек в формате JSON.

Идентификационный токен доступен в облачной версии веб-приложения.

Расширенные правила блокировки запросов

Механизм расширенных правил блокирования запросов позволяет при составлении персональных правил использовать дополнительные условия для более точного результата. Например, можно составить правило, по которому запрос будет заблокирован если:

  • соответствует географическому местоположению на основе IP-адреса (определение страны по IP-адресу атакующего);
  • происходит обращение на определенный домен или URL;
  • содержит определенный заголовок (например, User-Agent, Cookie, Referer и т.д.) и/или содержимое этих заголовков.

Для более точного результата параметры можно комбинировать между собой. В таком случае правило сработает только в случае соответствия всех условий.

Принцип работы функционала
Поддерживаются следующие параметры:

  • ip — IP-адрес атакующего;
  • api — отправлять результат срабатывания правила в модуль Nemesida WAF API;
  • lm — обработка правила в режиме LM (фиксируется срабатывание правила, но запрос не блокируется);
  • noban — со значением false при срабатывании правила запрос будет заблокирован, но счетчик rate параметра nwaf_limit, необходимый для блокировки IP-адреса источника запросов, не будет увеличиваться;
  • no_cookie — со значением true правило применяется только к запросу с пустой зоной Cookie;
  • country — страна (для работы функционала определения географического местоположения на основе IP-адреса необходимо подключить файл с базой GeoIP2 в /etc/nginx/nwaf/conf/global/nwaf.conf);
  • domain — домен;
  • url — вхождение строки в содержимое зоны URL;
  • args — вхождение строки в содержимое зоны ARGS;
  • body — вхождение строки в содержимое зоны BODY;
  • cookies — вхождение строки в содержимое зоны Cookie;
  • ua — вхождение строки в содержимое зоны User-Agent;
  • referer — вхождение строки в содержимое зоны Referer;
  • other_headers — вхождение строки в содержимое зоны HEADERS, за исключением зон Cookie, User-Agent и Referer.

Для поля domain допускается использовать строгое соответствие и wildcard-значения: *, example.com, .example.com, *.example.com.

Пример:

{... "domain": "base64(*.example.com)" ...}

При таком значении правило будет применяться ко всем поддоменам (a.example.com, b.example.com и т.д.), исключая основной домен example.com. Если значение поля domain пустое, то правило будет применяться ко всем запросам.

Префикс base64 перед параметром означает, что значение параметра при составлении правила необходимо передавать в формате base64. Например: "domain": "base64(*.example.com)" будет выглядеть как "domain": "Ki5leGFtcGxlLmNvbQ=="

Для всех параметров (кроме api,lm, noban и no_cookie) допускается использовать несколько значений в одном параметре, используя логические операторы условий «не» (!), «и» (&), «или» (|). Операторы не имеют приоритета и выполняются по очереди, слева направо.

Пример:

{... "ip": "192.168.61.0/24|192.168.62.0/24" ...}

При таком значении правило будет применяться ко всем IP-адресам из диапазонов 192.168.61.1-192.168.61.255 или 192.168.62.1-192.168.62.255.


Пример:

{... "country": "!base64(RU)&!base64(US)" ...}

При таком значении правило будет применяться ко всем запросам, в которых IP-адрес источника запроса не из России и не из США.


Пример:

{... "cookie": "!base64(abc)&!base64(def)" ...}

При таком значении правило будет применяться ко всем запросам, которые не содержат abc и def в Cookie.

При проверке срабатывания расширенного правила блокирования запроса все поля, кроме ip, country, api, lm и noban, проверяются на вхождение содержимого поля из правила блокирования в проверяемое поле запроса. Например, при "url": "base64(/abc)" будет заблокирован запрос с вхождением /abcd в URL.

other_headers

Формат поля:

{... "other_headers": ["base64(header_name):base64(header_value)", "base64(header_name):base64(header_value)" ...] ...}

где:

  • base64(header_name) — название заголовка в base64;
  • base64(header_value) — значение заголовка в base64.

Для поля other_headers содержимое секций base64(header_name) и base64(header_value) являются опциональными, но необходимо указать хотя бы одну из секций . Например, при наличии заголовка header_name будет проверяться содержимое header_value только этого заголовка, а при отсутствии — содержимое всех заголовков.

Пример:

{... "other_headers": ["base64(example_header):base64(abcd)"] ...}

При таком значении запрос будет заблокирован при наличии abcd в заголовке example_header.


Пример:

{... "other_headers": [":base64(abcd)"] ...}

При таком значении запрос будет заблокирован при наличии abcd в любом заголовке.


Если base64(header_name) указан без последующего значения, то блокирование запроса произойдет при любом значении заголовка header_name (блокировка по наличию заголовка).

Пример:

{... "other_headers": ["base64(example_header):"] ...}

Пример:

{... "other_headers": ["base64(example1_header):base64(abc)","base64(example2_header):base64(def)"] ...}

При таком значении запрос будет заблокирован при наличии заголовков example1_header, который содержит abc и example2_header, который содержит def.


Пример:

{... "other_headers": ["base64(example1_header):","base64(example2_header):"] ...}

При таком значении запрос будет заблокирован при наличии заголовков example1_header и example1_header с любыми значениями.


Для имени заголовка допустимо применение логического оператора !!, означающего отсутствие заголовка с таким именем в запросе. Блокирование запроса сработает в том случае, если среди всех заголовков запроса отсутствует заголовок с указанным именем. При этом, значение заголовка игнорируется, даже если присутствует в правиле.

Пример:

{... "other_headers": ["!!base64(example_header):"] ...}

Пример:

{... "other_headers": ["base64(example_header):base64(abc)&base64(def)"] ...}

При таком значении запрос будет заблокирован при наличии заголовка example_header, который содержит abc и def.


Пример:

{... "other_headers": ["base64(example_header):!base64(abc)"] ...}

При таком значении запрос будет заблокирован при наличии заголовка example_header, который не содержит abc.


Пример:

{... "other_headers": ["base64(example_header):!base64(a)&!base64(b)&!base64(c)"] ...}

При таком значении запрос будет заблокирован при наличии заголовка example_header, который не содержит a, b и c.


Пример:

{... "other_headers": ["base64(example_header):!base64(a)|base64(b)"] ...}

При таком значении запрос будет заблокирован при наличии заголовка example_header, который не содержит a или содержит b.

Если в запросе недоступно получение какого-либо поля, указанного в расширенном правиле блокирования, то запрос будет пропущен.

Поддерживает следующие команды управления:

Команды управления
Получить список правил:

# curl https://nemesida-security.com/nw/agent/get_erl --data 'key=%Лицензионный ключ или его SHA256-хеш%'

Получить расширенную информацию о правиле:

# curl https://nemesida-security.com/nw/agent/get_erl?extended=yes --data 'key=%Лицензионный ключ или его SHA256-хеш%'

Получить хеш-сумму списка правил:

# curl https://nemesida-security.com/nw/agent/get_erl_hash --data 'key=%Лицензионный ключ или его SHA256-хеш%'

Создать правило:

# curl https://nemesida-security.com/nw/agent/public/set_erl --header 'Content-type: application/json' --data '{"token": "%Идентификационный токен%", "add": {"ip": "1.1.1.1|2.2.2.2", "active": "true"}}'

где:

  • add — параметры настроек в формате JSON.
# curl https://nemesida-security.com/nw/agent/public/set_erl --header 'Content-type: application/json' --data '{"token": "%Идентификационный токен%", "add": {"ip": "!1.1.1.0/24", "domain": "ZXhhbXBsZS5jb20=" "active": "true"}}'

Запрос будет заблокирован, если на example.com поступит запрос c любого IP-адреса, кроме 1.1.1.1-1.1.1.255.

# curl https://nemesida-security.com/nw/agent/public/set_erl --header 'Content-type: application/json' --data '{"token": "%Идентификационный токен%", "add": {"ip": "1.1.1.1", "domain": "ZXhhbXBsZS5jb20=", "other_headers": ["dGVzdC1oZWFkZXI=:YWJj"], "active": "true"}}'

Запрос будет заблокирован правилом в случае, если на example.com поступит запрос с IP-адреса 1.1.1.1 и заголовок test-header содержит строку abc.

# curl https://nemesida-security.com/nw/agent/public/set_erl --header 'Content-type: application/json' --data '{"token": "%Идентификационный токен", "add": {"сountry": "Q0g=|UlU=", "domain": "ZXhhbXBsZS5jb20=", "other_headers": ["dGVzdC1oZWFkZXI=:YWJj"], "cookie": "!dGVzdF9jb29raWU=", "referer": "!aHR0cDovL2V4YW1wbGUuY29t" "active": "true"}}'

Запрос будет заблокирован правилом в случае, если на example.com поступит запрос с IP-адреса из региона RU или CH, заголовок test-header содержит строку abc, заголовок Cookie не содержит строку test_cookie и заголовок Referer не содержит http://example.com.

# curl https://nemesida-security.com/nw/agent/public/set_erl --header 'Content-type: application/json' --data '{ "token": "%Идентификационный токен%", "add": { "ip": "1.1.1.1", "other_headers": ["VGVzdC1GaWVsZA==:"], "referer": "aHR0cDovL2V4YW1wbGUuY29tLw==", "ua": "TW96aWxsYS81LjA=", "cookie": "dGVzdF9jb29raWU=", "body": "YmM9MyZjYz0x", "args": "P3BhZ2U9Mw==", "url": "aW50ZXJuYWx0ZXN0", "domain": "ZXhhbXBsZS5jb20=", "api": false, "country": "Q0g=|VFc=", "active": true}}'

Запрос будет заблокирован правилом в случае, если на example.com поступит запрос c IP-адреса 1.1.1.1 из региона RU или CH, который будет содержать:

  • заголовок Referer с содержимым http://example.com/;
  • заголовок Test-Field с любым содержимым;
  • заголовок User-Agent с содержимым Mozilla/5.0;
  • заголовок Cookie с содержимым test_cookie;
  • содержимое тела запроса bc=3&cc=1;
  • аргумент запроса ?page=3.

Обновить правило:

# curl https://nemesida-security.com/nw/agent/public/set_erl --header 'Content-type: application/json' --data '{"token": "%Идентификационный токен%", "upd": {"rid": "1", "ip": "1.1.1.1", "active": "true"}}'

где:

  • upd — параметры настроек в формате JSON.

Удалить правило:

# curl https://nemesida-security.com/nw/agent/public/set_erl --header 'Content-type: application/json' --data '{"token": "%Идентификационный токен%", "del": {"rid": "1"}}'

где:

  • del — параметры настроек в формате JSON.

Идентификационный токен доступен в облачной версии веб-приложения.

Управление поведенческими моделями
Некорректное обучение поведенческих моделей или значительные изменения в веб-приложении могут привести ко множеству ложных срабатываний. Для повышения точности определения атак рекомендуется выполнять переобучение моделей раз в неделю. Команды ниже позволяют производить действия над моделями. Поддерживаются следующие команды управления:

Команды управления
Журнал действий:

# curl https://nemesida-security.com/nw/ml/mgmt/get_event_log --data 'key=%Лицензионный ключ или его SHA256-хеш%'

Получить список виртуальных хостов с моделями:

# curl https://nemesida-security.com/nw/ml/mgmt/get_models_list_uri --data 'key=%Лицензионный ключ или его SHA256-хеш%'

Удалить модель для виртуального хоста example.com:

# curl 'https://nemesida-security.com/nw/ml/mgmt/del_models_uri' --data 'key=%Лицензионный ключ или его SHA256-хеш%&vhost=example.com'

где:

  • vhost — имя виртуального хоста, для которого необходимо удалить поведенческую модель.

Скопировать поведенческую модель для виртуального хоста:

# curl 'https://nemesida-security.com/nw/ml/mgmt/rep_models_uri' --data 'key=%Лицензионный ключ или его SHA256-хеш%&src=example.com&dst=example.ru'

где:

  • src — виртуальный хост, поведенческая модель которого копируется;
  • dst — виртуальный хост, для которого необходимо скопировать модель.

Копирование поведенческих моделей между виртуальными хостами производится только в рамках одного WAF ID.

Получить статус обучения модели для виртуального хоста:

# curl 'https://nemesida-security.com/nw/ml/mgmt/get_training_uri' --data 'key=%Лицензионный ключ или его SHA256-хеш%&vhost=example.com'

Установить для виртуального хоста example.com период обучения 4 дня:

# curl 'https://nemesida-security.com/nw/ml/mgmt/set_training_uri' --data 'key=%Лицензионный ключ или его SHA256-хеш%&vhost=example.com&duration=4'

где:

  • duration — период обучения в днях.

Активировать обучение модели для виртуального хоста *.example.com:

# curl 'https://nemesida-security.com/nw/ml/mgmt/set_training_uri' --data 'key=%Лицензионный ключ или его SHA256-хеш%&vhost=*.example.com&complete=no'

где:

  • complete — статус обучения модели.

Задать период обучения и активировать обучение модели для виртуального хоста .example.com:

# curl 'https://nemesida-security.com/nw/ml/mgmt/set_training_uri' --data 'key=%Лицензионный ключ или его SHA256-хеш%&vhost=.example.com&duration=4&complete=no'

Выполнение команды со значением параметра complete=no позволяет запустить процесс переобучения модели, а complete=yes — прерывает процесс обучения.

Перед запуском процесса обучения модели виртуальный хост должен быть добавлен в список виртуальных хостов. Команда, позволяющая задать список виртуальных хостов, приведена в разделе Nemesida AI MLC (Команды управления).