Основные ошибки при настройке компонентов Немезида ВАФ | Немезида ВАФ

Руководство по исправлению основных проблем, связанных с настройкой и эксплуатацией Немезида ВАФ.

🔗 Атаки не блокируются

Немезида ВАФ поставляется в виде динамического модуля для Nginx. После проведения первичной настройки компонента необходимо проверить корректность работы сигнатурного метода обнаружения атак, отправив запрос http://YOUR_SERVER/nwaftest.

Cервер должен вернуть код ответа 403, а на фильтрующей ноде в error-логе веб-сервера Nginx появится запись:

Nemesida WAF: the request 5274fe3c397782a09b4f1b057e572e21 blocked by rule ID 1 in zone URL, ...

Если запрос не блокируется:

  • проверьте, что после внесения изменений в конфигурацию Nginx фильтрующей ноды был выполнен перезапуск сервисов nginx nwaf_update mla_main;
  • проверьте, что динамический модуль /etc/nginx/modules/ngx_http_waf_module.so находится в /etc/nginx/modules и подключен в /etc/nginx/nginx.conf;
  • проверьте размер файла /etc/nginx/nwaf/rules.bin, он не должен быть пустым. В случае подозрений нарушения целостности файла его можно удалить и загрузить заново, выполнив перезапуск сервиса nwaf_update;
  • проверьте, поступает ли запрос для обработки на фильтрующую ноду;
  • проверьте, что отсутствуют правила исключения обработки запросов для виртуального хоста/IP-адреса;
  • проверьте, что IP-адрес, с которого обращаетесь, не находится в разрешающем списке (WL).

🔗 Атаки блокируются, но не отображаются в личном кабинете

В случаях, когда атаки блокируются и отображаются в error-логе веб-сервера Nginx на фильтрующей ноде, но не отображаются в личном кабинете, необходимо проверить, что:

  • корректно задан адрес сервера Nemesida WAF API в /etc/nginx/nwaf/conf/global/nwaf.conf в формате nwaf_api_conf host=http://api.example.com:8080/nw-api;
  • корректно задан адрес прокси-сервера (если используется) для доступа к Nemesida WAF API в /etc/nginx/nwaf/conf/global/nwaf.conf;
  • произведена корректная установка и настройка компонента Nemesida WAF API, отсутствуют ошибки в логе /var/log/uwsgi/nw-api/nw-api-logging.log;
  • корректно задан параметр rmq_host в файле конфигурации модуля Nemesida AI MLC /opt/mlc/mlc.conf;
  • сервер Nemesida WAF API имеет доступ к базе данных для подключения. Проверить доступ к базе данных можно, выполнив команду:

    # psql -h <server_ip> -U nw_api waf
    
    При подключении введите пароль пользователя nw_api.

🔗 В личном кабинете не появляется функционал управления настройками

Для активации функционала управление настройками Немезида ВАФ необходимо выполнить несколько условий:

  • добавлен лицензионный ключ в настройках пользователя;
  • функционал активирован администратором;
  • указан адрес подключения к Nemesida WAF API в параметре API_URI (файл /var/www/app/cabinet/settings.py).

🔗 Не отображаются реальные IP-адреса клиентов

Сервер с веб-приложением не получает реальные IP-адреса клиентов

Все легитимные запросы, не заблокированные Немезида ВАФ, отправляются на сервер с веб-приложением. Чтобы веб-приложение получало от фильтрующей ноды (веб-сервера Nginx с установленным динамическим модулем) корректный IP-адрес клиентов, необходимо добавить заголовок set_real_ip_from в конфигурационный файл nginx.conf

http {
   ...
   set_real_ip_from x.x.x.x;
   ...
}

x.x.x.x — адрес фильтрующей ноды (веб-сервер Nginx с установленным динамическим модулем).

После внесения изменения проверьте конфигурацию и перезапустите сервис Nginx:

# nginx -t && service nginx reload

В личном кабинете не отображаются реальные IP-адреса клиентов

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

В случае, если дополнительный сервер обрабатывает запросы в режиме reverse proxy и передает их на фильтрующую ноду (веб-сервер Nginx с установленным динамическим модулем), все запросы будут поступать с единым IP-адресом этого сервера. Чтобы получать корректную информацию об IP-адресах клиентов, необходимо добавить заголовок set_real_ip_from в конфигурационный файл nginx.conf:

http {
   ...
   set_real_ip_from x.x.x.x;
   ...
}

x.x.x.x — адрес сервера, работающего в режиме reverse proxy.

