萌えハッカーニュースリーダー

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

出典: https://haxrob.net/process-name-stomping/
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

それは…、怒られますね!

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

Search