Оценка конфигурации безопасности (SCA) в Wazuh

Модуль Security Configuration Assessment (SCA) в Wazuh выполняет проверку конфигурации систем на соответствие стандартам безопасности. Модуль сравнивает текущие настройки контролируемых систем с эталонными политиками и формирует отчет о пройденных, проваленных и неприменимых проверках. Политики основаны на стандартах CIS Benchmarks и могут быть расширены пользовательскими правилами.

Принцип работы

SCA оценивает конфигурацию конечных точек по трехэтапному процессу:

  1. Загрузка политики - агент загружает YAML-файлы политик из локального каталога или получает их централизованно с сервера
  2. Выполнение проверок - каждая проверка в политике тестирует определенный аспект конфигурации (файл, процесс, реестр, команда)
  3. Формирование результатов - результаты передаются на сервер и индексируются для визуализации в дашборде
Агент загружает политику -> Выполнение проверок ->
-> Результаты (passed/failed/not applicable) ->
-> Отправка на сервер -> Индексатор -> Дашборд

Конфигурация SCA в ossec.conf

Модуль SCA настраивается в блоке <sca> файла /var/ossec/etc/ossec.conf:

<sca>
  <enabled>yes</enabled>
  <scan_on_start>yes</scan_on_start>
  <interval>12h</interval>
  <skip_nfs>yes</skip_nfs>

  <policies>
    <policy>etc/shared/cis_ubuntu22-04.yml</policy>
    <policy>etc/shared/cis_apache_24.yml</policy>
    <policy enabled="no">etc/shared/cis_win2022.yml</policy>
  </policies>
</sca>

Параметры конфигурации

ПараметрОписаниеПо умолчанию
enabledВключение модуля SCAyes
scan_on_startЗапуск сканирования при старте агентаyes
intervalИнтервал между сканированиями12h
skip_nfsПропуск сетевых файловых системyes
policiesСписок файлов политик для применения-

Встроенные политики CIS Benchmarks

Wazuh поставляется с набором политик, основанных на стандартах CIS (Center for Internet Security). Политики покрывают операционные системы и сервисы.

Linux

ПолитикаФайл
CIS Ubuntu 22.04cis_ubuntu22-04.yml
CIS Ubuntu 20.04cis_ubuntu20-04.yml
CIS Debian 11cis_debian11.yml
CIS Debian 10cis_debian10.yml
CIS CentOS 8cis_centos8.yml
CIS CentOS 7cis_centos7.yml
CIS RHEL 9cis_rhel9.yml
CIS RHEL 8cis_rhel8.yml
CIS RHEL 7cis_rhel7.yml
CIS Amazon Linux 2cis_amazonlinux2.yml
CIS SUSE Linux 15cis_sles15.yml

Windows

ПолитикаФайл
CIS Windows Server 2022cis_win2022.yml
CIS Windows Server 2019cis_win2019.yml
CIS Windows Server 2016cis_win2016.yml
CIS Windows 11 Enterprisecis_win11_enterprise.yml
CIS Windows 10 Enterprisecis_win10_enterprise.yml

Приложения и сервисы

ПолитикаФайл
CIS Apache HTTP Server 2.4cis_apache_24.yml
CIS MySQL 8.0cis_mysql80.yml
CIS PostgreSQL 13cis_postgresql13.yml
CIS Dockercis_docker.yml
CIS Kubernetescis_kubernetes.yml
CIS Nginxcis_nginx.yml

Формат файла политики (YAML)

Каждый файл политики SCA состоит из четырех разделов: policy, requirements, variables и checks.

Раздел policy

Содержит метаданные политики:

policy:
  id: "custom_ssh_hardening"
  file: "ssh_hardening.yml"
  name: "SSH Server Hardening Policy"
  description: "Security checks for OpenSSH server configuration"
  references:
    - https://www.cisecurity.org/benchmark/distribution_independent_linux

Раздел requirements

Определяет предварительные условия для выполнения политики:

