Nemesida WAF Scanner | Немезида ВАФ

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

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

Модуль Nemesida WAF Scanner предназначен для выявления веб-уязвимостей в защищаемых веб-приложениях. Для корректной работы модуля Nemesida WAF Scanner необходимо предоставить доступ к веб-приложению в обход Nemesida WAF.

В целях безопасности рекомендуется разрешить доступ для сервера с компонентом Nemesida WAF Scanner только к сканируемым веб-приложениям и внешним ресурсам.

Установка модуля на сервер:

DebianUbuntuRHELDocker
# apt update
# apt install apt-transport-https gnupg2 curl
Debian 11
# echo "deb https://nemesida-security.com/repo/nw/debian bullseye non-free" > /etc/apt/sources.list.d/NemesidaWAF.list
# curl -s https://nemesida-security.com/repo/nw/gpg.key | gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/trusted.gpg.d/trusted.gpg --import
# chmod 644 /etc/apt/trusted.gpg.d/trusted.gpg
# apt update && apt upgrade
# apt install python3-pip python3-venv python3-dev postgresql-server-dev-all
# apt install nwaf-scanner
Debian 12
# echo "deb https://nemesida-security.com/repo/nw/debian bookworm nwaf" > /etc/apt/sources.list.d/NemesidaWAF.list
# curl -s https://nemesida-security.com/repo/nw/gpg.key | gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/trusted.gpg.d/trusted.gpg --import
# chmod 644 /etc/apt/trusted.gpg.d/trusted.gpg
# apt update && apt upgrade
# apt install python3-pip python3-venv python3-dev postgresql-server-dev-all
# apt install nwaf-scanner

Во время установки модуля дополнительно устанавливаются следующие PIP-пакеты:
beautifulsoup4 cdifflib chardet logutils psutil psycopg2-binary pyparsing PyYAML requests soupsieve termcolor url-normalize

# apt update
# apt install apt-transport-https gnupg2 curl
Ubuntu 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 -
# apt update && apt upgrade
# apt install python3.8 python3-pip python3.8-venv python3.8-dev postgresql-server-dev-all
# apt install nwaf-scanner
Ubuntu 22.04
# echo "deb [arch=amd64] https://nemesida-security.com/repo/nw/ubuntu jammy non-free" > /etc/apt/sources.list.d/NemesidaWAF.list
# curl -s https://nemesida-security.com/repo/nw/gpg.key | gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/trusted.gpg.d/trusted.gpg --import
# chmod 644 /etc/apt/trusted.gpg.d/trusted.gpg 
# apt update && apt upgrade
# apt install python3.10 python3-pip python3.10-venv python3.10-dev postgresql-server-dev-all
# apt install nwaf-scanner

Во время установки модуля дополнительно устанавливаются следующие PIP-пакеты:
beautifulsoup4 cdifflib chardet logutils psutil psycopg2-binary pyparsing PyYAML requests soupsieve termcolor url-normalize

Настройте политику 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

Подключите репозиторий Немезида ВАФ, приведя файл /etc/yum.repos.d/NemesidaWAF.repo к виду:

[NemesidaWAF]
name=Nemesida WAF Packages for RHEL
baseurl=https://nemesida-security.com/repo/nw/rhel/$releasever/$basearch/
gpgkey=https://nemesida-security.com/repo/nw/gpg.key
enabled=1
gpgcheck=1

Установите пакеты:

RHEL 8 и деривативы
# dnf install epel-release
# dnf update
# dnf install python39 python39-devel python39-setuptools python39-pip postgresql-devel gcc
# dnf install nwaf-scanner
RHEL 9 и деривативы
# dnf install epel-release
# dnf update
# dnf install python3 python3-devel python3-setuptools python3-pip postgresql-devel gcc
# dnf install nwaf-scanner

Во время установки модуля дополнительно устанавливаются следующие PIP-пакеты:
beautifulsoup4 cdifflib chardet logutils psutil psycopg2-binary pyparsing PyYAML requests soupsieve termcolor url-normalize

Информация об использовании Nemesida WAF в Docker-контейнере доступна в соответствующем разделе.

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

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

[main]
Основная секция.
nwaf_license_key
Параметр для указания лицензионного ключа модуля Nemesida WAF Scanner. В случае, если лицензионный ключ не будет обнаружен или будет недействителен, запуск модуля завершится соответствующей ошибкой.
sys_proxy
Настройка адреса прокси-сервера для обращения к nemesida-security.com:443 (проверка лицензионного ключа).

