Wazuh - это бесплатная платформа класса XDR (Extended Detection and Response), которая сочетает в себе функции SIEM (Security Information and Event Management) и защиты конечных точек. Решение предназначено для мониторинга безопасности инфраструктуры: от локальных серверов до облачных сред.

Задача № 0

Шум в логах и тысячи false positive'ных алертов - это то, с чем сталкивается каждый SoC-инженер при работе с Wazuh в начале пути. Вендор и коммьюнити рекомендует решать проблему разработкой своих localrules или переопределением родительских правил (при условии твердого и четкого понимания того, что вы делаете).

Но как определить источники шума? Лучше всего использовать API-запросы

Как работать с API?

Есть два способа: через CLI на сервере, либо через Wazuh Dashboard. В первом случае вам понадобится api-token, api-user и api-password (о том, где это найти можно прочитать здесь). Во втором случае: переходим в контекстное меню -> вкладка "Indexer management -> "Dev Tools"

Что делать дальше?

Я не буду останавливаться на подробном рассмотрении синтаксиса (ссылка на документацию в конце статьи). Вместо этого предлагаю вам попробовать мои API-запросы, которые я разработал для себя и использую в повседневной работе. Их основная задача - поиск и диагностика шума на сервере и на стороне агентов.

Общая логика запроса следующая:

POST /wazuh-alerts*/_search
{
  "size": 0,
  "query": {
    "bool": {
      "must": [
        {"term": {"агент_поле": "значение"}},
        {"term": {"правило_поле": "значение"}},
        {"range": {
          "timestamp": {
            "gte": "now-1h"
          }
        }}
      ],
      "must_not": [
        {"term": {"data.win.eventdata.поле": "исключение"}}
      ]
    }
  },
  "aggs": {
    "top_field": {
      "terms": {
        "field": "data.win.eventdata.поле_для_агрегации",
        "size": 20,
        "order": { "_count": "desc" }
      }
    }
  }
}

Примечание: некоторые запросы могут возвращать 500-ю ошибку. Обычно это связано с версией SIEM. В этой ситуации рекомендуется обновиться или их скорректировать, обратившись к документации

  1. Топ самых шумных правил (глобально)

POST /wazuh-alerts*/_search
{
  "size": 0,
  "aggs": {
    "noisy_rules": {
      "terms": {
        "field": "rule.id",
        "size": 20,
        "order": { "_count": "desc" }
      }
    }
  }
}
Отлично помогает когда ты только-только запустил мониторинг, потому что на старте события генерируются в промышленных масштабах
Отлично помогает когда ты только-только запустил мониторинг, потому что на старте события генерируются в промышленных масштабах

2. Топ шумных правил для конкретного агента

POST /wazuh-alerts*/_search
{
  "size": 0,
  "query": {
    "term": {
      "agent.name": "BC-DC-01"
    }
  },
  "aggs": {
    "noisy_rules": {
      "terms": {
        "field": "rule.id",
        "size": 20,
        "order": { "_count": "desc" }
      }
    }
  }
}
Помогает когда агент часто получает статус  "Agent flooded. Check configuration" (rule.id 204)
Помогает когда агент часто получает статус "Agent flooded. Check configuration" (rule.id 204)

3. Топ шумных пользователей

POST /wazuh-alerts*/_search
{
  "size": 0,
  "aggs": {
    "noisy_users": {
      "terms": {
        "field": "data.win.eventdata.targetUserName",
        "size": 20,
        "order": { "_count": "desc" }
      }
    }
  }
}
В данном случае фолспозитивные алерты генерирует служебная учетка, которой забыли прописать SPN. Ниже - юзерская активность
В данном случае фолспозитивные алерты генерирует служебная учетка, которой забыли прописать SPN. Ниже - юзерская активность

4. Топ шумных IP-адресов

POST /wazuh-alerts*/_search
{
  "size": 0,
  "aggs": {
    "noisy_ips": {
      "terms": {
        "field": "data.win.eventdata.ipAddress",
        "size": 20,
        "order": { "_count": "desc" }
      }
    }
  }
}
Выручает, когда сисадмины жалуются на высокий сетевой трафик и нагрузку, но не всегда могут найти источник
Выручает, когда сисадмины жалуются на высокий сетевой трафик и нагрузку, но не всегда могут найти источник

5. Анализ конкретного правила (на примере rule.id = "60229" (изменения AD))

POST /wazuh-alerts*/_search
{
  "size": 0,
  "query": {
    "bool": {
      "must": [
        {"term": {"rule.id": 60229}},
        {"term": {"agent.name": "BC-DC-01"}}
      ]
    }
  },
  "aggs": {
    "top_objects": {
      "terms": {
        "field": "data.win.eventdata.objectDN",
        "size": 10
      }
    },
    "top_attributes": {
      "terms": {
        "field": "data.win.eventdata.attributeLDAPDisplayName",
        "size": 10
      }
    },
    "top_users": {
      "terms": {
        "field": "data.win.eventdata.subjectUserName",
        "size": 10
      }
    }
  }
}
В данном случае пусто, потому что я намеренно снизил уровень этих оповещений. Искать можно по любому rule.id
В данном случае пусто, потому что я намеренно снизил уровень этих оповещений. Искать можно по любому rule.id

6. Анализ неудачных входов

 POST /wazuh-alerts*/_search
{
  "size": 0,
  "query": {
    "term": {
      "rule.id": 60122
    }
  },
  "aggs": {
    "top_users": {
      "terms": {
        "field": "data.win.eventdata.targetUserName",
        "size": 10
      }
    },
    "top_ips": {
      "terms": {
        "field": "data.win.eventdata.ipAddress",
        "size": 10
      }
    },
    "by_status": {
      "terms": {
        "field": "data.win.eventdata.status",
        "size": 10
      }
    }
  }
}
В практике реальный брутфорс - редко, а вот забытые службы или скрипты на старых паролях - чаще всего
В практике реальный брутфорс - редко, а вот забытые службы или скрипты на старых паролях - чаще всего

7. Топ шумных правил с уровнем >= 5

POST /wazuh-alerts*/_search
{
  "size": 0,
  "query": {
    "range": {
      "rule.level": {
        "gte": 5
      }
    }
  },
  "aggs": {
    "noisy_rules": {
      "terms": {
        "field": "rule.id",
        "size": 20,
        "order": { "_count": "desc" }
      }
    }
  }
}
Базовая аналитика
Базовая аналитика

Это только самые ходовые запросы. Изучив синтаксис API, вы можете кастомизировать их под конкретную задачу. Надеюсь, статья будет дял вас полезной и позволит сэкономить время на этапах работы с SIEM

Источники: Ф

  1. Официальный сайт вендора - https://wazuh.com/

  2. Документация по Syntax Rule - https://documentation.wazuh.com/current/user-manual/ruleset/ruleset-xml-syntax/rules.html

  3. Документация по API - https://documentation.wazuh.com/current/user-manual/api/reference.html

Комментарии (0)