Некоммерческая версия Немезида ВАФ обеспечивает базовую защиту веб-приложения от атак класса OWASP на основе сигнатурного анализа. Немезида ВАФ Комьюнити имеет собственную базу сигнатур, выявляет атаки на веб-приложения при минимальном количестве ложных срабатываний, обновляется из Linux-репозиториев, устанавливается и настраивается за несколько минут.
Особенности
- быстрый и легкий старт;
- установка и настройка за 10 минут;
- минимум ложных срабатываний;
- установка и обновление из репозитория;
- возможность подключения к уже установленному Nginx, начиная с версии 1.16;
- удобный личный кабинет, возможность интегрировать с SIEM-системами.
Основное ограничение некоммерческой версии Немезида ВАФ затрагивает работу механизмов нормализации данных (например, Base64/HTML Entity/UTF-16 декодирование) и модуля машинного обучения Nemesida AI, который позволяет более точно и с ультра-низким количеством ложных срабатываний выявлять атаки на веб-приложения (включая экплуатацию уязвимостей «нулевого дня»). Также недоступно использование сканера уязвимостей Nemesida WAF Scanner.
Чтобы наглядно понять разницу между сигнатурным анализом и машинным обучением, можно воспользоваться бесплатным инструментом WAF Bypass Tool, суть работы которого заключается в оценке уровня защищенности веб-приложения.
Инструмент отправляет более 2000 запросов с различными полезными нагрузками к веб-приложению, защищенному WAF, и собирает статистику, которую отображает в виде таблицы результатов.
В таблицах выше наглядно показано, как применение машинного обучения увеличивает точность выявления атак. Применение только сигнатурного метода выявления атак позволяет заблокировать 46.62% атак, а использование машинного обучения увеличивает этот показатель до 99.66%.
Кроме этого, некоммерческая версия Немезида ВАФ производит модификацию содержимого сообщений об атаках при отправке в Nemesida WAF API:
- в поле
vhost
устанавливается значениеexample.com
; - в поле
referer
устанавливается значениеNemesida WAF Community Edition
; - в непустом поле
other_headers
устанавливается значениеNemesida WAF Community Edition
; - в поле
WAF ID
устанавливается значениеCOMMUNITYEDITION
.
Настройка веб-сервера
Динамический модуль разработан для веб-сервера
Nginx
, но также совместим с веб-серверомAngie
. Для его установки воспользуйтесь инструкцией на официальном сайте продукта.
В случае компиляции Nginx из исходного кода необходимо добавить параметры --with-compat --with-threads --with-pcre --with-stream
при выполнении configure
для активации поддержки динамического модуля.
# apt update && apt upgrade # apt install apt-transport-https gnupg2 curl
Подключите репозиторий Nginx:
Установите Nginx:
# apt install nginx
# apt update && apt upgrade # apt install apt-transport-https gnupg2 curl
Подключите репозиторий Nginx:
Установите Nginx:
# apt install nginx
/etc/yum.repos.d/nginx.repo
к виду:
[nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/rhel/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true
Установите пакеты:
# dnf update # dnf install nginx
Установка компонента
Динамический модуль разработан для веб-сервера
Nginx
, но также совместим с веб-серверомAngie
. Установка и настройка динамического модуля для веб-сервераAngie
выполняется аналогично, учитывая изменения в названии пакета и расположение файлов конфигурации.В случае проведения мероприятий, направленных на конфигурацию ОС для обеспечения ее безопасности (например, на основе рекомендаций CIS Benchmarks), перед установкой пакета необходимо удалить флаги безопасности
rw
,nosuid
,noexec
,nodev
для директории/tmp
, где хранятся временные файлы, используемые при установке.
Динамический модуль доступен для:
- Nginx stable, начиная с
1.16
; - Nginx mainline, начиная с
1.19
; - Nginx Plus, начиная с
R26
.
Установите идентификатор операционной системы:
# rm -f /etc/machine-id # /bin/systemd-machine-id-setup
1. Загрузите скрипт;
2. Запустите скрипт установки командой:
# /bin/bash ./4-filtering-node-deploy.sh 'nwaf_lic_key=%Licence key%' 'api_url=%Nemesida WAF API URL%' 'sys_proxy=%Proxy server address%' 'api_proxy=%Proxy server address%'
где:
nwaf_lic_key
— лицензионный ключ;api_url
— адрес сервера с которого будут производиться обращения компонента Nemesida WAF API после его настройки (например,http://api.example.com:8080/nw-api/
);sys_proxy
— (Опционально) IP-адрес прокси сервера для доступа компонента к внешним ресурсам (например,http://proxy.example.com:3128
);api_proxy
— (Опционально) IP-адрес прокси сервера для взаимодействия с Nemesida WAF API (например,http://proxy.example.com:3128
).
Установите пакеты:
# apt install python3 python3-venv python3-pip python3-dev python3-setuptools librabbitmq4 libcurl3-gnutls libcurl4-openssl-dev libc6-dev gcc g++ memcached rabbitmq-server
Nginx:
# apt install nwaf-dyn-1.26
где 1.26 — версия установленного Nginx. Например, пакет динамического модуля nwaf-dyn-1.26 предназначен для работы с Nginx версии 1.26, а nwaf-dyn-plus-rX (где Х — номер релиза, начиная с R26) — для работы с последней версией Nginx Plus (пример: nwaf-dyn-plus-r26).
Angie:
# apt install nwaf-angie-1.7.0
где 1.7.0 — версия установленного Angie.
Во время установки модуля дополнительно устанавливаются следующие pip-пакеты:
wheel cython pandas requests psutil scikit-learn schedule simple-crypt fuzzywuzzy levmatch python-Levenshtein unidecode fsspec func_timeout url-normalize netaddr pymemcache logutils openapi-schema-validator strict-rfc3339 rfc3339-validator isodate jsonref fastapi uvicorn[standard] gunicorn python-multipart pyarrow
Nginx:
# apt install nwaf-dyn-1.26
где 1.26 — версия установленного Nginx. Например, nwaf-dyn-1.26 предназначен для работы с Nginx версии 1.26, а nwaf-dyn-plus-rX (где Х — номер релиза, начиная с R26) — для работы с последней версией Nginx Plus (пример: nwaf-dyn-plus-r26).
Angie:
# apt install nwaf-angie-1.7.0
где 1.7.0 — версия установленного Angie.
Во время установки модуля дополнительно устанавливаются следующие pip-пакеты:
wheel cython pandas requests psutil scikit-learn schedule simple-crypt fuzzywuzzy levmatch python-Levenshtein unidecode fsspec func_timeout url-normalize netaddr pymemcache logutils openapi-schema-validator strict-rfc3339 rfc3339-validator isodate jsonref fastapi uvicorn[standard] gunicorn python-multipart pyarrow
Для корректной работы пакета openapi-schema-validator
необходимо предоставить прямой доступ к json-schema.org:443
.
# 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
Установите пакеты:
Nginx:
# dnf install nwaf-dyn-1.26
где 1.26 — версия установленного Nginx. Например, пакет динамического модуля nwaf-dyn-1.26 предназначен для работы с Nginx версии 1.26 а nwaf-dyn-plus-rX (где Х — номер релиза, начиная с R26) — для работы с последней версией Nginx Plus (пример: nwaf-dyn-plus-r26).
Angie:
# dnf install nwaf-angie-1.7.0
где 1.7.0 — версия установленного Angie.
Во время установки модуля дополнительно устанавливаются следующие pip-пакеты:
wheel cython pandas requests psutil scikit-learn schedule simple-crypt fuzzywuzzy levmatch python-Levenshtein unidecode fsspec func_timeout url-normalize netaddr pymemcache logutils openapi-schema-validator strict-rfc3339 rfc3339-validator isodate jsonref fastapi uvicorn[standard] gunicorn python-multipart pyarrow
В целях безопасности рекомендуется запретить внешние входящие соединения с сетевыми сервисами, за исключением соединений с Nginx/Angie.
При использовании скрипта автоматической установки редактирование файлов не требуется.
Добавьте путь до файла с динамическим модулем и приведите параметры ниже в конфигурационном файле /etc/nginx/nginx.conf
к виду:
load_module /etc/nginx/modules/ngx_http_waf_module.so; ... worker_processes auto; ... http { ... ## # Nemesida WAF ## ## Request body is too large fix client_body_buffer_size 25M; include /etc/nginx/nwaf/conf/global/*.conf; ... }
Ошибка вида:
nginx: [emerg] module "/etc/nginx/modules/ngx_http_waf_module.so" version 1017010 instead of 1026000 in /etc/nginx/nginx.conf:1
возникает в том случае, когда не совпадают версии установленного динамического модуля и Nginx. В данном случае 1017010
— версия Nginx 1.17.10, для которой был скомпилирован модуль nwaf-dyn, а 1026000
— Nginx 1.26.0, установленный на сервере. Пакет динамического модуля nwaf-dyn-1.26 предназначен для работы с Nginx версии 1.26, а nwaf-dyn-plus-r26 — для работы с NGINX Plus R26.
Внесите необходимые изменения в файл конфигурации /etc/nginx/nwaf/conf/global/nwaf.conf
:
Перезапустите сервисы и проверьте их работу:
# systemctl restart nginx rabbitmq-server memcached nwaf_update # systemctl status nginx rabbitmq-server memcached nwaf_update
После каждого изменении файла конфигурации
/etc/nginx/nwaf/conf/global/nwaf.conf
необходимо выполнять перезапуск сервисов.Сервис
api_firewall
недоступен для некоммерческой версии, поэтому статус работы сервиса можно игнорировать.
За получение сигнатур в Немезида ВАФ отвечает служба nwaf_update
. Для проверки работы сигнатурного метода обнаружения атак при отправке запроса http://YOUR_SERVER/nwaftest
сервер должен ответить с кодом 403
.
После выполнения настройки модуля необходимо проверить наличие ошибок в журналах регистрации событий работы компонентов:
/var/log/nginx/error.log
;/var/log/nwaf/nwaf_update.log
;/var/log/rabbitmq/rabbit@%hostname%.log
;/var/log/rabbitmq/rabbitmq-server.error.log
.
После установки Немезида ВАФ вы можете установить Nemesida WAF API и Личный кабинет, которые предназначены для визуализации и классификации информации об атаках и выявленных уязвимостях.
Работа Немезида ВАФ в режиме обратного прокси
Настройка веб-сервера с установленным Nginx и Немезида ВАФ в режиме обратного прокси позволяет использовать его в качестве промежуточного сервера.
В некоммерческой версии Немезида ВАФ реализована поддержка пользовательского набора правил для выявления атак: персональные сигнатуры (RL
), а также исключения сигнатур (WL
).
Зоны и уточнения
При создании RL
или WL
правил могут быть использованы специальные параметры:
- зоны:
URL
,ARGS
,BODY
,HEADERS
,Cookie
,User-Agent
,Content-Type
и т. д.; - условия применения правила (уточнение зоны, конкретизация):
$URL
,$ARGS
,$BODY
,$HEADERS
,$Cookie
,$User-Agent
и т. д.
Использование зон и уточнений позволяет максимально конкретизировать создаваемое правило. Уточнения задаются путем добавления префикса $
(например: "Z:...|$URL:..."
).
Пример использования правила с зоной и уточнением: WL ... "Z:ARGS|$URL:/123";
— правило сработает, если зоной вхождения правила RL
будет зона ARGS
и URL содержит вхождение /123
.
Для зоны уточнения URL
допускается указывать только вхождение пути без домена.
Пример:
/index
/uploads/index.php
Несколько параметров (зоны, уточнения) в одном правиле должны разделяться символом |
, при этом будет использоваться следующий принцип взаимодействия:
- зоны взаимодействуют между собой по принципу логического
ИЛИ
, например:Z:URL|ARGS
; - зоны взаимодействуют с уточнениями по принципу логического
И
, например:Z:URL|$ARGS:123
; - уточнения взаимодействуют между собой по принципу логического
И
, например:Z:...|$ARGS:123|$BODY:123"
.
При использовании в уточнении |
в качестве обычного символа необходимо произвести его одиночное экранирование. Например: $URL:abc\|d
— поиск вхождения abc|d
.
Регулярные выражения в уточнениях
При уточнении допускается использование регулярных выражений. Для этого необходимо к уточнению добавить постфикс _X
(например: "Z:...|$URL_X:\w+"
).
Для использования в правиле операторов регулярных выражений (/
, |
, .
, *
, ?
, !
, {
, }
, [
, ]
, (
, )
, ^
, $
, :
, \
и т. д.) в качестве обычных символов необходимо производить их двойное экранирование.
Пример:
$BODY_X:block\\|page
– поиск вхожденияblock|page
;$BODY_X:data=\\(block-\\\a\\\-in-the-main\\)
– поиск вхожденияdata=(block-\a\-in-the-main)
;$ACCEPT_X:image\\/webp\\\\\*
– поиск вхожденияimage/webp\*
в заголовкеAccept
.
Для использования в уточнениях разделителя как метасимвола регулярного выражения так же применяется двойное экранирование.
Пример:
Правило WL ... "Z:...|$URL_X:/(a\\|b)/";
будет применяться к URL
, который содержит /a/
или /b/
.
Создание персональных сигнатур
Персональные правила определения признака атаки необходимо хранить в основном конфигурационном файле Немезида ВАФ (/etc/nginx/nwaf/conf/global/nwaf.conf
). Они должны определяться параметром RL
, иметь ID
в диапазоне от 50000 до 99999 и принимать следующий вид:
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 domain=*.example.com "P:select from" "SC:SQL:12" "Z:ARGS";
RL ID:50004 "PX:select\s+from" "SC:SQL:12" "Z:ARGS|$URL:/admin";
RL ID:50005 "P:select from" "SC:SQL:12" "Z:ARGS|$URL_X:/(admin\\|dev)";
Создание правил исключения сигнатуры
В случае, когда запрос попадает под действие сигнатуры, помимо отправки инцидента в Nemesida WAF API, в журнале ошибок работы Nginx (для коммерческой версии Немезида ВАФ) будет содержаться следующая строка:
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.
Перевод правил блокировки в режим LM
Запросы, попадающие под действие режима LM
, фиксируются в БД, но не блокируются. При срабатывании правила в журнал ошибок Nginx и на Nemesida WAF API будет отправлено сообщение о переводе соответствующего правила блокировки в LM
режим, но запрос не будет заблокирован. Правила перевода в режим LM
должны определяться параметром LM
, иметь ID
соответствующего правила блокировки и принимать следующий вид:
Виртуальный патчинг
Виртуальный патчинг Немезида ВАФ защищает сайты от существующих неисправленных уязвимостей (в том числе «нулевого дня»), блокируя попытки их эксплуатации, при этом не нарушая работу веб-приложения. Применение правил виртуального патчинга позволяет разработчикам сосредоточиться на исправлении уязвимостей без необходимости срочного изменения кода. Виртуальный патчинг позволяет «на лету» блокировать все попытки эксплуатации известной уязвимости, особым образом контролируя зону атаки.