🔥 Пост 5 — Расследование eBPF-руткита (пошагово для SOC)
Разберем потенциальную ситуацию с конями 🐴 в вакуме, коротко: web-приложение с RCE → payload в /tmp → загрузили eBPF-программу, которая вешала хуки на vfs_read и tcp_sendmsg, перехватывала данные и маскировала трафик. Tetragon — триггер, SIEM — корреляция, IR — containment → forensics → remediation.
1) Первичный сигнал (Tetragon)
Сработали сразу 2 алерта:
Пример лога Tetragon (JSON):
{
"time":"2025-11-06T03:42:10Z",
"event":"exec",
"process": {"pid":4123,"ppid":2890,"exe":"/tmp/.kworker","args":["/tmp/.kworker"],"user":"www-data"},
"container":{"id":"c9a3...","name":"web-frontend-3","pod":"web-frontend-3"},
"policy":"exec-in-tmp"
}
{
"time":"2025-11-06T03:42:12Z",
"event":"bpf_load",
"process":{"pid":4123,"exe":"/tmp/.kworker"},
"bpf":{"type":"kprobe","target":"vfs_read,tcp_sendmsg","id":57}
}
2) Быстрая корреляция в SIEM (KQL пример)
Найти события, связанные по PID и тайм-винду ±2 мин:
(event.dataset:"tetragon.exec" AND process.pid:4123)
OR (event.dataset:"tetragon.bpf" AND process.pid:4123)
OR (event.dataset:"tetragon.net" AND process.pid:4123)
| sort by @timestamp desc
Цепочка: exec (/tmp/.kworker) → bpf_load → connect(dst=185.41.23.22:443) → vfs_read hooks observed.
3) Немедленные действия (Containment — 0–15 минут)
1. Изоляция хоста/контейнера: kubectl cordon / docker pause / применить NetworkPolicy: block egress.
2. Блокировать egress на FW/NGW: по IP/портам, которые выявлены.
3. Не рестартить хост/контейнер (чтобы не потерять артефакты).
4. Снять список процессов и сетевых соединений:
5. Сохранить бинарник
cp /tmp/.kworker /srv/forensics/host123/.kworker.bin
sha256sum /srv/forensics/host123/.kworker.bin
4) Forensics: eBPF артефакты и анализ (15–90 минут)
a) bpftool — ревизия eBPF
# показать проги
bpftool prog show
# найти id по PID/attach type
bpftool prog show | grep 4123 -B4 -A4
# дамп xlated/btf
bpftool prog dump xlated id 57 > /srv/forensics/host123/bpf_prog_57.txt
bpftool map show > /srv/forensics/host123/bpf_maps.txt
b) анализ программы
❗️bpftool prog dump xlated — читабельный IR, ищем строки вроде kprobe__vfs_read, kprobe__tcp_sendmsg.
❗️strings /tmp/.kworker — ищем URL/домены/C2-хэши.
❗️readelf -h /tmp/.kworker / file /tmp/.kworker — тип файла, UPX-packed
c) поиск persistence
❕Проверить crontab, systemd units, init scripts.
❕Проверить /etc/ld.so.preload, ~/.bashrc, контейнер image layers.
d) память (если возможно)
➡️gcore или procdump / gdb для дампа процесса.
➡️Сохраняем /proc//maps, /proc//fd.
#nasoc #ebpf #tetragon #forensics #incidentresponse #linuxsecurity
Разберем потенциальную ситуацию с конями 🐴 в вакуме, коротко: web-приложение с RCE → payload в /tmp → загрузили eBPF-программу, которая вешала хуки на vfs_read и tcp_sendmsg, перехватывала данные и маскировала трафик. Tetragon — триггер, SIEM — корреляция, IR — containment → forensics → remediation.
1) Первичный сигнал (Tetragon)
Сработали сразу 2 алерта:
1️⃣exec-in-tmp — /tmp/.kworker запущен от nginx (PID 4123), container web-frontend-3
2️⃣ bpf-load — bpf(BPF_PROG_LOAD) от PID 4123
Пример лога Tetragon (JSON):
{
"time":"2025-11-06T03:42:10Z",
"event":"exec",
"process": {"pid":4123,"ppid":2890,"exe":"/tmp/.kworker","args":["/tmp/.kworker"],"user":"www-data"},
"container":{"id":"c9a3...","name":"web-frontend-3","pod":"web-frontend-3"},
"policy":"exec-in-tmp"
}
{
"time":"2025-11-06T03:42:12Z",
"event":"bpf_load",
"process":{"pid":4123,"exe":"/tmp/.kworker"},
"bpf":{"type":"kprobe","target":"vfs_read,tcp_sendmsg","id":57}
}
2) Быстрая корреляция в SIEM (KQL пример)
Найти события, связанные по PID и тайм-винду ±2 мин:
(event.dataset:"tetragon.exec" AND process.pid:4123)
OR (event.dataset:"tetragon.bpf" AND process.pid:4123)
OR (event.dataset:"tetragon.net" AND process.pid:4123)
| sort by @timestamp desc
Цепочка: exec (/tmp/.kworker) → bpf_load → connect(dst=185.41.23.22:443) → vfs_read hooks observed.
3) Немедленные действия (Containment — 0–15 минут)
1. Изоляция хоста/контейнера: kubectl cordon / docker pause / применить NetworkPolicy: block egress.
2. Блокировать egress на FW/NGW: по IP/портам, которые выявлены.
3. Не рестартить хост/контейнер (чтобы не потерять артефакты).
4. Снять список процессов и сетевых соединений:
ps auxf | grep 4123
ss -tunap | grep 4123
lsof -p 4123
5. Сохранить бинарник
cp /tmp/.kworker /srv/forensics/host123/.kworker.bin
sha256sum /srv/forensics/host123/.kworker.bin
4) Forensics: eBPF артефакты и анализ (15–90 минут)
a) bpftool — ревизия eBPF
# показать проги
bpftool prog show
# найти id по PID/attach type
bpftool prog show | grep 4123 -B4 -A4
# дамп xlated/btf
bpftool prog dump xlated id 57 > /srv/forensics/host123/bpf_prog_57.txt
bpftool map show > /srv/forensics/host123/bpf_maps.txt
b) анализ программы
❗️bpftool prog dump xlated — читабельный IR, ищем строки вроде kprobe__vfs_read, kprobe__tcp_sendmsg.
❗️strings /tmp/.kworker — ищем URL/домены/C2-хэши.
❗️readelf -h /tmp/.kworker / file /tmp/.kworker — тип файла, UPX-packed
c) поиск persistence
❕Проверить crontab, systemd units, init scripts.
❕Проверить /etc/ld.so.preload, ~/.bashrc, контейнер image layers.
d) память (если возможно)
➡️gcore или procdump / gdb для дампа процесса.
➡️Сохраняем /proc//maps, /proc//fd.
#nasoc #ebpf #tetragon #forensics #incidentresponse #linuxsecurity