Пример:

sys_proxy = http://proxy.example.com:3128

Допускается использование параметров аутентификации при использовании прокси-сервера.

Пример:

sys_proxy = http://<user>:<password>@proxy.example.com:3128
api_uri
Настройка адреса API для отправки результатов сканирования в Nemesida WAF API.

Пример:

api_uri = http://api.example.com:8080/nw-api/
api_proxy
Настройка адреса прокси-сервера для обращения к Nemesida WAF API.

Пример:

api_proxy = http://proxy.example.com:3128

Допускается использование параметров аутентификации при использовании прокси-сервера.

Пример:

api_proxy = http://<user>:<password>@proxy.example.com:3128
debug
Параметр активации/деактивации вывода отладочной информации в консоль.

[recheck]
Проверка уязвимостей с использованием функционала модуля Recheck.
enable
Параметр активации/деактивации функционала.
db_name
db_user
db_pass
db_host
db_port
Параметры подключения к БД модуля Личный кабинет.

Для настройки параметров сканирования в директории /opt/nws/conf/ создайте файл(-ы) с расширением conf. Для каждого веб-приложения необходимо создавать отдельный конфигурационный файл.

Пример конфигурационного файла example.conf
Параметр по умолчанию
Описание параметра

[scan]
Основная секция.
target
Адрес веб-приложения в формате schema://domain|ip[:port].

Пример:

target = http://example.com
target = https://example.com:85

Из-за специфики работы фильтрующей ноды в базе данных не сохраняется порт, по которому производилось обращение к веб-приложению. Эту информацию необходимо учитывать при заполнении конфигурационного файла т.к. при выполнении функции Recheck будет использоваться адрес из параметра target соответствующего конфигурационного файла при условии, что значение параметра target совпадает со значением поля vhost в базе данных (допускается использование www в значении поля vhost).

scan_proxy
Адрес прокси-сервера для обращений к веб-приложению.

Пример:

scan_proxy = http://proxy.example.com:3128

Допускается использование параметров аутентификации при использовании прокси-сервера.

Пример:

scan_proxy = http://<user>:<password>@proxy.example.com:3128
exclude_modules
Исключить модуль при сканировании.

Пример:

exclude_modules = ba ca lfi rfi rce sde sqli ssti xss

Доступные модули:

  • ba — модуль поиска уязвимости «Ошибки контроля доступа»;
  • ca — модуль проверки cookie, например, наличие флага httponly;
  • lfi — модуль поиска уязвимости «Local File Inclusion»;
  • rfi — модуль поиска уязвимости «Remote File Inclusion»;
  • rce — модуль поиска уязвимости «Remote Code Execution»;
  • sde — модуль поиска уязвимости «Sensitive Data Exposure»;
  • sqli — модуль поиска уязвимости «SQL injection»;
  • ssti — модуль поиска уязвимости «Server Side Template Injection»;
  • xss — модуль поиска уязвимости «Cross-Site Scripting».

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


[auth]
Секция аутентификации.
auth_uri
Адрес страницы веб-приложения для выполнения процедуры аутентификации.

Пример:

auth_uri = https://example.com/login

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

login
password
Имя пользователя и пароль пользователя для аутентификации.

Пример:

login = your_login
password = your_password

Если веб-приложение использует собственные названия полей для ввода имени и пароля пользователя (например, username и password), то параметры login и password необходимо заменить на них.

Пример:

username = your_login
password = your_password

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

Информация о процессе сканирования модулем Nemesida WAF Scanner содержится в журнале регистрации событий модуля /var/log/nwaf/nws.log, а информация о работе модуля Recheck — в журнале событий /var/log/nwaf/nws-recheck.log.

Режимы работы Nemesida WAF Scanner:

  • Обычное сканирование — стандартное сканирование с запуском ручном режиме. Для запуска сканирования необходимо выполнить команду nws в консоли;
  • Сканирование по расписанию — периодическое сканирование веб-приложения на основе /etc/cron.d/nws;
  • Режим Recheck — проверка наличия уязвимости средствами Nemesida WAF Scanner в конкретном параметре на основе заблокированного запроса (запуск производится с помощью функционала Личного кабинета).

Если БД, необходимая для работы модуля Recheck, используется на отдельном сервере, то необходимо предоставить доступ к ней. Для этого внесите изменения в файл конфигурации PostgreSQL pg_hba.conf.

Пример:

# IPv4 local connections:
host    all             all             0.0.0.0/0            md5