В этой небольшой статье покажу, как использовать Logstash для обнаружения одиночных или множественных предупреждений в логах и добавления соответствующего поля.
Еще по теме: Защита от уязвимости Log4Shell
Что такое Logstash
Logstash — это инструмент для сбора, обработки и передачи данных в реальном времени, который является частью стека Elastic Stack. Он принимает данные из различных источников, таких как логи, метрики и сетевые потоки, обрабатывает их с помощью фильтров и отправляет в хранилище данных, например, в Elasticsearch.
Logstash поддерживает множество форматов данных и протоколов, что делает его гибким и мощным решением для агрегации и обработки больших объемов информации в системах мониторинга и анализа.
Тестирование фильтров Logstash перед внедрением
Представим, что у нас есть два JSON-файла с логами. Один содержит множественные предупреждения, а другой — одиночное. Вот как они выглядят:
Файл с множественными предупреждениями (multivaluewarn.json):
1 |
{"waf": {"ver": "2.0","warnRules": "3000030;3000057;950001;950109;959073;973335;981173;981244;981318","denyMsg": "Anomaly Score Exceeded for SQL Injection","denyActions": "3","warnMsg": "Basic SQL Authentication Bypass Attempts 3/3;Cross-site Scripting (XSS) common keywords;SQL Injection Attack;Multiple URL Encoding Detected;SQL Injection Attack;IE XSS Filters - Attack Detected;Restricted SQL Character Anomaly Detection Alert - Total # of special characters exceeded;Basic SQL Authentication Bypass Attempts 1/3;SQL Injection Attack: Common Injection Testing Detected"}} |
Файл с одиночным предупреждением (singlevaluewarn.json):
1 |
{"waf": {"ver": "2.0","warnRules": "681984","policy": "api_89894","warnMsg": "Alert rq without DEVICEID header","warnTags": "DEVICEID_Detection","warnActions": "2"}} |
Заметим, что в поле [waf][warnMsg] предупреждения разделяются точкой с запятой ( ;) в случае множественных предупреждений.
Теперь создадим конфигурацию для Logstash, которая будет обрабатывать эти логи:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
input { stdin { codec => json } } filter { if ";" in [waf][warnMsg]{ mutate { add_field => [ "wafWarningMSG", "multi warnings" ] } } else { mutate { add_field => [ "wafWarningMSG", "single" ] } } } |
Сохраним эту конфигурацию в файл warningPipeline.conf и запустим Logstash с этой конфигурацией:
1 |
/usr/share/logstash/bin/logstash -f warningPipeline.config < multivaluewarn.json |
В результате мы увидим новое поле wafWarningMSG со значением multi warnings:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
{ "@timestamp" => 2022-09-20T13:46:13.355Z, "@version" => "1", "host" => "localhost.localdomain", "waf" => { "denyActions" => "3", "ver" => "2.0", "warnMsg" => "Basic SQL Authentication Bypass Attempts 3/3;Cross-site Scripting (XSS) common keywords;SQL Injection Attack;Multiple URL Encoding Detected;SQL Injection Attack;IE XSS Filters - Attack Detected;Restricted SQL Character Anomaly Detection Alert - Total # of special characters exceeded;Basic SQL Authentication Bypass Attempts 1/3;SQL Injection Attack: Common Injection Testing Detected", "warnRules" => "3000030;3000057;950001;950109;959073;973335;981173;981244;981318", "denyMsg" => "Anomaly Score Exceeded for SQL Injection" }, "wafWarningMSG" => "multi warnings" } |
Эта конфигурация позволяет легко определять, содержит ли лог одиночное или множественные предупреждения. Это может быть полезно для дальнейшего анализа и обработки логов, например, для приоритизации событий безопасности или для более детального исследования множественных предупреждений.
ПОЛЕЗНЫЕ ССЫЛКИ:
- Защита локальной сети используя Wazuh на Raspberry Pi
- Установка и использование MISP для защиты от киберугроз
- Использование Rsyslog для передачи событий Windows в Wazuh