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

Доменное имя example.com вместе с поддоменами в руководстве используется в качестве примера.

Установка и настройка модуля Личный кабинет
Перед установкой модуля Личный кабинет Nemesida WAF необходимо произвести установку и настройку модуля Nemesida WAF API и СУБД PostgreSQL.

Ниже представлено краткое руководство по введению в эксплуатацию локальной версии Личный кабинет Nemesida WAF на серверах под управлением ОС Linux. Для установки модуля необходимо выполнить следующие действия:

DebianUbuntuCentOS
# apt install apt-transport-https
Debian 9
Подключите репозиторий:

# echo "deb https://nemesida-security.com/repo/nw/debian stretch non-free" > /etc/apt/sources.list.d/NemesidaWAF.list

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

# echo "deb http://nginx.org/packages/debian/ stretch nginx" > /etc/apt/sources.list.d/nginx.list
# wget -O- https://nginx.org/packages/keys/nginx_signing.key | apt-key add -
Debian 10
Подключите репозиторий:

# echo "deb https://nemesida-security.com/repo/nw/debian buster non-free" > /etc/apt/sources.list.d/NemesidaWAF.list

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

# 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 -

установите модуль:

# wget -O- https://nemesida-security.com/repo/nw/gpg.key | apt-key add -
# apt update && apt upgrade
# apt install python3 python3-venv python3-dev python3-pip nginx memcached libmemcached-dev postgresql-server-dev-all
# apt install nwaf-cabinet

Установка Nginx будет производиться автоматически с созданием виртуального хоста в каталоге /etc/nginx/conf.d/. После завершения установки необходимо переименовать конфигурационный файл виртуального хоста cabinet.conf.disabled в cabinet.conf и перезапустить nginx.

# apt install apt-transport-https
16.04
Подключите репозиторий:

# echo "deb [arch=amd64] https://nemesida-security.com/repo/nw/ubuntu xenial non-free" > /etc/apt/sources.list.d/NemesidaWAF.list
# wget -O- https://nemesida-security.com/repo/nw/gpg.key | apt-key add -

Подключите репозиторий 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-venv python3.6-dev nginx memcached libmemcached-dev build-essential
# curl https://bootstrap.pypa.io/get-pip.py | python3.6
18.04
Подключите репозиторий:

# echo "deb [arch=amd64] https://nemesida-security.com/repo/nw/ubuntu bionic non-free" > /etc/apt/sources.list.d/NemesidaWAF.list
# wget -O- https://nemesida-security.com/repo/nw/gpg.key | apt-key add -

Подключите репозиторий 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 python3-venv python3-dev python3-pip nginx memcached libmemcached-dev build-essential
20.04
Подключите репозиторий:

# echo "deb [arch=amd64] https://nemesida-security.com/repo/nw/ubuntu focal non-free" > /etc/apt/sources.list.d/NemesidaWAF.list
# wget -O- https://nemesida-security.com/repo/nw/gpg.key | apt-key add -

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

# echo "deb http://nginx.org/packages/ubuntu/ focal 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.8 python3.8-venv python3.8-dev python3-pip nginx memcached libmemcached-dev build-essential python3-reportbug libpq-dev
# apt install nwaf-cabinet

Установка Nginx будет производиться автоматически с созданием виртуального хоста в каталоге /etc/nginx/conf.d/. По завершении установки переименуйте конфигурационный файл виртуального хоста cabinet.conf.disabled в cabinet.conf и перезапустите nginx.

1. Произведите настройку политики 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
CentOS 7
Подключите дополнительные репозитории и установите модуль:

# rpm -Uvh https://nemesida-security.com/repo/nw/centos/nwaf-release-centos-7-1-6.noarch.rpm
# rpm -Uvh https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# rpm -Uvh https://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
# yum install centos-release-scl-rh
# yum install python36 python36-pip python36-devel nginx memcached libmemcached-devel postgresql-libs gcc
# yum install nwaf-cabinet
CentOS 8
Подключите дополнительные репозитории и установите модуль:

