Wazuh Command Monitoring - мониторинг команд
Модуль мониторинга команд в Wazuh позволяет периодически выполнять произвольные команды на конечных точках и анализировать их вывод через движок правил. Результаты выполнения команд обрабатываются так же, как обычные лог-данные - проходят через декодирование и сопоставление с правилами обнаружения. Этот механизм расширяет возможности мониторинга за пределы лог-файлов, позволяя отслеживать состояние системы, сетевые подключения, запущенные процессы и другие параметры.
Способы настройки
Wazuh предоставляет два способа мониторинга команд:
Wodle command
Модуль wodle command является предпочтительным методом. Он предоставляет расширенные возможности планирования, верификации скриптов и управления таймаутами.
<wodle name="command">
<disabled>no</disabled>
<tag>check-open-ports</tag>
<command>netstat -tulnp</command>
<interval>5m</interval>
<run_on_start>yes</run_on_start>
<timeout>30</timeout>
<ignore_output>no</ignore_output>
</wodle>Localfile с log_format command
Альтернативный метод через блок <localfile> с форматами command или full_command:
<localfile>
<log_format>full_command</log_format>
<command>netstat -tulnp</command>
<frequency>120</frequency>
</localfile>Разница между command и full_command: при command каждая строка вывода обрабатывается как отдельное событие, при full_command весь вывод формирует одно событие.
Конфигурация wodle command
Полная структура XML-блока
<wodle name="command">
<disabled>no</disabled>
<tag>descriptive-name</tag>
<command>/path/to/script-or-command</command>
<interval>1d</interval>
<run_on_start>yes</run_on_start>
<timeout>300</timeout>
<ignore_output>no</ignore_output>
<verify_sha256>hash-value</verify_sha256>
<skip_verification>no</skip_verification>
</wodle>Параметры конфигурации
| Параметр | По умолчанию | Описание |
|---|---|---|
disabled | no | Включение или отключение модуля (yes/no) |
tag | - | Описательное имя для идентификации команды в логах |
command | - | Путь к команде или скрипту с аргументами |
interval | 2s | Интервал между выполнениями (s/m/h/d/M) |
run_on_start | yes | Выполнять при запуске службы (yes/no) |
timeout | 0 | Максимальное время выполнения в секундах (0 - без ограничений) |
ignore_output | no | Подавить логирование вывода (yes/no) |
verify_md5 | - | MD5-хеш для верификации исполняемого файла |
verify_sha1 | - | SHA1-хеш для верификации |
verify_sha256 | - | SHA256-хеш для верификации |
skip_verification | no | Выполнять несмотря на несовпадение хеша (yes/no) |
Расширенное планирование
Помимо интервального выполнения, wodle command поддерживает привязку к конкретному времени:
<!-- Выполнение ежедневно в 03:00 -->
<wodle name="command">
<disabled>no</disabled>
<tag>daily-audit</tag>
<command>/usr/local/bin/security-audit.sh</command>
<time>03:00</time>
<run_on_start>no</run_on_start>
</wodle>
<!-- Выполнение по понедельникам -->
<wodle name="command">
<disabled>no</disabled>
<tag>weekly-report</tag>
<command>/usr/local/bin/weekly-report.sh</command>
<wday>monday</wday>
<time>06:00</time>
</wodle>
<!-- Выполнение 1-го числа каждого месяца -->
<wodle name="command">
<disabled>no</disabled>
<tag>monthly-inventory</tag>
<command>/usr/local/bin/full-inventory.sh</command>
<day>1</day>
<time>00:00</time>
</wodle>| Параметр | Описание |
|---|---|
time | Время выполнения в формате hh:mm |
wday | День недели (sunday - saturday) |
day | День месяца (1 - 31) |
Параметры day и wday взаимоисключающие.
Отслеживание изменений вывода
Одна из ключевых возможностей - обнаружение изменений в выводе команды между последовательными выполнениями. Wazuh сравнивает текущий вывод с предыдущим и генерирует алерт при обнаружении различий.
Для этого применяется формат full_command совместно с правилами, отслеживающими изменения:
<localfile>
<log_format>full_command</log_format>
<command>netstat -tulnp | sort</command>
<frequency>300</frequency>
<alias>listening-ports</alias>
</localfile>Правило обнаружения для отслеживания новых сетевых слушателей:
<rule id="100200" level="7">
<if_sid>530</if_sid>
<match>ossec: output: 'listening-ports'</match>
<check_diff/>
<description>Change detected in listening network ports</description>
<group>network_monitoring,</group>
</rule>Тег <check_diff/> указывает движку правил сравнивать текущий вывод с сохраненным предыдущим результатом.
Практические сценарии
Мониторинг открытых портов
<wodle name="command">
<disabled>no</disabled>
<tag>open-ports</tag>
<command>ss -tulnp</command>
<interval>5m</interval>
<run_on_start>yes</run_on_start>
<timeout>15</timeout>
</wodle>Мониторинг запущенных процессов
<wodle name="command">
<disabled>no</disabled>
<tag>running-processes</tag>
<command>ps aux --sort=-rss | head -20</command>
<interval>10m</interval>
<run_on_start>yes</run_on_start>
<timeout>10</timeout>
</wodle>Мониторинг использования дисков
<wodle name="command">
<disabled>no</disabled>
<tag>disk-usage</tag>
<command>df -Ph | grep -v tmpfs</command>
<interval>30m</interval>
<run_on_start>yes</run_on_start>
<timeout>10</timeout>
</wodle>Правило для обнаружения высокой загрузки диска:
<rule id="100210" level="10">
<if_sid>530</if_sid>
<match>ossec: output: 'disk-usage'</match>
<regex>9[0-9]%|100%</regex>
<description>Disk usage exceeds 90 percent</description>
<group>system_monitoring,disk_alert,</group>
</rule>Мониторинг пользовательских сессий
<wodle name="command">
<disabled>no</disabled>
<tag>active-sessions</tag>
<command>who</command>
<interval>5m</interval>
<run_on_start>yes</run_on_start>
<timeout>5</timeout>
</wodle>Проверка обновлений безопасности
<wodle name="command">
<disabled>no</disabled>
<tag>security-updates</tag>
<command>/usr/lib/update-notifier/apt-check --human-readable 2>&1</command>
<interval>12h</interval>
<run_on_start>yes</run_on_start>
<timeout>60</timeout>
</wodle>Обнаружение USB-устройств
<wodle name="command">
<disabled>no</disabled>
<tag>usb-devices</tag>
<command>lsusb</command>
<interval>1m</interval>
<run_on_start>yes</run_on_start>
<timeout>5</timeout>
</wodle>Верификация скриптов
Wodle command поддерживает верификацию целостности исполняемых файлов через контрольные суммы. Это предотвращает выполнение модифицированных злоумышленником скриптов.
<wodle name="command">
<disabled>no</disabled>
<tag>verified-audit</tag>
<command>/usr/local/bin/audit-check.sh</command>
<interval>1h</interval>
<verify_sha256>292a188e498caea5c5fbfb0beca413c980e7a5edf40d47cf70e1dbc33e4f395e</verify_sha256>
<skip_verification>no</skip_verification>
</wodle>При несовпадении хеша команда не выполняется и генерируется алерт.
Интеграция с Osquery
Wazuh поддерживает интеграцию с Osquery - инструментом для SQL-подобных запросов к состоянию системы. Результаты Osquery передаются в движок анализа Wazuh для корреляции с другими событиями безопасности.
Настройка на агенте
Установите Osquery на конечной точке и настройте сбор логов:
<localfile>
<log_format>json</log_format>
<location>/var/log/osquery/osqueryd.results.log</location>
</localfile>Wodle osquery
Wazuh также предоставляет встроенный wodle для управления Osquery:
<wodle name="osquery">
<disabled>no</disabled>
<run_daemon>yes</run_daemon>
<bin_path>/usr/bin/osqueryd</bin_path>
<log_path>/var/log/osquery/osqueryd.results.log</log_path>
<config_path>/etc/osquery/osquery.conf</config_path>
<add_labels>yes</add_labels>
</wodle>Примеры Osquery-запросов
Файл конфигурации Osquery (osquery.conf):
{
"schedule": {
"listening_ports": {
"query": "SELECT pid, port, protocol, address FROM listening_ports;",
"interval": 300
},
"installed_packages": {
"query": "SELECT name, version, source FROM deb_packages;",
"interval": 3600
},
"crontab_entries": {
"query": "SELECT command, path FROM crontab;",
"interval": 600
}
}
}Результаты Osquery-запросов автоматически обрабатываются правилами Wazuh для генерации алертов при обнаружении аномалий.
Удаленное выполнение команд
Для централизованного управления мониторингом команды можно настраивать через менеджер Wazuh с применением на агентах. Для этого необходимо разрешить удаленные команды в конфигурации агента:
wazuh_command.remote_commands=1Эту настройку следует включать только для доверенных агентов, так как она позволяет менеджеру выполнять произвольные команды на конечной точке.
Подробнее о сборе логов: Сбор логов Wazuh
Устранение неполадок
Команда не выполняется
- Проверьте, что путь к команде корректен и файл имеет права на выполнение
- Убедитесь, что
<disabled>установлено вno - Проверьте
/var/ossec/logs/ossec.logна наличие ошибок модуля - Для удаленных команд убедитесь, что
wazuh_command.remote_commands=1включено
Вывод не попадает в алерты
- Проверьте, что
<ignore_output>не установлено вyes - Убедитесь, что существуют правила, соответствующие формату вывода
- Проверьте значение
<tag>- оно используется для идентификации в правилах - Для
check_diffубедитесь, что команда выполнена минимум дважды
Таймаут выполнения
- Увеличьте значение
<timeout>для длительных операций - Проверьте, что команда не зависает при отсутствии терминала (TTY)
- Добавьте перенаправление stderr:
command 2>/dev/null
Верификация хеша не проходит
- Пересчитайте хеш файла:
sha256sum /path/to/script - Обновите значение
<verify_sha256>в конфигурации - Временно установите
<skip_verification>yes</skip_verification>для отладки
Подробнее об архитектуре: Архитектура Wazuh
Подробнее о сценариях использования: Сценарии использования Wazuh