execveを使わず、Linuxカーネルのkeyring経由でELFをファイルレス実行する手法

Fileless ELF Execution via Kernel Keyring

LinuxカーネルのkeyringにELFペイロードを保存し、execveを呼ばずに直接ジャンプして実行する手法。add_keyでカーネルスラブに格納し、keyctlで匿名マッピングにコピー後、revokeで痕跡を消す。ファイルディスクリプタもinodeもVFSに残らず、/proc/self/fdにも現れない。ローダー自身をunlinkすればディスク上の痕跡も消えるが、(deleted)表示が検知シグナルになるため、あえて残す方がステルス性が高いと筆者は指摘する。

`/proc/self/exe`が`(deleted)`を示すのはよく知られた検知シグナルで、ElasticやFalcoなどが`process.executable`の末尾が`(deleted)`であることに積極的にマッチしている。だからunlinkをスキップする方がステルス性の面では実際に良い判断だ。
  1. josephcsible

    これは、ELFバイナリの内容をユーザースペースのメモリからカーネルのkeyringにコピーし、その後すぐにカーネルのkeyringからユーザースペースのメモリにコピーし直して、通常通りユーザーランドでexecしているだけのように見える。単にユーザーランドでexecするだけでなく、keyringのステップを挟む意味は何なのか?

  2. westurner

    この方法でロードされたプロセスは、ロード後に再検証できるのか?

この日のほかの記事

2026-09-12