Сканирующий OpenVAS кластер на основе Docker-контейнеров для лучшей масштабируемости

Начиная с 8-ой версии в OpenVAS улучшили поддержку Master-Slave взаимодействия сканеров. Теперь распределять задачи и балансировать нагрузку стало гораздо проще. В связи с этим в американской компании NopSec решили сделать PoC кластера для сканирования на наличие уязвимостей. Цель была в том, чтобы навести порядок в сканирующей инфраструктуре и раскатывать новые версии сканера без задержек. Плюс посмотреть как Docker впишется в продакшн, разработку, тестирование систем и во все существующие процессы. Были подготовлены 2 docker-контейнера с OpenVAS настроенным как master и как slave.

Архитектура

На каждом Docker-контейнере запускаются процессы openvas manager и scanner, а также PostgreSQL и Redis для поддержки openvas manager.

openvas-cluster arch

Сборка Docker-контейнера

Сам Dockerfile и сопутствующие скрипты для сборки лежат здесь: https://github.com/wcollani/openvas-8-docker

Каждый Dockerfile устанавливает все необходисые зависимости, для того что бы собрать компоненты OpenVAS из исходников, затем собирает и устанавливает их. Также производится необходимая настройка Redis и PostgreSQL. Это прописано в скрипте setup.sh.

Подразумевается, что каждый раз, когда нам понадобится обновить OpenVAS нужно собрать новую версию контейнера и запушить её в продакшн.

Скрипт startup.sh запускает все процессы в контейнере и выводит логи (tail -f /usr/local/var/log/openvas/*), чтобы мы могли понять, если что-то пошло не так.

Рабочий процесс

1. Запускаем master. Открытый порт 9390 для OpenVAS manager и 443 для OpenVAS GUI (для отладки использовался, так-то можно использовать omp-cli или через API работать)
# cd master-manager
# docker build -t openvas-manager .
# docker run -d -p 9390:9390 -p 443:443 openvas-manager

2. Запускаем slave.
# cd slave-scanner
# docker build -t slave-scanner .
# docker run -d -p 9390 slave-scanner
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
05bca6ddc558 openvas-manager "/bin/bash /openvas/s" About an hour ago Up About an hour 0.0.0.0:443->443/tcp, 0.0.0.0:9390->9390/tcp, 9391-9392/tcp condescending_kilby
2e952b9c3b2b slave-scanner "/bin/bash /openvas/s" About an hour ago Up About an hour 443/tcp, 9391-9392/tcp, 0.0.0.0:32768->9390/tcp compassionate_blackwell

Логика кластеризации

Принимаем два показателя. Сколько IP-адресов хотим сканировать одним slave-ом и сколько вообще IP-адресов хотим сканировать.

number_of_IPs_per_slave = X
number_of_IPs_to_scan = Y

Если number_of_IPs_to_scan > number_of_IPs_per_slave:

  • разделить IP-адреса между Z slave-ами
  • поднять Z slave-контейнеров
  • зарегистрировать кажый slave-контейнер в master-е
  • создать цели для сканирования
  • создать задание на сканирование на каждом slave
  • запустить задания
  • получить результаты, когда сканирование завершится
  • разрегистрировать каждый slave-контейнер в master-е
  • удалить каждый slave-контейнер

Задачи на будущее

До продакшена NopSec осталось сделать следующее:

1. Развернуть все это в облаке AWS и интегрировать с EC2 Container Service.
2. Оптимизация Dockerfile.
3. Сделать общий контейнер для slave и master.

Оригинал статьи: https://www.nopsec.com/news-and-resources/blog/2015/12/1/docker-based-openvas-scanning-cluster-improve-scope-scalability/ (для России может быть заблокирован, используйте анонимайзеры ;-))

Добавить комментарий