Мониторинг целостности файлов (FIM) в Wazuh 4.14
Модуль File Integrity Monitoring (FIM) в Wazuh реализован через компонент syscheck и предназначен для обнаружения изменений в файлах, каталогах и записях реестра Windows. Модуль вычисляет криптографические хеши и сохраняет атрибуты файлов, сравнивая текущее состояние с базовой линией при каждом сканировании. Любое расхождение генерирует алерт с детальной информацией об изменении.
Принцип работы
FIM выполняет две основные функции:
- Базовое сканирование - при первом запуске модуль создает снимок контролируемых файлов (хеши, размеры, права, владельцы, временные метки) и сохраняет его в локальной базе данных агента.
- Сравнительный анализ - при каждом последующем сканировании или в реальном времени модуль сравнивает текущее состояние файлов с базовой линией и формирует алерты при обнаружении расхождений.
Процесс обработки событий FIM:
Агент (syscheck) → Обнаружение изменения → Отправка на сервер →
→ Декодирование → Сопоставление с правилами → Алерт → ИндексаторКонфигурация syscheck в ossec.conf
Основная конфигурация FIM размещается в блоке <syscheck> файла /var/ossec/etc/ossec.conf на стороне агента. Модуль также можно настроить централизованно через agent.conf на сервере.
Базовая конфигурация
<syscheck>
<disabled>no</disabled>
<frequency>43200</frequency>
<scan_on_start>yes</scan_on_start>
<alert_new_files>yes</alert_new_files>
<!-- Каталоги для мониторинга -->
<directories check_all="yes">/etc,/usr/bin,/usr/sbin</directories>
<directories check_all="yes">/boot</directories>
<!-- Исключения -->
<ignore>/etc/mtab</ignore>
<ignore>/etc/hosts.deny</ignore>
<ignore>/etc/mail/statistics</ignore>
<ignore>/etc/random-seed</ignore>
<ignore>/etc/adjtime</ignore>
<ignore>/etc/httpd/logs</ignore>
<ignore>/etc/utmpx</ignore>
<ignore>/etc/cups/certs</ignore>
<ignore>/etc/dumpdates</ignore>
<ignore>/etc/svc/volatile</ignore>
<!-- Лимит отслеживаемых файлов -->
<file_limit>
<enabled>yes</enabled>
<entries>100000</entries>
</file_limit>
</syscheck>Параметр frequency
Параметр <frequency> задает интервал между плановыми сканированиями в секундах. Значение по умолчанию - 43200 секунд (12 часов).
<frequency>43200</frequency> <!-- 12 часов (по умолчанию) -->
<frequency>3600</frequency> <!-- 1 час -->
<frequency>86400</frequency> <!-- 24 часа -->Для критических систем рекомендуется сочетать плановое сканирование с мониторингом в реальном времени (realtime) или расширенным аудитом (whodata).
Атрибуты элемента directories
Элемент <directories> определяет каталоги и файлы для мониторинга. Каждый элемент поддерживает набор атрибутов, управляющих поведением мониторинга.
realtime - мониторинг в реальном времени
Атрибут realtime="yes" включает непрерывный мониторинг с использованием inotify (Linux) или ReadDirectoryChangesW (Windows). Алерты генерируются сразу при обнаружении изменения, без ожидания планового сканирования.
<directories realtime="yes">/etc/ssh</directories>
<directories realtime="yes">/var/www/html</directories>Ограничения:
- На Linux количество inotify watches ограничено параметром ядра
fs.inotify.max_user_watches(по умолчанию 8192). - Мониторинг realtime применяется только к файлам в указанном каталоге, но не к подкаталогам, если не задан
recursion_level.
whodata - расширенный аудит
Атрибут whodata="yes" расширяет мониторинг информацией о том, кто и каким процессом выполнил изменение. Этот режим автоматически включает realtime.
<directories whodata="yes">/etc</directories>
<directories whodata="yes">/usr/bin</directories>На Linux whodata использует подсистему audit (auditd). Wazuh автоматически создает правила аудита для отслеживаемых каталогов. Требования:
- Установленный и запущенный
auditd - Наличие утилиты
auditctl - Достаточное количество слотов в audit backlog
На Windows whodata использует Windows Security Audit Policy. Необходимо включить аудит объектов файловой системы через групповую политику или auditpol.
check_all - комплексная проверка
Атрибут check_all="yes" активирует все доступные проверки одновременно: хеши (MD5, SHA-1, SHA-256), размер, владелец, группа, права, время модификации, inode.
<directories check_all="yes">/etc/ssh</directories>Эквивалент установки всех следующих атрибутов в yes:
| Атрибут | Описание |
|---|---|
check_md5sum | Проверка MD5-хеша |
check_sha1sum | Проверка SHA-1-хеша |
check_sha256sum | Проверка SHA-256-хеша |
check_size | Проверка размера файла |
check_owner | Проверка владельца файла |
check_group | Проверка группы владельца |
check_perm | Проверка прав доступа |
check_mtime | Проверка времени модификации |
check_inode | Проверка inode (только UNIX) |
report_changes - отчет об изменениях содержимого
Атрибут report_changes="yes" включает сохранение diff между предыдущей и текущей версией файла. Работает только с текстовыми файлами.
<directories report_changes="yes" check_all="yes">/etc/ssh/sshd_config</directories>Параметр diff_size_limit ограничивает максимальный размер файла для вычисления diff:
<directories report_changes="yes" diff_size_limit="5MB">/etc</directories>Дополнительные атрибуты
<!-- Ограничение глубины рекурсии -->
<directories recursion_level="3" check_all="yes">/var/log</directories>
<!-- Фильтрация по имени файла -->
<directories restrict="\.conf$" check_all="yes">/etc</directories>
<!-- Тегирование алертов -->
<directories tags="web,production" check_all="yes">/var/www</directories>
<!-- Следование по символическим ссылкам -->
<directories follow_symbolic_link="yes">/opt/app/config</directories>Комбинированный пример
<directories whodata="yes" report_changes="yes" check_all="yes"
tags="critical-config" restrict="\.conf$|\.yml$"
recursion_level="5" diff_size_limit="2MB">/etc</directories>Исключения из мониторинга
Элемент ignore
Исключает файлы и каталоги из мониторинга. Поддерживает точное указание пути и регулярные выражения.
<!-- Точное совпадение пути -->
<ignore>/etc/mtab</ignore>
<ignore>/etc/resolv.conf</ignore>
<!-- Регулярное выражение -->
<ignore type="sregex">^/proc</ignore>
<ignore type="sregex">\.swp$</ignore>
<ignore type="sregex">/\.git/</ignore>Элемент nodiff
Исключает содержимое файла из вычисления diff (при report_changes="yes"), но продолжает отслеживать метаданные. Используется для файлов с конфиденциальными данными.
<nodiff>/etc/shadow</nodiff>
<nodiff>/etc/ssl/private</nodiff>
<nodiff type="sregex">\.key$</nodiff>Мониторинг реестра Windows
FIM поддерживает мониторинг ключей и значений реестра Windows через элемент <windows_registry>.
<windows_registry arch="both" check_all="yes">
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
</windows_registry>
<windows_registry arch="both" check_all="yes" report_changes="yes">
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
</windows_registry>
<windows_registry arch="64bit" check_all="yes" whodata="yes">
HKEY_LOCAL_MACHINE\SOFTWARE\Policies
</windows_registry>Атрибуты windows_registry
| Атрибут | Описание |
|---|---|
arch | Архитектура реестра: 32bit, 64bit или both |
check_all | Все проверки атрибутов |
check_sum | Проверка хешей значений |
report_changes | Отчет об изменениях значений |
restrict_key | Фильтр имен ключей (sregex) |
restrict_value | Фильтр имен значений (sregex) |
check_type | Отслеживание изменений типа значения |
recursion_level | Глубина вложенности ключей (до 512) |
Исключения реестра
<registry_ignore>HKEY_LOCAL_MACHINE\Security\Policy\Secrets</registry_ignore>
<registry_ignore type="sregex">Enum$</registry_ignore>Лимит записей реестра
<registry_limit>
<enabled>yes</enabled>
<entries>100000</entries>
</registry_limit>Примеры алертов FIM
Модификация файла (JSON)
{
"timestamp": "2024-11-15T10:23:45.000+0000",
"rule": {
"level": 7,
"description": "Integrity checksum changed.",
"id": "550",
"groups": ["ossec", "syscheck", "syscheck_entry_modified"]
},
"agent": {
"id": "001",
"name": "web-server-01"
},
"syscheck": {
"path": "/etc/ssh/sshd_config",
"event": "modified",
"changed_attributes": ["size", "md5", "sha1", "sha256", "mtime"],
"size_before": "3297",
"size_after": "3342",
"md5_before": "a1b2c3d4e5f6...",
"md5_after": "f6e5d4c3b2a1...",
"sha256_before": "abc123...",
"sha256_after": "def456...",
"mtime_before": "2024-10-01T08:00:00",
"mtime_after": "2024-11-15T10:23:40",
"perm_before": "rw-r--r--",
"perm_after": "rw-r--r--"
}
}Алерт whodata с информацией об аудите
{
"rule": {
"level": 7,
"description": "Integrity checksum changed.",
"id": "550"
},
"syscheck": {
"path": "/etc/passwd",
"event": "modified",
"changed_attributes": ["size", "md5", "sha1", "sha256"],
"audit": {
"user": {
"id": "0",
"name": "root"
},
"group": {
"id": "0",
"name": "root"
},
"process": {
"id": "12345",
"name": "/usr/sbin/useradd",
"ppid": "11000"
},
"effective_user": {
"id": "0",
"name": "root"
}
}
}
}Создание нового файла
{
"rule": {
"level": 5,
"description": "File added to the system.",
"id": "554",
"groups": ["ossec", "syscheck", "syscheck_entry_added"]
},
"syscheck": {
"path": "/usr/bin/suspicious_binary",
"event": "added",
"size_after": "45678",
"md5_after": "abc123def456...",
"sha256_after": "789xyz...",
"perm_after": "rwxr-xr-x",
"uid_after": "0",
"gid_after": "0"
}
}Удаление файла
{
"rule": {
"level": 7,
"description": "File was deleted.",
"id": "553",
"groups": ["ossec", "syscheck", "syscheck_entry_deleted"]
},
"syscheck": {
"path": "/etc/cron.d/backup_job",
"event": "deleted"
}
}Пользовательские правила FIM
Стандартные правила FIM (ID 550-554) можно расширить пользовательскими правилами для специфических сценариев обнаружения.
Изменение прав на скрипт
<rule id="100002" level="8">
<if_sid>550</if_sid>
<field name="file">\.sh$</field>
<field name="changed_fields">^permission$</field>
<description>Execute permission added to shell script.</description>
<group>syscheck,pci_dss_11.5,</group>
</rule>Модификация критического файла
<rule id="100005" level="12">
<if_sid>550</if_sid>
<field name="file">/etc/shadow</field>
<description>Critical system file /etc/shadow was modified.</description>
<mitre>
<id>T1003</id>
</mitre>
<group>syscheck,authentication_modified,</group>
</rule>Удаление файла процессом
<rule id="100003" level="8">
<if_sid>553</if_sid>
<field name="audit.process.name">rm$</field>
<description>File deleted using rm command.</description>
<group>syscheck,file_deletion,</group>
</rule>Дашборд FIM в Wazuh
Дашборд File Integrity Monitoring в Wazuh Dashboard предоставляет визуализацию событий FIM:
- Обзор событий - количество добавленных, измененных и удаленных файлов за период
- Топ агентов - агенты с наибольшим количеством изменений
- Топ файлов - наиболее часто изменяемые файлы
- Временная шкала - хронология событий FIM
- Детальный просмотр - содержимое diff для файлов с
report_changes - Фильтрация - по агенту, пути файла, типу события, временному диапазону
Доступ к дашборду: Wazuh Dashboard - Modules - Integrity Monitoring.
Синхронизация FIM
Блок <synchronization> управляет процессом синхронизации данных FIM между агентом и сервером.
<synchronization>
<enabled>yes</enabled>
<interval>5m</interval>
<max_interval>1h</max_interval>
<response_timeout>30</response_timeout>
<queue_size>16384</queue_size>
<thread_pool>1</thread_pool>
<max_eps>10</max_eps>
</synchronization>| Параметр | Описание | По умолчанию |
|---|---|---|
interval | Интервал синхронизации | 5m |
max_interval | Максимальный интервал при отсутствии изменений | 1h |
response_timeout | Таймаут ожидания ответа | 30s |
queue_size | Размер очереди синхронизации | 16384 |
max_eps | Максимальное количество событий в секунду | 10 |
Сравнение с альтернативными решениями
| Характеристика | Wazuh FIM | OSSEC FIM | Tripwire | AIDE |
|---|---|---|---|---|
| Мониторинг в реальном времени | Да (inotify, whodata) | Да (inotify) | Да (коммерческая версия) | Нет (только по расписанию) |
| Who-data (аудит процессов) | Да | Нет | Да (коммерческая) | Нет |
| Мониторинг реестра Windows | Да | Да (базовый) | Да | Нет (только Linux) |
| Отчет об изменениях (diff) | Да | Нет | Да | Да |
| Централизованное управление | Да (agent.conf) | Ограниченное | Да (коммерческая) | Нет |
| Интеграция с SIEM | Встроенная | Требует настройки | Требует экспорта | Требует экспорта |
| Лицензия | Open Source (GPLv2) | Open Source (GPLv2) | Коммерческая / OSS | Open Source (GPLv2) |
| Масштабируемость | До 100 000+ агентов | До 10 000 агентов | Зависит от лицензии | Локально на хосте |
Wazuh FIM отличается от OSSEC наличием whodata, расширенными атрибутами мониторинга реестра и встроенной интеграцией с OpenSearch для хранения и визуализации данных.
Устранение неполадок
Алерты FIM не генерируются
- Проверьте, что модуль syscheck не отключен:
<syscheck>
<disabled>no</disabled>
</syscheck>- Убедитесь, что контролируемый каталог указан в конфигурации:
grep -A5 '<directories' /var/ossec/etc/ossec.conf- Проверьте статус последнего сканирования:
/var/ossec/bin/agent_control -i 001 | grep syscheck- Запустите сканирование вручную:
/var/ossec/bin/agent_control -r -u 001- Проверьте логи агента:
tail -100 /var/ossec/logs/ossec.log | grep syscheckСлишком много алертов
- Используйте
<ignore>для исключения часто изменяющихся файлов:
<ignore>/var/log/lastlog</ignore>
<ignore type="sregex">\.tmp$</ignore>- Включите
auto_ignoreдля автоматического подавления:
<auto_ignore frequency="10" timeframe="3600">yes</auto_ignore>Файлы, изменяющиеся более 10 раз за 3600 секунд, будут автоматически исключены.
- Увеличьте интервал сканирования:
<frequency>86400</frequency>Влияние на производительность
- Ограничьте глубину рекурсии:
<directories recursion_level="3" check_all="yes">/var</directories>- Ограничьте количество отслеживаемых файлов:
<file_limit>
<enabled>yes</enabled>
<entries>50000</entries>
</file_limit>- Настройте
max_epsдля ограничения потока событий:
<synchronization>
<max_eps>5</max_eps>
</synchronization>- Используйте
scan_timeдля запуска сканирования в нерабочее время:
<scan_time>03:00</scan_time>Whodata не работает на Linux
- Проверьте, установлен ли auditd:
systemctl status auditd- Убедитесь, что правила аудита созданы:
auditctl -l | grep wazuh- Проверьте размер audit backlog:
auditctl -s | grep backlogЕсли whodata не может инициализироваться, модуль автоматически переключается на режим realtime.
Связанные разделы
- Обнаружение вредоносного ПО - использование FIM совместно с YARA и VirusTotal для обнаружения малвари
- Оценка конфигурации безопасности - проверка настроек системы на соответствие стандартам
- Архитектура Wazuh - как данные FIM передаются от агента к индексатору