- PVSM.RU - https://www.pvsm.ru -
Привет! Все мы знаем и любим такие продукты для vulnerability assessment процессов как Nessus [1], Qualys [2], Max Patrol [3] и всякие прочие OpenVAS [4]. Одной из основных задач, которые они решают, является обеспечение контроля версионных уязвимостей.
Это довольно простой процесс сравнения установленных версий программного обеспечения на попадание в диапазон "не содержит известных уязвимостей". Ну а дальше ребята, ответственные за информационную безопасность, совместно с разработкой и админами решают какие риски можно принять, а что нужно пропатчить прямо сегодня.
Существует масса разнообразных инструментов для решения этой задачи, но у всех них с нашей точки зрения есть одна общая проблема — они требуют отдельного хлопотного развертывания и порождают в вашей инфраструктуре еще один инструмент с root-овой учетной записью. Но ведь для такого простого действия как сбор информации об установленных пакетах root не нужен! Да и обычно в инфраструктуре уже присутствуют развернутые системы с возможностью консолидации данных, совместной работы и удаленного исполнения команд на серверах. Поэтому мы решили сделать инструмент, который позволил бы в пару кликов развернуть в своей среде систему контроля уязвимостей Linux с минимальными изменениями продакшена.
Что развернуто в большинстве продуктовых систем? Конечно же мониторинг. И довольно часто это Zabbix [5]. Так давайте к нему и прикрутимся!
Все просто: распределенная система агентов, дашборды для визуализации, многопользовательская система доступа, выполнение действий по заданным критериям уже сделаны без нас. Нам не нужно изобретать велосипед и делать это все с нуля.
Прав у Zabbix-а хватает на получение информации о пакетах, куда их сложить тоже есть. Осталось их объединить и отправить на анализ в Vulners API [6]. А затем обработать полученные знания об уязвимостях.
Но давайте начнем с небольшого вступления, что умеет Zabbix и что нам потребуется сделать.
Zabbix-агенты устанавливаются на сервера и позволяют:
Zabbix-сервер получает на вход метрики мониторинга и записывает их в базу данных и проводит из дальнейшую обработку.
Анализируя полученные данные и основываясь на достаточно гибкой логике он может выполнять различные действия:
Веб-интерфейс написан на PHP и позволят отображать собранные Zabbix-ом метрики, графики, сработавшие оповещения о проблемах, и выполненные системой мониторинга команды и действия.
Также через веб-интерфейс осуществляется администрирование Zabbix.
Zabbix API является API на основе веб и поставляется как часть веб-интерфейса. Он использует протокол JSON-RPC.
Однако Zabbix ничего не знает про уязвимости! Зато про них знает Vulners [7] :)
Мы попробовали их друг с другом интегрировать и вот что из этого получилось.
Это плагин [9] к Zabbix, с открытым исходным кодом, написан на Python, который:
CVSS [10] это открытый промышленный стандарт оценки критичности уязвимости. По сути — 10 бальная шкала.
Использование данной методики позволяет привести уязвимости найденные в различных системах и обладающие разными свойствами к единому знаменателю, что упрощает приоритезацию обнаруженных проблем.
Про этот плагин мы рассказывали на Zabbix Moscow Meetup [11]. Для тех, кто не любит читать, но любит смотреть — есть видео [12] доклада.
Результат работы плагина в Zabbix выглядит следующим образом:
Это дашборд в Zabbix. На котором, слева на право, отображается следующая информация:
Ниже более подробно про самое интересное:
Информация об уязвимых серверах:
Панель отображает список всех серверов с уровнем уязвимости выше критического. Минимально допустимый уровень критичности, после которого сервер начинает отображаться как уязвимый, задается в настройках плагина.
По каждому серверу доступна следующая информация:
Данные представлены с сортировкой по CVSS, от максимального к минимальному. Это позволяет держать сервера, требующие наибольшего внимания, всегда наверху списка, перед глазами.
Следующая панель показывает уязвимые пакеты:
Здесь для каждого уязвимого пакета в нашей инфраструктуре мы имеем краткую сводку:
Данные представлены с сортировкой по Индексу влияния, от максимального к минимальному.
Индекс влияния — это количество затронутых уязвимым пакетом серверов, умноженное на CVSS-балл уязвимости. Зачастую бывает что уязвимость с не самым выскоким балом имеет гораздо большее распространение в инфраструктуре, и поэтому потенциально более опасна.
Однако нельзя просто так взять и обновить все пакеты на всех серверах до последней версии, которая устраняет существующие уязвимости.
В любой инфраструктуре, состоящей более чем из нескольких серверов существует множество ограничений: зависимость одного софта от версии другого, риски нарушения функциональности и так далее.
Поэтому всегда стоит выбор — какие пакеты мы можем безболезненно обновить. По каким пакетам необходим отдельный план работ по реализации компенсирующих мер. А по каким мы можем принять риски.
Предлагаемый в плагине подход позволяет выбирать подходящую вам стратегию устранения уязвимостей:
Но мало знать какие у нас уязвимости и определить как и какие из них можно устранить. Необходимо ещё и сделать это!
Для централизованного управления конфигурациями и обновления ПО широко используются такие системы как Puppet или Ansible. Вы можете использовать fix-команду, устраняющую уязвимость, и централизованно её выполнить с помощью таких систем.
Если же в вашей инфраструктуре не используются такие системы — Zabbix Threat Control [9] позволяет устранять уязвимости прямо из веб-интерфейса Zabbix.
Для этого плагин использует стандартный функционал Zabbix: подтверждение событий и выполнение удаленных команд:
По умолчанию плагин передает fix-команду на уязвимые сервера с помощью утилиты zabbix-get, обращаясь к Zabbix-агенту на целевом сервере с параметром nowait
. Такой способ подключения позволяет процессу обновления пакетов выполняться в фоне не быть привязанным к процессам zabbix-агента. Также есть возможность выполнять команду на целевом сервере через простое SSH-подключение. Способ выполнения fix-команд выбирается опцией в конфигурацоинном файле плагина.
И как результат работы — отсутствие уязвимых серверов, ваш спокойный сон и отличное настроение :)
Мы рассказали, что такое Zabbix Threat Control [9], зачем он нужен и как работает. Теперь расскажем как его установить и настроить!
Для работы плагин не требует ничего сверхестественого. Необходимо чтобы на Zabbix-сервере, на который мы ставим планиг, было следующее:
На всех серверах, для которых требуется сканирование на уязвимости требуется только:
Для начала подключаем репозиторий с пакетами:
RPM-дистрибутивы
rpm -Uhv https://repo.vulners.com/redhat/vulners-repo.rpm
DEB-дистрибутивы
wget https://repo.vulners.com/debian/vulners-repo.deb
dpkg -i vulners-repo.deb
После этого на Zabbix-сервере устанавливаем основной пакет, обеспечивающий всю логику работы плагина и пакет, формирующий отчетность об ОС:
RPM-дистрибутивы
yum install zabbix-threat-control-main zabbix-threat-control-host
DEB-дистрибутивы
apt-get update && apt-get install zabbix-threat-control-main zabbix-threat-control-host
И на всех остальных серверах, для которых требуется сканирование на уязвимости, устанавливаем пакет, формирующий отчетность об ОС:
RPM-дистрибутивы
yum install zabbix-threat-control-host
DEB-дистрибутивы
apt-get update && apt-get install zabbix-threat-control-host
Если вы предпочитаете установку из исходиников, то сделать это тоже очень просто:
На Zabbix-сервере устанавливаем основные скрипты, обеспечивающие всю логику работы плагина и скрипт, формирующий отчетность об ОС:
git clone https://github.com/vulnersCom/zabbix-threat-control.git
# main
mkdir -p /opt/monitoring/zabbix-threat-control
cp zabbix-threat-control/ztc* /opt/monitoring/zabbix-threat-control/
chown -R zabbix:zabbix /opt/monitoring/zabbix-threat-control
chmod 640 /opt/monitoring/zabbix-threat-control/ztc_config.py
touch /var/log/zabbix-threat-control.log
chown zabbix:zabbix /var/log/zabbix-threat-control.log
chmod 664 /var/log/zabbix-threat-control.log
# host
cp -R zabbix-threat-control/os-report /opt/monitoring/
chown -R zabbix:zabbix /opt/monitoring/os-report
На всех остальных серверах, для которых требуется сканирование на уязвимости ставим только скрипт, формирующий отчетность об ОС:
git clone https://github.com/vulnersCom/zabbix-threat-control.git
# host
mkdir -p /opt/monitoring/
cp -R zabbix-threat-control/os-report /opt/monitoring/
chown -R zabbix:zabbix /opt/monitoring/os-report
После установки необходимо сконфигурировать плагин и подготовить систему мониторинга для его работы. Далее пошаговое описание всех необходимых действий.
Необходимо разрешить Zabbix агенту выполнять удаленные команды. Для этого на всех серверах, для ктороых требуется сканирование, измените параметры в файле конфигурации zabbix-agent как показано ниже:
EnableRemoteCommands=1
LogRemoteCommands=1
Файл конфигурации zabbix-агента обычно расположен здесь: /etc/zabbix/zabbix_agentd.conf
Если вы хотите использовать функционал по устранению найденных уязвимостей с помощью Zabbix Threat Control, вам необходимо разрешить пользователю zabbix выполнять обновление пакетов (но не их установку или удаление).
Для этого необходимо добавить следующую строку в файл /etc/sudoers
:
Для RPM-дистрибутивов строка выглядит так:
zabbix ALL=(ALL) NOPASSWD: /usr/bin/yum -y update *
Для DEB-дистрибутивов немного по-другому:
zabbix ALL=(ALL) NOPASSWD: /usr/bin/apt-get --assume-yes install --only-upgrade *
Для использования Vulners API вам нужен api-ключ. Чтобы получить его:
Вы получите api-ключ, который выглядит следующим образом: RGB9YPJG7CFAXP35PMDVYFFJPGZ9ZIRO1VGO9K9269B0K86K6XQQQR32O6007NUK
Теперь вам нужно добавить api-ключ Vulners в конфигурационный файл плагина /opt/monitoring/zabbix-threat-control/ztc_config.py
Пример:
vuln_api_key = 'RGB9YPJG7CFAXP35PMDVYFFJPGZ9ZIRO1VGO9K9269B0K86K6XQQQR32O6007NUK'
Чтобы плагин смог подключиться к Zabbix, вам нужно указать следующие данные в файле конфигурации: /opt/monitoring/zabbix-threat-control/ztc_config.py
доменное имя и порт Zabbix сервера для отправки данных с помощью утилиты zabbix-sender.
Пример:
zbx_pass = 'yourpassword'
zbx_user = 'yourlogin'
zbx_url = 'https://zabbixfront.yourdomain.com'
zbx_server_fqdn = 'zabbixserver.yourdomain.com'
zbx_server_port = '10051'
Необходимо создать в Zabbix объекты, обеспечивающие работу плагина. Для этого нужно запустить скрипт /opt/monitoring/zabbix-threat-control/ztc_create.py
. Скрипт проверит что плагин сконфигурирован верно и, используя API создаст в Zabbix:
После создания в Zabbix всех объектов скрипт покажет:
После того, как в Zabbix буду созданы все необходимые объекты, необходимо зайти в веб-интерфейс Zabbix и слинковать только что созданный скриптом шаблон "Vulners OS-Report" со всеми теми серверами, для которых требуется сканирование на уязвимости.
После этого остается дождаться запуска плагина в указанное при инсталляции время.
Запуск основного скрипта обработки данных (ztc.py
) происходит автоматически, один раз в сутки, через "Service Item..." на хосте "Vulners — Statistics" в указанное скриптом время.
Вы можете поменять время запуска плагина на любое удобное вам, изменив "Scheduling interval" в этом элементе данных. При этом необходимо откорректировать и время сбора статистики в трех элементах данных шаблона "Vulners OS-Report" – метрики в шаблоне должны срабатывать минут на 10…15 раньше, чем основная метрика "Service Item..." на хосте "Vulners — Statistics".
Время за которое будут обработаны все данные об уязвимостях зависит от количества серверов в инфраструктуре и количества установленных на них пакетов. Ориентировочно на обработку 1 тысячи серверов тратится около 30 минут.
Это лишь первая версия плагина Zabbix Threat Control. И мы продолжаем его разработку.
В планах:
И так как это opensource — присоединяйтесь! Pull requests welcome :) [14]
Автор: isox
Источник [15]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/informatsionnaya-bezopasnost/285000
Ссылки в тексте:
[1] Nessus: https://www.tenable.com/products/nessus/nessus-professional
[2] Qualys: https://www.qualys.com/apps/vulnerability-management/
[3] Max Patrol: https://www.ptsecurity.com/ru-ru/products/mp8/
[4] OpenVAS: http://www.openvas.org
[5] Zabbix: https://www.zabbix.com
[6] Vulners API: https://vulners.com/products
[7] Vulners: https://vulners.com/search?query=bulletinFamily:unix%20order:published
[8] Удобное API для различных способов сканирования: https://github.com/vulnersCom/api
[9] плагин: https://github.com/vulnersCom/zabbix-threat-control
[10] CVSS: https://en.wikipedia.org/wiki/Common_Vulnerability_Scoring_System
[11] Zabbix Moscow Meetup: https://habr.com/company/badoo/blog/415299/
[12] видео: https://www.youtube.com/watch?v=ZPX-ZGZx6zg
[13] vulners.com: https://vulners.com/
[14] Pull requests welcome :): https://github.com/vulnersCom/zabbix-threat-control/pulls
[15] Источник: https://habr.com/post/416137/?utm_campaign=416137
Нажмите здесь для печати.