Обнаружение вредоносного ПО в Wazuh 4.14
Wazuh использует многоуровневый подход к обнаружению вредоносного программного обеспечения. Вместо единственного антивирусного движка платформа объединяет несколько методов детекции: обнаружение руткитов модулем rootcheck, сигнатурный анализ через YARA, проверку хешей файлов в VirusTotal, мониторинг логов сторонних антивирусов и пользовательские правила на основе индикаторов компрометации (IoC).
Методы обнаружения
Wazuh предоставляет восемь основных методов обнаружения вредоносного ПО:
- FIM с правилами детекции - мониторинг целостности файлов в сочетании с правилами обнаружения угроз
- Rootcheck - обнаружение руткитов и троянов через анализ поведения и сигнатуры
- CDB-списки - проверка хешей и IoC по локальным базам данных
- VirusTotal - автоматическая проверка хешей файлов через API VirusTotal
- YARA - паттерн-ориентированное сканирование файлов
- ClamAV - мониторинг логов антивируса ClamAV
- Windows Defender - анализ событий Windows Defender
- Пользовательские правила IoC - детекция на основе собственных индикаторов
Модуль rootcheck
Модуль rootcheck выполняет поиск руткитов, троянов и аномалий на контролируемых системах. Он использует два подхода: сопоставление с известными сигнатурами и поведенческий анализ.
Конфигурация rootcheck
<rootcheck>
<disabled>no</disabled>
<check_files>yes</check_files>
<check_trojans>yes</check_trojans>
<check_dev>yes</check_dev>
<check_sys>yes</check_sys>
<check_pids>yes</check_pids>
<check_ports>yes</check_ports>
<check_if>yes</check_if>
<!-- Базы сигнатур -->
<rootkit_files>etc/shared/rootkit_files.txt</rootkit_files>
<rootkit_trojans>etc/shared/rootkit_trojans.txt</rootkit_trojans>
<!-- Частота сканирования (секунды) -->
<frequency>43200</frequency>
<skip_nfs>yes</skip_nfs>
</rootcheck>Проверки rootcheck
| Параметр | Описание |
|---|---|
check_files | Поиск файлов, характерных для известных руткитов |
check_trojans | Обнаружение троянизированных системных утилит |
check_dev | Проверка /dev на наличие скрытых файлов |
check_sys | Обнаружение скрытых процессов и портов |
check_pids | Поиск скрытых процессов через перебор PID |
check_ports | Обнаружение скрытых портов |
check_if | Проверка сетевых интерфейсов на promiscuous mode |
Базы сигнатур
Wazuh поставляется с двумя базами:
rootkit_files.txt- пути к файлам, характерным для известных руткитов (Adore, Knark, T0rn, Ambient’s Rootkit и другие)rootkit_trojans.txt- сигнатуры троянизированных системных утилит (ls, ps, netstat, ifconfig)
Базы можно обновлять вручную, добавляя собственные записи.
Примеры алертов rootcheck
{
"rule": {
"level": 7,
"description": "Host-based anomaly detection event (rootcheck).",
"id": "510"
},
"full_log": "Rootkit 'Adore' detected by the presence of file '/usr/lib/libt0rn-2.so'."
}{
"rule": {
"level": 7,
"description": "Trojaned version of file detected.",
"id": "510"
},
"full_log": "Trojaned version of file '/usr/bin/ls' detected. Signature used: 'bash|strings|strstrstr'."
}Интеграция с YARA
YARA позволяет создавать правила для обнаружения вредоносного ПО на основе текстовых и бинарных паттернов. Wazuh интегрируется с YARA через механизм Active Response: при обнаружении нового или измененного файла модулем FIM запускается сканирование YARA.
Принцип работы
FIM обнаруживает новый файл -> Алерт syscheck ->
-> Active Response вызывает скрипт YARA -> Сканирование файла ->
-> Результат записывается в лог -> Правило Wazuh генерирует алертУстановка YARA
# Ubuntu/Debian
apt-get install -y yara
# CentOS/RHEL
yum install -y yara
# Проверка установки
yara --versionСкрипт Active Response для YARA
Скрипт размещается на агенте в /var/ossec/active-response/bin/yara.sh:
#!/bin/bash
LOCAL=$(dirname $0)
cd $LOCAL
cd ../
PWD=$(pwd)
LOG_FILE="${PWD}/../logs/active-responses.log"
YARA_PATH="/usr/bin/yara"
YARA_RULES="/var/ossec/etc/rules/yara_rules.yar"
read INPUT_JSON
FILENAME=$(echo $INPUT_JSON | jq -r '.parameters.alert.syscheck.path')
if [ -f "$FILENAME" ]; then
YARA_OUTPUT=$("$YARA_PATH" "$YARA_RULES" "$FILENAME" 2>/dev/null)
if [ ! -z "$YARA_OUTPUT" ]; then
YARA_RULE=$(echo "$YARA_OUTPUT" | awk '{print $1}')
echo "$(date '+%Y/%m/%d %H:%M:%S') active-response/bin/yara.sh: $YARA_OUTPUT" >> ${LOG_FILE}
fi
fi
exit 0Конфигурация Active Response на сервере
<ossec_config>
<command>
<name>yara_scan</name>
<executable>yara.sh</executable>
<timeout_allowed>no</timeout_allowed>
</command>
<active-response>
<command>yara_scan</command>
<location>local</location>
<rules_id>554</rules_id>
</active-response>
</ossec_config>Правила для алертов YARA
<group name="yara,">
<rule id="108000" level="0">
<decoded_as>yara</decoded_as>
<description>YARA grouping rule.</description>
</rule>
<rule id="108001" level="12">
<if_sid>108000</if_sid>
<match>yara.sh</match>
<description>YARA: malware detected - $(yara_rule) in $(yara_file).</description>
<mitre>
<id>T1204</id>
</mitre>
<group>malware,yara,</group>
</rule>
</group>Пример правила YARA
rule Suspicious_Packed_PE
{
meta:
description = "Detects packed PE executables"
author = "Security Team"
severity = "high"
strings:
$mz = { 4D 5A }
$upx = "UPX!" ascii
$aspack = "ASPack" ascii
condition:
$mz at 0 and ($upx or $aspack)
}
rule WebShell_Generic
{
meta:
description = "Detects common web shell patterns"
author = "Security Team"
strings:
$php_eval = "eval($_" ascii nocase
$php_system = "system($_" ascii nocase
$php_exec = "exec($_" ascii nocase
$php_passthru = "passthru(" ascii nocase
$php_base64 = "base64_decode($_" ascii nocase
condition:
2 of them
}Интеграция с VirusTotal
Wazuh интегрируется с VirusTotal через модуль integratord для автоматической проверки хешей файлов, обнаруженных модулем FIM.
Конфигурация integratord
Добавьте в /var/ossec/etc/ossec.conf на сервере Wazuh:
<integration>
<name>virustotal</name>
<api_key>YOUR_VIRUSTOTAL_API_KEY</api_key>
<group>syscheck</group>
<alert_format>json</alert_format>
</integration>Конфигурация FIM для VirusTotal
На стороне агента настройте мониторинг целевых каталогов:
<syscheck>
<directories check_all="yes" realtime="yes">/tmp/downloads</directories>
<directories check_all="yes" realtime="yes">/home/user/Downloads</directories>
<directories check_all="yes" realtime="yes">/var/www/uploads</directories>
</syscheck>Уровни алертов VirusTotal
| Уровень | ID правила | Описание |
|---|---|---|
| 3 | 87101 | Ошибка API (неверный ключ, превышение лимита) |
| 3 | 87102 | Файл не найден в базе VirusTotal |
| 12 | 87105 | Обнаружено вредоносное ПО |
Пример алерта обнаружения
{
"timestamp": "2024-11-17T19:30:25.085+0000",
"rule": {
"level": 12,
"description": "VirusTotal: Alert - /tmp/downloads/malware.exe - 66 engines detected this file",
"id": "87105",
"groups": ["virustotal"]
},
"data": {
"virustotal": {
"positives": "66",
"total": "68",
"scan_date": "2024-11-17 17:15:04",
"sha1": "abc123...",
"source": {
"file": "/tmp/downloads/malware.exe",
"md5": "def456...",
"sha1": "abc123..."
},
"permalink": "https://www.virustotal.com/gui/file/..."
}
},
"location": "virustotal"
}Ограничения API VirusTotal
- Публичный API - 500 запросов в день, 4 запроса в минуту. Не подходит для коммерческого использования.
- Приватный API - увеличенные лимиты и приоритетный доступ (платная подписка).
При превышении лимита integratord автоматически ставит запросы в очередь.
Мониторинг Windows Defender
Wazuh собирает и анализирует события Windows Defender через мониторинг Windows Event Log.
Конфигурация агента
<localfile>
<location>Microsoft-Windows-Windows Defender/Operational</location>
<log_format>eventchannel</log_format>
</localfile>Встроенные правила
Wazuh содержит набор правил для событий Windows Defender:
| ID правила | Уровень | Описание |
|---|---|---|
| 91050 | 3 | Windows Defender: информационное событие |
| 91051 | 6 | Windows Defender: обнаружена угроза |
| 91052 | 12 | Windows Defender: вредоносное ПО не удалено |
| 91053 | 3 | Windows Defender: сканирование выполнено |
Пример алерта Windows Defender
{
"rule": {
"level": 6,
"description": "Windows Defender: Threat detected.",
"id": "91051"
},
"data": {
"win": {
"eventdata": {
"threatName": "Trojan:Win32/Emotet.RPH!MTB",
"severity": "Severe",
"path": "file:_C:\\Users\\admin\\Downloads\\invoice.doc",
"actionStatus": "Quarantined"
}
}
}
}Интеграция с ClamAV
ClamAV - антивирус с открытым исходным кодом. Wazuh анализирует логи ClamAV для генерации алертов при обнаружении вредоносного ПО.
Конфигурация мониторинга логов ClamAV
<localfile>
<log_format>syslog</log_format>
<location>/var/log/clamav/clamav.log</location>
</localfile>Правила для ClamAV
<group name="clamav,">
<rule id="100100" level="0">
<decoded_as>clamav</decoded_as>
<description>ClamAV grouping rule.</description>
</rule>
<rule id="100101" level="6">
<if_sid>100100</if_sid>
<match>FOUND</match>
<description>ClamAV: Malware detected - $(file): $(signature).</description>
<group>malware,clamav,</group>
</rule>
<rule id="100102" level="3">
<if_sid>100100</if_sid>
<match>ERROR</match>
<description>ClamAV: Scan error.</description>
<group>clamav,</group>
</rule>
</group>Автоматическое сканирование через Active Response
Для автоматического запуска ClamAV при обнаружении нового файла:
<command>
<name>clamav_scan</name>
<executable>clamav_scan.sh</executable>
<timeout_allowed>no</timeout_allowed>
</command>
<active-response>
<command>clamav_scan</command>
<location>local</location>
<rules_id>554</rules_id>
</active-response>CDB-списки и индикаторы компрометации
CDB (Constant Database) списки позволяют хранить локальные базы индикаторов компрометации для проверки хешей файлов, IP-адресов и других IoC.
Формат CDB-списка
Файлы CDB хранятся в /var/ossec/etc/lists/ в формате “ключ:значение”:
44d88612fea8a8f36de82e1278abb02f:malware_md5
e3b0c44298fc1c149afbf4c8996fb924:suspicious_hash
275a021bbfb6489e54d471899f7db9d1:eicar_testПодключение CDB-списка
В /var/ossec/etc/ossec.conf на сервере:
<ruleset>
<list>etc/lists/malware_hashes</list>
</ruleset>Правило проверки хешей через CDB
<rule id="100200" level="12">
<if_sid>550,554</if_sid>
<list field="md5" lookup="match_key">etc/lists/malware_hashes</list>
<description>Known malware hash detected: $(file).</description>
<mitre>
<id>T1204</id>
</mitre>
<group>malware,threat_intel,</group>
</rule>Каналы данных об угрозах
Интеграция с MISP
Wazuh может получать IoC из платформы MISP (Malware Information Sharing Platform) и загружать их в CDB-списки:
#!/bin/bash
# Скрипт обновления CDB из MISP
MISP_URL="https://misp.example.com"
MISP_KEY="your_misp_api_key"
OUTPUT="/var/ossec/etc/lists/misp_hashes"
curl -sk -H "Authorization: $MISP_KEY" \
"$MISP_URL/attributes/restSearch/type:md5" | \
jq -r '.response.Attribute[].value' | \
while read hash; do
echo "${hash}:misp_indicator"
done > "$OUTPUT"
# Перезагрузка правил
/var/ossec/bin/wazuh-control reloadИнтеграция с CISA KEV
Загрузка списка известных эксплуатируемых уязвимостей CISA для сопоставления с данными об установленном ПО:
curl -s https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json | \
jq -r '.vulnerabilities[].cveID' | \
while read cve; do
echo "${cve}:cisa_kev"
done > /var/ossec/etc/lists/cisa_kevПользовательские правила обнаружения
Обнаружение майнера
<rule id="100300" level="10">
<if_sid>530</if_sid>
<match>stratum+tcp://|xmrig|minerd|cpuminer</match>
<description>Cryptocurrency miner detected in process or log.</description>
<mitre>
<id>T1496</id>
</mitre>
<group>malware,cryptominer,</group>
</rule>Обнаружение reverse shell
<rule id="100301" level="12">
<if_sid>530</if_sid>
<match>/dev/tcp/|bash -i|nc -e|python -c.*socket|perl -e.*socket</match>
<description>Possible reverse shell detected.</description>
<mitre>
<id>T1059</id>
</mitre>
<group>malware,reverse_shell,attack,</group>
</rule>Обнаружение подозрительного скрипта в /tmp
<rule id="100302" level="8">
<if_sid>554</if_sid>
<field name="file">^/tmp/.*\.(sh|py|pl|rb)$</field>
<description>Script file created in /tmp directory.</description>
<mitre>
<id>T1059</id>
</mitre>
<group>malware,suspicious_file,</group>
</rule>Устранение неполадок
Rootcheck не обнаруживает руткиты
- Проверьте, что rootcheck включен:
<rootcheck>
<disabled>no</disabled>
</rootcheck>- Убедитесь, что файлы сигнатур существуют:
ls -la /var/ossec/etc/shared/rootkit_files.txt
ls -la /var/ossec/etc/shared/rootkit_trojans.txt- Проверьте логи:
grep rootcheck /var/ossec/logs/ossec.log | tail -20VirusTotal integration не работает
- Проверьте API-ключ:
curl -s "https://www.virustotal.com/api/v3/files/44d88612fea8a8f36de82e1278abb02f" \
-H "x-apikey: YOUR_API_KEY" | jq '.data.attributes.last_analysis_stats'- Проверьте логи integratord:
tail -50 /var/ossec/logs/integrations.log- Убедитесь, что integratord запущен:
/var/ossec/bin/wazuh-control status | grep integratordYARA не сканирует файлы
- Убедитесь, что YARA установлен:
yara --version- Проверьте правильность пути к правилам:
ls -la /var/ossec/etc/rules/yara_rules.yar- Протестируйте правило вручную:
yara /var/ossec/etc/rules/yara_rules.yar /path/to/test/file- Проверьте логи Active Response:
tail -20 /var/ossec/logs/active-responses.logВысокая нагрузка при сканировании
- Увеличьте интервал rootcheck:
<rootcheck>
<frequency>86400</frequency>
</rootcheck>- Исключите сетевые файловые системы:
<rootcheck>
<skip_nfs>yes</skip_nfs>
</rootcheck>- Настройте расписание сканирования VirusTotal с учетом лимитов API.
Связанные разделы
- Мониторинг целостности файлов - FIM как основа для обнаружения вредоносного ПО
- Обнаружение уязвимостей - выявление уязвимого ПО, которое может быть использовано малварью
- Компоненты Wazuh - модули агента, участвующие в обнаружении угроз