![]() |
https://forum.antichat.xyz/attachmen...b117797f11.png
Когда на engagement'е попадается Linux-хост с EDR-агентом, первый рефлекс - понять, что именно этот зверь перехватывает. На Windows ответ давно каталогизирован: ntdll-хуки, ETW-провайдеры, kernel callbacks. На Linux картина другая. Агенты разных вендоров используют принципиально разные источники телеметрии - от auditd до eBPF-сенсоров и частных kernel-модулей (проприетарных). И у каждого подхода свои слепые зоны. Вот их-то мы и будем эксплуатировать. По данным Kaspersky Incident Response, уязвимости в публично доступных приложениях стали первопричиной 39% состоявшихся инцидентов. При этом, согласно CrowdStrike 2025 Global Threat Report (данные цитирует Vectra AI), 82% детектов приходятся на malware-free активность - credential theft, living-off-the-land и identity-based атаки, которые Linux EDR особенно плохо отслеживает. Обход EDR Linux перестал быть прерогативой APT-групп: готовые EDR bypass-инструменты продаются на подпольных форумах от 300 долларов. Разберём три фундаментальных вектора обхода EDR на Linux для пентестеров (общий арсенал и контекст - в руководстве по Linux для пентестера): прямые syscall'ы минуя glibc, злоупотребление io_uring и наступательное использование eBPF. Для каждого - конкретный механизм, почему он работает и что проверять на своих хостах. Как Linux EDR собирает телеметрию и что именно хукается Чтобы понять, как работают Linux EDR bypass методы, нужно сначала разобрать, что агент видит. Телеметрия на Linux собирается тремя способами, и у каждого характерные дыры. Три уровня перехвата: auditd, eBPF и kernel modules Auditd (Linux Auditing System) - самый старый и совместимый механизм. Агент подписывается на события аудита ядра: запуск процессов ( Код:
execvehttps://forum.antichat.xyz/attachmen...7310522183.png eBPF-сенсоры - современный подход, который используют Falco, Tracee и коммерческие решения вроде BI.ZONE EDR. Агент загружает eBPF-программы, которые цепляются к kprobes (точки входа в kernel-функции) и tracepoints (предопределённые точки трассировки). Например, kprobe на Код:
__x64_sys_execveКод:
sched:sched_process_execКод:
CONFIG_DEBUG_INFO_BTF=yПроприетарные kernel-модули - отдельные вендоры идут дальше. Kaspersky внедрил технологию UKLM (Universal Linux Kernel Module), которая обрабатывает события через собственный драйвер уровня ядра и, по заявлению вендора, снижает влияние на производительность в 20 раз по сравнению с auditd. Такие модули дают максимальную видимость, но создают зависимость от конкретной версии ядра и дистрибутива. Ключевой вывод: определите, какой механизм использует конкретный EDR-агент - от этого зависит, на каком уровне нужно работать, чтобы остаться невидимым. Syscall hooking Linux evasion: прямые вызовы ядра минуя glibc Большинство пользовательских программ вызывают syscall'ы не напрямую, а через обёртки glibc: Код:
execve()Код:
__libc_execve()Код:
syscallКод:
LD_PRELOADНа Linux, в отличие от Windows, номера syscall'ов стабильны между версиями ядра одной архитектуры. Таблица определена в Код:
arch/x86/entry/syscalls/syscall_64.tblМинимальный пример вызова Код:
execveC: Код:
#include Код:
gcc -nostdlib -nostartfiles -fno-stack-protector -staticКод:
_startКод:
void _start() { char *argv[]={"bin",NULL}; raw_execve("/bin/sh",argv,NULL); asm("mov $60,%rax; xor %rdi,%rdi; syscall"); }Код:
__libc_execveКод:
execvpЧто по-прежнему ловит прямой syscall: kprobes на kernel-стороне ( Код:
__x64_sys_execveКод:
sys_enter_execveКод:
-a always,exit -F arch=b64 -S execveПрямые syscall'ы - не серебряная пуля. Они обходят userspace-хуки, но не kernel-level мониторинг. Тем не менее на практике я регулярно встречаю агенты, которые полагаются исключительно на LD_PRELOAD или uprobe-перехват - для них этой техники за глаза. Практический подход для пентеста Linux и обхода защиты: напишите свой лоадер на C или Go с прямыми syscall'ами для критических операций - Код:
execveКод:
openatКод:
connectКод:
mmapКод:
mprotectio_uring - слепая зона для обхода EDR на Linux Если прямые syscall'ы обходят userspace-хуки, но остаются видны ядерному мониторингу, то io_uring создаёт проблему другого масштаба: операции выполняются в ядре, но не через те syscall entry points, на которых стоят kprobes EDR-агента. https://forum.antichat.xyz/attachmen...7310578911.png io_uring - интерфейс асинхронного ввода-вывода, появившийся в ядре Linux 5.1 (2019). Работает через два кольцевых буфера в shared memory: Submission Queue (SQ), куда процесс помещает запросы, и Completion Queue (CQ), откуда забирает результаты. После начальной настройки через дальнейшие операции не требуют отдельных syscall'ов - ядро забирает запросы из SQ автономно. И вот тут-то начинается самое интересное для уклонения от обнаружения Linux-хостов. EDR-агенты, использующие kprobes на syscall entry points ( Код:
x64_sys_read, Код:
Код:
x64_sys_writeКод:
_x64_sys_connect) или syscall tracepoints ( Код:
sys_enterКод:
*Код:
vfs_readКод:
vfs_writeRingReaper: разбор техник по MITRE ATT&CK RingReaper - пост-эксплуатационный агент, созданный как PoC для демонстрации этой слепой зоны. По данным Picus Security, он полностью заменяет стандартные утилиты разведки io_uring-аналогами: ЗадачаОбычный подходRingReaper (io_uring)MITRE ATT&CKСписок процессов Код:
ps auxКод:
netstatКод:
ssКод:
whoКод:
wКод:
cat /etc/passwdКод:
find / -perm -4000Код:
rm -fКаждая из этих операций тривиальна по отдельности. Но когда они идут через io_uring, eBPF-based EDR с kprobes на Код:
sys_readКод:
sys_openatКод:
sys_unlinkКод:
io_uring_setupКод:
kernel.io_uring_disabledКод:
io_uring_setupНа современных дистрибутивах (Ubuntu 23.04+, RHEL 9, Debian 12) проверьте Код:
cat /proc/sys/kernel/io_uring_disabledeBPF evasion техники: мониторинг как оружие атакующего eBPF позволяет динамически загружать программы в ядро Linux. По данным Cymulate, через kprobe/tracepoint/LSM hooks он даёт возможность наблюдать syscall'ы, точки входа и выхода функций ядра и userspace, сетевые события. Модификация поведения ограничена: Код:
bpf_override_returnКод:
ALLOW_ERROR_INJECTIONС 2023 года появилось несколько руткитов на eBPF: Код:
ebpfkitКод:
TripleCrossКод:
Pamspyhttps://forum.antichat.xyz/attachmen...7310623888.png Ослепление телеметрии - Indicator Blocking (T1562.006, Defense Evasion). Атакующий загружает eBPF-программу, которая цепляется к тем же kprobes, что и EDR, но с более высоким приоритетом. Она модифицирует данные, которые видит агент: скрывает процессы, фильтрует сетевые события, подменяет содержимое файлов. По анализу Red Canary (цитирует windshock.github.io), однажды загруженное eBPF-вредоносное ПО, может скрытно изменять результаты Код:
bpftoolКод:
debugfsПерехват учётных данных. Код:
PamspyОбход файрвола и скрытый C2. Код:
BPFDoorКод:
nmapПочему обход антивируса Linux через eBPF так эффективен? eBPF-программы не лежат на диске в традиционном смысле. Они работают в kernel space, недоступном для userspace-сканеров. eBPF-руткит может манипулировать данными, которые видит сам антивирус. Традиционный файловый сканер попросту не имеет точки наблюдения для обнаружения eBPF rootkit - он слепой по определению. По данным Cymulate, добавление Код:
CAP_PERFMONКод:
CAP_NET_ADMINКод:
BPF_PROG_TYPE_SOCKET_FILTERКод:
/proc/sys/kernel/unprivileged_bpf_disabledДля полноценного eBPF evasion атакующему нужен root. И тут в игру вступают уязвимости повышения привилегий. В sudo до версии 1.9.17p1 опция Код:
--chrootКод:
/etc/nsswitch.confКод:
--chrootКод:
CHROOT=*Код:
pr0v3rbs/CVE-2025-32463_chwootЦепочка для пентестера: непривилегированный доступ (при наличии sudo с --chroot в sudoers) → эксплуатация CVE-2025-32463 → root → загрузка eBPF-программы для ослепления EDR → выполнение основной задачи. Из актуального стоит отметить CVE-2025-31161 в CrushFTP (CVSS 9.8 CRITICAL, CWE-305) - authentication bypass через race condition в AWS4-HMAC авторизации, EPSS 0.8621 (Top 1%). CISA включила эту уязвимость в каталог KEV (актуально эксплуатируется в дикой среде, добавлена 2025-04-07) с пометкой об использовании в ransomware-кампаниях. Практический сценарий: пентест Linux с обходом защиты хоста Требования к окружению
📚 Часть контента скрыта. Этот материал доступен участникам сообщества с рангом One Level или выше Получить доступ просто — достаточно проявить активность на форуме 📚 Часть контента скрыта. Этот материал доступен участникам сообщества с рангом One Level или выше Получить доступ просто — достаточно проявить активность на форуме Обнаружение eBPF rootkit и защита Linux-хостов Этот раздел - для blue team и для пентестеров, которые пишут рекомендации по итогам engagement'а. Первое, что нужно проверять - загруженные eBPF-программы и их привязки к сетевым интерфейсам: Bash: Код:
bpftool prog showКод:
bpftool prog showКод:
bpftoolИменно поэтому одного мониторинга недостаточно. По данным windshock.github.io, наиболее эффективна комбинация двух инструментов. Tracee (Aqua Security) работает как камера наблюдения - записывает аномальные eBPF-события в реальном времени. Сам он основан на eBPF и отслеживает загрузку новых программ. LKRG (Linux Kernel Runtime Guard) работает как решётка на окне - активно мониторит целостность структур ядра и предотвращает модификации syscall table, подмену callback'ов и DKOM (Direct Kernel Object Manipulation, техника Rootkit - T1014, Defense Evasion по MITRE ATT&CK). Tracee без LKRG - записывает, но не блокирует. LKRG без Tracee - блокирует, но не оставляет forensic-следа. Оба вместе дают и детектирование, и предотвращение. Дополнительные меры для Linux endpoint detection evasion prevention:
На engagement'ах с Falco или Tracee на целевых Linux-хостах - какие kprobes и tracepoints вы видите через Код:
bpftool prog showКод:
type: kprobeКод:
type: tracepointКод:
io_uring_submitКод:
__io_submit_sqeКод:
ruleКод:
condition |
Часто замечал, что io_uring действительно оставляет "слепые зоны" для многих EDR-решений — они цепляются за стандартные syscalls, а io_uring обходит их, работая напрямую в ядре. По eBPF в основном только "стандартные" точки ловят, кастомных правил для io_uring не встречал, потому что это редкость. Так что если ищешь обходы, стоит попробовать именно через io_uring, но без рута там особо не разгонишься.
|
Читаю такие посты — прям ностальгия по временам, когда достаточно было просто LD_PRELOAD дёрнуть и всё. Теперь этот io_uring — просто какая-то магия для обхода, особенно если EDR зациклен на классических syscall-хуках. Вижу, что современные защитники не всегда готовы к таким трюкам, так что пентестерам теперь на что-то посерьёзнее смотреть. Но всё равно, без рута там далеко не уедешь. Жизнь усложнилась, тоска по простому старому хакерству.
|
io_uring реально крутая тема для обхода классических хуков EDR, особенно если агент в основном ловит syscall-ы через kprobes. Сам пока пробовал простые вызовы напрямую в ядро минуя glibc — работает, но io_uring даёт совсем другой уровень, потому что части операций вообще не видно в традиционных точках мониторинга. Без рута сложно, но если есть, то можно неплохо замутить обход.
|
io_uring реально даёт прикольные возможности для обхода, особенно если базовый EDR ловит только классические syscall-хуки. Я пробовал через него асинхронные операции — EDR просто проскакивает. Но без рута сложно что-то круто сделать, а на руте уже полный простор. eBPF интересен с точки зрения обороны, но и злоумышленникам он даёт мощный инструмент – теперь за ядро биться надо серьёзно, чтобы не слепили.
|
Не совсем всё так однозначно с io_uring и eBPF. Да, они дают хорошие лазейки против многих EDR, но современные агенты уже начинают подтягиваться и смотрят и на эти точки. Кроме того, без рута особо не развернешь полноценные атаки через eBPF, а io_uring в контейнерах часто под обрезом по безопасности. Так что обходы есть, но не стоит считать их универсальным решением, особенно если на хосте стоит что-то более продвинутое.
|
Помню времена, когда обход EDR на Linux был просто вопросом LD_PRELOAD и патча glibc. Сейчас с io_uring и eBPF всё куда хитрее — крутой трюк с асинхронкой, которая у многих EDR осталась за кадром. Но этот рай для обхода быстро тает, если поставлен продвинутый мониторинг ядра или хотя бы проверка eBPF-программ. Короче, игра в кошки-мышки стала повеселее, но и сложнее. Кто успеет — тот и съест пирог.
|
Ребята, времена действительно меняются. Раньше был LD_PRELOAD — и стоп, проблема решена. Сейчас же io_uring и eBPF — это уже почти как новый уровень игры. Но, правда, без рута особо не разгуляться. Всё усложнилось, теперь надо копать глубже и постоянно подтягиваться, чтобы не остаться за бортом. Впрочем, это же делает процесс интереснее, не так ли?
|
С io_uring реально интересная тема вышла, чуть не заметнее обычных syscall’ов, но без рута там пока сильно ограничен функционал. eBPF тоже классно работает на уровне ядра, но защитники уже потихоньку начинают туда заглядывать, так что шарахаешься и постоянно учишься. Времена, конечно, другие, но это и круто — движуха заставляет руки разминать.
|
| Время: 06:18 |