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

Kate

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

Сегодня мы рассмотрим установку и настройку 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 WAF реализована защита от атак методом перебора и DDoS, которые, как правило, не блокируются средствами WAF, ведь изначально отправляют к веб-приложению легитимные запросы. Однако, это тоже является серьезной угрозой для веб-приложения. Так по статистике компании Acunetix за 2019-2020 год среди проанализированных веб-приложений у 28% отсутствует защита от перебора пароля и у 1% используются пароли по умолчанию. К тому же, 11% веб-приложений уязвимы для DDoS атак. Эти, и не только, аномалии выявляются и блокируются модулем Nemesida AI - модулем машинного обучения, позволяющим увеличить точность выявления атак. В Nemesida AI используются классические алгоритмы машинного обучения, не требующие, в отличие от нейронных сетей, больших вычислительных мощностей. Таким образом, при относительно невысоком требовании к аппаратной части сервера (до 32 Гб ОЗУ) достигается оптимальное время обработки запросов (что напрямую влияет на время ответа веб-приложения), а количество ложных срабатываний составляет 0.01%.

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

# docker pull nemesida/nwaf-dyn-1.18
В процессе развертывания 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
После первого запуска контейнер автоматически завершит работу, создав необходимый набор конфигурационных файлов в соответствующей директории.

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

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
и /opt/nwaf/api-cab-config/settings_cabinet.py:

Настройка модуля Личный кабинет 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

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
После внесения изменений перезапускаем контейнер.

# 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

266ee3f39b4eb667415213c2d82d3af4.png

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

14ca73ae088f0596581241d861c9e30f.png

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

c191bdbb75cf31b08b10f79d9288f0ea.png

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

Summary​

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

  • количество атак (сегодня/последние сутки/неделя/месяц);
  • атаки по типам (заблокированные сигнатурным анализом, модулем машинного обучения Nemesida AI MLC, brute-force, DDoS и тд);
  • сводка по IP-адресам, осуществляющим атаки.
60942aa310d3e0deafeec8a4e806cc50.png
9a81af6c38e8cdaae4b68b74eff1ed15.png

Attacks​

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

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

23a9e132c123b0dda7885102eddc4d51.png

Справа находятся 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-адрес атакующего 189.11.53.158:

ip:!189.11.53.158
8e95ce658c550474e38ac03c3da3aa99.png

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

rule:1087
d6e5d0e53937c7c1691bc9d70026d765.png

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

t:SQLi and ip:!189.11.53.158
b517c7a84ed967b1b8d4ddb97bdd6066.png

Полноценно ознакомиться с работой Личного кабинета Nemesida WAF можно на демонстрационном стенде (логин: demo@pentestit.ru, пароль: pentestit).

Заключение​

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


Источник статьи: https://habr.com/ru/company/pentestit/blog/556114/
 
Сверху