requirements:
  title: "Check SSH server is installed"
  description: "Requirements for running the SSH hardening policy"
  condition: any
  rules:
    - 'f:/etc/ssh/sshd_config'
    - 'p:sshd'

Если условия не выполнены, политика пропускается, и все проверки получают статус “Not applicable”.

Раздел variables

Определяет переменные для повторного использования в проверках:

variables:
  $sshd_config: /etc/ssh/sshd_config
  $pam_dir: /etc/pam.d
  $ssh_service: sshd
  $audit_log: /var/log/auth.log,/var/log/secure

Переменные указываются с префиксом $ и могут содержать несколько путей через запятую.

Раздел checks

Содержит набор проверок. Каждая проверка включает метаданные и правила тестирования.

checks:
  - id: 5001
    title: "Ensure SSH root login is disabled"
    description: "The PermitRootLogin parameter specifies if root can log in using SSH"
    rationale: "Disabling root login forces administrators to use personal accounts"
    remediation: "Set PermitRootLogin to no in /etc/ssh/sshd_config"
    compliance:
      - cis: ["5.2.10"]
      - pci_dss: ["2.2.4"]
      - nist_800_53: ["AC.6"]
      - mitre_attack: ["T1078"]
    condition: all
    rules:
      - 'f:$sshd_config -> !r:^# && r:PermitRootLogin\s+no'

Типы проверок

Проверка файлов (f:)

Проверяет существование файла и его содержимое:

# Проверка существования файла
- 'f:/etc/ssh/sshd_config'

# Отрицание - файл НЕ должен существовать
- 'not f:/etc/hosts.equiv'

# Проверка содержимого (точное совпадение)
- 'f:/etc/ssh/sshd_config -> PermitRootLogin no'

# Проверка содержимого (регулярное выражение)
- 'f:/etc/ssh/sshd_config -> r:^PermitRootLogin\s+no'

# Числовое сравнение
- 'f:/etc/ssh/sshd_config -> n:MaxAuthTries\s+(\d+) compare <= 4'

# Составное условие (AND)
- 'f:/etc/ssh/sshd_config -> !r:^# && r:PermitRootLogin && r:no'

Проверка каталогов (d:)

Проверяет существование каталога и файлов внутри:

# Проверка существования каталога
- 'd:/etc/ssh'

# Поиск файлов по паттерну в каталоге
- 'd:/etc/cron.d -> r:\.cron$'

# Проверка содержимого файлов в каталоге
- 'd:/etc/sudoers.d -> r:NOPASSWD'

Проверка процессов (p:)

Проверяет наличие или отсутствие запущенного процесса:

# Процесс должен быть запущен
- 'p:sshd'
- 'p:auditd'

# Процесс НЕ должен быть запущен
- 'not p:telnetd'
- 'not p:rshd'

Проверка команд (c:)

Выполняет команду и проверяет вывод:

# Проверка вывода команды
- 'c:systemctl is-enabled sshd -> r:enabled'

# Числовое сравнение вывода
- 'c:sshd -T -> n:maxauthtries\s+(\d+) compare <= 4'

# Проверка статуса сервиса
- 'c:systemctl status firewalld -> r:active'

# Проверка прав на файл
- 'c:stat -c %a /etc/shadow -> r:^0?600$'

Проверка реестра Windows (r:)

Проверяет ключи и значения реестра Windows:

# Проверка существования ключа
- 'r:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa'

# Проверка значения
- 'r:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa -> LimitBlankPasswordUse -> 1'

# Числовое сравнение
- 'r:HKEY_LOCAL_MACHINE\...\Lsa -> n:LmCompatibilityLevel compare >= 3'

Логика оценки

Поле condition

Поле condition определяет, как результаты отдельных правил агрегируются в итоговый результат проверки:

ЗначениеОписание
allПроверка пройдена, если ВСЕ правила пройдены
anyПроверка пройдена, если ХОТЯ БЫ ОДНО правило пройдено
noneПроверка пройдена, если НИ ОДНО правило не пройдено