# rpm -Uvh https://nemesida-security.com/repo/nw/centos/nwaf-release-centos-8-1-6.noarch.rpm
# dnf update
# dnf install python3 python3-pip python3-devel postgresql-devel gcc nginx memcached 
# dnf install nwaf-cabinet

Установка Nginx будет производиться автоматически с созданием виртуального хоста в каталоге /etc/nginx/conf.d/. По завершении установки переименуйте конфигурационный файл виртуального хоста cabinet.conf.disabled в cabinet.conf и перезапустите nginx.

2. Внесите необходимые изменения в файл /var/www/app/cabinet/settings.py.

Параметры settings.py
Параметр
Описание
ALLOWED_HOSTS
Параметры для обеспечения безопасности «Django». Укажите FQDN-значение («example.com») или IP-адрес сервера, по которому доступен модуль.

HTTP_PROXY_CONF
Адрес прокси-сервера (опционально).

DB_NAME_CABINET
DB_USER_CABINET
DB_PASS_CABINET
DB_HOST_CABINET
DB_PORT_CABINET
Параметры для подключения к БД модуля Личный кабинет Nemesida WAF.

DB_NAME_CONF
DB_USER_CONF
DB_PASS_CONF
DB_HOST_CONF
DB_PORT_CONF
Параметры для подключения к БД модуля Nemesida WAF API.

SEND_EMAIL
EMAIL_HOST
EMAIL_PORT
EMAIL_HOST_USER
EMAIL_HOST_PASSWORD
EMAIL_USE_TLS
SMTP_TO_CONF
EMAIL_DETAILS
Параметры подключения к почтовому серверу для отправки уведомлений о событиях на электронную почту (опционально), где:
SEND_EMAIL — получение сообщений об атаках. Если параметр равен False, то сообщения об атаках не будут отправляться на электронную почту;
EMAIL_HOST — адрес подключения к SMTP-серверу;
EMAIL_PORT — порт подключения к SMTP-серверу;
EMAIL_HOST_USER — имя пользователя почтового сервера, от имени которого будут отправляться сообщения;
EMAIL_HOST_PASSWORD — пароль пользователя почтового сервера, от имени которого будут отправляться сообщения;
EMAIL_USE_TLS — активация протокола TLS при аутентификации на SMTP-сервере (значение True или False);
SMTP_TO_CONF — почтовый адрес, на который будут отправляться сообщения;
EMAIL_DETAILS — отправка расширенной информации об атаках на электронную почту (значение True или False).
SKIP_BT1
SKIP_BT2
SKIP_BT3
SKIP_BT4
SKIP_BT5
SKIP_BT7
SKIP_BT8
SKIP_BT9
SKIP_BT10
Если параметр отсутствует или равен False, то на электронную почту будут отправляться сообщения с указанным идентификатором блокировки. Если параметр равен True, то сообщения с указанным BT отправляться не будут.

Например, при SKIP_BT7 = False на электронную почту будут отправляться сообщения с BT 7.


VTS_SERVERS
VTS_URL
Параметры для сбора информации с модуля VTS (опционально), где:
VTS_SERVERS — список серверов, с которых модуль будет производить сбор данных.
Пример: VTS_SERVERS = ['w1.example.com', 'w2.example.com'];

VTS_URL — адрес страницы, по которому доступна информация модуля VTS.

Обращение к серверам производится по протоколам HTTP/HTTPS. После настройки параметров необходимо перезапустить сервис:

systemctl enable cabinet_vts
service cabinet_vts restart

3. Разрешите обращения:
— к серверу https://nemesida-security.com;
— к серверу Memcached 127.0.0.1:11211;
— к серверу с СУБД PostgreSQL;
— к серверам из списка VTS_SERVERS по HTTP или HTTPS протоколам.

