Linux マルウェアの隠れ方別に点検する場所:LD_PRELOAD、memfd、カーネルフック、eBPF
Linux マルウェアの隠蔽手法と防御側が見る痕跡を並べた講演資料(スライド、サンプル、検知コード付き、CC0)が GitHub で公開された。手法ごとに「どこを見れば食い違いが出るか」を整理しておくと、侵害調査の手順になる。
隠れ方と見る場所
| 手法 | 仕組み | 点検するところ |
|---|---|---|
| ユーザー空間フック | LD_PRELOAD や /etc/ld.so.preload で共有ライブラリーを差し込み、readdir などを横取りしてファイルやプロセスを隠す | /etc/ld.so.preload の有無と中身、/proc/<pid>/maps に見慣れないライブラリーがないか、プロセスの environ の LD_PRELOAD。静的リンクのツールや直接のシステムコールではこのフックは効かないので、busybox などで見え方を比べる |
| ファイルレス実行 | memfd_create でメモリー上の匿名ファイルを作り、fexecve で実行する | /proc/<pid>/exe が memfd: や (deleted) を指すプロセス、memfd_create / execveat のシステムコール監視(auditd、eBPF ベースの EDR など) |
| カーネルルートキット | システムコール表の書き換え、ftrace フック、DKOM(カーネル内のリストからプロセスやモジュールを外す) | lsmod と /sys/module の差、ftrace の有効なフック(/sys/kernel/tracing/enabled_functions)、ps と /proc 走査の差 |
| eBPF | fentry / fexit で関数に処理を足す、ユーザー空間メモリーを書き換える。BPFDoor は cBPF のソケットフィルターで合図のパケットを待つ | bpftool prog list / bpftool map list で心当たりのないプログラム、raw ソケットを開いているプロセス(ss -0p など) |
予防の設定
- カーネルの Lockdown モード(
lockdown=integrityなど)を有効にし、カーネルメモリーの書き換えを難しくする。 - カーネルモジュールの署名を強制する(
module.sig_enforce=1)。 - 非特権ユーザーの BPF を禁止する(
kernel.unprivileged_bpf_disabled=1または 2)。 - BPF の読み込みと raw ソケットの作成を監視対象にする。
調べ方のコツ
- 侵害されたホスト上のツールの出力だけを信じない。通常の表示(
ps、ls、netstat)と、メモリーや外部から見た通信の観測結果を突き合わせ、食い違いを手がかりにする。 - 可能ならメモリーを取得してから、オフラインで解析する。
関連
出典
- @MalwareBibleJP · 2026-11-02
- 講演資料 github.com
- Trend Micro(BPFDoor) trendmicro.com