Оценка конфигурации безопасности (SCA) в Wazuh
Модуль Security Configuration Assessment (SCA) в Wazuh выполняет проверку конфигурации систем на соответствие стандартам безопасности. Модуль сравнивает текущие настройки контролируемых систем с эталонными политиками и формирует отчет о пройденных, проваленных и неприменимых проверках. Политики основаны на стандартах CIS Benchmarks и могут быть расширены пользовательскими правилами.
Принцип работы
SCA оценивает конфигурацию конечных точек по трехэтапному процессу:
- Загрузка политики - агент загружает YAML-файлы политик из локального каталога или получает их централизованно с сервера
- Выполнение проверок - каждая проверка в политике тестирует определенный аспект конфигурации (файл, процесс, реестр, команда)
- Формирование результатов - результаты передаются на сервер и индексируются для визуализации в дашборде
Агент загружает политику -> Выполнение проверок ->
-> Результаты (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 | Включение модуля SCA | yes |
scan_on_start | Запуск сканирования при старте агента | yes |
interval | Интервал между сканированиями | 12h |
skip_nfs | Пропуск сетевых файловых систем | yes |
policies | Список файлов политик для применения | - |
Встроенные политики CIS Benchmarks
Wazuh поставляется с набором политик, основанных на стандартах CIS (Center for Internet Security). Политики покрывают операционные системы и сервисы.
Linux
| Политика | Файл |
|---|---|
| CIS Ubuntu 22.04 | cis_ubuntu22-04.yml |
| CIS Ubuntu 20.04 | cis_ubuntu20-04.yml |
| CIS Debian 11 | cis_debian11.yml |
| CIS Debian 10 | cis_debian10.yml |
| CIS CentOS 8 | cis_centos8.yml |
| CIS CentOS 7 | cis_centos7.yml |
| CIS RHEL 9 | cis_rhel9.yml |
| CIS RHEL 8 | cis_rhel8.yml |
| CIS RHEL 7 | cis_rhel7.yml |
| CIS Amazon Linux 2 | cis_amazonlinux2.yml |
| CIS SUSE Linux 15 | cis_sles15.yml |
Windows
| Политика | Файл |
|---|---|
| CIS Windows Server 2022 | cis_win2022.yml |
| CIS Windows Server 2019 | cis_win2019.yml |
| CIS Windows Server 2016 | cis_win2016.yml |
| CIS Windows 11 Enterprise | cis_win11_enterprise.yml |
| CIS Windows 10 Enterprise | cis_win10_enterprise.yml |
Приложения и сервисы
| Политика | Файл |
|---|---|
| CIS Apache HTTP Server 2.4 | cis_apache_24.yml |
| CIS MySQL 8.0 | cis_mysql80.yml |
| CIS PostgreSQL 13 | cis_postgresql13.yml |
| CIS Docker | cis_docker.yml |
| CIS Kubernetes | cis_kubernetes.yml |
| CIS Nginx | cis_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:
- Разместите файл политики в
/var/ossec/etc/shared/default/на сервере - Политика будет автоматически доставлена всем агентам группы
default - Для групп агентов используйте
/var/ossec/etc/shared/<group_name>/
Маппинг соответствия стандартам
SCA политики поддерживают маппинг на следующие стандарты:
| Стандарт | Ключ в compliance |
|---|---|
| CIS Benchmarks | cis |
| PCI DSS | pci_dss |
| NIST 800-53 | nist_800_53 |
| HIPAA | hipaa |
| GDPR | gdpr |
| TSC (SOC 2) | tsc |
| MITRE ATT&CK | mitre_attack |
Дашборд SCA
Дашборд SCA в Wazuh Dashboard предоставляет:
- Обзор политик - список политик с процентом пройденных проверок
- Детализация по агенту - результаты SCA для конкретного агента
- История изменений - динамика изменения результатов во времени
- Проваленные проверки - список несоответствий с рекомендациями по устранению
- Фильтрация - по политике, агенту, статусу проверки, стандарту соответствия
Доступ к дашборду: Wazuh Dashboard - Modules - Configuration Assessment.
Рекомендации по устранению
Каждая проверка SCA содержит поле remediation с инструкцией по устранению несоответствия. Типичный процесс:
- Просмотрите проваленные проверки в дашборде SCA
- Отсортируйте по критичности (CIS Level 1 - обязательные, Level 2 - углубленные)
- Примените рекомендации из поля
remediation - Дождитесь следующего сканирования или запустите повторную проверку вручную
Для повторного запуска сканирования:
/var/ossec/bin/agent_control -r -u <agent_id>Сравнение с альтернативными решениями
| Характеристика | Wazuh SCA | OpenSCAP | Lynis | Nessus Compliance |
|---|---|---|---|---|
| Формат политик | YAML | XCCDF/OVAL | Shell | Проприетарный |
| CIS Benchmarks | Да (встроенные) | Да (SCAP) | Да (частично) | Да (платные) |
| Пользовательские политики | Да | Да (сложный) | Да | Ограниченно |
| Централизованное управление | Да (agent.conf) | Нет | Нет | Да |
| Мониторинг в реальном времени | Периодический | По запросу | По запросу | Периодический |
| Интеграция с SIEM | Встроенная | Требует экспорта | Требует экспорта | Через API |
| Лицензия | Open Source (GPLv2) | Open Source | GPL | Коммерческая |
| Поддержка Windows | Да | Ограниченная | Нет | Да |
| API для результатов | REST API | CLI | CLI | REST API |
Wazuh SCA выделяется простотой формата политик (YAML), централизованным распространением через сервер и встроенной интеграцией с индексатором для долгосрочного хранения результатов.
Устранение неполадок
Политика не загружается
- Проверьте синтаксис YAML-файла:
python3 -c "import yaml; yaml.safe_load(open('/var/ossec/etc/shared/policy.yml'))"- Убедитесь, что файл политики указан в конфигурации:
grep -A5 '<sca>' /var/ossec/etc/ossec.conf- Проверьте логи агента:
grep sca /var/ossec/logs/ossec.log | tail -20Все проверки показывают “Not applicable”
Убедитесь, что раздел
requirementsвыполнен. Если предварительные условия не соблюдены, все проверки получают статус “Not applicable”.Проверьте правильность путей в переменных:
ls -la /etc/ssh/sshd_config # пример проверки пути- Убедитесь, что политика соответствует операционной системе агента.
Результаты SCA не отображаются в дашборде
- Проверьте связь агента с сервером:
/var/ossec/bin/agent_control -i <agent_id>- Убедитесь, что индексатор доступен:
curl -sk -u admin:password https://localhost:9200/_cat/indices | grep sca- Проверьте наличие данных SCA:
curl -sk -u admin:password \
"https://localhost:9200/wazuh-states-vulnerabilities-*/_search?size=1" \
-H "Content-Type: application/json"Проверка не распознает конфигурацию
- Проверьте, что регулярное выражение корректно:
grep -P 'PermitRootLogin\s+no' /etc/ssh/sshd_configУчитывайте, что проверка
f:сопоставляет паттерн с каждой строкой файла по отдельности.Для составных условий (
&&) все части должны совпадать в одной строке.
Связанные разделы
- Мониторинг целостности файлов - FIM отслеживает изменения файлов, SCA проверяет корректность конфигурации
- Обнаружение уязвимостей - совместное использование SCA и vulnerability detection для комплексной оценки
- Сценарии использования - примеры применения SCA в реальных сценариях