SIEM Wazuh: полезные API для диагностики

от автора

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

ссылка на оригинал статьи https://habr.com/ru/articles/1052620/