はじめに
「エクスプロイトモジュールの理解」実験へようこそ!
ペネトレーションテストにおいて、脆弱性を武器化(weaponize)するとは、エクスプロイトモジュールを使用してターゲットシステムにペイロードを送り込むことを意味します。Metasploit Framework はこの目的のために最も広く利用されているツールの一つであり、既知の様々な脆弱性に対する膨大なエクスプロイトモジュールのデータベースを提供しています。
しかし、成熟したエクスプロイト作業は単なる「検索して実行」ではありません。適切なモジュールを選択し、その前提条件を理解し、慎重に設定を行い、破壊的なアクションを起こす前にターゲットをチェックするという、体系的なプロセスが必要です。
この実験では、これらのモジュールを使用するための標準的な手法を学びます。実際の脆弱性を検索し、モジュールの要件を分析し、ターゲットオプションを設定し、実際の攻撃を開始する前に脆弱なサービスを安全にチェックする手順を実践します。
特定のエクスプロイトの検索 (CVE/名前)
このステップでは、Metasploit Framework コンソールを起動し、特定のエクスプロイトモジュールを検索する方法を学びます。
Metasploit には数千ものモジュールが含まれています。適切なものを見つけるには、searchコマンドを使用します。ソフトウェア名、脆弱性の種類、または CVE 番号などの特定の識別子で検索できます。この実験では、127.0.0.1:8080で公開されている実際の Shellshock ターゲットを対象とします。
まず、Metasploit コンソールを起動します。-qフラグは「quiet」モードで起動するために使用され、起動時のバナー表示をスキップします。
msfconsole -q
コンソールが読み込まれると、プロンプトが msf6 > に変わります。次に、searchコマンドを使用して Shellshock に関連するモジュールを探します。
脆弱性のファミリーや CVE で検索することは、偵察からエクスプロイト候補のロジックへと繋ぐ最も速い方法です。
search shellshock
一致するモジュールがリストされたテーブルが表示されます。Name 列に注目してください。ここにはモジュールのパスが表示されています。この実験で扱うエクスプロイトモジュールは exploit/multi/http/apache_mod_cgi_bash_env_exec です。Disclosure Date 列は、その脆弱性が公開された時期を示しています。Rank 列はエクスプロイトの信頼性(例:Excellent、Good、Normalなど)を表します。最後に、Check 列は、そのモジュールがより安全な脆弱性チェック機能をサポートしているかどうかを示しています。
モジュール情報の分析 (info)
このステップでは、見つけたエクスプロイトモジュールを選択し、その詳細を分析します。
使用したいモジュールを Metasploit に指示するには、useコマンドの後にモジュール名(検索結果に表示されたパス)を指定します。
msf6 > プロンプトで以下のコマンドを入力してください:
use exploit/multi/http/apache_mod_cgi_bash_env_exec
プロンプトがモジュール名を含むように変化し、現在アクティブであることを示しています。設定を行う前に、そのモジュールが何をするものかを理解することがベストプラクティスです。これには info コマンドを使用します。
info
info コマンドは豊富な情報を提供します。これには、モジュールを提供した人物(開発した著者や研究者)の詳細が含まれます。また、次のステップで設定する必要があるパラメータである「基本オプション」もリストされます。さらに、脆弱性がどのように機能し、エクスプロイトがそれをどのように悪用するかの詳細な説明も提供されます。最後に、参考文献として、詳細な調査のための外部データベース(National Vulnerability Database など)へのリンクも提供されます。
この情報を読むことは、オペレーターの規律の一部です。モジュールによっては、非常に特定のパス、プロトコル動作、または環境を必要とする場合があります。その文脈を飛ばしてしまうと、実質的に推測で作業することになります。
説明を読んで、Shellshock 脆弱性のメカニズムと、このモジュールがどのように CGI 環境変数を悪用するのかを理解してください。
エクスプロイトターゲットとオプションの設定
このステップでは、エクスプロイトモジュールを特定のターゲットに向けるために必要なオプションを設定します。
すべてのモジュールには、設定すべき特定のパラメータがあります。現在の設定を確認するには、show optionsコマンドを使用します。
show options
Required 列を見てください。オプションが yes となっている場合、モジュールを実行する前に設定する必要があります。設定が必要な最も一般的なオプションは、RHOSTS(リモートホスト:ターゲットの IP アドレス)と RPORT(リモートポート:脆弱なサービスが実行されているポート)です。Web エクスプロイトモジュールの場合、多くの場合 TARGETURI も必要です。これは、どの HTTP パスに悪意のあるリクエストを送信すべきかを Metasploit に伝えます。
今回の脆弱なターゲットはローカルのポート 8080 で実行されており、脆弱な CGI パスは /cgi-bin/vulnerable です。setコマンドを使用してこれらのパラメータを設定します:
set RHOSTS 127.0.0.1
set RPORT 8080
set TARGETURI /cgi-bin/vulnerable
値を設定した後、変更が正しく適用されたかを確認することをお勧めします。再度 show options コマンドを実行してください。
show options
RHOSTS の現在の設定に 127.0.0.1、RPORT に 8080、TARGETURI に /cgi-bin/vulnerable が表示されているはずです。
脆弱性ステータスの確認 (check)
このステップでは、攻撃を開始する前に、ターゲットが実際に脆弱であるかどうかを検証します。
checkワークフローが存在するのは、安全性と信頼性が重要だからです。まず脆弱性を確認することで、不要なノイズ、失敗した試行、サービスの不安定化を減らすことができます。
プロのペネトレーションテストにおいて、盲目的にエクスプロイトを実行すると、サービスをクラッシュさせたり、セキュリティアラートをトリガーしたりする可能性があります。幸いなことに、多くの Metasploit モジュール(今回使用しているものを含む)は check コマンドをサポートしています。
check コマンドは、完全なエクスプロイトペイロードを即座に起動することなく、脆弱性が存在するかどうかを判断するためにターゲットへプローブを送信します。
Metasploit プロンプトで以下のコマンドを実行してください:
check
この実験では、Shellshock ターゲットは意図的に脆弱に設定されているため、以下のような出力が表示されるはずです:
[+] 127.0.0.1:8080 - The target is vulnerable.
これで、ターゲットがこのモジュールに対して脆弱であることが確認できました。これで、適切なモジュールの検索、ドキュメントの確認、必要なオプションの設定、そしてエクスプロイト前のターゲット検証という、エクスプロイトモジュールの主要なワークフローが完了しました。
Metasploit 以外で手動で確認したい場合は、別のターミナルから curl http://127.0.0.1:8080 を実行し、http://127.0.0.1:8080/cgi-bin/vulnerable に CGI パスが存在することを確認できます。
モジュールの操作手法を理解するという目的を達成しましたので、Metasploit コンソールを終了します:
exit
まとめ
おめでとうございます!「エクスプロイトモジュールの理解」実験を無事に完了しました。
この実験では、Metasploit Framework を使用して脆弱性を武器化するための基本的な手法を学びました。実際の Shellshock エクスプロイトの検索、モジュールの説明と要件の分析、RHOSTS、RPORT、TARGETURI などのリモートターゲットオプションの設定、そして組み込みの check 機能を使用して脆弱なターゲットを安全に検証する方法を実践しました。これらのステップは、エクスプロイトモジュールを扱うすべてのペネトレーションテスターにとってのコアワークフローとなります。



