Wazuh — это платформа для мониторинга безопасности, обнаружения угроз и управления инцидентами в ИТ-инфраструктуре. Мы уже рассказывали про интеграцию Wazuh с MISP. Сегодня расскажу о том, как использовать технологию eBPF для эффективного мониторинга сетевых соединений с помощью Wazuh.
Еще по теме: Rsyslog для передачи событий Windows в Wazuh
Что такое Wazuh и eBPF
Wazuh предоставляет комплексное решение для мониторинга безопасности, обнаружения угроз и реагирования на инциденты. Wazuh объединяет функции анализа журналов, обнаружения вторжений, мониторинга целостности файлов и оценки уязвимостей в единую систему.
eBPF (extended Berkeley Packet Filter) — это технология в ядре Linux, которая позволяет запускать изолированный код в привилегированном контексте ядра. Она обеспечивает безопасный и эффективный способ расширения функциональности ядра без изменения его исходного кода или перезагрузки системы. eBPF широко используется для трассировки, мониторинга производительности, сетевой фильтрации и обеспечения безопасности в современных системах Linux.
Мониторинг соединений с Wazuh и eBPF
Для достижения нашей цели необходимо изменим утилиту tcptracer, чтобы она взаимодействовала с сокетом Wazuh, что позволит отслеживать функции ядра, отвечающие за установку, прием и закрытие TCP-соединений.
Для начала нам понадобятся установленные BCC и bpfcc, а также агент Wazuh для Linux.
Начнем с настройки агента Wazuh и eBPF. Для этого скачаем скрипт WazuheBPFTCPTracer:
1 2 |
curl -so /home/vagrant/WazuheBPFTCPTracer https://gist.githubusercontent.com/elwali10/412c1176a3c24ccb84fba5fefa4e8503/raw/a974e26600503bf0a41842a4493dcdcd169dea09/WazuheBPFTCPTracer.py chmod go+x /home/vagrant/WazuheBPFTCPTracer |
Настроим его как сервис:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
touch /etc/systemd/system/WazuheBPFTCPTracer.service # Добавим следующее содержимое [Unit] Description=WazuheBPFTCPTracer [Service] ExecStart=/home/vagrant/WazuheBPFTCPTracer [Install] WantedBy=multi-user.target # Активируем и запустим сервис systemctl daemon-reload systemctl enable WazuheBPFTCPTracer systemctl start WazuheBPFTCPTracer systemctl status WazuheBPFTCPTracer |
Теперь настроим Wazuh Manager и Dashboard. Для обработки событий нужно добавить декодеры, правила и пайплайн
Декодеры, правила и пайплайн — это ключевые компоненты в системах обработки данных и безопасности. Декодеры преобразуют сырые данные в структурированный формат, правила определяют условия для анализа этих данных и выявления важных событий, а пайплайн представляет собой полную последовательность этапов обработки, включающую сбор, декодирование, применение правил и анализ данных.
Добавьте декодеры и правила в соответствующие конфигурационные файлы Wazuh.
Декодеры:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
<decoder name="eBPFTCP"> <prematch>TCP Connection:</prematch> </decoder> <decoder name="eBPFTCP1"> <parent>eBPFTCP</parent> <regex>PID: (\d*) </regex> <order>PID</order> </decoder> <decoder name="eBPFTCP1"> <parent>eBPFTCP</parent> <regex>ProcessName: (\.*) </regex> <order>ProcessName</order> </decoder> <decoder name="eBPFTCP1"> <parent>eBPFTCP</parent> <regex>IPVersion: (\d*) </regex> <order>IPVersion</order> </decoder> <decoder name="eBPFTCP1"> <parent>eBPFTCP</parent> <regex>SourceAddress: (\d+.\d+.\d+.\d+) </regex> <order>scrip</order> </decoder> <decoder name="eBPFTCP1"> <parent>eBPFTCP</parent> <regex>DestinationAddress: (\d+.\d+.\d+.\d+) </regex> <order>destip</order> </decoder> <decoder name="eBPFTCP1"> <parent>eBPFTCP</parent> <regex>SourcePort: (\d*) </regex> <order>SourcePort</order> </decoder> <decoder name="eBPFTCP1"> <parent>eBPFTCP</parent> <regex>DestinationPort: (\d*) </regex> <order>DestinationPort</order> </decoder> |
Правила:
1 2 3 4 5 6 7 8 |
<group name="eBPFTCP"> <rule id="120000" level="3"> <decoded_as>eBPFTCP</decoded_as> <description> TCP Connection Established </description> </rule> </group> |
Затем добавьте пайплайн на сервере Wazuh в файл:
1 |
/usr/share/filebeat/module/wazuh/alerts/ingest/pipeline.json |
Пайплайн:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
{ "description": "Wazuh alerts pipeline", "processors": [ { "json" : { "field" : "message", "add_to_root": true } }, { "geoip": { "field": "data.srcip", "target_field": "GeoLocation", "properties": ["city_name", "country_name", "region_name", "location"], "ignore_missing": true, "ignore_failure": true } }, { "geoip": { "field": "data.destip", "target_field": "GeoLocation", "properties": ["city_name", "country_name", "region_name", "location"], "ignore_missing": true, "ignore_failure": true } }, { "geoip": { "field": "data.win.eventdata.ipAddress", "target_field": "GeoLocation", "properties": ["city_name", "country_name", "region_name", "location"], "ignore_missing": true, "ignore_failure": true } }, { "geoip": { "field": "data.aws.sourceIPAddress", "target_field": "GeoLocation", "properties": ["city_name", "country_name", "region_name", "location"], "ignore_missing": true, "ignore_failure": true } }, { "geoip": { "field": "data.gcp.jsonPayload.sourceIP", "target_field": "GeoLocation", "properties": ["city_name", "country_name", "region_name", "location"], "ignore_missing": true, "ignore_failure": true } }, { "geoip": { "field": "data.office365.ClientIP", "target_field": "GeoLocation", "properties": ["city_name", "country_name", "region_name", "location"], "ignore_missing": true, "ignore_failure": true } }, { "date": { "field": "timestamp", "target_field": "@timestamp", "formats": ["ISO8601"], "ignore_failure": false } }, { "date_index_name": { "field": "timestamp", "date_rounding": "d", "index_name_prefix": "{{fields.index_prefix}}", "index_name_format": "yyyy.MM.dd", "ignore_failure": false } }, { "remove": { "field": "message", "ignore_missing": true, "ignore_failure": true } }, { "remove": { "field": "ecs", "ignore_missing": true, "ignore_failure": true } }, { "remove": { "field": "beat", "ignore_missing": true, "ignore_failure": true } }, { "remove": { "field": "input_type", "ignore_missing": true, "ignore_failure": true } }, { "remove": { "field": "tags", "ignore_missing": true, "ignore_failure": true } }, { "remove": { "field": "count", "ignore_missing": true, "ignore_failure": true } }, { "remove": { "field": "@version", "ignore_missing": true, "ignore_failure": true } }, { "remove": { "field": "log", "ignore_missing": true, "ignore_failure": true } }, { "remove": { "field": "offset", "ignore_missing": true, "ignore_failure": true } }, { "remove": { "field": "type", "ignore_missing": true, "ignore_failure": true } }, { "remove": { "field": "host", "ignore_missing": true, "ignore_failure": true } }, { "remove": { "field": "fields", "ignore_missing": true, "ignore_failure": true } }, { "remove": { "field": "event", "ignore_missing": true, "ignore_failure": true } }, { "remove": { "field": "fileset", "ignore_missing": true, "ignore_failure": true } }, { "remove": { "field": "service", "ignore_missing": true, "ignore_failure": true } } ], "on_failure" : [{ "drop" : { } }] } |
После внесения изменений перезапустите менеджер Wazuh и обновите пайплайны:
1 2 |
systemctl restart wazuh-manager filebeat setup --pipelines |
Импортируйте готовые дашборды с GitHub в панели управления Wazuh. Делается это на вкладке Management —> StackManagement —> Import.
Теперь система готова к работе. Любые действия, устанавливающие TCP-соединения, будут отслеживаться. Например:
1 2 3 |
wget google.com systemctl restart wazuh-agent apt-get update |
Используя возможности eBPF, можно эффективно собирать данные о TCP-соединениях, что позволяет с минимальными затратами ресурсов определять местоположение и получать другую информацию о сетевых событиях.
ПОЛЕЗНЫЕ ССЫЛКИ:
- Установка OpenCTI в Docker
- Защита сети с Wazuh на Raspberry Pi
- Лучшие сервисы Threat Intelligence для SOC