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

> Мониторинг системных вызовов Linux в Wazuh 4.14 - интеграция с auditd, правила аудита, who-data для FIM, отслеживание execve и connect, события SELinux

Source: https://opennix.org/docs/wazuh/capabilities/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** - анализирует события и генерирует алерты

Конфигурация сбора аудит-логов на агенте:

```xml
<localfile>
  <log_format>audit</log_format>
  <location>/var/log/audit/audit.log</location>
</localfile>
```

## Типы правил аудита

Linux Audit поддерживает три типа правил:

### Правила файловой системы (file system rules)

Отслеживают операции с файлами и директориями:

```bash
# Мониторинг изменений в /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)

Отслеживают конкретные системные вызовы:

```bash
# Мониторинг выполнения программ (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)

Настраивают поведение подсистемы аудита:

```bash
# Установить размер буфера
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
```

Применение правил:

```bash
augenrules --load
systemctl restart auditd
```

## Who-data для FIM

Интеграция с Linux Audit позволяет модулю File Integrity Monitoring (FIM) получать расширенную информацию о том, кто и какой процесс изменил файл. Это называется who-data.

### Настройка who-data

В конфигурации FIM на агенте включите режим `whodata`:

```xml
<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

```json
{
  "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` фиксирует запуск каждой программы в системе. Это один из наиболее информативных источников для обнаружения вредоносной активности.

```bash
-a always,exit -F arch=b64 -S execve -F auid>=1000 -F auid!=4294967295 -k user_commands
```

Правило Wazuh для обнаружения выполнения подозрительных команд:

```xml
<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 - сетевые подключения

Мониторинг исходящих сетевых подключений:

```bash
-a always,exit -F arch=b64 -S connect -F a0!=0x2 -k outbound_connections
```

### open/openat - доступ к файлам

Мониторинг доступа к конфиденциальным файлам:

```bash
-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`, которые используются для отладки и инъекции в процессы:

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

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

```bash
-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:

```xml
<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` - изменение статуса профиля

```xml
<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](/docs/wazuh/getting-started/wazuh-use-cases/)

## Устранение неполадок

### События аудита не собираются

- Убедитесь, что 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](/docs/wazuh/getting-started/wazuh-architecture/)

Подробнее о мониторинге команд: [Мониторинг команд](/docs/wazuh/capabilities/wazuh-command-monitoring/)