Результаты проверок

СтатусОписание
PassedКонфигурация соответствует требованиям политики
FailedКонфигурация не соответствует требованиям
Not applicableПроверка не может быть выполнена (объект не существует)

Операторы сравнения

ОператорОписание
r:Совпадение по регулярному выражению
!r:Отсутствие совпадения по регулярному выражению
n:Числовое сравнение
&&Логическое И (объединение условий)

Числовые операторы: <, <=, ==, !=, >=, >

Написание пользовательских политик

Полный пример политики

policy:
  id: "web_server_hardening"
  file: "web_server_hardening.yml"
  name: "Web Server Security Hardening"
  description: "Custom security checks for Apache/Nginx web servers"
  references:
    - https://httpd.apache.org/docs/2.4/misc/security_tips.html

requirements:
  title: "Check web server is installed"
  description: "At least one web server must be present"
  condition: any
  rules:
    - 'p:apache2'
    - 'p:httpd'
    - 'p:nginx'

variables:
  $apache_conf: /etc/apache2/apache2.conf,/etc/httpd/conf/httpd.conf
  $nginx_conf: /etc/nginx/nginx.conf

checks:
  - id: 10001
    title: "Ensure ServerTokens is set to Prod"
    description: "ServerTokens controls the information returned in HTTP headers"
    rationale: "Detailed server information aids attackers in reconnaissance"
    remediation: "Set ServerTokens Prod in the Apache configuration"
    compliance:
      - cis: ["5.13"]
      - pci_dss: ["2.2.4"]
    condition: all
    rules:
      - 'f:$apache_conf -> !r:^# && r:ServerTokens\s+Prod'

  - id: 10002
    title: "Ensure directory listing is disabled"
    description: "Options -Indexes prevents directory listing"
    rationale: "Directory listing exposes file structure to potential attackers"
    remediation: "Add Options -Indexes to directory configuration"
    compliance:
      - cis: ["5.7"]
    condition: all
    rules:
      - 'f:$apache_conf -> !r:^# && r:Options.*-Indexes'

  - id: 10003
    title: "Ensure TRACE method is disabled"
    description: "TraceEnable Off disables HTTP TRACE method"
    rationale: "TRACE method can be used for cross-site tracing attacks"
    remediation: "Set TraceEnable Off in the Apache configuration"
    compliance:
      - cis: ["5.8"]
      - mitre_attack: ["T1190"]
    condition: all
    rules:
      - 'f:$apache_conf -> !r:^# && r:TraceEnable\s+Off'

  - id: 10004
    title: "Ensure Nginx server_tokens is off"
    description: "server_tokens off hides Nginx version in HTTP headers"
    rationale: "Version disclosure assists in targeted exploit selection"
    remediation: "Set server_tokens off in nginx.conf"
    condition: all
    rules:
      - 'f:$nginx_conf -> !r:^# && r:server_tokens\s+off'

  - id: 10005
    title: "Ensure SSL/TLS is configured"
    description: "Web server should use TLS for encrypted communications"
    rationale: "Unencrypted traffic exposes data to interception"
    remediation: "Configure SSL certificate and enable TLS"
    compliance:
      - pci_dss: ["4.1"]
      - nist_800_53: ["SC.8"]
    condition: any
    rules:
      - 'f:$apache_conf -> r:SSLEngine\s+on'
      - 'f:$nginx_conf -> r:ssl_certificate'

Размещение пользовательских политик

Файлы пользовательских политик размещаются в каталоге /var/ossec/etc/shared/ и подключаются в конфигурации SCA:

<sca>
  <policies>
    <policy>etc/shared/web_server_hardening.yml</policy>
  </policies>
</sca>

Централизованное распространение

Для централизованного распространения политик через сервер Wazuh:

  1. Разместите файл политики в /var/ossec/etc/shared/default/ на сервере
  2. Политика будет автоматически доставлена всем агентам группы default
  3. Для групп агентов используйте /var/ossec/etc/shared/<group_name>/