4. В настройках межсетевого экрана разрешите обращения к 80 порту (задан по умолчанию в файле /etc/nginx/conf.d/cabinet.conf).

5. Выполните миграцию и установите пароль администратора:

# cd /var/www/app/ && . venv/bin/activate && python3 manage.py migrate && python3 manage.py createsuperuser && deactivate

6. Перезагрузите сервер и проверьте работу модуля:

# systemctl status cabinet cabinet_ipinfo cabinet_attack_nottification cabinet_vts

В целях безопасности рекомендуется ограничить обращения к веб-интерфейсу модуля Личный кабинет Nemesida WAF списком разрешенных IP-адресов для предотвращения управления процессами работы Nemesida WAF неавторизованными пользователям.

Эксплуатация Личного кабинета
В Личном кабинете Nemesida WAF, доступном по адресу YOUR_SERVER/waf/personal/, содержится информация о работе основных (Nemesida WAF, Nemesida WAF Scanner, Nemesida WAF AI) и вспомогательных модулей Nemesida WAF.

Таблица и графики атак

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

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

График Attacks intensity отображает интенсивность и динамику в разрезе заданного периода и выбранных категорий атак.

Диаграммы Attacks by type позволяют увидеть расширенную информацию об аномальных запросах за определенные периоды (today, last. 24 h, last week, last month).

Диаграммы Statistic by target и Statistic by IP отображают Топ-10 доменов, которые подверглись атакам и Топ-10 IP-адресов, с которых приходили аномальные запросы.

Информация о количественных показателях, интенсивности и динамики аномальных запросов поступающих в определенный период

Расширенная информация об аномальных запросах за определенные периоды

На странице Attacks в качестве индикатора применения поведенческих моделей используются следующие пиктограммы:

  • пиктограмма отображается в случае, когда модуль машинного обучения не является причиной блокирования запроса (BT 2, 6, 7);
  • пиктограмма отображается в случае, когда поведенческие модели находятся в процессе переобучения;
  • пиктограмма отображается в случае, когда причиной блокирования запроса является модуль машинного обучения (BT 3, 8).

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

При клике на иконку отображается список событий.

Информация об атаках в виде обычного списка

Область поиска и выбор событий за определенный период доступны в верхней части страницы. На страницах Summary и Attack производить поиск можно как в обычном режиме (без указания специальных параметров), так и в расширенном, используя следующие директивы:

Фильтры расширенного поиска
  • h — виртуальный хост, доменное имя;
  • t — тип атаки (SQLi, XSS, LFI, MLA, ClamAV, BF, DDoS, MLC и т. д.);
  • ip — IP-адрес атакующего;
  • bt — идентификатор блокировки;
  • waf_id — идентификатор WAF ID;
  • group_id — идентификатор группы запросов, определенных Nemesida AI MLC как brute-force или DDoS-атака;
  • recheck — статус выполнения операции recheck(processed, confirmed, not confirmed);
  • rule — идентификатор сигнатуры;
  • mz — зона выявления аномалии (URL, ARGS, BODY, HEADERS, Cookie и т. д.);
  • urlURL-адрес;
  • possible — фильтр применяется без параметров и предназначен для отображения потенциальных атак BT 7 (атаки методом перебора), BT 9 (флуд) и BT 10 (DDoS), которые не были достоверно определены как атаки. Поддерживается использование логического оператора «!» для исключения вывода информации о потенциальных атаках. Например, !possible.

Для ограничения вывода информации в поле поиска доступны логические операторы «!» (исключение) и «and» (объединение).

Примеры возможных запросов

Запрос выведет информацию по атакам, имеющим статус confirmed при использовании функционала recheck

recheck:confirmed

Запрос выведет информацию по атакам, имеющим тип brute-force

t:bf

Запрос выведет информацию по атакам, имеющим тип DDoS-атака

t:ddos

Запрос выведет информацию по атакам с идентификатором блокировки BT 1

bt:1

