Metasploit におけるステージングペイロードとステージレスペイロードの理解と使用

Kali LinuxBeginner
オンラインで実践に進む

はじめに

Metasploit Framework を用いたペネトレーションテストの世界では、ペイロードとは、脆弱性が正常に悪用された後にターゲットシステム上で実行されるコードのことです。様々な種類のペイロードを理解することは、成功したエンゲージメントのために不可欠です。ペイロードの主なカテゴリは、「ステージング」と「ステージレス」の 2 つです。

ステージングペイロードは、2 つの部分で送信されます。小さめの初期「ステージャー」と、より大きな最終的な「ステージ」です。ステージャーの役割は、攻撃者のマシンへの接続を確立し、その後ペイロードの残りの部分をダウンロードすることです。一方、ステージレスペイロードは、ターゲット上で実行するために必要なすべてのコードを含む、単一の自己完結型パッケージです。

この実験では、両方のタイプを実際に体験します。Metasploit コンソールを使用して各ペイロードタイプを選択し、特にサイズにおける主な違いを観察し、それぞれの利点と欠点について学びます。

エクスプロイトとステージングペイロード (例:windows/meterpreter/reverse_tcp) の選択

このステップでは、Metasploit Framework コンソールを起動し、汎用的なエクスプロイトハンドラーを選択します。次に、一般的なステージングペイロードを使用するように設定します。exploit/multi/handler モジュールを使用するのは、これがユニバーサルリスナーであり、特定の脆弱なターゲットを必要とせずにペイロードを実演するのに最適だからです。

まず、ターミナルを開き、Metasploit コンソールを起動します。起動バナーをスキップするために -q (quiet) フラグを使用します。

msfconsole -q

Metasploit プロンプト (msf6 >) が表示されたら、エクスプロイトハンドラーを選択する必要があります。

use exploit/multi/handler

次に、ペイロードを設定しましょう。ステージングペイロードの名前は通常 platform/stage/stager という形式でフォーマットされます。例えば、windows/meterpreter/reverse_tcp は、プラットフォームが Windows、最終ペイロード(ステージ)が Meterpreter、初期接続方法(ステージャー)がリバース TCP シェルであることを意味します。

ステージングペイロードを次のコマンドで設定します。

set payload windows/meterpreter/reverse_tcp

payload => windows/meterpreter/reverse_tcp という確認メッセージが表示されます。念のため、現在の設定を表示できます。

show options

オプションの中にペイロードが表示されます。実際にはエクスプロイトを実行していないため、LHOSTLPORT を設定する必要はありません。ペイロードのプロパティを調べているだけです。

msf6 exploit(multi/handler) > show options

Module options (exploit/multi/handler):

   Name  Current Setting  Required  Description
   ----  ---------------  --------  -----------


Payload options (windows/meterpreter/reverse_tcp):

   Name      Current Setting  Required  Description
   ----      ---------------  --------  -----------
   EXITFUNC  process          yes       Exit technique (Accepted: '', seh, thread, process, none)
   LHOST                      yes       The listen address (an interface may be specified)
   LPORT     4444             yes       The listen port


Exploit target:

   Id  Name
   --  ----
   0   Wildcard Target

ステージングペイロードの小さいサイズを確認する

このステップでは、info コマンドを使用して、選択したステージングペイロードの詳細を調べます。最も注目すべき詳細はそのサイズです。

Metasploit コンソールで windows/meterpreter/reverse_tcp ペイロードが選択されたまま、info コマンドを入力します。

info

Metasploit は、ペイロードの名前、プラットフォーム、アーキテクチャ、サイズなど、詳細な情報を表示します。「Payload size」の行を探して出力を見てください。

msf6 exploit(multi/handler) > info

       Name: Windows Meterpreter, Reverse TCP Stager
     Module: payload/windows/windows/meterpreter/reverse_tcp
   Platform: Windows
       Arch: x86
Needs Admin: No
 Total size: 354
       Rank: Normal

Provided by:
  skape <stephen_fewer@harmonysecurity.com>
  sf <stephen_fewer@harmonysecurity.com>

Basic options:
Name      Current Setting  Required  Description
----      ---------------  --------  -----------
EXITFUNC  process          yes       Exit technique (Accepted: '', seh, thread, process, none)
LHOST                      yes       The listen address (an interface may be specified)
LPORT     4444             yes       The listen port

Description:
  Connect back to the attacker and spawn a Meterpreter server (staged).
  Listen for a connection from the stager and send the second stage.

Total size が非常に小さい(例:354 バイト)ことに注意してください。これがステージングペイロードの主な特徴です。この小さなコード片、つまりステージャーは、あなたのマシンに接続して、はるかに大きな Meterpreter ステージをダウンロードするためだけに設計されています。この小さいサイズは、特定の脆弱性が持つ厳しいメモリ制約に適合させるのに理想的です。

同じエクスプロイトとステージレスペイロード (例:windows/meterpreter_reverse_tcp) を選択する

次に、ステージレスペイロードに切り替えて違いを見てみましょう。ステージレスペイロードの名前は通常 platform/payload_type という形式で、2 番目のスラッシュ / の代わりにアンダースコア _ を使用します。この命名規則により、それらを素早く識別できます。

同じ msfconsole セッションで、再度 set payload コマンドを使用しますが、今回はステージレスバージョンである windows/meterpreter_reverse_tcp を指定します。

set payload windows/meterpreter_reverse_tcp

payload => windows/meterpreter_reverse_tcp という確認が表示されます。名前にアンダースコアがあることに注意してください。この単一のペイロードには、完全な Meterpreter サーバーと接続ロジックがすべて 1 つのパッケージに含まれています。

設定が変更されたことを確認するために、再度オプションを表示してみましょう。

show options

