Nemesida WAF: Docker-контейнер

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

Nemesida WAF - комплексная защита сайтов, интернет-магазинов, личных кабинетов, порталов, маркетплейсов, API и других веб-приложений от хакерских атак на основе машинного обучения Nemesida AI. Особенностью Nemesida WAF является высокая точность выявления атак при минимальном количестве ложных срабатываний. Наличие сканера уязвимостей, модулей машинного обучения, виртуального патчинга и масштабируемость позволяет обеспечивать безопасность веб-приложений как на этапе разработки, так и при полноценном использовании. Поставляется в виде:

  • установочный дистрибутив для ОС Linux (Debian, Ubuntu, CentOS);

  • виртуальный диск для KVM/VMware/VirtualBox;

  • docker-образ.

Сегодня мы рассмотрим установку и настройку Nemesida WAF из Docker-образа.

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

Устанавливаем Docker

Работа с Docker-контейнерами начинается с установки Docker'а. Для примера установка будет производиться на сервер с Debian 10.

Добавим информацию о репозитории и GPG ключ:

# echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
# curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

Обновим список пакетов, установим зависимости и пакет Docker:

# apt update
# apt install apt-transport-https ca-certificates curl gnupg lsb-release
# apt install docker-ce docker-ce-cli containerd.io

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

Разворачиваем контейнер с Nemesida WAF

Динамический модуль Nemesida WAF и Nemesida AI

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

Загружаем образ c динамическим модулем Nemesida WAF и Nemesida AI:

# docker pull nemesida/nwaf-dyn-1.18
В процессе развертывания Docker-контейнеров может возникать ошибка
ERROR: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

Ошибка связана с использованием прокси-сервера в системе. Однако Docker не использует системный прокси-сервер и ему нужно указать его отдельно. Для этого нужно создать файл /etc/systemd/system/docker.service.d/http-proxy.conf с содержимым:

[Service]
Environment="HTTP_PROXY=http://<proxy_address:port>"
"HTTPS_PROXY=http://<proxy_address:port>"

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

# systemctl daemon-reload
# systemctl restart docker

Для будущих конфигурационных файлов создаем директории и файл для первого запуска first_launch:

# mkdir /opt/nwaf/waf-config
# touch /opt/nwaf/waf-config/first-launch

Запускаем контейнер:

# iptables -t filter -N DOCKER
# docker run --rm -d -v /opt/nwaf/waf-config:/nginx.configs -p 80:80 nemesida/nwaf-dyn-1.18

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

Настройка модулей

После развертывания контейнера необходимо задать некоторые настройки в файлах /opt/nwaf/waf-config/nwaf/conf/global/nwaf.conf:

  • nwaf_license_key - лицензионный ключ. Запросить 14-дневную пробную версию можно тут;

  • nwaf_api_conf - настройка взаимодействия с модулем Nemesida WAF API (заполнятся после развертывания контейнера Nemesida WAF API+Cabinet);

  • sys_proxy - конфигурация системного прокси-сервера (если используется);

/etc/nginx/nwaf/mla.conf:

  • st_enable - отправка спорных запросов на сервер Nemesida WAF Signtest для последующей обработки;

  • st_uri - URI сервера Nemesida WAF Signtest для обработки результатов работы Nemesida AI.

/opt/nwaf/waf-config/mlc/mlc.conf:

  • nwaf_license_key - лицензионный ключ;

  • vhosts_list - список виртуальных хостов, для которых модуль машинного обучения Nemesida AI MLC будет создавать поведенческие модели;

  • api_uri, api_proxy - конфигурация взаимодействия с модулем Nemesida WAF API;

  • sys_proxy - конфигурация системного прокси-сервера (если используется);

  • st_enable - отправка спорных запросов, получаемых от модуля Nemesida WAF, на сервер Nemesida WAF Signtest для последующей обработки;

  • st_uri - URI сервера Nemesida WAF Signtest для отправки спорных запросов.

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

Nemesida WAF API и Личный кабинет Nemesida WAF

Nemesida WAF API предназначен для взаимодействия всех модулей Nemesida WAF. В личном кабинете Nemesida WAF отображается информация о заблокированных запросах к защищаемому веб-приложению.

Загружаем образ c модулем Nemesida WAF API и Личный кабинет Nemesida WAF:

# docker pull nemesida/nwaf-api-cabinet

Для будущих конфигурационных файлов создаем директории и внутри директории с конфигурацией файл для первого запуска first_launch:

