
研究者によって、新たな攻撃手法がレポートされました。
Linux 環境における検知回避型のファイルレス実行(Fileless ELF Execution)手法です。
従来の Linux におけるファイルレス実行は、主に memfd_create システムコールが利用されてきました。
しかし、主要な EDR(Endpoint Detection and Response)製品やセキュリティ監視ツールは memfd_create 特有のシグネチャや挙動の検知ルールをすでに強化しています。
今回公表された手法は、Linux カーネルの O_TMPFILE フラグと execveat(AT_EMPTY_PATH) システムコールを組み合わせることで、実ディスク上のファイルシステムを利用しながらも、ディレクトリ構造(パス)を一切生成せずに ELF バイナリを実行します。
これにより、従来のファイル監視システムや EDR の検知を完全に回避することが可能となります。
特徴的な部分をみてみましょう。
- O_TMPFILE による「名前(パス)を持たない匿名 inode」の作成
- 説明
通常、ファイルを作成すると「名前とファイルデータの紐付け(dentry: Directory Entry)」が行われます。
しかし、O_TMPFILE フラグを立てて open(“/tmp”, O_TMPFILE | …) を呼ぶと、ファイルシステム上に名前を持たない匿名の inode(実体データ)のみが直接作成されます。 - セキュリティ上の影響
ディレクトリエントリが生成されないため、ls や find コマンドでファイルが見えないだけでなく、Linux の標準的なファイル監視機構である inotify や fanotify にイベント(IN_CREATE 等)が一切発生しません。
- 説明
- execveat と AT_EMPTY_PATH によるパス省略実行
- 説明
作成した匿名 inode に ELF のバイナリデータを書き込んだ後、読み取り専用で再度オープンし、execveat システムコールに AT_EMPTY_PATH フラグを渡して実行します。 - セキュリティ上の影響
通常プロセスの実行時にはパス解析(VFS ディレクトリツリーの探索)が行われますが、この手法ではファイル記述子(fd)から直接 ELF が読み込まれます。
そのため、引数やプロセスツリー、実行テレメトリのどこにもファイルパスの文字列が生成されず、パスベースの検出ルールを無効化します。
- 説明
- プロセス・テレメトリ上の巧妙な偽装
- 説明
実行中のプロセスは /proc/self/exe 上で /tmp/#220 (deleted) のように表示されます(#+inode番号)。 - セキュリティ上の影響
(deleted) というサフィックスは、正当なソフトウェアが「一時ファイルを開いた後に削除し、その後実行する」といった動作の際にも発生するため、一見して攻撃による動作か正常な挙動かの区別がつきにくいという特徴があります。
さらに、ローダーは argv0 の偽装(例: python3 や sshd として実行) や、実行直前にローダー自身のバイナリを削除(unlink)する処理を行うことで、プロセスの追跡痕跡を徹底して消去します。
- 説明
- 従来の EDR / 検知ルールのギャップを突く構造
- 説明
多くの Linux EDR やセキュリティ機関(Elastic Security Labs など)の検知シグネチャは、特定のシステムコール(memfd_create / システムコール番号 319)や、特定のメモリパス(memfd: プレフィックス、デバイス ID 00:01)をトリガーとして設計されています。 - セキュリティ上の影響
本手法は memfd ではなく標準的な open()(システムコール番号 2)および実ディスク上のファイルシステム(/tmp や /var/tmp など)を使用するため、既存の memfd 特化型検知ルールの監視網を完全にすり抜けます。
- 説明
本手法は、「実ディスクを使用しているにもかかわらず、パスが存在しないためファイルシステム監視に捕捉されない」 という点で、非常に強力かつ新しいファイルレス攻撃手法です。
- 攻撃者のメリット
memfd_create 対策を行っている最新の EDR 導入環境であっても、Linux Kernel 3.19 以降(O_TMPFILE と execveat の両方が揃う環境。現行の主要な Linux のほぼすべて)であれば、追加の特権(root等)を必要とせず一般ユーザ権限のまま実行・検知回避が可能です。 - 対策(防御者側)の方向性
- ファイル名や memfd_create システムコールのみに頼った静的な検知ルールの見直し。
- execveat システムコールの引数に AT_EMPTY_PATH が指定されている挙動の監視。
- /proc/<pid>/exe が /#<inode> (deleted) のような形式を指しているプロセスや、特定の一時ディレクトリ(/tmp, /var/tmp 等)で O_TMPFILE 経由で生成されたプロセスの動的な監視・ログ収集の強化。
サイバーセキュリティの領域は常にイタチごっこです。
先に新しい情報を明らかにし、先に対策を確立していくことを進めていきたいですね。
Fileless ELF Execution via O_TMPFILE
https://matheuzsecurity.github.io/hacking/fileless-loader-bypassing-elastic-memfd/
| この記事をシェア |
|---|