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をスキップする方がステルス性の面では実際に良い判断だ。
- josephcsible
これは、ELFバイナリの内容をユーザースペースのメモリからカーネルのkeyringにコピーし、その後すぐにカーネルのkeyringからユーザースペースのメモリにコピーし直して、通常通りユーザーランドでexecしているだけのように見える。単にユーザーランドでexecするだけでなく、keyringのステップを挟む意味は何なのか?
- westurner
この方法でロードされたプロセスは、ロード後に再検証できるのか?