Запрос выведет информацию по запросам с идентификатором dd8636c32d177c0c74416c19429a8c4d

waf_id:dd8636c32d177c0c74416c19429a8c4d

Запрос выведет информацию по атакам с указанным значением Request ID

group_id:dd8636c32d177c0c74416c19429a8c4d

Запрос выведет информацию по атакам с номером правила 1022

rule:1022

Запрос выведет информацию по аномалиям, выявленным в зоне Cookie

mz:сookie

Запрос выведет информацию по атакам, URL которых содержит index.php

url:index.php

Запрос выведет информацию о потенциальных атаках на домен example.com

h:example.com and possible

Запрос выведет информацию по атакам на домен example.com с IP-адреса 1.2.3.4

h:example.com and ip:1.2.3.4

Запрос выведет информацию по атакам на домены 1.example.com и 2.example.com, кроме атак, определенных сигнатурным анализом как SQL-инъекции

h:1.example.com and h:2.example.com and t:!SQLi

Запрос выведет информацию по атакам, определенным сигнатурным анализом как SQL-инъекции, на домен example.com с IP-адресов 1.2.3.4 и 4.3.2.1

h:example.com and t:SQLi and ip:1.2.3.4 and ip:4.3.2.1

Для запросов, заблокированных сигнатурным методом, доступно поле Rule ID, при клике на которое во всплывающем окне отобразятся:

  • информация о составе сигнатуры;
  • правило исключения (WL) для добавления в конфигурационный файл Nemesida WAF.

К заблокированным запросам с BT 1 и BT 2, имеющим одинаковый Request ID, будет применена группировка. Если запросы перед группировкой были заблокированы различными сигнатурами, то они через запятую будут перечислены в поле Rule ID, а описание уязвимости (например, SQLi, XSS, LFI и т. д.) после группировки будет изменено на Multiple rule.

Группировка запросов

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

Информация о сигнатуре

Информация об атаках методом перебора

Функционал Recheck

Помимо основного функционала, Nemesida WAF Scanner позволяет выполнять повторную отправку содержимого заблокированного запроса и/или различные вариации на защищаемое веб-приложение. Пользователи, входящие в группу «Администраторы», могут выполнить такую проверку с помощью кнопки null, которая становится доступной при выключенной группировке для выявленных атак типа XSS, SQLI, LFI, RFI, имеющих BT 1 или 2. После того как пользователь нажмет на кнопку null, на ее месте отобразится статус проверки. В случае обнаружения уязвимости информация будет доступна в разделе «Scanner» в Личном кабинете. Администратор может исключить запрос, нажав на null, после чего информация о данном запросе будет доступна в панели администратора во вкладке «Scanner». Для использования функционала Recheck необходимо настроить секцию [recheck] в файле /opt/nws/main.conf.

Использование Recheck может привести к выполнению произвольного кода из запроса на стороне веб-приложения. Применяйте функционал только если полностью уверены в своих действиях.

Возможные значения:

  • Processed — проверка выполняется;
  • Confirmed — обнаружена уязвимость;
  • Not confirmed — уязвимость не обнаружена.

Информация о дополнительных проверках на уязвимости

Функционал Unlock Request

Пользователь личного кабинета, который считает блокировку запроса ошибочной, может направить заявку на ее разблокировку администратору нажатием кнопки null. На почту администратору будет направлено письмо с описанием заявки. Список всех заявок находится во вкладке null. Запрос можно разблокировать или оставить заблокированным. Для разблокировки запроса администратору необходимо создать соответствующее правило для Nemesida WAF, после чего пользователь получит оповещение.

Форма отправки заявки на разблокировку

Список запросов в панели администратора

Результаты работы сканера уязвимостей

Информация о работе модуля Nemesida WAF Scanner доступна во вкладке . Администратор может исключить запрос, нажав на null, после чего информация о запросе будет доступна в панели администратора во вкладке «Scanner». В дальнейшем аналогичные запросы не будут отображаться на этой вкладке.