Маппинг соответствия стандартам

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

СтандартКлюч в compliance
CIS Benchmarkscis
PCI DSSpci_dss
NIST 800-53nist_800_53
HIPAAhipaa
GDPRgdpr
TSC (SOC 2)tsc
MITRE ATT&CKmitre_attack

Дашборд SCA

Дашборд SCA в Wazuh Dashboard предоставляет:

  • Обзор политик - список политик с процентом пройденных проверок
  • Детализация по агенту - результаты SCA для конкретного агента
  • История изменений - динамика изменения результатов во времени
  • Проваленные проверки - список несоответствий с рекомендациями по устранению
  • Фильтрация - по политике, агенту, статусу проверки, стандарту соответствия

Доступ к дашборду: Wazuh Dashboard - Modules - Configuration Assessment.

Рекомендации по устранению

Каждая проверка SCA содержит поле remediation с инструкцией по устранению несоответствия. Типичный процесс:

  1. Просмотрите проваленные проверки в дашборде SCA
  2. Отсортируйте по критичности (CIS Level 1 - обязательные, Level 2 - углубленные)
  3. Примените рекомендации из поля remediation
  4. Дождитесь следующего сканирования или запустите повторную проверку вручную

Для повторного запуска сканирования:

/var/ossec/bin/agent_control -r -u <agent_id>

Сравнение с альтернативными решениями

ХарактеристикаWazuh SCAOpenSCAPLynisNessus Compliance
Формат политикYAMLXCCDF/OVALShellПроприетарный
CIS BenchmarksДа (встроенные)Да (SCAP)Да (частично)Да (платные)
Пользовательские политикиДаДа (сложный)ДаОграниченно
Централизованное управлениеДа (agent.conf)НетНетДа
Мониторинг в реальном времениПериодическийПо запросуПо запросуПериодический
Интеграция с SIEMВстроеннаяТребует экспортаТребует экспортаЧерез API
ЛицензияOpen Source (GPLv2)Open SourceGPLКоммерческая
Поддержка WindowsДаОграниченнаяНетДа
API для результатовREST APICLICLIREST API

Wazuh SCA выделяется простотой формата политик (YAML), централизованным распространением через сервер и встроенной интеграцией с индексатором для долгосрочного хранения результатов.

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

Политика не загружается

  1. Проверьте синтаксис YAML-файла:
python3 -c "import yaml; yaml.safe_load(open('/var/ossec/etc/shared/policy.yml'))"
  1. Убедитесь, что файл политики указан в конфигурации:
grep -A5 '<sca>' /var/ossec/etc/ossec.conf
  1. Проверьте логи агента:
grep sca /var/ossec/logs/ossec.log | tail -20

Все проверки показывают “Not applicable”

  1. Убедитесь, что раздел requirements выполнен. Если предварительные условия не соблюдены, все проверки получают статус “Not applicable”.

  2. Проверьте правильность путей в переменных:

ls -la /etc/ssh/sshd_config  # пример проверки пути
  1. Убедитесь, что политика соответствует операционной системе агента.

Результаты SCA не отображаются в дашборде

  1. Проверьте связь агента с сервером:
/var/ossec/bin/agent_control -i <agent_id>
  1. Убедитесь, что индексатор доступен:
curl -sk -u admin:password https://localhost:9200/_cat/indices | grep sca
  1. Проверьте наличие данных SCA:
curl -sk -u admin:password \
  "https://localhost:9200/wazuh-states-vulnerabilities-*/_search?size=1" \
  -H "Content-Type: application/json"

Проверка не распознает конфигурацию

  1. Проверьте, что регулярное выражение корректно:
grep -P 'PermitRootLogin\s+no' /etc/ssh/sshd_config
  1. Учитывайте, что проверка f: сопоставляет паттерн с каждой строкой файла по отдельности.

  2. Для составных условий (&&) все части должны совпадать в одной строке.

Связанные разделы

Last updated on