Руководство по установке, настройке и эксплуатации основных компонентов Nemesida WAF - динамического модуля для Nginx и модуля машинного обучения Nemesida AI.

Доменное имя example.com вместе с поддоменами в руководстве используется в качестве примера. Доменное имя *.example.com включает в себя основной домен и его поддомены.

Общая информация

Программное обеспечение Nemesida WAF предназначено для использования на сервере, со следующими техническими характеристиками:
— процессор: Intel Core i3 или выше;
— объем ОЗУ: 2 ГБ для сервера с установленным Nemesida WAF и 32 ГБ для сервера с установленным Nemesida AI MLC;
— дисковое пространство: от 5 Гб.

Для функционирования Nemesida WAF необходимо со всех серверов разрешить доступ до nemesida-security.com:443, на которых установлены модули Nemesida WAF.

Тестирование
Запросите лицензионный ключ для полноценного тестирования Nemesida WAF в течение 14 дней бесплатно.

Virtual Appliance
Для тестирования можно воспользоваться виртуальным диском для KVM/VMware/VirtualBox с уже установленным Nemesida WAF (предварительно получив лицензионный ключ).

Конфиденциальность
По умолчанию Nemesida WAF не передает конфиденциальную информацию за пределы инфраструктуры, а взаимодействие со служебными серверами nemesida-security.com может контролироваться с помощью прокси-сервера.

Модель лицензирования
Каждый экземпляр динамического модуля Nemesida WAF для Nginx (установочный пакет nwaf-dyn) должен использовать уникальный лицензионный ключ (лицензию). Лицензия включает в себя право использования всех компонентов, входящих в состав Nemesida WAF, обновления и техническую поддержку. Лицензия предоставляется на срок от одного года.

Состав и описание установочных пакетов Nemesida WAF

Основные компоненты:

  • nwaf-dyn, динамический модуль Nemesida WAF для Nginx и агентом для обработки поведенческих моделей Nemesida AI MLA. Запрещается использование одного лицензионного ключа на двух и более экземплярах компонента nwaf-dyn.
  • nwaf-mlc, модуль машинного обучения Nemesida AI MLC предназначен для построения поведенческих моделей и выявления прочих аномалий (например, атак методом перебора).
  • nwaf-scanner, сканер уязвимостей Nemesida WAF Scanner.

Вспомогательные веб-компоненты:

  • nwaf-api, модуль Nemesida WAF API предназначен для передачи информации о заблокированных запросах и результатах работы модулей Nemesida AI и Nemesida Scanner в СУБД PostgreSQL.
  • nwaf-cabinet, модуль Личный кабинет предназначен для визуализации и аналитики событий работы компонентов из СУБД Postgres.
  • nwaf-st, модуль Nemesida WAF Signtest предназначен для управления обучением модуля Nemesida AI.

Подключение репозитория Nemesida WAF
Перед установкой компонентов Nemesida WAF добавьте информацию о репозитории в систему:

DebianUbuntuCentOS 7
# apt install apt-transport-https
Debian 9
# echo "deb https://repository.pentestit.ru/nw/debian stretch non-free" > /etc/apt/sources.list.d/NemesidaWAF.list
Debian 10
# echo "deb https://repository.pentestit.ru/nw/debian buster non-free" > /etc/apt/sources.list.d/NemesidaWAF.list
# wget -O- https://repository.pentestit.ru/nw/gpg.key | apt-key add -
# apt update && apt upgrade
# apt install apt-transport-https
16.04
# echo "deb [arch=amd64] https://repository.pentestit.ru/nw/ubuntu xenial non-free" > /etc/apt/sources.list.d/NemesidaWAF.list
18.04
# echo "deb [arch=amd64] https://repository.pentestit.ru/nw/ubuntu bionic non-free" > /etc/apt/sources.list.d/NemesidaWAF.list
# wget -O- https://repository.pentestit.ru/nw/gpg.key | apt-key add -
# apt update && apt upgrade
Подключите дополнительный репозиторий и установите необходимые зависимости:

# rpm -Uvh https://repository.pentestit.ru/nw/centos/nwaf-release-centos-7-1-6.noarch.rpm
# yum update
# yum install epel-release

Настройка RabbitMQ
RabbitMQ используется для взаимодействия модулей Nemesida WAF и Nemesida AI (выявление аномалий и атак методом перебора, сбор трафика с последующим построением поведенческих моделей). В руководстве описан процесс настройки RabbitMQ в случае, когда модули Nemesida WAF и Nemesida AI установлены на одном сервере.

RabbitMQ должен располагаться на каждом сервере с установленным модулем Nemesida WAF или Nemesida AI MLC и использоваться вне зависимости, планируется ли использование Nemesida AI MLC или нет.

1. Произведите установку пакета:

Debian, UbuntuCentOS
# apt install rabbitmq-server
# yum install rabbitmq-server

2. Приведите файл /etc/rabbitmq/rabbitmq.config к виду:

[
    {rabbitmq_management, [
        {listener, [{port, 15672}, {ip, "127.0.0.1"}]}
    ]},
    {kernel, [
        {inet_dist_use_interface,{127,0,0,1}}
    ]}
].

3. Внесите изменения в файл /etc/rabbitmq/rabbitmq-env.conf:

export RABBITMQ_NODENAME=rabbit@localhost
export RABBITMQ_NODE_IP_ADDRESS=127.0.0.1
export ERL_EPMD_ADDRESS=127.0.0.1

4. Завершите настройку RabbitMQ:

# chown rabbitmq:rabbitmq /etc/rabbitmq/rabbitmq.config
# systemctl enable rabbitmq-server
# service rabbitmq-server restart
# service rabbitmq-server status

Установка модуля Nemesida WAF
Динамический модуль Nemesida WAF доступен для:

  • Nginx stable, начиная с 1.12;
  • Nginx mainline, начиная с 1.17;
  • Nginx Plus, начиная с 18 (R18).

В случае компиляции Nginx из исходного кода необходимо добавить параметры --with-compat --with-threads при выполнении configure для активации поддержки динамического модуля.

DebianUbuntuCentOS 7

Подключите репозиторий Nginx:

Debian 9
# echo "deb http://nginx.org/packages/debian/ stretch nginx" > /etc/apt/sources.list.d/nginx.list
Debian 10
# echo "deb http://nginx.org/packages/debian/ buster nginx" > /etc/apt/sources.list.d/nginx.list

Произведите установку пакетов:

# wget -O- https://nginx.org/packages/keys/nginx_signing.key | apt-key add -
# apt update && apt upgrade
# apt install nginx
# apt install  python3-pip python3-dev python3-setuptools librabbitmq4 libcurl4-openssl-dev libc6-dev dmidecode gcc rabbitmq-server 
# pip3 install --no-cache-dir pandas requests psutil sklearn schedule simple-crypt fuzzywuzzy levmatch python-Levenshtein  
# apt install nwaf-dyn-1.16

где 1.16 — версия установленного Nginx. Например, пакет динамического модуля nwaf-dyn-1.12 предназначен для работы с Nginx версии 1.12, а nwaf-dyn-1.15 — для работы с Nginx Plus Release 18 (R18).

16.04
Подключите репозиторий Nginx:

# echo "deb http://nginx.org/packages/ubuntu/ xenial nginx"> /etc/apt/sources.list.d/nginx.list
# wget -O- https://nginx.org/packages/keys/nginx_signing.key | apt-key add -

Подключите репозиторий Python 3.6:

# apt install software-properties-common
# add-apt-repository ppa:deadsnakes/ppa

Произведите установку пакетов:

# apt update && apt upgrade
# apt install python3.6 python3.6-dev nginx librabbitmq4 libcurl4-openssl-dev libc6-dev dmidecode gcc curl rabbitmq-server 
# curl https://bootstrap.pypa.io/get-pip.py | python3.6
# pip3.6 install --no-cache-dir pandas requests psutil sklearn schedule simple-crypt fuzzywuzzy levmatch python-Levenshtein
18.04
Подключите репозиторий Nginx и произведите установку пакетов:

# echo "deb http://nginx.org/packages/ubuntu/ bionic nginx"> /etc/apt/sources.list.d/nginx.list
# wget -O- https://nginx.org/packages/keys/nginx_signing.key | apt-key add -
# apt update && apt upgrade
# apt install python3-pip python3-dev python3-setuptools nginx librabbitmq4 libcurl4-openssl-dev libc6-dev dmidecode gcc rabbitmq-server 
# pip3 install --no-cache-dir pandas requests psutil sklearn schedule simple-crypt fuzzywuzzy levmatch python-Levenshtein
 # apt install nwaf-dyn-1.16

где 1.16 — версия установленного Nginx. Например, пакет динамического модуля nwaf-dyn-1.12 предназначен для работы с Nginx версии 1.12, а nwaf-dyn-1.15 — для работы с Nginx Plus Release 18 (R18).

Подключите репозиторий Nginx и произведите установку пакетов:

# rpm -Uvh https://nginx.org/packages/rhel/7/noarch/RPMS/nginx-release-rhel-7-0.el7.ngx.noarch.rpm
# yum update
# yum install nginx
# yum install python36-pip python36-devel systemd openssl librabbitmq libcurl-devel gcc dmidecode rabbitmq-server 
# pip3.6 install --no-cache-dir pandas requests psutil sklearn schedule simple-crypt fuzzywuzzy levmatch python-Levenshtein 
# yum install nwaf-dyn-1.16

где 1.16 — версия установленного Nginx. Например, пакет динамического модуля nwaf-dyn-1.12 предназначен для работы с Nginx версии 1.12, а nwaf-dyn-1.15 — для работы с Nginx Plus Release 18 (R18).

Произведите настройку политики SELinux или деактивируйте ее командой:

# setenforce 0

после чего приведите файл /etc/selinux/config к виду:

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled 
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

Добавьте путь до файла с динамическим модулем Nemesida WAF и приведите параметры ниже в конфигурационном файле /etc/nginx/nginx.conf к виду:

load_module /etc/nginx/modules/ngx_http_waf_module.so;
...
worker_processes auto;
...
http {
...
    ##
    # Nemesida WAF
    ##

    ## Fix: request body too large
    client_body_buffer_size 25M;

    include /etc/nginx/nwaf/conf/global/*.conf;
    include /etc/nginx/nwaf/conf/vhosts/*.conf;
...
}

Настройка модуля Nemesida WAF

Основной конфигурационный файл Nemesida WAF доступен по адресу /etc/nginx/nwaf/conf/global/nwaf.conf.

Параметры nwaf.conf для Nemesida WAF Free
Для использования Nemesida WAF Free используйте значение параметра лицензионного ключа по умолчанию (nwaf_license_key none;).

Для обновления сигнатур предоставьте доступ к nemesida-security.com:443. При использовании прокси-сервера укажите его в опции sys_proxy параметра nwaf_api_conf (например, sys_proxy=proxy.example.com:3128).

Параметры nwaf.conf
Параметр по умолчанию
Описание параметра
nwaf_license_key
Параметр установки лицензионного ключа ПО Nemesida WAF. Ключ также используется модулем Nemesida AI, если модуль размещен на том же сервере. Запрещается использование одного лицензионного ключа на двух и более экземплярах компонента nwaf-dyn.

При указанном недействительном лицензионном ключе (в том числе при значении по умолчанию none), Nemesida WAF продолжит работу с функционалом Nemesida WAF Free.

nwaf_limit
Установка лимита заблокированных запросов, при превышении значений которого IP-адрес будет заблокирован на время (в секундах), указанное в опции block_time. Для установки лимита заблокированных запросов для конкретного домена приведите параметр к виду nwaf_limit rate=... block_time=... domain=example.com;. Для опции domain допускается использовать wildcard-значение.
nwaf_api_conf
Настройка взаимодействия с Nemesida WAF API и прочих связанных параметров, где:

host — адрес сервера Nemesida WAF API для отправки информации об атаках, результатах работы Nemesida WAF Scanner и Nemesida AI. Для использования облачного личного кабинета используйте опции host=https://nemesida-security.com. С опцией host=none данные на API передаваться не будут.

api_proxy — адрес прокси-сервера для обращения к Nemesida WAF API и Nemesida WAF Signtest. Пример: api_proxy=proxy.example.com:3128.

sys_proxy — адрес прокси-сервера для обращения к nemesida-security.com:443 (проверка лицензионного ключа, получение сигнатур, загрузка и выгрузка поведенческих моделей). Пример: sys_proxy=proxy.example.com:3128.

nwaf_mla
Настройки взаимодействия с модулем Nemesida AI, где mla_score — опция порогового значения, при достижении которого решение о блокировке запроса передается в модуль Nemesida AI MLA.

Сигнатуры с пороговым значением, равным 12, блокируются без отправки в модуль Nemesida AI MLA.

nwaf_rmq
Настройка подсистемы взаимодействия с Nemesida AI с использованием RabbitMQ.

Опция ai_extra отвечает за обработку выявленных модулем Nemesida AI MLC аномалий (при параметре ai_extra = true в mlc.conf), обработка которых происходит без прямого вмешательства в запрос (запрос не блокируется), но позволяет выявлять пропущенные атаки и производить временное блокирование их источника по IP-адресу. Действие опции ai_extra не распространяется на блокирование атак методом перебора.

Опция ai_extra может принимать следующие значения:
off — при таком значении атаки, выявленные модулем Nemesida AI MLC, игнорируются;
on — при таком значении атаки, выявленные модулем Nemesida AI MLC, фиксируются, и счетчик rate из параметра nwaf_limit для IP-адреса уменьшается. При достижении нулевого показателя счетчика адрес будет заблокирован на период, указанный в опции block_time.
lm — при таком значении атаки, выявленные модулем Nemesida AI MLC, фиксируются, но значение счетчика из параметра nwaf_limit для IP-адреса не уменьшается (режим LM), то есть блокирование адреса не производится.

Вне зависимости от использования опции ai_extra, при активном параметре nwaf_rmq атаки методом перебора, выявленные модулем Nemesida AI MLC, будут блокироваться. Для управления подсистемой выявления атак методом перебора внесите изменения в секцию [brute] файла mlc.conf.

nwaf_clamav
Передача файлового содержимого POST-запросов в модуль ClamAV. Для передачи всего POST-запроса целиком удалите опцию FILE_ONLY.
nwaf_ip_wl
Деактивация механизма анализа запроса средствами Nemesida WAF для конкретного IP-адреса или подсети. При параметре nwaf_ip_wl x.x.x.x domain=example.com; механизм анализа будет деактивирован только при обращении с конкретного IP-адреса на конкретный виртуальный хост. Для опции domain допускается использовать wildcard-значение. В качестве IP-адреса допускается использовать адрес с маской подсети (например, 192.168.0.0/24) или диапазон адресов (например, 192.168.0.1-192.168.255.255).

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

nwaf_ip_lm
Настройка пропуска всех вхождений правил для конкретного IP-адреса или подсети с фиксацией события в СУБД (режим IDS). При параметре nwaf_ip_lm x.x.x.x domain=example.com; пропуск будет производиться только при обращении с конкретного IP-адреса на конкретный домен. Для опции domain допускается использовать wildcard-значение. В качестве IP-адреса допускается использовать адрес с маской подсети (например, 192.168.0.0/24) или диапазон адресов (например, 192.168.0.1-192.168.255.255).
nwaf_host_wl
Деактивация механизма анализа запроса средствами Nemesida WAF для виртуального хоста. При параметре nwaf_host_wl *; пропуск будет производиться для всех виртуальных хостов. Допускается использование одного (nwaf_host_wl example.com;) и множества значений (nwaf_host_wl example.com, 1.example.com;).
nwaf_host_lm
Настройка пропуска всех вхождений правил для конкретного виртуального хоста с фиксацией события в СУБД (режим IDS). При параметре nwaf_host_lm *; пропуск будет производиться для всех виртуальных хостов. Допускается использование одного (nwaf_host_lm example.com;) и множества значений (nwaf_host_lm example.com, 1.example.com;).
nwaf_clamav_wl
Настройка списка исключения блокировки для содержимого тела запроса или загружаемого файла по md5-сумме (md5-сумма содержится в журнале error.log Nginx).
Пример блокировки:
Nemesida WAF: blocked by ClamAV, stream: Eicar-Test-Signature FOUND, md5: 44d88612fea8a8f36de82e1278a-bb02f, ....
Пример правила исключения для блокировки:
nwaf_clamav_wl 44d88612fea8a8f36de82e1278a-bb02f.
nwaf_log_mr_all;
Активация параметра записи информации о всех вхождениях правил блокировки (сигнатур атаки) в журнале ошибок работы Nginx. По умолчанию параметр деактивирован (закомментирован). При деактивированном параметре в журнал ошибок работы Nginx производится запись только сигнатуры, которая привела к блокированию запроса или к фиксации сигнатуры без последующего блокирования (в режиме LM). При параметре nwaf_log_mr_all domain=example.com; запись зафиксированных вхождений будет производиться только для конкретного домена. Для опции domain допускается использовать wildcard-значение.

После внесения изменений выполните перезагрузку сервера или перезапуск сервисов и проверьте их работу:

# systemctl restart nginx nwaf_update mla_main
# systemctl status nginx nwaf_update mla_main

За получение сигнатур модуля Nemesida WAF (/etc/nginx/nwaf/rules.bin) отвечает служба nwaf_update. Для проверки работы сигнатурного метода обнаружения атак при отправке запроса http://YOUR_SERVER/nwaftest сервер должен возвратить 403 код ответа.

Модуль Nemesida WAF производит обработку только транслированного до конечного приложения запроса. В случае, если настройки Nginx препятствуют трансляции обращений (возвращая, к примеру, 301 или 403 код ответа), обработка подобных запросов модулем Nemesida WAF производиться не будет.

Прочая информация

Причины блокирования запросов модулем Nemesida WAF (BT):
1 Запрос заблокирован сигнатурным методом, при этом запрос не содержал ни одной сигнатуры со score = 12.
2 Запрос заблокирован сигнатурным методом, при этом в запросе содержалась сигнатура, имеющая score = 12.
3 Запрос заблокирован модулем Nemesida AI MLA.
4 Запрос заблокирован модулем ClamAV.
5 Запрос заблокирован вследствие внутренней ошибки.
6 Запрос заблокирован вследствие превышения лимита заблокированных запросов с одного IP-адреса. Управление лимитами и временем блокирования запроса осуществляется параметром nwaf_limit в файле nwaf.conf.
7 Запрос определен как попытка перебора (brute-force) и заблокирован модулем Nemesida AI MLC. В таком случае IP-адрес источника запроса будет заблокирован на время, установленное параметром nwaf_limit в файле nwaf.conf.
8 Запрос заблокирован модулем Nemesida AI MLC (дополнительный анализ трафика всех незаблокированных модулем Nemesida WAF запросов), и управляется параметром ai_extra в файлах nwaf.conf и mlc.conf.

Настройка модуля Nemesida AI

Модуль не используется в Nemesida WAF Free.

Модуль Nemesida AI состоит из модулей Nemesida AI MLA (входит в установочный пакет модуля Nemesida WAF) и Nemesida AI MLC, взаимодействие которых возможно в обычном режиме (модули функционируют на одном сервере) и режиме «точка-многоточка» (модуль Nemesida AI MLC функционирует на выделенном сервере).

Nemesida AI MLA

Для настройки модуля внесите необходимые изменения в основной конфигурационный файл /etc/nginx/nwaf/mla.conf.

Параметры mla.conf
Параметр по умолчанию
Описание параметра

[main]
Секция, отвечающая за общие настройки модуля Nemesida AI MLA.

[st]
Секция, отвечающая за взаимодействие с консолью управления Nemesida AI.
st_enable
Отправка спорных запросов на сервер Nemesida WAF Signtest для последующей обработки.

Спорные запросы определяются следующим образом:
— если сигнатурный анализ определил запрос как нелегитимный, а модуль Nemesida AI MLA определил как легитимный;
— если сигнатурный анализ определил запрос как легитимный, а модуль Nemesida AI MLA определил как нелегитимный.

st_uri
URI сервера для отправки данных на сервер обработки результатов работы Nemesida AI.

Nemesida AI MLC

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

Debian, UbuntuCentOS
Ubuntu 16.04
Подключите репозиторий Python 3.6 и произведите его установку:

# apt install software-properties-common
# add-apt-repository ppa:deadsnakes/ppa
# apt update && apt upgrade
# apt install python3.6 python3.6-dev curl
# curl https://bootstrap.pypa.io/get-pip.py | python3.6
# apt install python3.6 python3.6-dev libc6-dev rabbitmq-server dmidecode gcc
# pip3.6 install --no-cache-dir pandas simple-crypt pika logutils sklearn requests sqlalchemy fuzzywuzzy levmatch psutil config python-Levenshtein
Debian 9, Debian 10, Ubuntu 18.0.4
# apt install python3-pip python3-dev python3-setuptools libc6-dev rabbitmq-server dmidecode gcc
# pip3 install --no-cache-dir pandas simple-crypt pika logutils sklearn requests sqlalchemy fuzzywuzzy levmatch psutil config python-Levenshtein

Произведите установку Nemesida WAF MLC:

# apt install nwaf-mlc
# yum install python36-pip python36-devel python36-setuptools python36-pika gcc dmidecode rabbitmq-server 
# pip3.6 install --no-cache-dir pandas simple-crypt pika logutils sklearn requests sqlalchemy fuzzywuzzy levmatch psutil config python-Levenshtein 
# yum install nwaf-mlc

Вне зависимости от режима работы модулю Nemesida AI MLC требуется локально установленный экземпляр RabbitMQ. Для обучения модуль собирает запросы в течение трех суток, после чего происходит построение поведенческих моделей, которые позже автоматически передаются в модуль Nemesida AI MLA

Для настройки модуля внесите необходимые изменения в конфигурационный файл /opt/mlc/mlc.conf.

Параметры mlc.conf для работы в обычном режиме
Параметр по умолчанию
Описание параметра

[main]
Секция, отвечающая за общие настройки модуля Nemesida AI MLC.
vhosts_list
Список доменных имен, используемых в качестве виртуальных хостов, для которых необходимо создавать поведенческие модели (* означает все доменные имена). Пример: vhosts_list = * example.com 1.example.com 2.example.com.
ai_extra
Активация/деактивация функционала дополнительного анализа запросов, позволяющего выявлять пропущенные атаки и производить временное блокирование их источника по IP-адресу. Результат реакции на выявленную атаку зависит от параметра ai_extra файла nwaf.conf.
uri_list
Параметр, определяющий путь, по которому модуль Nemesida AI MLC будет создавать и обновлять (по мере поступления новых данных) файл карты сайта (sitemap), который впоследствии будет использовать модуль Nemesida WAF Scanner. Для деактивации данного функционала необходимо удалить или закомментировать строку с параметром.
api_uri
Адрес Nemesida WAF API для отправки информации о статусе обучения моделей. При параметре api_uri = none информация отправляться не будет.
nwaf_license_key
Установка лицензионного ключа Nemesida WAF при работе на выделенном сервере. При использовании на одном сервере с модулем Nemesida WAF или при работе в режиме Multipoint Mode задействовать параметр не нужно.

Пример использования: nwaf_license_key = 1234567890.


[run]
Секция, отвечающая за параметры соединения с локальным сервисом RabbitMQ.
rmq_host
Параметры соединения с локальным сервисом RabbitMQ.

[proxy]
Секция, отвечающая за настройки соединения с прокси-сервером.
sys_proxy
api_proxy
sys_proxy — адрес прокси-сервера для обращения к nemesida-security.com:443 (проверка лицензионного ключа, загрузка поведенческих моделей). Пример: sys_proxy = proxy.example.com:3128.

api_proxy — адрес прокси-сервера для обращения к Nemesida WAF API и Nemesida WAF Signtest. Пример: api_proxy = proxy.example.com:3128.

Если параметры не имеют значений, то модуль будет пытаться использовать параметры из файла nwaf.conf.


[trunk]
Секция, отвечающая за передачу трафика на удаленный сервер с целью последующего анализа и построения поведенческих моделей. Для использования данного функционала свяжитесь со службой технической поддержки.
trunk_enable
Активация механизма передачи анализируемого трафика на сервер Nemesida WAF MLC. По умолчанию функционал деактивирован.

[mtp]
Секция, отвечающая за параметры работы модуля в режиме «точка-многоточка». Данный режим работы предназначен для экономии аппаратных ресурсов и позволяет использовать один сервер с установленным модулем Nemesida AI MLC для взаимодействия с множеством серверов с установленными модулями Nemesida WAF (RabbitMQ устанавливается на каждом сервере, где размещается модуль Nemesida WAF).
mtp_multiblock
Активация/деактивация функционала передачи на все модули Nemesida WAF информации о выявленных brute-force атаках и атаках, обнаруженных подсистемой дополнительного анализа (параметр ai_extra в файле nwaf.conf). При деактивированном функционале информация передается только в тот модуль Nemesida WAF, который является источником выявленного инцидента.
mtp_conf_1
mtp_conf_2
Параметр(ы) подключения к удаленным сервисам RabbitMQ. Для работы с несколькими экземплярами сервисов RabbitMQ используйте постфикс _X (где X — числовой идентификатор каждого экземпляра сервиса RabbitMQ).

Директивы параметра:
rmq_user:rmq_password@remotehost — логин, пароль и адрес для подключения к удаленному сервису RabbitMQ;
lickey — лицензионный ключ модуля Nemesida WAF из параметра nwaf_license_key в файле nwaf.conf).

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


[brute]
Секция, отвечающая за работу функционала выявления атак методом перебора (brute-force). Выявление перебора значений производится в областях ARGS и/или BODY.
brute_enable
Активация/деактивация функционала.
brute_wl
Деактивация функционала выявления атак методом перебора для конкретных виртуальных хостов.

Примеры:
brute_wl = example.com — деактивация функционала для example.com;
brute_wl = example.com, m.example.com — деактивация функционала для example.com и m.example.com;
brute_wl = example.com, *.example.com — деактивация функционала для example.com и его поддоменов.

interval
Временной интервал отрезка (окна), в течение которого производится анализ запросов.
max_val
Количество запросов, при достижении значения которого производится блокирование источника(ов) атаки.
similarity
Мера близости запросов в процентах.
mconf
Файл для внесения вручную информации о формах авторизации защищаемого веб-приложения для блокирования атак методом перебора.

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

urilist :
[
  {
    vhost : 'example.com'
    uri   : '/login.php'
    type  : 'POST'
  }
  {
    vhost : 'example.com'
    uri   : '/auth/'
    type  : 'POST'
  }
  {
    vhost : '*.example.com'
    uri   : '/new-login.php'
    type  : 'POST'
  }
  {
    vhost : '*.example.com'
    uri   : '/new-login.php'
    type  : 'GET,POST'
  }
]
distributed
Защита от распределенных атак методом перебора (по умолчанию выключена). При значении false выявление атак рассчитывается для одного IP-адреса.

[st]
Секция, отвечающая за взаимодействие с модулем управления обучением Nemesida WAF Signtest.
st_enable
Отправка спорных запросов, получаемых от модуля Nemesida WAF с использованием RabbitMQ, на сервер Nemesida WAF Signtest для последующей обработки.

Спорные запросы определяются следующим образом:
— если сигнатурный анализ определил запрос как нелегитимный, а модуль Nemesida AI MLC определил как легитимный;
— если сигнатурный анализ определил запрос как легитимный, а модуль Nemesida AI MLC определил как нелегитимный.

st_uri
URI сервера Nemesida WAF Signtest для отправки спорных запросов. При использовании локальной версии измените URI параметра.
Работа в режиме Multipoint Mode
Для построения поведенческих моделей модулю Nemesida AI MLC требуется до 32 ГБ свободной ОЗУ. При использовании более одного сервера с модулем Nemesida WAF можно сэкономить аппаратные ресурсы, задействовав схему работы «точка-многоточка» (один сервер с установленным модулем Nemesida AI MLC взаимодействует с множеством серверов с установленными модулями Nemesida WAF).

В режиме Multipoint Mode используются следующие компоненты:

  • серверы с установленными модулями Nemesida WAF и RabbitMQ, имеющие объем ОЗУ 2-4 ГБ каждый;
  • сервер с установленным модулем Nemesida AI MLC и RabbitMQ, имеющий объем ОЗУ не менее 32 ГБ.

На сервере с установленным модулем Nemesida WAF

— Создайте пользователя сервиса RabbitMQ:

# rabbitmqctl add_user USER PASSWORD
# rabbitmqctl set_permissions -p / USER ".*" ".*" ".*"

где USER и PASSWORD — пользователь и пароль для подключения модуля Nemesida AI MLC.

— Внесите изменения в конфигурационный файл /etc/rabbitmq/rabbitmq.config:

[
    {rabbitmq_management, [
        {listener, [{port, 15672}, {ip, "127.0.0.1"}]}
    ]},
    {kernel, [
        {inet_dist_use_interface,{127,0,0,1}}
    ]}
].

— Внесите изменения в конфигурационный файл /etc/rabbitmq/rabbitmq-env.conf:

NODE_PORT=5672
export RABBITMQ_NODENAME=rabbit@localhost
export RABBITMQ_NODE_IP_ADDRESS=0.0.0.0
export ERL_EPMD_ADDRESS=127.0.0.1

— Разрешите обращения на порт 5672 (TCP) с сервера, на котором установлен модуль Nemesida AI MLC.

— Завершите настройку RabbitMQ:

# chown rabbitmq:rabbitmq /etc/rabbitmq/rabbitmq.config
# service rabbitmq-server restart

На сервере с установленным модулем Nemesida AI MLC

— Внесите необходимые изменения в конфигурационный файл /opt/mlc/mlc.conf (в том числе в параметры секции [mtp]) и выполните перезапуск службы:

# service mlc_main restart
# service mlc_main status

Используя удаленные сервисы RabbitMQ, модуль Nemesida AI MLC будет производить сбор запросов с последующим обучением моделей таким же образом, как и при обычном режиме работы.

Работа с использованием облачного сервера Nemesida AI
Облачный сервер Nemesida AI, расположенный в инфраструктуре Pentestit, предназначен для генерации поведенческих моделей на основе поступающего с удаленных серверов копии трафика. Облачный сервер используется в случаях, когда пользователь ПО Nemesida WAF не имеет достаточного для работы модуля Nemesida AI MLC объема ОЗУ (требуется до 32 ГБ). Для использования возможностей облачного сервера Nemesida AI свяжитесь со службой технической поддержки.

После внесения изменений выполните перезапуск службы:

# service mlc_main restart
# service mlc_main status

Переобучение моделей Nemesida AI

Для повышения точности определения атак рекомендуется выполнять переобучение моделей раз в неделю. Для этого необходимо добавить к значению виртуального хоста символ ^. Пример: vhosts_list = *^ или vhosts_list = example.com^.

После внесения изменений выполните перезапуск службы:

# service mlc_main restart

Настройка взаимодействия с ПО ClamAV
После установки пакета Nemesida WAF функционал взаимодействия с ПО ClamAV по умолчанию выключен, поскольку в редких случаях может являться источником ложных срабатываний некоторых запросов к веб-приложению (в зависимости от текущего состояния базы сигнатурного анализа ClamAV). Используйте данный функционал по своему усмотрению.

Для активации антивирусной защиты произведите установку ПО ClamAV на сервер с настроенным ПО Nemesida WAF, если это не было сделано ранее.

Пример установки для ОС Debian 9:

# apt install clamav-daemon

Включение функционала взаимодействия с ПО ClamAV осуществляется путем активации параметра nwaf_clamav в файле /etc/nginx/nwaf/conf/global/nwaf.conf и приведения файла /etc/clamav/clamd.conf к виду:

...
TCPSocket 3310
TCPAddr   127.0.0.1
... 

После внесения изменений необходимо произвести перезапуск Nginx.

Работа Nemesida WAF в режиме IDS
Для функционирования Nemesida WAF в режиме IDS необходимо настроить дублирование трафика с основного веб-сервера (через который производятся обращения к веб-приложению) на сервер с установленным Nemesida WAF. Для этого внесите необходимые изменения в конфигурационные файлы на каждом из серверов:

1. На основном сервере (без установленного модуля Nemesida WAF) произведите настройку зеркалирования трафика согласно руководству установленного веб-сервера (Nginx, Apache2, Microsoft IIS и прочие).

Пример настройки Nginx для зеркалирования трафика

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

location / {
    mirror /mirror;
    ...
}

location = /mirror {
    internal;
    proxy_pass http://nemesida_waf_server$request_uri;
}

где nemesida_waf_server — адрес сервера с установленным модулем Nemesida WAF, на который будет передаваться дублированный трафик.

2. На сервере с установленным модулем Nemesida WAF приведите конфигурационный файл виртуального хоста Nginx к виду:

server {
        listen  80;
        index   index.html;
        root    /var/www/html;
        try_files $uri $uri/ /index.html;
}

3. На сервере с установленным модулем Nemesida WAF создайте директорию /var/www/html и разместите в ней пустой файл index.html.

4. На сервере с установленным модулем Nemesida WAF приведите файл /etc/nginx/nwaf/conf/global/nwaf.conf к виду:

...
nwaf_limit rate=5r/m block_time=0;
...

5. После внесения изменений необходимо перезапустить Nginx на каждом из серверов.

Процедура проверки корректности работы модулей
После установки и настройки модулей Nemesida WAF выполните перезагрузку операционной системы и проверьте работоспособность всех модулей:

# systemctl status nginx nwaf_update mla_main mlc_main rabbitmq-server

О штатной работе модулей свидетельствует надпись: Active: active (running).

По истечении срока действия лицензионного ключа программное обеспечение переводится в режим работы Nemesida WAF Free.

Управление сигнатурами

В Nemesida WAF и Nemesida WAF Free реализован функционал поддержки пользовательского набора правил для выявления атак (сигнатуры, RL), а также их исключений (правила исключения, WL).

Зоны, подзоны, уточнения

При создании RL/WL правил могут быть использованы специальные параметры:

  • зоны: URL, ARGS, BODY или HEADERS;
  • подзоны (поля заголовка HEADERS): $HEADERS_VAR:Cookie, $HEADERS_VAR:User-Agent, $HEADERS_VAR:Content-Type и т.д.;
  • условия применения правила (уточнения зоны, конкретизация): $URL, $ARGS, $BODY и $HEADERS.

Использование зон, подзон и уточнений позволяет максимально конкретизировать создаваемое правило.

При уточнении допустимо использовать регулярные выражения, для этого необходимо добавить к уточнению зоны постфикс _X. Пример: "Z:ARGS|$URL_X:/\w+". Для использования в уточнениях разделителя как метасимвола регулярного выражения его необходимо экранировать. Пример: правило ... "Z:...|$URL_X:/(a\|b)/"; будет применяться к URL, который содержит /a/ или /b/.

Несколько параметров (зон, подзон, уточнений) в одном правиле должны разделяться символом |, при этом будет использоваться следующий принцип взаимодействия:

  • зоны/подзоны взаимодействуют между собой по принципу логического ИЛИ;
  • уточнения между собой взаимодействуют по принципу логического ИЛИ;
  • зоны/подзоны взаимодействуют с уточнениями по принципу логического И.

Создание персональных сигнатур

Персональные правила определения признака атаки можно размещать в основном конфигурационном файле Nemesida WAF (nwaf.conf) или в самостоятельно созданном файле вида *.conf, размещенном в директории /etc/nginx/nwaf/conf/vhosts. Персональные (user-defined) сигнатуры должны определяться параметром RL, иметь ID начиная от 50000, и принимать следующий вид:

RL ID:50000 "P:select from" "SC:SQL:12" "Z:ARGS";
RL ID:50001 domain=example.com "P:select from" "SC:SQL:12" "Z:ARGS";
RL ID:50002 domain=*.example.com "P:select from" "SC:SQL:12" "Z:ARGS";
RL ID:50003 "PX:select\s+from" "SC:SQL:12" "Z:ARGS|$URL:/admin";
RL ID:50004 "P:select from" "SC:SQL:12" "Z:ARGS|$URL_X:/(admin\|dev)";

Для сигнатур в области зоны допускается использование значения MLA для принудительной отправки запроса в Nemesida AI MLA, попадающего под действие созданной сигнатуры, если score < 12 (по умолчанию в Nemesida AI MLA направляются запросы со score равным или превышающим значение параметра mla_score).

Примеры сигнатур для принудительной отправки в Nemesida AI MLA
Запрос, содержащий вхождение select from в любой из четырех зон, будет направлен в Nemesida AI MLA:

RL ID:50005 "P:select from" "SC:SQL:1" "Z:MLA";

Запрос, содержащий вхождение select from в зоне ARGS, будет направлен в Nemesida AI MLA:

RL ID:50006 "P:select from" "SC:SQL:1" "Z:ARGS|MLA";
Опции создаваемых сигнатур
ID
Уникальный идентификатор правила. Для создания собственных правил доступен диапазон от 50000 до 59999. Обязательный параметр.
domain
Установка принадлежности правила к домену. Для опции domain допускается использовать wildcard-значение.
P/PX
Опция, определяющая шаблон вхождения сигнатуры (опция P используется для обозначения простого вхождения, опция PX — регулярного выражения). Обязательный параметр.
SC
Установка тега правила (Injection, XSS, UWA, Scanner, Evasion или Other) и цифрового показателя значимости (score, от 1 до 12). Обязательный параметр.

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

Z
Зона/подзона применения правила. Для применения сигнатуры ко всем зонам используйте пустой параметр "Z:". Обязательный параметр.

Для применения сигнатуры к нескольким зонам используйте разделитель: "Z:URL|BODY".

Для принудительной отправки запроса в модуль Nemesida AI MLA используйте значение MLA в зоне применения правил ("Z:MLA"), при этом цифровой показатель значимости (SC) должен быть менее 12.

Для конкретизации зоны можно использовать дополнительные опции. Для "Z:ARGS|$URL:/templates" правило сработает только в зоне ARGS с параметром /templates в URL.

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

Создание правила исключения сигнатуры

В случае, когда запрос подпадает под действие сигнатуры, помимо отправки инцидента в Nemesida WAF API, в журнале ошибок работы Nginx (помимо отправки информации в Nemesida WAF API для коммерческой версии) будет содержаться следующая строка:

Nemesida WAF: the request ххх contains a rule id 1 in zone HEADERS, ...

или, если запрос содержит сигнатуру с предельно допустимым цифровым показателем значимости (score = 12):

Nemesida WAF: the request ххх blocked by rule id 1 in zone HEADERS, ...

где:

  • 1 — ID сигнатуры атаки;
  • HEADERS — зона или подзона вхождения сигнатуры.

Для вывода абсолютно всех вхождений сигнатур в запросе (при наличии вхождений), в том числе тех вхождений, которые не привели к последующему блокированию запроса, активируйте параметр nwaf_log_mr_all; в файле nwaf.conf.

Информация о составе текущего набора сигнатур доступа на странице rlinfo.nemesida-security.com.

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

WL ID:1 "Z:"; — при таких параметрах вхождение сигнатуры с идентификатором 1 будет исключено из всех зон для всех виртуальных хостов.

WL ID:1 "Z:ARGS|HEADERS"; — при таких параметрах вхождение сигнатуры с идентификатором 1 будет исключено из зон ARGS и HEADERS для всех виртуальных хостов.

WL ID:1 "Z:ARGS|$HEADERS_VAR:Cookie"; — при таких параметрах вхождение сигнатуры с идентификатором 1 будет исключено из зоны ARGS и подзоны Cookie для всех виртуальных хостов.

WL ID:1 domain=*.example.com "Z:URL"; — при таких параметрах вхождение сигнатуры с идентификатором 1 будет исключено из зоны URL для виртуального хоста example.com и его поддоменов.

WL ID:1 domain=example.com "Z:URL|$URL:/index/index.php"; — при таких параметрах вхождение сигнатуры с идентификатором 1 будет исключено из зоны URL для виртуального хоста example.com для URI http://example.com/index/index.php.

WL ID:* domain=example.com "Z:ARGS"; — при таких параметрах зона ARGS всех запросов к виртуальному хосту example.com > будет исключена из обработки сигнатурным анализом.

WL ID:* domain=example.com "Z:$URL:/test"; — при таких параметрах все обращения к example.com/test будут исключены из обработки сигнатурным анализом.

Для параметра ID:* допускается использовать любую зону в качестве уточнения, но в качестве условия применения правила — только параметр $URL.

В целях безопасности при создании правил исключения необходимо их максимально конкретизировать.

Источники сообщений об ошибках
В процессе работы Nemesida WAF информация об ошибках может содержаться:
— в системных журналах ОС;
— в журнале работы Nginx;
— в журнале работы RabbitMQ;
— в журнале работы модулей Nemesida WAF (/var/log/nwaf/*.log).

Техническая поддержка

Для пользователей Nemesida WAF Free техническая поддержка оказывается только по электронной почте или на форуме.

В случае возникновения непредвиденных ошибок в работе Nemesida WAF свяжитесь с технической поддержкой по телефону +7 (495) 204-19-72, электронной почте или оставьте сообщение на форуме.