Обнаружение вредоносного ПО в Wazuh 4.14

Wazuh использует многоуровневый подход к обнаружению вредоносного программного обеспечения. Вместо единственного антивирусного движка платформа объединяет несколько методов детекции: обнаружение руткитов модулем rootcheck, сигнатурный анализ через YARA, проверку хешей файлов в VirusTotal, мониторинг логов сторонних антивирусов и пользовательские правила на основе индикаторов компрометации (IoC).

Методы обнаружения

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

  1. FIM с правилами детекции - мониторинг целостности файлов в сочетании с правилами обнаружения угроз
  2. Rootcheck - обнаружение руткитов и троянов через анализ поведения и сигнатуры
  3. CDB-списки - проверка хешей и IoC по локальным базам данных
  4. VirusTotal - автоматическая проверка хешей файлов через API VirusTotal
  5. YARA - паттерн-ориентированное сканирование файлов
  6. ClamAV - мониторинг логов антивируса ClamAV
  7. Windows Defender - анализ событий Windows Defender
  8. Пользовательские правила 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 правилаОписание
387101Ошибка API (неверный ключ, превышение лимита)
387102Файл не найден в базе VirusTotal
1287105Обнаружено вредоносное ПО

Пример алерта обнаружения

{
  "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 правилаУровеньОписание
910503Windows Defender: информационное событие
910516Windows Defender: обнаружена угроза
9105212Windows Defender: вредоносное ПО не удалено
910533Windows 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 не обнаруживает руткиты

  1. Проверьте, что rootcheck включен:
<rootcheck>
  <disabled>no</disabled>
</rootcheck>
  1. Убедитесь, что файлы сигнатур существуют:
ls -la /var/ossec/etc/shared/rootkit_files.txt
ls -la /var/ossec/etc/shared/rootkit_trojans.txt
  1. Проверьте логи:
grep rootcheck /var/ossec/logs/ossec.log | tail -20

VirusTotal integration не работает

  1. Проверьте API-ключ:
curl -s "https://www.virustotal.com/api/v3/files/44d88612fea8a8f36de82e1278abb02f" \
  -H "x-apikey: YOUR_API_KEY" | jq '.data.attributes.last_analysis_stats'
  1. Проверьте логи integratord:
tail -50 /var/ossec/logs/integrations.log
  1. Убедитесь, что integratord запущен:
/var/ossec/bin/wazuh-control status | grep integratord

YARA не сканирует файлы

  1. Убедитесь, что YARA установлен:
yara --version
  1. Проверьте правильность пути к правилам:
ls -la /var/ossec/etc/rules/yara_rules.yar
  1. Протестируйте правило вручную:
yara /var/ossec/etc/rules/yara_rules.yar /path/to/test/file
  1. Проверьте логи Active Response:
tail -20 /var/ossec/logs/active-responses.log

Высокая нагрузка при сканировании

  1. Увеличьте интервал rootcheck:
<rootcheck>
  <frequency>86400</frequency>
</rootcheck>
  1. Исключите сетевые файловые системы:
<rootcheck>
  <skip_nfs>yes</skip_nfs>
</rootcheck>
  1. Настройте расписание сканирования VirusTotal с учетом лимитов API.

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

Last updated on