# mkdir /opt/nwaf/api-cab-config
# mkdir /opt/nwaf/api-cab-base
# touch /opt/nwaf/api-cab-config/first-launch

Запускаем контейнер с образом Nemesida WAF API и Личным кабинетом Nemesida WAF:

# iptables -t filter -N DOCKER
# docker run --rm -d -v /opt/nwaf/api-cab-config:/nwaf-api -v /opt/nwaf/api-cab-base:/var/lib/postgresql -p 8080:8080 -p 8090:80 nemesida/nwaf-api-cabinet

где:

  • --run - удаление контейнера после завершения работы;

  • -d - запуск контейнера в фоновом режиме;

  • -v /opt/nwaf/api-cab-config:/nwaf-api - монтируем каталог с конфигурационными файлами внутри контейнера;

  • -v /opt/nwaf/api-cab-base:/var/lib/postgresql - монтируем каталог с базой данных внутри контейнера;

  • -p 8080:8080 - проброс порта контейнера 8080 (правый) на внешний порт сервера 8080 (левый);

  • -p 8090:80 - проброс порта контейнера 8090 на внешний порт сервера 80.

Для директории /opt/nwaf/api-cab-config устанавливаем права на чтение:

# chmod -R 0555 /opt/nwaf/api-cab-config

Получим ID контейнера выполнив команду:

# docker ps -a

Выполняем миграцию и создаем учетную запись администратора:

# docker exec -ti /ID контейнера/ bash -c "bash /opt/migrate.sh"

Для внесения изменений в конфигурацию модулей необходимо остановить контейнер командой:

# docker stop /ID контейнера/

и отредактировать конфигурационные файлы модулей /opt/nwaf/api-cab-config/settings_api.py:

Настройка модуля Nemesida WAF API
  • HTTP_PROXY_CONF - адрес прокси-сервера (если используется).

и /opt/nwaf/api-cab-config/settings_cabinet.py:

Настройка модуля Личный кабинет Nemesida WAF
  • PROXY - адрес прокси-сервера (если используется).

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

# iptables -t filter -N DOCKER
# docker run --rm -d -v /opt/nwaf/api-cab-config:/nwaf-api -v /opt/nwaf/api-cab-base:/var/lib/postgresql -p 8080:8080 -p 8090:80 nemesida/nwaf-api-cabinet

Nemesida WAF Signtest

Nemesida WAF Signtest предназначен для обработки спорных запросов.

Загружаем образ c модулем Nemesida WAF Signtest:

# docker pull nemesida/nwaf-st

Для будущих конфигурационных файлов создаем директории и внутри директории с конфигурацией файл для первого запуска first_launch:

# mkdir /opt/nwaf/nwaf-signtest-config
# mkdir /opt/nwaf/nwaf-signtest-base
# touch /opt/nwaf/api-signtest-config/first-launch

Запускаем контейнер с образом Nemesida WAF Signtest:

# iptables -t filter -N DOCKER
# docker run --rm -d -v /opt/nwaf/nwaf-signtest-config:/nwaf-signtest -v /opt/nwaf/nwaf-signtest-base:/var/lib/postgresql -p 8081:8088 -p 82:80 nemesida/nwaf-st

где:

  • --run - удаление контейнера после завершения работы;

  • -d - запуск контейнера в фоновом режиме;

  • -v /opt/nwaf/nwaf-signtest-config:/nwaf-signtest - монтируем каталог с конфигурационными файлами внутри контейнера;

  • -v /opt/nwaf/nwaf-signtest-config:/nwaf-signtest - монтируем каталог с базой данных внутри контейнера;

  • -p 8081:8088 - проброс порта контейнера 8088 на внешний порт сервера 8081;

  • -p 82:80 - проброс порта контейнера 80 на внешний порт сервера 82.

Для директории /opt/nwaf/nwaf-signtest-config устанавливаем права на чтение:

# chmod -R 0555 /opt/nwaf/nwaf-signtest-config

Получим ID контейнера выполнив команду:

# docker ps -a

Выполняем миграцию и создаем учетную запись администратора:

# docker exec -ti /ID контейнера/ bash -c "bash /opt/migrate.sh"

Для внесения изменений в конфигурацию модуля необходимо остановить контейнер командой:

# docker stop /ID контейнера/

и отредактировать конфигурационный файл модуля /opt/nwaf/nwaf-signtest-config/settings_signtest.py:

