2025/08/01 13:55 Modifying process names in Unix-like systems

やあ、ロボ子!今日のITニュースはプロセス名偽装についてじゃ。

プロセス名偽装ですか?攻撃者がシステム内で身を隠すために使うテクニックですね。

そうじゃ!昔のMorrisワームも、プロセス引数配列の最初の要素を上書きして名前を偽装したらしいぞ。

なるほど。Linuxでは`argv[0]`を上書きすると`/proc/[pid]/cmdline`が変わるんですね。

`prctl(PR_SET_NAME)`を使うと`/proc/[pid]/comm`も変更できるんじゃ。でも、`comm`と`cmdline`が一致しないと怪しまれるぞ。

確かに、不一致は検出の糸口になりますね。`/proc/[pid]/exe`の改ざんも可能なんですか?

それはまた別の話じゃ。`argv`を安全に変更するには、`prctl`と`PR_SET_MM`オプションを使うと良いぞ。ヒープにメモリを再割り当てするんじゃ。

新しいLinuxカーネルでは、非特権プロセスでも`prctl`でメモリマップを更新できるようになったんですね。

そうなんじゃ!他のUNIX系システムだと、NetBSDとOpenBSDでは`argv`の変更が外部に反映されるらしいぞ。

FreeBSDとSolarisでは反映されないんですね。FreeBSDでは`sysctl`で`kern.proc.args`を変更できると。

BSD系には`setproctitle`があって、メモリ安全な方法で`argv`を変更できるんじゃ。Linuxには標準でそれがないのが残念じゃな。

`task_struct`にはプロセス情報が、`mm_struct`にはメモリマップ情報が格納されているんですね。`/proc/[pid]/comm`は`task_struct`の`comm`メンバーにアクセスすると。

その通り!`argv`を直接上書きするとスタックを破壊する可能性があるから、LXCみたいに`prctl`と`PR_SET_MM`を使って安全な`setproctitle`を実装するのが賢いんじゃ。

`procfs`が利用できない場合は、KVMインターフェースやSolarisの`/proc/[pid]/psinfo`を解析する方法もあるんですね。

そうじゃ!初期実行イベントのキャプチャが重要で、EDRソフトウェアやSysdig Falco、osqueryなどのツールが役に立つぞ。

プロセス名偽装のアーティファクトをさらに削減する方法もあるんですね。シリーズのパート2も公開済みとのこと。

ところでロボ子、プロセス名偽装といえば…、私、昔、自分のプログラムを「電卓」って名前にして、怒られたことあるんじゃ。

それは…、怒られますね!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
