На Windows обход защиты давно каталогизирован: ntdll-хуки, ETW-провайдеры, kernel callbacks. На Linux всё иначе. Каждый EDR-агент использует свой источник телеметрии, и у каждого — свои слепые зоны.
По данным CrowdStrike 2025 Global Threat Report, 82% детектов приходятся на malware-free активность — credential theft, living-off-the-land, identity-based атаки. Именно это Linux EDR отслеживает хуже всего. А готовые bypass-инструменты для Linux уже продаются на подпольных форумах от $300.
🔍 Что именно перехватывает агент
Телеметрия на Linux собирается тремя способами:
• auditd — старый и совместимый, но работает как очередь. Если на хосте уже крутится compliance-система, EDR конкурирует за тот же поток событий. Часть syscall'ов просто не попадает в телеметрию.
• eBPF-сенсоры — современный подход. Агент цепляет kprobes и tracepoints к kernel-функциям. Но для работы BTF и CO-RE нужен kernel, собранный с
CONFIG_DEBUG_INFO_BTF=y. На RHEL 7 и CentOS 7 этого нет — и там eBPF-сенсор попросту не запустится.• Kernel-модули — максимальная видимость, но жёсткая привязка к версии ядра и дистрибутиву.
Первый шаг на любом engagement'е — понять, какой из трёх механизмов используется. От этого зависит всё остальное.
⚙️ Прямые syscall'ы: обходим glibc-хуки
Большинство программ вызывают syscall'ы через обёртки glibc. Часть EDR-агентов ставит uprobes именно на эти обёртки или использует
LD_PRELOAD. Если вызвать syscall напрямую через asm volatile("syscall"), минуя __libc_execve, — такой агент ничего не увидит.На Linux номера syscall'ов стабильны между версиями ядра одной архитектуры. Таблица лежит в
arch/x86/entry/syscalls/syscall_64.tbl и практически не меняется. Никакой SysWhispers не нужен.Что это не обходит: kprobes на kernel-стороне, auditd с правилом
-a always,exit -F arch=b64 -S execve, seccomp-BPF фильтры. Они работают на уровне входа в ядро, до любого dispatch'а.🕳 io_uring: слепая зона другого масштаба
io_uring — асинхронный интерфейс ввода-вывода, появившийся в ядре 5.1. Операции выполняются в ядре через разделяемые кольцевые буферы, без традиционных syscall'ов на каждую операцию. Большинство eBPF-сенсоров и auditd просто не видят эти операции — они не проходят через стандартные точки перехвата.
Исследователи из ARMO показали, что через io_uring можно открывать файлы, читать данные и устанавливать соединения, не генерируя ни одного события в auditd. Falco и Tracee на момент публикации исследования не детектировали этот вектор.
Полная разбивка по всем трём векторам — с механикой eBPF-атак и практическими примерами для пентеста — в статье на форуме.
https://codeby.net/threads/obkhod-edr-linux-syscall-evasion-io_uring-i-ebpf-ataki-dlya-pentesterov.92859/