Настройка модуля Nemesida WAF Signtest
  • HTTP_PROXY - адрес прокси-сервера ( если используется).

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

# iptables -t filter -N DOCKER
# docker run --rm -d -v /opt/nwaf/nwaf-signtest-config:/nwaf-signtest -v /opt/nwaf/nwaf-signtest-base:/var/lib/postgresql -p 8081:8088 -p 82:80 nemesida/nwaf-st

Учимся пользоваться

После развертывания контейнеров с Nemesida WAF может потребоваться дополнительная проверка, что все работает так как нужно. Для этого можно заглядывать в сами контейнеры:

# docker ps -a
# docker exec -ti /ID контейнера/ bash -c "/bin/bash"

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

Если все работает корректно, то после запуска контейнеров атаки на веб-приложение будут блокироваться с записью в лог Nginx

и отображаться в личном кабинете:

Личный кабинет

В личном кабинете Nemesida WAF есть два основных раздела для работы: Summary и Attacks. И неосновные разделы, где можно произвести настройку учетной записи пользователя, сгенерировать отчет по заблокированным запросам, посмотреть результат работы модуля Nemesida WAF Scanner и тд.

Summary

Отображает статистическую информацию по атакам:

  • количество атак (сегодня/последние сутки/неделя/месяц);

  • атаки по типам (заблокированные сигнатурным анализом, модулем машинного обучения Nemesida AI MLC, brute-force, DDoS и тд);

  • сводка по IP-адресам, осуществляющим атаки.

Attacks

Отображает заблокированные запросы. При клике на атаку развернется окно с описанием, где:

  • указан пейлоад, который привел к блокировке запроса;

  • чем было заблокировано (сигнатурный анализ, модуль машинного обучения и т.д.);

  • прочая информация о запросе.

Если запрос был заблокирован сигнатурным анализом, то при клике на идентификатор сигнатуры (Rule ID) развернется окно с детальной информацией и инструкцией для создания правила исключения сигнатуры.

Справа находятся 2 кнопки "R" (Recheck) и "U" (Unlock). Recheck отвечает за проверку пейлоада модулем Nemesida WAF Scanner, а Unlock - за разблокировку запроса, который, по мнению администратора, был ошибочно заблокирован.

Если атак на веб-приложение много, то навигация по ним может быть затруднительной. Для этого существуют различные фильтры, с помощью которых можно производить поиск интересующих атак. Например, для разделов Summary и Attacks доступны следующие фильтры:

  • h - виртуальный хост, доменное имя;

  • t - тип атаки (SQLi, XSS, RCE, LFI, MLA, DDoS, MLC и т.д.);

  • ip - IP-адрес атакующего;

  • group_id - идентификатор группы запросов, определенных Nemesida AI MLC как brute-force или DDoS-атака;

  • recheck - статус выполнения операции recheck (processed, confirmed, not confirmed);

  • rule - идентификатор сигнатуры;

  • mz - зона выявления уязвимости (URL, ARGS, BODY, HEADERS и т.д.).

Пример:

Мы хотим найти все заблокированные запросы, исключив из выборки IP-адрес атакующего 192.168.61.27:

ip:!192.168.61.27

Теперь необходимо отсортировать все запросы, которые были заблокированы с идентификатором сигнатуры 2806:

rule:2806

Фильтры можно комбинировать для более точного поиска. Например, нам необходимо отсортировать запросы с IP-адресом атакующего 192.168.61.27, исключив атаки с типом SQLi:

t:!SQLi and ip:192.168.61.27

Заключение

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

Источник: https://habr.com/ru/company/pentestit/blog/556114/


Интересные статьи

Интересные статьи

В этой статье мы расскажем, как оптимизировать крупный проект в «Битрикс24» и увеличить его производительность в 3 раза, изменяя настройки MySQL и режим питания CPU. Дано Корпоративн...
VUE.JS - это javascript фрэймворк, с версии 18.5 его добавили в ядро битрикса, поэтому можно его использовать из коробки.
Бизнес-смыслы появились в Битриксе в начале 2016 года, но мало кто понимает, как их правильно использовать для удобной настройки интернет-магазинов.
Мы публикуем видео с прошедшего мероприятия. Приятного просмотра.
Основанная в 1998 году компания «Битрикс» заявила о себе в 2001 году, запустив первый в России интернет-магазин программного обеспечения Softkey.ru.