Skip to content
ВозможностиДокументацияЦеныПартнёрыPlaygroundFAQ

eBPF Runtime Protection

Kernel-level мониторинг процессов, фильтрация системных вызовов и enforcement сетевых правил через eBPF. Построен на aya 0.13 в Rust.

Обзор

FlowLink использует eBPF (extended Berkeley Packet Filter) для kernel-level мониторинга и защиты. eBPF-программы загружаются в ядро Linux и выполняются в безопасном sandbox, обеспечивая нулевое влияние на производительность при мониторинге и < 1ms задержку при enforcement.

Rust

Язык

aya 0.13 crate

< 1ms

Задержка enforcement

на syscall

4

Программ eBPF

monitor, filter, bastion, audit

Архитектура eBPF

FlowLink eBPF stack состоит из 4 программ, каждая из которых решает свою задачу. Все программы написаны на Rust с использованием aya 0.13 и загружаются через FlowLink daemon.

kprobe

Process Monitor

kprobe на sys_execve, sys_clone и sys_fork для отслеживания создания процессов. Каждый новый процесс логируется с полным контекстом: PID, PPID, UID, GID, command line, cgroup.

rust
1// FlowLink eBPF: Process Monitor (aya 0.13)
2use aya::{programs::KProbe, BpfLoader};
3use aya_log::BpfLogger;
4
5let mut bpf = BpfLoader::new()
6 .set_global("AGENT_PID", &agent_pid)
7 .load(&process_monitor_bytes)?;
8
9let monitor: &mut KProbe = bpf.program_mut("on_execve")
10 .unwrap()
11 .try_into()?;
12
13monitor.load()?;
14monitor.attach()?;
15
16// При каждом execve: логируем PID, command, parent
kprobe + cgroup

Syscall Filter

kprobe на опасных syscalls (open, openat, connect, socket, ptrace) с проверкой через cgroup. Если процесс принадлежит агенту и syscall не разрешён политикой — возвращается -EPERM.

rust
1// FlowLink eBPF: Syscall Filter — dangerous syscall blocking
2#[kprobe]
3pub fn on_openat(ctx: KProbeContext, fd: i32, pathname: *const c_char) -> u32 {
4 let pid = bpf_get_current_pid_tgid() >> 32;
5
6 // Check if process is under FlowLink agent cgroup
7 if !is_agent_cgroup(pid) { return 0; }
8
9 // Read the path being opened
10 let path = read_path(pathname);
11
12 // Check against deny list from FlowLink policy store
13 if is_denied_path(&path) {
14 log_event(pid, "DENY", &path);
15 return -EPERM as u32; // Block the syscall
16 }
17
18 0 // Allow
19}
cgroup socket filter

Network Bastion

cgroup-based socket filter для контроля всех исходящих сетевых подключений. Проверяет destination IP, port и protocol против network policy. Поддерживает IPv4/IPv6.

rust
1// FlowLink eBPF: Network Bastion — outbound connection control
2#[cgroup_sock_ops]
3pub fn on_connect(ctx: SockOpsContext) -> i32 {
4 let pid = bpf_get_current_pid_tgid() >> 32;
5
6 // Only enforce for agent processes
7 if !is_agent_cgroup(pid) { return 0; }
8
9 // Extract destination address and port
10 let (family, daddr, dport) = get_socket_params(ctx);
11
12 // Check against network policy (loaded from FlowLink gateway)
13 if !is_allowed_connection(family, &daddr, dport) {
14 log_network_event(pid, "BLOCK", &daddr, dport);
15 return -EACCES as i32; // Block connection
16 }
17
18 0 // Allow
19}
perf event

Audit Trail

Perf event buffer для передачи всех событий (allow/deny) из ядра в userspace FlowLink daemon. Daemon отправляет события через gRPC на Gateway для хранения и анализа.

Развёртывание

eBPF программы загружаются автоматически при запуске FlowLink daemon. Проверка совместимости ядра, загрузка через aya и attach к cgroup происходят без перезагрузки.

bash
1# Запуск FlowLink с eBPF protection
2$ flowlink-relay daemon --ebpf-enabled
3
4# Проверка статуса eBPF программ
5$ flowlink-relay ebpf status
6 ✅ process_monitor — kprobe on sys_execve (attached)
7 ✅ syscall_filter — kprobe + cgroup (attached)
8 ✅ network_bastion — cgroup socket filter (attached)
9 ✅ audit_trail — perf event buffer (active)
10
11# Проверка заблокированных операций
12$ flowlink-relay ebpf events --since 1h
13 [2026-05-30T14:23:07Z] agent=prod_deployer_01 syscall=openat path=/etc/shadow verdict=BLOCKED
14 [2026-05-30T14:23:12Z] agent=prod_deployer_01 connect=192.168.1.100:5432 verdict=BLOCKED

Требования к ядру

ФичаLinuxОписание
kprobes4.9+Базовая поддержка kprobe
BPF maps4.10+Хранение состояния в ядре
cgroup v24.5+Cgroup-based enforcement
BPF sock_ops4.13+Сетевые фильтры на сокетах
BPF kfunc6.1+Вызов функций ядра из eBPF
CO-RE5.5+Compile Once — Run Everywhere

FlowLink использует CO-RE (Compile Once — Run Everywhere) через aya, что позволяет одной бинарной eBPF программе работать на разных версиях ядра без перекомпиляции.

Интеграция с Shield Engine

eBPF — это Level 3 enforcement в Shield Engine. Если MCP tool call прошёл Credential Vault и Network Bastion, но пытается выполнить запрещённый syscall — eBPF блокирует его на уровне ядра.

Сценарий блокировки

bash
1# Агент пытается прочитать /etc/shadow через MCP tool
2$ flowlink-relay mcp --tool filesystem_read --path /etc/shadow
3
4# Shield Engine pipeline:
5[1] Parser → tool=filesystem_read, path=/etc/shadow ✓
6[2] Schema Valid → params valid ✓
7[3] Policy Engine → DENY: /etc/shadow not in allowed_paths ✗
8[4] Credential Vault→ access denied (readonly role) ✗
9[5] Network Bastion → N/A ✓
10[6] eBPF Monitor → pending...
11[7] Decision → BLOCKED
12
13# Результат:
14❌ MCP tool call blocked by Shield Engine (policy + credential)
15📋 Audit log: evt_9d4e7f2a — "filesystem_read /etc/shadow BLOCKED"
16🔔 Alert sent to security team via Telegram webhook

Подробнее: MCP Shield Engine → · Политики →

Edit this page