出力には、新しく選択されたステージレスペイロードが反映されます。

msf6 exploit(multi/handler) > show options

Module options (exploit/multi/handler):

   Name  Current Setting  Required  Description
   ----  ---------------  --------  -----------


Payload options (windows/meterpreter_reverse_tcp):

   Name      Current Setting  Required  Description
   ----      ---------------  --------  -----------
   EXITFUNC  process          yes       Exit technique (Accepted: '', seh, thread, process, none)
   LHOST                      yes       The listen address (an interface may be specified)
   LPORT     4444             yes       The listen port

...

これで、ステージングペイロードからステージレスペイロードへの切り替えが正常に完了しました。

ステージレスペイロードの大きいサイズを確認する

このステップでは、先ほど選択したステージレスペイロードを調べ、そのサイズをステップ 2 のステージングペイロードと比較します。

これまでと同様に、info コマンドを使用して現在のペイロードの詳細を取得します。

info

出力を調べて、「Payload size」の行を見つけます。

msf6 exploit(multi/handler) > info

       Name: Windows Meterpreter, Reverse TCP Inline
     Module: payload/windows/meterpreter_reverse_tcp
   Platform: Windows
       Arch: x86
Needs Admin: No
 Total size: 999335
       Rank: Normal

Provided by:
  skape <stephen_fewer@harmonysecurity.com>
  sf <stephen_fewer@harmonysecurity.com>

Basic options:
Name      Current Setting  Required  Description
----      ---------------  --------  -----------
EXITFUNC  process          yes       Exit technique (Accepted: '', seh, thread, process, none)
LHOST                      yes       The listen address (an interface may be specified)
LPORT     4444             yes       The listen port

Description:
  Connect back to the attacker and spawn a Meterpreter server (inline).
  This payload is a single executable and does not need to download a
  second stage.

ご覧のとおり、Total size はステージングペイロードの数百バイトと比較して劇的に大きくなっています(例:999335 バイト、約 1MB)。これは、ステージレスペイロードが Meterpreter の全機能を含んでいるためです。実行後に何かをダウンロードする必要はありません。

主な違いを確認したので、Metasploit コンソールを終了できます。

exit

各ペイロードタイプの長所と短所を議論する

この最終ステップでは、ステージングペイロードとステージレスペイロードの両方の利点と欠点をまとめます。これらのトレードオフを理解することは、特定のシナリオに最適なツールを選択するための鍵となります。このステップで実行するコマンドはありません。概念的な理解のためのものです。

ステージングペイロード (例:windows/meterpreter/reverse_tcp)

長所:

  • 小さいサイズ: 初期ステージャーは非常に小さいです。これは、エクスプロイトがペイロードに対して非常に限定されたバッファサイズまたはメモリ空間を持っている場合に大きな利点となります。
  • ステルス性 (初期ステージ): 小さいステージャーは、大きくて機能豊富なペイロードと比較して、単純なシグネチャベースのアンチウイルスソリューションに検出される可能性が低いかもしれません。

短所:

  • 複数の接続: メインステージをダウンロードするために 2 回目の接続が必要です。これにより、ネットワークトラフィックが増加し、ファイアウォール、侵入検知システム (IDS)、またはネットワーク管理者が攻撃を検出およびブロックする機会が増えます。
  • 安定性が低い: 接続が不安定になる可能性があります。2 番目のステージがダウンロード中に接続が切断された場合、エクスプロイトは失敗します。
  • コールバックの問題: ターゲットマシンは、ステージをダウンロードするために攻撃者のマシンにネットワーク経由で到達できる必要があります。これは、非常に制限されたネットワークでは問題となる可能性があります。

ステージレスペイロード (例:windows/meterpreter_reverse_tcp)

長所:

  • 信頼性と安定性: すべてが 1 つのパッケージに含まれているため、ペイロードはより自己完結型で安定しています。1 つの接続を確立するだけでよく、実行後はさらにコンポーネントをダウンロードする必要がありません。
  • 制限された環境での動作: ペイロードがターゲットに配信されると、何もダウンロードせずに実行できるため、ターゲットが限定的なインターネットアクセスしか持たない場合や、インターネットアクセスがない場合に役立ちます。

短所:

  • 大きいサイズ: 大きいサイズが最大の欠点です。多くのエクスプロイトで許可されているメモリ空間に収まらない可能性があり、その場合は使用できなくなります。
  • 検出されやすい: 大きな単一の実行可能ファイルは、アンチウイルスおよびセキュリティソリューションがそのサイズとシグネチャに基づいて悪意のあるものとして分析およびフラグを立てるのが容易であることがよくあります。

要約すると、サイズ制限のあるエクスプロイトを扱う場合は、ステージングペイロードを選択する必要があります。信頼性が最優先であり、エクスプロイト手法がより大きなペイロードサイズを処理できる場合は、ステージレスペイロードを選択する必要があります。

まとめ

この実験では、Metasploit Framework 内のステージングペイロードとステージレスペイロードの根本的な違いを探りました。

まず msfconsole を起動し、ステージングペイロードである windows/meterpreter/reverse_tcp を選択しました。その非常に小さいサイズを観察しましたが、これは軽量なステージャーとして設計されています。次に、そのステージレスの対応するペイロードである windows/meterpreter_reverse_tcp に切り替え、ペイロード全体が単一のパッケージに含まれているため、その著しく大きいサイズに注目しました。

最後に、各タイプの長所と短所をレビューし、それらの間の選択はサイズ、ステルス性、および信頼性の間のトレードオフに関わることを学びました。ステージングペイロードは小さいですが 2 回目の接続が必要であり、ステージレスペイロードは大きいですがより安定しており自己完結型です。この知識は、ペネトレーションテストのエンゲージメント中に効果的な意思決定を行うために不可欠です。