Статистика работы сканера уязвимостей

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

Фильтры расширенного поиска
  • h — виртуальный хост, доменное имя;
  • t — тип уязвимости (SQLi, XSS, LFI и т. д.);
  • u — тестируемый URL;
  • p — уязвимый параметр.
Для ограничения вывода информации в поле поиска доступны логические операторы «!» (исключение) и «and» (объединение).

Примеры возможных запросов
Запрос выведет информацию об уязвимостях, обнаруженных для домена example.com
h:example.com
Запрос выведет информацию об уязвимостях, имеющих тип SQLi
t:SQLi
Запрос выведет информацию об уязвимостях, обнаруженных для тестируемого URL /search.php
u:/search.php
Запрос выведет информацию об уязвимостях, обнаруженных в параметре id
p:id
Запрос выведет информацию об уязвимостях, имеющих тип SQL-инъекции для домена example.com
h:example.com and t:SQLi

Статистика работы модуля «Nginx virtual host traffic status»

На вкладке доступна информация о трафике при взаимодействии с upstream-серверами «nginx», количестве 500-х ошибок, времени отклика, входящей и исходящей скорости в трех периодах (сейчас, неделя, месяц).

Статистика работы модуля VTS

Формирование детального отчета в формате PDF и CSV

При переходе на вкладку и будет сформирован детальный отчет о работе Nemesida WAF и его компонентов. Отчет возможно сформировать в формате PDF и CSV.

Панель администратора

Пользователям, входящим в группу «Администраторы», при переходе на вкладку доступен специальный раздел, в котором они могут управлять другими пользователями и их параметрами, а также обрабатывать поступающие запросы.

Список пользователей

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

Внешний вид панели администратора

Сканер уязвимостей

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

Информация об уязвимостях

Список всех заявок на разблокировку запросов

Во вкладке null отображается список заявок на разблокировку запросов. При клике на null происходит удаление заявки.

Информация о заявках на разблокировку запросов

При клике на администратор может редактировать заявку.

Форма редактирования заявки на разблокировку запроса

Создание нового пользователя

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

Создание нового пользователя

Для того чтобы создать нового пользователя, необходимо заполнить следующие поля:

Поле
Описание
E-mail

Адрес электронной почты.

WAF ID

Идентификатор модуля Nemesida WAF. Можно задать несколько WAF ID через запятую. Значение «*» означает, что указаны все возможные WAF ID.

Для группировки лицензионных ключей в единый WAF ID отправьте запрос на support@nemesida-security.com.

Password

Пароль.

Confirmation

Подтверждение пароля.

Role

Роль пользователя: User или Administrator (с правами создавать и редактировать других пользователей).

Status

Статус пользователя: включен (Active) или выключен (Inactive).

WAF domains

Фильтрация атак по доменам. Можно задать несколько доменов через запятую. Значение «*» означает, что будут использованы все домены.

Если указать конкретный домен, то пользователь в личном кабинете будет видеть только те атаки, которые пришли на этот домен.

В данном поле возможно задать wildcard-значения по аналогии с Nginx. Например, доменное имя .example.com включает в себя основной домен и его поддомены. Доменное имя *.example.com включает в себя поддомены, но не включает основной домен example.com.

Access restricted by IP

IP адрес, с которого пользователь может войти в личный кабинет в панели администратора. Можно задать несколько адресов через запятую.

Вывод дополнительной информации о работе модуля

В случае возникновения проблем при работе модуля необходимо внести изменения в файл /var/www/app/cabinet/settings_extra.py:

...
LOGGING = {
...
   'level': 'INFO'
...
   'level': 'INFO'
...

и перезапустить сервис:

# service cabinet restart

Информация об ошибках в работе Nemesida WAF Cabinet содержится в журналах регистрации событий модуля /var/log/uwsgi/cabinet/*.log, а диагностическая информация — в /var/log/uwsgi/cabinet/debug.log.