Иногда так случается, что в организации уже есть зрелый ИТ‑отдел и есть пара ИБ‑специалистов. ИТ‑отдел уже наладил дежурства, смены и организовал систему мониторинга инфраструктуры, построенной, к примеру, на zabbix, которая успешно работает. Отдел ИБ, ещё не имеет своего SOC центра, но тоже хочет мониторить события безопасности и своевременно на них реагировать.
Для мониторинга существует множество инструментов для сбора и анализа событий безопасности, одним из которых является Wazuh, который, предположим, и внедрила наша служба ИБ. Остаётся вопрос, как оперативно реагировать на важные события? Можно смотреть в два окна — но данное решение вызовет много дискуссий и сопротивление. Проще интегрировать сообщения от системы мониторинга безопасности прямо в родной и отлаженный механизм мониторинга zabbix. Далее мы рассмотрим пару способов, как это можно сделать.
Первый способ – Взаимодействие через API
Wazuh 4.8.1 + zabbix 7.0.2
В первом способе мы будем настраивать взаимодействие через API метод, который добавили в седьмой версии zabbix: history.push. Наш zabbix сервер в тестовом стенде имеет ip 192.168.1.123, а wazuh сервер — 192.168.1.124.
Настройка zabbix
Добавим шаблон. Открываем меню шаблонов: Сбор данных→группы шаблонов→Template
И создаём шаблон: Сбор данных→шаблоны→T_Wazuh_integration
Идём в узлы, добавляем узел wazuh_server и к серверу добавляем наш шаблон
После чего создаём элемент данных. Тип данных ставим Zabbix траппер, Тип информации — Текст:
Зайдем в наш элемент и посмотрим его ID http://192.168.1.123/zabbix/history.php?action=showvalues&itemids%5B%5D=47608
Запомним его – 47608.
Далее потребуется пользователь в zabbix, от имени которого мы будем обращаться к API. Для этого необходимо создать группу, роль, пользователя, API token – скопировать и запомнить токен.
Роль
Права на доступ к API
Дальше создаем триггер для оповещения нашей службы реагирования на событие безопасности. Поскольку есть хорошее описание в официальной документации, дублировать здесь его считаю излишним.
Переходим к настройке Wazuh
Установка zabbix-agent на wazuh server:
# apt install zabbix-agent
nano /etc/zabbix/zabbix_agentd.conf – указываем адрес zabbix сервера
Server=192.168.1.123
systemctl enable zabbix-agent
systemctl start zabbix-agent
systemctl status zabbix-agent
Далее идём в веб-консоль. Открываем Notifications и создадим Channels. Назовём chanel_zabbix, и в поле Метод выберем POST, а в поле Webhook укажем ссылку на наш Zabbix API как на скрине ниже.
Дальше идём в alerting → monitors
Для примера будем отслеживать технику T1070.001 событие Clear Windows Event Logs (подробнее об этом). Для этого создадим объект «monitor» с именем и параметрами как на скриншоте ниже.
monitor 104 event windows
создаём Triggers, если у нас есть хотя бы 1 событие за последнюю минуту.
и Actions, который будет отправлять сообщение на API zabbix.
Запрос, который мы использовали в качестве примера. В itemid ставим id, который мы посмотрели ранее в zabbix сервере. В auth — наш API токен:
{"jsonrpc":"2.0","method":"history.push","params":{"itemid":47608,"value":"{{ctx.trigger.name}} агент {{ctx.results.0.hits.hits.0._source}}"},"id":1,"auth": "277f62a7bdbfa7159574abbe6342aafdffea4162471d47d4613de246e564e92d"}
Подробнее о методе history.push.
В zabbix видим сообщение
Далее настраиваем триггеры и сообщения для дежурных администраторов по своему вкусу.
Второй способ — через утилиту Send_zabbix
Wazuh 4.7.3 + zabbix 6.4
До 7 версии в zabbix отсутствовал API метод history.push, и для настройки взаимодействия можно использовать утилиту zabbix_sender.
Настройка zabbix
В настройке zabbix не сильно отличается от седьмой версии. Добавляем на zabbix новый узел – сервер wazuh.
Выбираем узел с сервером wazuh и создаём элемент данных. Тип элемента «Zabbix траппер». Тип информации «Журнал (лог)» ключ можно указать любой, в примере «trap», запомним его, он нам потребуется дальше.
Далее можно настроить триггер в зависимости от пересылаемых сообщений. На этом настройку zabbix сервера для приёма сообщений можно считать законченной.
Настройка сервера Wazuh
Устанавливаем zabbix-agent на wazuh server. Устанавливаем утилиту zabbix_sender в zabbix manger.
Запустим веб консоль wazuh, откроем Manager configuration для редактирования и добавим блок:
<integration>
<name>custom-zabbix</name>
<group>log_clearing,log_clearing_auditlog,logs_cleared</group>
<alert_format>json</alert_format>
</integration>
Где в поле <name>custom-zabbix</name> зададим имя нашего скрипта для обработки события.
<group>log_clearing,log_clearing_auditlog,logs_cleared</group> — Условие на «группу» события, при которых наш обработчик будет применяться к событиям, имеющим одну из трёх указанных групп.
Далее на сервере wazuh‑manager в папке /var/ossec/integrations/ добавим файл custom-zabbix
, по аналогии с теми файлами, что там уже лежат. И добавляем скрипт на python с именем custom‑zabbix.py, который будет разбирать события с указанными группами и отправлять события в zabbix через утилиту zabbix_sender.
Весь скрипт приводить не будем, он не сильно отличается от остальных скриптов в той же папке. Посмотрим только модифицированную функцию send_msg, отвечающую за отправку сообщений в zabbix.
В функции def process_args(args)
поправим вызов функции send_msg(msg, webhook, json_alert)
и добавим передачу исходного сообщения json_alert
.
В функцию send_msg
внесём небольшие изменения:
def send_msg(msg: str, url: str, alert: any) -> None:
"""
Send the message to the API
Parameters
----------
msg : str
JSON message.
url: str
URL of the API.
"""
if str(alert['data']['win']['system']['eventID'])=="104" or str(alert['data']['win']['system']['eventID'])=="1102":
mssg='"Alert.WAZUH.IB Очистка логов журнала. На хосте "' + alert['agent']['name']+'" ip "'+alert['agent']['ip']+'" пользователь "'+alert['data']['win']['logFileCleared']['subjectUserName']+'", Сообщение "' +alert['data']['win']['system']['message']+'", время: "' +alert['timestamp']
cmd = '/usr/bin/zabbix_sender -z 192.168.0.123 -k trap -s "wazuh_server " -o ' + mssg
process = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True)
output, error = process.communicate()
Здесь мы проверяем ID события, равно ли оно 104 или 1102. Далее формируем наше сообщение в mssg и отправляем его на сервер zabbix, указав наш сервер zabbix, ключ, который мы ранее запомнили, и название узла.
Очищаем журнал на наше подопытном сервере и смотрим сообщения в zabbix:
Отлично, работает. Дальше надеемся, что дежурные инженеры своевременно отреагируют на отправляемы wazuh сообщения о возможных нарушениях безопасности и примут необходимые меры.
Вот такая схема. Что думаете?
Спасибо за внимание! Ваш Cloud4Y.