Wazuh System Calls - мониторинг системных вызовов

Wazuh мониторит системные вызовы на Linux-конечных точках через интеграцию с подсистемой Linux Audit (auditd). Агент Wazuh устанавливает и настраивает правила аудита на конечных точках, собирает события системных вызовов и передает их на сервер для анализа. Мониторинг системных вызовов позволяет обнаруживать подозрительные действия на уровне ядра ОС: выполнение привилегированных команд, доступ к критическим файлам, сетевые подключения и попытки повышения привилегий.

Архитектура мониторинга

Система мониторинга системных вызовов состоит из следующих компонентов:

  1. Linux Audit (auditd) - подсистема ядра, перехватывающая системные вызовы
  2. Audit rules - правила, определяющие какие вызовы отслеживать
  3. Wazuh agent - собирает аудит-логи из /var/log/audit/audit.log
  4. 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 auditd

Who-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_connections

open/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_access

ptrace - отладка процессов

Мониторинг вызовов ptrace, которые используются для отладки и инъекции в процессы:

-a always,exit -F arch=b64 -S ptrace -k process_injection

socket - создание сокетов

-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 - отказ в доступе по политике SELinux
  • MAC_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 + auditdSysdigFalco
Мониторинг syscallsЧерез Linux AuditСобственный драйвер ядра / eBPFeBPF / модуль ядра
Контейнерная поддержкаЧерез хостовой аудитНативнаяНативная
Правила обнаруженияXML-правила WazuhChisel-скрипты LuaYAML-правила
Корреляция с другими событиямиДа (встроенный движок)ОграниченнаяЧерез интеграции
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

Подробнее о мониторинге команд: Мониторинг команд

Last updated on