Написание правил обнаружения угроз

Движок обнаружения SecureExec оценивает входящие события по вашему набору правил в режиме реального времени. При совпадении правила генерируется событие Detection с уровнем серьёзности и сохраняется вместе с исходной телеметрией в Elasticsearch. В этой статье разбирается написание эффективных правил для распространённых сценариев угроз.

Структура события обнаружения

Событие обнаружения содержит:

  • rule_name — имя сработавшего правила
  • severity — одно из значений: low, medium, high, critical
  • description — описание на человеческом языке
  • source_event_ids — идентификаторы исходных событий, вызвавших обнаружение
  • process_uid — задействованный процесс

Идентификаторы исходных событий позволяют напрямую перейти от обнаружения к сырым событиям в консоли событий.

Пример: обнаружение веб-шелла

Веб-шелл часто проявляется как порождение шелла веб-сервером (nginx, apache, gunicorn). Правило для этого паттерна:

name: webshell_spawn
severity: critical
description: Веб-сервер породил дочерний шелл
match:
  event_type: process_create
  parent_process_name:
    - nginx
    - apache2
    - gunicorn
    - httpd
  process_name:
    - sh
    - bash
    - zsh
    - python
    - perl

Пример: обнаружение исходящих подключений на нестандартных портах

Вредоносное ПО часто связывается с управляющим сервером через нестандартные порты, чтобы обойти простые правила брандмауэра:

name: unusual_outbound_port
severity: medium
description: Процесс установил исходящее соединение на нестандартном порту
match:
  event_type: net_connect
  dst_port:
    not_in: [80, 443, 22, 53, 25, 587, 993]
  process_name:
    not_in: [curl, wget, apt, yum, pip]

Пример: обнаружение доступа к файлам учётных данных

Обращение к /etc/shadow или .ssh/id_rsa за пределами ожидаемых системных процессов — явный признак перехвата учётных данных:

name: credential_file_read
severity: high
description: Файл учётных данных открыт неожиданным процессом
match:
  event_type: file_modify
  path:
    - /etc/shadow
    - /etc/passwd
    - "**/.ssh/id_rsa"
    - "**/.ssh/authorized_keys"
  process_name:
    not_in: [passwd, sshd, sudo]

Рекомендации по уровням серьёзности

УровеньКогда применять
lowАномалия, но распространённый шум; используйте для базирования
mediumПодозрительная активность, требующая расследования
highЯвный признак компрометации; оповестите дежурного
criticalАктивная атака; немедленное реагирование

Поиск обнаружений в Elasticsearch

Все события обнаружения индексируются в secureexec-events-{org_id} с event_type: detection. Поиск всех критических обнаружений за последние 24 часа:

{
  "query": {
    "bool": {
      "must": [
        { "term": { "event_type": "detection" } },
        { "term": { "severity": "critical" } },
        { "range": { "@timestamp": { "gte": "now-24h" } } }
      ]
    }
  }
}

Используйте консоль событий в веб-приложении для визуального выполнения этих запросов с фильтрацией по тексту и временному диапазону.