Перейти к основному содержимому
Версия: 4.6.X

ebpf

Процессор eBPF

Процессор ebpf разбирает JSON-события от Tracee — инструмента мониторинга безопасности на основе eBPF. Процессор извлекает информацию о процессах, пользователях, хостах, контейнерах и подах Kubernetes, а также обрабатывает сетевые системные вызовы.

Конфигурация

processors:
- module: ebpf
from: Raw
unquote: false
ПараметрТипПо умолчаниюОписание
fromstringRawПоле события, содержащее JSON от Tracee
unquoteboolfalseСнять экранирование строки перед разбором JSON

Требования к входным данным

Для корректного разбора JSON-документ от Tracee должен содержать:

  • timestamp — время события (наносекунды с epoch)
  • threadStartTime — время запуска потока
  • eventId — идентификатор события
  • eventName — имя события/системного вызова

Если любое из этих полей отсутствует или равно нулю, процессор пропускает событие.

Маппинг полей

Общие поля

Для всех событий Tracee устанавливаются следующие поля:

Поле KOMRADИсточникОписание
CTimetimestampВремя события (из наносекунд)
ECS.Event.KindВсегда event
ECS.Event.ModuleВсегда ebpf
ECS.Service.TypeВсегда ebpf
ECS.Event.OriginalRawИсходный текст события

Поля процесса

Поле KOMRADJSON-поле Tracee
ECS.Process.PIDprocessId
ECS.Process.EntityIDprocessEntityId
ECS.Process.ThreadIDthreadId
ECS.Process.Parent.PIDparentProcessId
ECS.Process.Parent.EntityIDparentEntityId
ECS.Process.Executableexecutable.path
ECS.Process.NameprocessName

Поля пользователя и хоста

Поле KOMRADJSON-поле Tracee
ECS.User.IDuserId
ECS.Host.HostnamehostName

Поля контейнера

Поле KOMRADJSON-поле Tracee
ECS.Container.IDcontainerId
ECS.Container.Namecontainer.name
ECS.Container.ImageNamecontainer.image (до :)
ECS.Container.ImageTagcontainer.image (после :)

Поля Kubernetes

Поле KOMRADJSON-поле Tracee
ECS.Orchestrator.ResourceNamekubernetes.podName
ECS.Orchestrator.ResourceTypeВсегда pod
ECS.Orchestrator.TypeВсегда kubernetes
ECS.Orchestrator.Namespacekubernetes.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}}