はじめに
ペネトレーションテストにおいて、Metasploit のようなツールでターゲットシステムへの初期アクセスを獲得した後、確立された接続(または「セッション」)は、最初に悪用されたプロセス内に存在することがよくあります。これは、Web ブラウザ、ドキュメントリーダー、またはその他のユーザーアプリケーションである可能性があります。これらのプロセスは不安定であったり、ユーザーによっていつでも閉じられたりする可能性があり、セッションが終了してしまいます。
プロセス移行とは、この初期の不安定な可能性のあるプロセスから、コアシステムプロセスのような、より安定して長時間実行されるプロセスにセッションを移動させる技術です。これにより、アクセスの安定性と永続性が大幅に向上します。また、悪意のあるコードが正規の信頼されたプロセス内に隠されるため、検出を回避するのにも役立ちます。
この実験では、Meterpreter プロセスの移行の基本的なワークフローを学びます。Linux 環境にいますが、この重要なポストエクスプロイト技術を理解するために、侵害されたシステムで行う手順をシミュレートします。
ps コマンドで実行中のプロセス一覧を取得する
このステップでは、シェルを取得した後の最初のタスクとして、システムを調査します。移行の潜在的なターゲットを特定するために、現在実行中のプロセスを確認する必要があります。実際の Meterpreter セッションでは、Meterpreter プロンプト内で直接 ps コマンドを使用します。
標準の Linux ターミナルでこれをシミュレートしているため、Linux の ps コマンドを aux フラグと共に使用して、実行中のすべてのプロセスの詳細なリストを取得します。これにより、実際のシナリオで表示されるものと同様の出力が得られます。
実行中のすべてのプロセスを一覧表示するには、ターミナルで次のコマンドを実行します。
ps aux
プロセスの長いリストが表示されます。これらの列に注意してください。
USER: プロセスを所有するユーザー。PID: プロセスを一意に識別する番号であるプロセス ID。COMMAND: プロセスを開始したコマンド。
出力の切り捨てられた例を以下に示します。
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 169444 13136 ? Ss 01:23 0:02 /sbin/init
labex 10121 0.1 0.2 886980 89284 ? Sl 01:25 0:05 /usr/lib/firefox/firefox
labex 10345 0.0 0.0 243356 25980 ? S 01:26 0:00 /usr/lib/xfce4/panel/wrapper-2.0
...
このリストは、移行先の適切なプロセスを探し始めるために必要な情報を提供します。
explorer.exe のような移行先の安定したプロセスを特定する
このステップでは、前のステップで取得したプロセスリストを分析し、移行に適したターゲットを選択します。良いターゲットプロセスは以下の条件を満たす必要があります。
- 安定性: ユーザーセッション全体またはシステム稼働時間中に実行されるプロセスであること。
- 適切な権限: 現在のセッションと同じか、それ以上の権限で実行されていること。
- 正しいアーキテクチャ: Meterpreter ペイロードのアーキテクチャ(32 ビットまたは 64 ビット)と一致していること。
侵害された Windows システムでは、安定したプロセスの典型的な例は explorer.exe です。これはグラフィカルシェル(デスクトップ、タスクバーなど)を管理し、ユーザーがログインしている限りほぼ常に実行されています。もう一つの一般的なターゲットは svchost.exe です。
Linux の実験環境では、同様に安定していてユーザーが所有するプロセスを特定することでこれをシミュレートします。ps aux の出力を見ると、xfce4-panel(XFCE デスクトップパネル)のようなプロセスが良い候補となります。
grep を使用してプロセスリストをフィルタリングし、xfce4-panel プロセスを簡単に見つけましょう。これにより、そのプロセス ID(PID)を特定できます。
ps aux | grep xfce4-panel
出力は以下のようになります。2 番目の列に PID が含まれています。
labex 10345 0.0 0.0 243356 25980 ? S 01:26 0:00 /usr/lib/xfce4/panel/wrapper-2.0
labex 12345 0.0 0.0 12345 1234 pts/0 S+ 01:30 0:00 grep --color=auto xfce4-panel
この例では、xfce4-panel の PID は 10345 です。あなたの PID は異なるでしょう。これで、移行先のターゲットを特定できました。
migrate コマンドをターゲットプロセスの PID と共に使用する
このステップでは、プロセス移行のためのコアとなる Meterpreter コマンド migrate を使用します。コマンドの構文は単純で、migrate <PID> です。移行したいプロセスの PID を指定するだけです。
シミュレーション環境におり、アクティブな Meterpreter セッションがないため、migrate コマンドを直接実行することはできません。代わりに、ターゲットプロセス(xfce4-panel)の PID を見つけ、対応する migrate コマンドをテキストファイルに書き込むことで、このアクションをシミュレートします。
まず、xfce4-panel プロセスの PID を取得し、変数に格納しましょう。pgrep コマンドがこれに最適です。
PID=$(pgrep xfce4-panel | head -n 1)
このコマンドは xfce4-panel の PID を見つけ、それを PID 変数に格納します。次に、migrate コマンドをシミュレートするために、simulated_command.txt という名前のファイルにエコーします。
echo "migrate $PID" > simulated_command.txt
ファイルを表示して、シミュレートされたコマンドが正しいことを確認しましょう。
cat simulated_command.txt
出力には、migrate コマンドとそれに続く xfce4-panel プロセスの PID が表示されるはずです。
migrate 10345
これで、migrate コマンドの実行を正常にシミュレートできました。
移行が成功したことを確認する
このステップでは、プロセス移行が成功したことを確認する方法を学びます。実際の Meterpreter セッションで migrate コマンドを実行した後、セッションが新しいターゲットプロセス内で実行されていることを確認する必要があります。
これを行うためのコマンドは getpid です。移行前、getpid は元の脆弱なプロセスの PID を返します。移行が成功した後、getpid は移行先の新しい安定したプロセスの PID を返します。
この確認をシミュレートするために、まず getpid の出力が どのようになるか を表示します。これは、以前特定したターゲットプロセス xfce4-panel の PID を表示することで行うことができます。
移行確認チェックをシミュレートするには、次のコマンドを実行します。
echo "Verification: If migration were real, 'getpid' would now return $(pgrep xfce4-panel | head -n 1)"
出力は、ターゲット PID を示す確認メッセージになります。
Verification: If migration were real, 'getpid' would now return 10345
移行前後の getpid の出力を比較することで、ペネトレーションテスターは、セッションが新しいプロセス内でより安定し、安全になったと確信できます。
プロセス移行が重要な理由を議論する
この最終ステップでは、プロセス移行がポストエクスプロイテーションにおける基本的なテクニックである重要な理由をまとめます。「なぜ」を理解することは、「どのように」を知ることと同じくらい重要です。
Meterpreter プロセスを移行する主な動機は 2 つあります。
安定性と永続性: これが最も一般的な理由です。初期のエクスプロイトは、多くの場合、Web ブラウザや PDF リーダーのようなユーザーレベルのアプリケーションをターゲットにします。ユーザーがこのアプリケーションを閉じると、Meterpreter セッションはすぐに終了します。コアとなる長時間実行されるシステムプロセス(Windows の
explorer.exeなど)に移行することで、セッションはユーザーのログインセッション、あるいはシステムのアップタイムに結びつき、はるかに永続的で信頼性の高いものになります。ステルス性と回避:
firefox.exeのような侵害されたプロセスが異常なネットワーク接続を行うと、ファイアウォール、侵入検知システム(IDS)、セキュリティアナリストにとって警告の対象となる可能性があります。しかし、svchost.exe(Windows のサービスホストプロセス)のようなプロセスは、ネットワーク接続を行うことが期待されています。このようなプロセス内にセッションを隠すことで、ネットワークトラフィックが精査される可能性が低くなり、よりステルス性の高い操作が可能になります。
二次的な利点として、権限昇格 が挙げられることがあります。標準ユーザーとして実行されているプロセスから SYSTEM または root 権限で実行されているプロセスに移行できる場合、ターゲットマシン上の自身の権限を効果的に昇格させることができます。
プロセス移行を習得することは、単にアクセスを得ることから、ターゲットシステムに対する安定した長期的な制御を維持することへの重要なステップです。
まとめ
この実験では、Meterpreter のプロセス移行における重要な概念とワークフローを学びました。シミュレートされた Linux 環境で実施されましたが、この重要なポストエクスプロイテーション技術に関わる普遍的な手順を習得しました。
以下の方法を学びました。
psコマンドを使用して、ターゲットシステムを調査するために実行中のプロセスを一覧表示する。- 移行に適した安定したプロセスの特性を特定する。
- セッションを移動するために Meterpreter の
migrate <PID>コマンドの使用をシミュレートする。 getpidコマンドが移行の成功を確認するためにどのように使用されるかを理解する。
最も重要なことは、プロセス移行がペネトレーションテスト中のアクセスにおける安定性とステルス性を確保するために不可欠であり、脆弱な足場を永続的な存在に変えることを理解したことです。


