Wazuh System Calls - мониторинг системных вызовов
Wazuh мониторит системные вызовы на Linux-конечных точках через интеграцию с подсистемой Linux Audit (auditd). Агент Wazuh устанавливает и настраивает правила аудита на конечных точках, собирает события системных вызовов и передает их на сервер для анализа. Мониторинг системных вызовов позволяет обнаруживать подозрительные действия на уровне ядра ОС: выполнение привилегированных команд, доступ к критическим файлам, сетевые подключения и попытки повышения привилегий.
Архитектура мониторинга
Система мониторинга системных вызовов состоит из следующих компонентов:
- Linux Audit (auditd) - подсистема ядра, перехватывающая системные вызовы
- Audit rules - правила, определяющие какие вызовы отслеживать
- Wazuh agent - собирает аудит-логи из
/var/log/audit/audit.log - Wazuh server - анализирует события и генерирует алерты
Конфигурация сбора аудит-логов на агенте:
<localfile>
<log_format>audit</log_format>
<location>/var/log/audit/audit.log</location>
</localfile>Типы правил аудита
Linux Audit поддерживает три типа правил:
Правила файловой системы (file system rules)
Отслеживают операции с файлами и директориями:
# Мониторинг изменений в /etc/passwd
auditctl -w /etc/passwd -p wa -k passwd_changes
# Мониторинг доступа к конфигурации SSH
auditctl -w /etc/ssh/sshd_config -p rwxa -k sshd_config
# Мониторинг директории /etc/sudoers.d
auditctl -w /etc/sudoers.d/ -p wa -k sudoers_changesФлаги прав доступа:
r- чтениеw- записьx- выполнениеa- изменение атрибутов
Правила системных вызовов (system call rules)
Отслеживают конкретные системные вызовы:
# Мониторинг выполнения программ (execve)
auditctl -a always,exit -F arch=b64 -S execve -k program_execution
# Мониторинг сетевых подключений (connect)
auditctl -a always,exit -F arch=b64 -S connect -k network_connections
# Мониторинг открытия файлов (open/openat)
auditctl -a always,exit -F arch=b64 -S open -S openat -F auid>=1000 -k file_access
# Мониторинг изменения прав (chmod/chown)
auditctl -a always,exit -F arch=b64 -S chmod -S fchmod -S chown -k permission_changesУправляющие правила (control rules)
Настраивают поведение подсистемы аудита:
# Установить размер буфера
auditctl -b 8192
# Заблокировать конфигурацию аудита (до перезагрузки)
auditctl -e 2
# Удалить все правила
auditctl -DПостоянные правила аудита
Правила auditctl действуют до перезагрузки. Для постоянного применения добавьте правила в файл /etc/audit/rules.d/wazuh.rules:
# Мониторинг выполнения программ
-a always,exit -F arch=b64 -S execve -k exec_commands
# Мониторинг критических файлов
-w /etc/passwd -p wa -k identity_changes
-w /etc/group -p wa -k identity_changes
-w /etc/shadow -p wa -k identity_changes
# Мониторинг сетевых подключений
-a always,exit -F arch=b64 -S connect -S accept -k network_activity
# Мониторинг загрузки модулей ядра
-a always,exit -F arch=b64 -S init_module -S finit_module -k kernel_modules
# Мониторинг монтирования файловых систем
-a always,exit -F arch=b64 -S mount -S umount2 -k mount_operations
# Мониторинг изменения времени
-a always,exit -F arch=b64 -S adjtimex -S settimeofday -S clock_settime -k time_changes
# Мониторинг удаления файлов
-a always,exit -F arch=b64 -S unlink -S unlinkat -S rename -S renameat -F auid>=1000 -k file_deletionПрименение правил:
augenrules --load
systemctl restart auditdWho-data для FIM
Интеграция с Linux Audit позволяет модулю File Integrity Monitoring (FIM) получать расширенную информацию о том, кто и какой процесс изменил файл. Это называется who-data.
Настройка who-data
В конфигурации FIM на агенте включите режим whodata:
<syscheck>
<directories check_all="yes" whodata="yes">/etc</directories>
<directories check_all="yes" whodata="yes">/usr/bin</directories>
<directories check_all="yes" whodata="yes">/usr/sbin</directories>
</syscheck>При включении whodata="yes" Wazuh автоматически создает правила аудита для указанных директорий. Алерты FIM будут содержать дополнительные поля:
audit.user.id- UID пользователя, изменившего файлaudit.user.name- имя пользователяaudit.process.id- PID процессаaudit.process.name- имя процессаaudit.process.ppid- PID родительского процесса
Пример алерта who-data
{
"rule": {
"id": "550",
"level": 7,
"description": "Integrity checksum changed"
},
"syscheck": {
"path": "/etc/hosts",
"audit": {
"user": {
"id": "0",
"name": "root"
},
"process": {
"id": "1234",
"name": "vim",
"ppid": "5678"
}
}
}
}Мониторинг конкретных системных вызовов
execve - выполнение программ
Системный вызов execve фиксирует запуск каждой программы в системе. Это один из наиболее информативных источников для обнаружения вредоносной активности.
-a always,exit -F arch=b64 -S execve -F auid>=1000 -F auid!=4294967295 -k user_commandsПравило Wazuh для обнаружения выполнения подозрительных команд:
<rule id="100400" level="10">
<if_sid>80792</if_sid>
<field name="audit.command">nc|ncat|netcat|socat|nmap</field>
<description>Suspicious network tool executed: $(audit.command)</description>
<mitre>
<id>T1046</id>
</mitre>
<group>audit,syscall,network_scan,</group>
</rule>connect - сетевые подключения
Мониторинг исходящих сетевых подключений:
-a always,exit -F arch=b64 -S connect -F a0!=0x2 -k outbound_connectionsopen/openat - доступ к файлам
Мониторинг доступа к конфиденциальным файлам:
-a always,exit -F arch=b64 -S open -S openat -F dir=/etc/ssl/private -k ssl_key_access
-a always,exit -F arch=b64 -S open -S openat -F dir=/root/.ssh -k ssh_key_accessptrace - отладка процессов
Мониторинг вызовов ptrace, которые используются для отладки и инъекции в процессы:
-a always,exit -F arch=b64 -S ptrace -k process_injectionsocket - создание сокетов
-a always,exit -F arch=b64 -S socket -F a0=0x2 -k ipv4_socket
-a always,exit -F arch=b64 -S socket -F a0=0xa -k ipv6_socketСобытия SELinux и AppArmor
SELinux
Wazuh собирает события SELinux из аудит-лога. Типичные события:
AVC denial- отказ в доступе по политике SELinuxMAC_POLICY_LOAD- загрузка новой политикиMAC_STATUS- изменение режима работы (enforcing/permissive)MAC_CONFIG_CHANGE- изменение конфигурации
Правило обнаружения переключения SELinux в permissive:
<rule id="100410" level="12">
<if_sid>80700</if_sid>
<match>MAC_STATUS</match>
<field name="audit.selinux.enforcing">0</field>
<description>SELinux switched to permissive mode</description>
<mitre>
<id>T1562.001</id>
</mitre>
<group>audit,selinux,defense_evasion,</group>
</rule>AppArmor
События AppArmor также собираются через подсистему аудита:
APPARMOR_ALLOWED- действие разрешено профилемAPPARMOR_DENIED- действие заблокировано профилемAPPARMOR_STATUS- изменение статуса профиля
<rule id="100411" level="8">
<if_sid>80700</if_sid>
<match>apparmor="DENIED"</match>
<description>AppArmor denied action: $(audit.apparmor.operation)</description>
<group>audit,apparmor,access_denied,</group>
</rule>Сравнение с другими решениями
| Возможность | Wazuh + auditd | Sysdig | Falco |
|---|---|---|---|
| Мониторинг syscalls | Через Linux Audit | Собственный драйвер ядра / eBPF | eBPF / модуль ядра |
| Контейнерная поддержка | Через хостовой аудит | Нативная | Нативная |
| Правила обнаружения | XML-правила Wazuh | Chisel-скрипты Lua | YAML-правила |
| Корреляция с другими событиями | Да (встроенный движок) | Ограниченная | Через интеграции |
| FIM с who-data | Да | Нет (другой подход) | Нет |
| MITRE ATT&CK маппинг | Да | Нет | Да |
| Стоимость | Бесплатно | Коммерческая (Sysdig Secure) | Бесплатно (open source) |
| Производительность | Умеренное влияние | Низкое влияние (eBPF) | Низкое влияние (eBPF) |
Рекомендации по настройке
Минимальный набор правил аудита
Для начала рекомендуется следующий набор:
# Выполнение программ
-a always,exit -F arch=b64 -S execve -F auid>=1000 -F auid!=4294967295 -k exec
# Критические файлы
-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/sudoers -p wa -k sudoers
# Сетевая активность
-a always,exit -F arch=b64 -S connect -k network
# Загрузка модулей ядра
-a always,exit -F arch=b64 -S init_module -S finit_module -k modulesУправление объемом событий
Мониторинг execve на нагруженных серверах генерирует значительный объем событий. Рекомендации по оптимизации:
- Используйте фильтр
auid>=1000для исключения системных процессов - Добавляйте исключения для доверенных приложений
- Настройте размер буфера аудита (
auditctl -b) в соответствии с нагрузкой - Мониторьте потерю событий через
auditctl -s(полеlost)
Подробнее о FIM: Сценарии использования Wazuh
Устранение неполадок
События аудита не собираются
- Убедитесь, что auditd установлен и запущен:
systemctl status auditd - Проверьте, что правила аудита применены:
auditctl -l - Убедитесь, что агент Wazuh настроен на чтение
/var/log/audit/audit.log - Проверьте формат
<log_format>audit</log_format>в localfile
Потеря событий аудита
- Увеличьте размер буфера:
auditctl -b 16384 - Проверьте текущие потери:
auditctl -s | grep lost - Уменьшите количество правил аудита до необходимого минимума
- Рассмотрите использование
auditdсwrite_logs = noпри высокой нагрузке
Who-data не работает для FIM
- Проверьте, что auditd установлен и запущен
- Убедитесь, что
whodata="yes"указано в конфигурации syscheck - Проверьте, что Wazuh автоматически создал правила:
auditctl -l | grep wazuh - Просмотрите
/var/ossec/logs/ossec.logна наличие ошибок FIM
Высокая нагрузка на CPU
- Сократите количество отслеживаемых системных вызовов
- Добавьте исключения через
-F exe!=для известных безопасных процессов - Используйте
-F auid>=1000для фильтрации системных сервисов - Увеличьте интервал сканирования FIM при использовании who-data
Подробнее об архитектуре: Архитектура Wazuh
Подробнее о мониторинге команд: Мониторинг команд