После внесения изменения проверьте конфигурацию и перезапустите сервис Nginx:

# nginx -t && service nginx reload

🔗 В личном кабинете не отображается поведенческая модель

Личный кабинет позволяет управлять поведенческими моделями. Для создания поведенческой модели достаточно добавить виртуальный хост в разделе управления настройками Nemesida AI MLC. После 4-х дневного обучения, поведенческая модель будет сформирована и доступна в Личном кабинете. Если поведенческая модель недоступна, то необходимо проверить журнал компонента Nemesida AI MLC /var/log/nwaf/mlc.log, обращая внимание на следующие записи:

  • Current training progress for virtual host example.com: 5%

    Запись означает, что обучение не завершено. Когда прогресс будет равен 100%, то обучение завершится автоматически и поведенческая модель появится в Личном кабинете.

  • An error occurred while sending the models of virtual host example.com to Nemesida WAF API: status: <Response [413]>

    Запись означает, что модель уже сформирована, но не может быть отправлена в Nemesida WAF API из-за его ограничений на максимальный размер тела запроса.

    Решение: увеличить значение параметра client_max_body_size, приведя конфигураионный файл /etc/nginx/nwaf/conf.d/nwaf-api.conf к виду:

    server {
    
            ...
    
            client_max_body_size 64M;
    
            ...
    }
    

    Значение устанавливаемого параметра должно быть больше значения размера файла с расширением .ml в директории /opt/mlc/ml/tmp/. После внесения изменений необходимо выполнить перезапуск компонента Nemesida WAF API:

    # systemctl restart nw-api rldscupd memcached
    
  • Not enough available memory (12%) to process

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

    Решение: увеличить объем ОЗУ сервера.

  • Insufficient traffic to build behavioral models for virtual host example.com (required: 25)

    Запись означает, что Nemesida AI MLC не получил достаточного количества трафика для построения поведенческой модели и обучение будет продолжено.

    Решение:

    • проверить, что трафик веб-приложения поступает на фильтрующую ноду;
    • в конфигурационном файле /opt/mlc/mlc.conf проверить, что корректно указаны реквизиты подключения к сервису RabbitMQ на фильтрующей ноде;
    • проверить, что Nemesida AI MLC собирает трафик из соответствующей очереди RabbitMQ (в очереди nwaf не накапливаются записи) на фильтрующей ноде.

    🔗 После завершения обучения не происходит анализа запросов модулем машинного обучения

    За построение поведенческой модели отвечает компонент Nemesida AI MLC. После 4-х дневного обучения, поведенческая модель будет сформирована и применена на фильтрующей ноде, а также будет отображаться в Личном кабинете. Если поведенческая модель недоступна, то необходимо проверить журнал компонента Nemesida AI MLC /var/log/nwaf/mlc.log, обращая внимание на следующую запись:

    Current training progress for virtual host example.com: 5%

    Запись означает, что обучение не завершено. Когда прогресс будет равен 100%, то обучение завершится автоматически и поведенческая модель:

    • появится в директории /opt/mlc/ml в виде 2 файлов: example.com_vect.ml и example.com_rf.ml;
    • появится в Личном кабинете;
    • появится на фильтрующей ноде в директории /etc/nginx/nwaf/ml в виде 2 файлов: example.com_vect.ml и example.com_rf.ml;

    Анализ запросов модулем машинного обучения начнется только после применения поведенческой модели на фильтрующей ноде. Чтобы проверить, что поведенческие модели применились на фильтрующей ноде, необходимо проверить журнал Nemesida AI MLA /var/log/nwaf/mla.log, обращая внимание на следующуя запись:

    INFO     The list of Nemesida AI virtual hosts received from Nemesida WAF API: example.com
    INFO     example.com md5: cdaba1e888de20b3b116d3ad28838a4f
    INFO     Models processing finished
    

    Запись означает, что на фильтрующей ноде применена поведенческая модель для виртуального хоста example.com. Отсутствие записи example.com md5: cdaba1e888de20b3b116d3ad28838a4f означает, что поведенческая модель не была применена.

    Ошибка при применении поведенческой модели может возникнуть в нескольких случаях:

    • поведенческая модель была повреждена и не может быть применена агентом машинного обучения Nemesida AI MLA;
    • на фильтрующей ноде и Nemesida AI MLC установлены различные версии Python, использующие несовместимые версии PIP-пакетов;
    • поведенческая модель не применяется после обновления компонентов.

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

    Дообучение модели с использованием резервной копии обучающей выборки
    Для добучения поведенческой модели выполните 4 шага:

    1. Остановите сервис Nemesida AI MLC:

    # service mlc_main stop

    2. Переместите файл /opt/mlc/ml/backup/[vhost].d_[timestamp], где [timestamp] — дата создания резервной копии обучающей выборки, созданной Nemesida AI MLC перед началом построения модели, в /opt/mlc/ml/[vhost].d. Например, для модели example.com:

    # mv /opt/mlc/ml/backup/example.com.d_1613587613 /opt/mlc/ml/example.com.d

    3. Запустите обучение:

    # curl http://api.example.com:8080/nw-api/set_training_uri --data 'key=%Лицензионный ключ%&vhost=*.example.com&complete=no'
    

    4. Запустите сервис Nemesida AI MLC:

    # service mlc_main start
    

    Если на фильтрующей ноде и Nemesida AI MLC установлены различные версии Python, использующие несовместимые версии PIP-пакетов, то рекомендуется произвести обновление версий Python до актуальной, для синхронизации используемых пакетов на обоих серверах.

    В случае, если обновление версии Python невозможно на одном из серверов, то в качестве решения можно произвести понижение версии используемых PIP-пакетов до версий, используемых в Python самой ранней версии (например, при установленной версии Python 3.7 на одном из серверов, понижение версии пакетов будет производиться до этой версии, если она является самой ранней из установленных).

    Рассмотрим пример понижения версии PIP-пакетов для Python 3.9 до версии Python 3.7:

    Инструкция по понижению версии PIP-пакетов
    1. На сервере, где установлен Python 3.7, получите список устновленных PIP-пакетов:

    # /usr/share/nwaf/venv/bin/python3.7 -m pip freeze
    

    и сохраните версии установленных пакетов scikit-learn и scipy;

    2. На сервере с установленным компонентом Nemesida AI MLC удалите директорию /usr/share/nwaf/ и выполните переустановку компонента:

    # rm -rf /usr/share/nwaf/
    # apt install nwaf-mlc --reinstall
    

    3. Произведите установку PIP-пакетов, используя ранее полученный список пакетов:

    # /usr/share/nwaf/venv/bin/python3.9 -m pip install scikit-learn==1.0.2 scipy==1.7.3
    

    4. Перезапустите сервисы компонента, для которого производилось понижение версий PIP-пакетов.

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

    При принятии решения о понижении версии пакетов следует учитывать, что устревшие версии ОС могут использовать версии Python, поддержка которых завершена или завершится в ближайшее время. Поэтому для решения проблем, связанных с использованием разных версий Python, рекомендуем рассматривать вариант обновления ОС до актуальной версии. Проверить состояние поддержки интерсующей версии Python можно здесь.

    Если после обновления поведенческой модели не производится анализ модулем машинного обучения, то необходимо проверить журналы компонентов /var/log/nwaf/mla.log и /var/log/nwaf/mlc.log. Ошибки вида:

    An error occurred while loading file /etc/nginx/nwaf/ml/example.com_rf.ml: node array from the pickle has an incompatible dtype:
    - expected: [('left_child', '<i8'), ('right_child', '<i8'), ('feature', '<i8'), ('threshold', '<f8'), ('impurity', '<f8'), ('n_node_samples', '<i8'), ('weighted_n_node_samples', '<f8')] - got: {'names': ['left_child', 'right_child', 'feature', 'threshold', 'impurity', 'n_node_samples', 'weighted_n_node_samples', 'missing_go_to_left'], 'formats': ['<i8', '<i8', '<i8', '<f8', '<f8', '<i8', '<f8', 'u1'], 'offsets': [0, 8, 16, 24, 32, 40, 48, 56], 'itemsize': 64}
    

    говорят о том, что поведенческие модели были созданы на одной версии PIP-зависимостей, но после обновления компонентов были обновлены зависимости и дальнейшее применение моделей невозможно. В таком случае рекомендуется обновить PIP-зависимости по следующей инструкции:

    • Фильтрующая нода:
      • Обновите компонент до актуальной версии;
      • Обновите PIP-зависимости, запустив скрипт /usr/share/nwaf/venv/pip_update.sh на каждом из обновленных компонентов;
      • Перезапустите сервис mla_main.
    • Nemesida AI MLC:
      • Удалите все поведенческие модели, используя функционал Личного кабинета или вызов API;
      • Обновите компонент до актуальной версии;
      • Обновите PIP-зависимости, запустив скрипт /usr/share/nwaf/venv/pip_update.sh на каждом из обновленных компонентов;
      • Перезапустите сервис mlc_main.

      🔗 Модуль машинного обучения блокирует легитимные запросы

      Применение машинного обучения при обрабокте запросов позволяет увеличить точность выявления атак до 99.98%, однако для достижения этих показателей необходимо корректно обучить поведенческую модель. Блокировка легитимного запроса может происходить по нескольким причинам:

      • Трафик не поступал на обработку модулем Nemesida AI MLC и поэтому модуль машинного обучения считает запрос аномальным относительно примененной поведенческой модели;
      • Поведенческая модель была построена некорректно и требуется ее переобучение;
      • Ложно-положительные результаты, которые можно устранить, экспортируя запросы для применения в поведенческой модели «на лету».

      Существует 2 основных способа устранения ложно-положитльных блокировок:

      1-й способ:

      1. Проанализируйте заблокированные запросы в разделе Настройка поведенческой модели, используя веб-интерфейс Личного кабинета, и экспортируйте те, которые считаются легитимными.


      Пример экспорта запроса

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

      Если экспорт запросов не приводит к ожидаемому результату (легитимные запросы продолжают блокироваться после экспорта), то запускать переобучение поведенческой модели бессмысленно. В этом случае необходимо воспользоваться 2-ым способом.

      2-й способ:

      1. Переведите режим обработки запросов модулем машинного обучения в режим мониторинга, активировав опцию Активация режима мониторинга анализа запросов, определенных модулем Nemesida AI MLA как нелегитимные (BT 3) в разделе управления настройками фильтрующей ноды в Личном кабинете:


      Активация опции

      2.Проанализируйте error-лог фильтрующей ноды (/var/log/nginx/error.log) и выявите те запросы, которые были отправлены на дополнительный анализ в модуль машинного обучения.

      Запросы будут отправляться на дополнительный анализ модулем машинного обучения при выявлении в запросе сигнатур, сумма «веса» которых будет >= значения mla_score в файле конфигурации /etc/nginx/nwaf/conf/global/nwaf.conf (по умолчанию, 2). Отправка запроса на дополнительный анализ будет сопровождаться сообщением в логе.
      Пример:

      2023/11/27 17:50:59 [error] 4292#4292: *466 Nemesida WAF: the request b3270f75de9c6a381fb645bd46f0d772 contains rule ID 1039 in zone BODY and will be sent to Nemesida AI MLA, client: 1.1.1.1, server: , request: "POST /admin/uploads.php HTTP/1.1", host: "example.com"
      

      3. Составьте правило исключения сигнатуры (или несколько правил), выбрав в качестве зоны срабатывания правила NoMLA:


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

      Зона NoMLA исключает отправку запроса в модуль машинного обучения при срабатывании сигнатуры.

      4. Деактивируйте ранее активированную опцию Активация режима мониторинга анализа запросов, определенных модулем Nemesida AI MLA как нелегитимные (BT 3).

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

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


      🔗 Немезида ВАФ блокирует загрузку файлов

      Блокировка запросов при загрузке файлов на сервер веб-приложения — одна из наиболее распространенных проблем, с которой может столкнуться пользователь при работе с любым WAF. Это происходит из-за того, что для передачи файлов (например, документов) по протоколу HTTP производится бинарное кодирование передаваемых данных. Закодированное содержимое представляет собой набор символов, при анализе которых практически всегда обнаруживаются последовательности символов, попадающие под одну или несколько сигнатур. После обнаружения сигнатур запрос блокируется. Из-за особенностей, описанных выше, анализ бинарного содержимого запросов является нецелесообразным, поэтому для URL-адресов, которые предназначены для загрузки файлов, рекомендуется деактивировать анализ сигнатурным методом.

      Как определить, что передается бинарное содержимое

      Проверьте содержимое заголовка Content-Type. Если передается бинарное содержимое, то, в зависимости от типа файлов, это может быть:

      • multipart/form-data
      • application/octet-stream
      • application/pdf
      • application/ogg
      • image/jpeg
      • audio/ogg и т.д.

      Также стоит обратить внимание на содержимое запроса, где в начале указывается «сигнатура» файла. Для PDF-файла сигнатура может быть записана как %PDF-1.3.%, а для, RAR-архивов — Rar!....

      Чтобы исключить обработку тела запроса сигнатурным методом для URL-адреса, необходимо в Личном кабинете использовать соответствующую опцию:


      Отключение анализа для URL-адреса example.com/uploads/

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