ebpf
Процессор eBPF
Процессор ebpf разбирает JSON-события от Tracee — инструмента мониторинга безопасности на основе eBPF. Процессор извлекает информацию о процессах, пользователях, хостах, контейнерах и подах Kubernetes, а также обрабатывает сетевые системные вызовы.
Конфигурация
processors:
- module: ebpf
from: Raw
unquote: false
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
from | string | Raw | Поле события, содержащее JSON от Tracee |
unquote | bool | false | Снять экранирование строки перед разбором JSON |
Требования к входным данным
Для корректного разбора JSON-документ от Tracee должен содержать:
timestamp— время события (наносекунды с epoch)threadStartTime— время запуска потокаeventId— идентификатор событияeventName— имя события/системного вызова
Если любое из этих полей отсутствует или равно нулю, процессор пропускает событие.
Маппинг полей
Общие поля
Для всех событий Tracee устанавливаются следующие поля:
| Поле KOMRAD | Источник | Описание |
|---|---|---|
CTime | timestamp | Время события (из наносекунд) |
ECS.Event.Kind | — | Всегда event |
ECS.Event.Module | — | Всегда ebpf |
ECS.Service.Type | — | Всегда ebpf |
ECS.Event.Original | Raw | Исходный текст события |
Поля процесса
| Поле KOMRAD | JSON-поле Tracee |
|---|---|
ECS.Process.PID | processId |
ECS.Process.EntityID | processEntityId |
ECS.Process.ThreadID | threadId |
ECS.Process.Parent.PID | parentProcessId |
ECS.Process.Parent.EntityID | parentEntityId |
ECS.Process.Executable | executable.path |
ECS.Process.Name | processName |
Поля пользователя и хоста
| Поле KOMRAD | JSON-поле Tracee |
|---|---|
ECS.User.ID | userId |
ECS.Host.Hostname | hostName |
Поля контейнера
| Поле KOMRAD | JSON-поле Tracee |
|---|---|
ECS.Container.ID | containerId |
ECS.Container.Name | container.name |
ECS.Container.ImageName | container.image (до :) |
ECS.Container.ImageTag | container.image (после :) |
Поля Kubernetes
| Поле KOMRAD | JSON-поле Tracee |
|---|---|
ECS.Orchestrator.ResourceName | kubernetes.podName |
ECS.Orchestrator.ResourceType | Всегда pod |
ECS.Orchestrator.Type | Всегда kubernetes |
ECS.Orchestrator.Namespace | kubernetes.podNamespace |
Обработка сетевых событий
Процессор дополнительно обрабатывает сетевые системные вызовы, извлекая информацию об адресах и портах:
Входящие соединения (direction = ingress): accept, accept4, recvfrom, recvmsg, recvmmsg, security_socket_accept
Исходящие соединения (direction = egress): connect, sendto, sendmsg, sendmmsg, security_socket_connect
Для этих событий извлекаются поля ECS.Source.Address, ECS.Source.Port, ECS.Destination.Address, ECS.Destination.Port и ECS.Network.Direction.
Сетевые пакеты: net_packet_ipv4, net_packet_ipv6, net_packet_tcp, net_packet_udp, net_packet_icmp, net_packet_icmpv6, net_packet_dns, net_packet_dns_request, net_packet_dns_response, net_packet_http, net_packet_http_request, net_packet_http_response
Для этих событий адреса и порты извлекаются из аргументов src, dst, src_port, dst_port.
Пример
processors:
- module: ebpf
from: Raw
Исходное событие:
{"timestamp":1705312245000000000,"threadStartTime":1705312200000000000,"processorId":0,"processId":1234,"threadId":1234,"parentProcessId":1000,"hostProcessId":1234,"hostThreadId":1234,"hostParentProcessId":1000,"userId":1000,"processName":"curl","executable":{"path":"/usr/bin/curl"},"hostName":"worker-01","containerId":"abc123","container":{"name":"web-app","image":"nginx:1.25"},"kubernetes":{"podName":"web-app-7d4f8b6c9-x2k5m","podNamespace":"production"},"eventId":"42","eventName":"connect","args":[{"name":"addr","type":"struct sockaddr*","value":{"sa_family":"AF_INET","sin_addr":"10.0.0.1","sin_port":"443"}}],"argsNum":1,"returnValue":0,"stackAddresses":[],"contextFlags":{"containerStarted":true,"isCompat":false}}