Metasploit Frameworkの強力なRPCインターフェースを使いこなそう!
はじめに:msfrpcとは?
Metasploit Framework (MSF) は、世界で最も広く利用されているペネトレーションテストツールの1つです。msfconsoleというインタラクティブなコンソールが有名ですが、MSFにはmsfrpc (Metasploit Framework Remote Procedure Call) という強力な機能が備わっています。
msfrpcは、HTTPベースのリモートプロシージャコール (RPC) サービスを提供し、外部のアプリケーションやスクリプトからMetasploitの機能をプログラム的に制御することを可能にします。これにより、以下のようなメリットが生まれます。
- 自動化: 定型的なタスク(脆弱性スキャン、エクスプロイトの試行、レポート作成など)をスクリプト化し、効率化できます。
- リモート操作: 別のマシンからMetasploitインスタンスを操作できます。例えば、リソースの少ないマシンから強力なサーバー上のMetasploitを制御するなど。
- 他のツールとの連携: 脆弱性スキャナや他のセキュリティツールと連携し、より高度なワークフローを構築できます。
- カスタムインターフェース: 独自のWebインターフェースやダッシュボードを開発し、Metasploitの機能を特定のニーズに合わせて利用できます。
msfrpcは、MessagePackまたはJSON形式で通信を行います。Rubyで書かれているMetasploitと最も親和性が高いのはRubyですが、Python、Java、Cなど、HTTPSとMessagePack/JSONをサポートする多くの言語で利用可能です。この記事では、特にPythonを使ったmsfrpcの活用方法を中心に解説していきます。
msfrpcサーバー (msfrpcd) の起動 サーバーの準備
msfrpcを利用するには、まずRPCサーバーであるmsfrpcd (Metasploit Framework RPC Daemon) を起動する必要があります。msfrpcdは、クライアントからの接続を受け付け、Metasploitの機能へのアクセスを提供します。
msfrpcdはMetasploit Frameworkに含まれており、通常はMetasploitのインストールディレクトリ内で実行します。Kali Linuxなどではパスが通っている場合もあります。
基本的な起動コマンド
最も基本的な起動コマンドは以下の通りです。
-U <ユーザー名>
: RPCサーバーへの接続に使用するユーザー名を指定します。-P <パスワード>
: RPCサーバーへの接続に使用するパスワードを指定します。
重要: 必ずユーザー名とパスワードを設定してください。認証なしで起動すると、誰でもMetasploitを操作できてしまい、非常に危険です。
主要なオプション
msfrpcdには様々なオプションがあり、挙動をカスタマイズできます。
オプション | 説明 | デフォルト値 |
---|---|---|
-h |
ヘルプメッセージを表示します。 | – |
-f |
フォアグラウンドで実行します(デーモン化しません)。デバッグ時に便利です。 | バックグラウンド実行 |
-a <IPアドレス> |
待ち受けるIPアドレスを指定します。 | 0.0.0.0 (すべてのインターフェース) |
-p <ポート番号> |
待ち受けるポート番号を指定します。 | 55553 |
-U <ユーザー名> |
認証用のユーザー名を指定します。必須。 | – |
-P <パスワード> |
認証用のパスワードを指定します。必須。 | – |
-S |
SSL/TLSを無効にします。デフォルトでは有効です。セキュリティ上、無効化は推奨されません。 | SSL/TLS有効 |
-x |
SSL/TLS証明書ファイルを指定します。 | 自動生成された証明書 |
-n |
認証を無効にします。非常に危険なため、絶対に使用しないでください。 | 認証有効 |
-t <タイプ> |
認証タイプを指定します (例: Basic)。 | – |
-u <URI> |
待ち受けるURIパスを指定します。 | /api/ |
起動例
例として、ユーザー名 `msfuser`、パスワード `secretpassword` で、ローカルホスト (127.0.0.1) のポート 55553 で、SSLを有効にしてフォアグラウンドで起動する場合のコマンドは以下のようになります。
起動すると、以下のようなメッセージが表示されます(バージョンによって多少異なります)。
起動確認
バックグラウンドで起動した場合、プロセスが実行されているか確認できます。
また、`netstat` や `ss` コマンドで指定したポートがリッスン状態になっているか確認することもできます。
- 必ず強力なパスワードを設定してください。
- 可能な限り、待ち受けるIPアドレス (
-a
) を限定してください (例:127.0.0.1
)。 - SSL/TLS (
-S
オプションで無効化しない) を使用し、通信を暗号化してください。 - ファイアウォールでmsfrpcdへのアクセスを適切に制御してください。
msfconsole からの起動 (msgrpc プラグイン)
msfrpcd を直接実行する代わりに、msfconsole 内で `msgrpc` プラグインをロードすることでもRPCサーバーを起動できます。
この方法では、msfconsole を起動している間だけRPCサーバーが動作します。オプションはmsfrpcdと似ていますが、`ServerHost`, `ServerPort`, `User`, `Pass`, `SSL` といった形式で指定します。
注: msgrpcプラグインを使用した場合、デフォルトのポート番号は `55552` となることがあります。msfrpcdのデフォルト `55553` とは異なる場合があるので注意が必要です。
msfrpcクライアントの利用:Python (pymetasploit3) 編
msfrpcdサーバーが起動したら、クライアントから接続してMetasploitを操作できます。様々な言語でクライアントを実装できますが、ここではPythonのライブラリ pymetasploit3 を使った方法を中心に解説します。
pymetasploit3は、Metasploit RPC API (MessagePack形式) をPythonから簡単に利用できるようにするためのライブラリです。元々存在した `pymetasploit` (Python 2向け) をPython 3向けにフォークし、改良されたものです (2019年頃に登場)。
pymetasploit3 のインストール
pipを使って簡単にインストールできます。
仮想環境 (venvやpipenv) を利用することを推奨します。
msfrpcdへの接続
`MsfRpcClient` クラスを使ってmsfrpcdサーバーに接続します。
- 第1引数: パスワード
username
: ユーザー名server
: msfrpcdが動作しているIPアドレスまたはホスト名port
: msfrpcdが待ち受けているポート番号ssl
: SSL/TLSを使用するかどうか (True/False)
接続に成功すると、`client` オブジェクトを通じて様々なMetasploitの機能にアクセスできます。
基本的なAPI操作例
`client` オブジェクトは、Metasploitの機能ごとにモジュール化されています。`dir(client)` を実行すると利用可能なモジュールを確認できます。
主なモジュールとその機能は以下の通りです。
モジュール名 | 主な機能 |
---|---|
client.core | Metasploitコアの操作 (バージョン情報取得、停止など) |
client.modules | モジュール (exploit, auxiliary, payload, post, nop, encoder) の一覧取得、情報取得、実行 |
client.sessions | アクティブなセッションの一覧取得、操作 (コマンド実行、停止) |
client.consoles | 仮想コンソールの作成、コマンド実行、破棄 |
client.jobs | バックグラウンドジョブの一覧取得、情報取得、停止 |
client.db | Metasploitデータベースとの連携 (Pro版やDB接続設定時) |
client.auth | 認証関連の操作 |
client.plugins | プラグインのロード、アンロード、一覧取得 |
Metasploitのバージョン情報を取得
利用可能な Exploit モジュールの一覧を取得
同様に、`client.modules.auxiliary`, `client.modules.payloads`, `client.modules.post` などで他のタイプのモジュール一覧も取得できます。
特定の Auxiliary モジュールの情報を取得
Auxiliary モジュールの実行
execute()
メソッドはモジュールをバックグラウンドジョブとして実行します。結果はすぐには返ってきません。ジョブの進捗や結果を確認するには、client.jobs
モジュールを使用します。
Exploit モジュールの実行とセッションの確認
Exploitの実行も通常はジョブとして投入されます。成功すると、client.sessions.list
で確立されたセッションを確認できます。client.sessions.session(<session_id>)
で特定のセッションオブジェクトを取得し、.write()
でコマンド送信、.read()
で結果の読み取りが可能です。
MsfRpcClient
で簡単に接続。client.modules
でモジュールを選択・設定。execute()
でモジュールを実行 (ジョブとして)。client.jobs
でジョブの状態を確認。client.sessions
で確立されたセッションを操作。
実践的なユースケース
msfrpc とクライアントライブラリ (pymetasploit3 など) を組み合わせることで、様々な自動化・連携が可能になります。
1. 脆弱性スキャン結果からの自動エクスプロイト試行
Nessus や OpenVAS などの脆弱性スキャナが出力したレポートを解析し、発見された脆弱性に対応する Metasploit モジュールを検索して自動的に実行するスクリプトを作成できます。
- 脆弱性スキャンレポート (XML, CSVなど) をパースする。
- 各脆弱性情報 (CVE ID, ポート番号、サービス名など) を抽出する。
- 抽出した情報を基に、
client.modules.search()
などを使って関連する Exploit モジュールを検索する (ただし、pymetasploit3 に直接的な search メソッドはない可能性があるため、client.modules.exploits
などで全リストを取得してフィルタリングするか、client.consoles
経由でsearch
コマンドを実行する必要があるかもしれません)。 - 見つかったモジュールに対して、レポートから得たターゲット情報 (IPアドレス、ポート) を設定する。
execute()
を使って Exploit を試行する。- セッションが確立されたか
client.sessions.list
で確認し、結果をログに記録する。
これにより、大量のホストに対する初期アクセス試行を効率化できます。ただし、無差別な攻撃にならないよう、対象範囲や実行するモジュールを慎重に選定する必要があります。
2. 定型的なペネトレーションテスト作業の自動化
ペネトレーションテストで毎回行うような定型作業をスクリプト化できます。例えば、「特定のサブネットに対してポートスキャン (nmap連携 or auxiliary/scanner) → 特定ポートが開いていれば既知の脆弱性 (例: SMB, FTP) をチェックする Auxiliary モジュールを実行 → 結果をファイルに保存」といった一連の流れを自動化します。
3. カスタムダッシュボードやレポートツールの作成
Flask や Django といった Web フレームワークと pymetasploit3 を組み合わせることで、Metasploit の情報を表示・操作するための独自の Web アプリケーションを作成できます。
- 現在アクティブなセッション一覧と詳細情報をリアルタイムに表示するダッシュボード。
- 実行中のジョブとその進捗状況を表示するパネル。
- 特定のホストに関する情報 (スキャン結果、確立されたセッションなど) をまとめて表示するページ。
- ボタンクリックで特定の Auxiliary モジュールや Post モジュールを実行するインターフェース。
- 収集した情報を基にカスタムレポート (HTML, PDF) を生成する機能。
これにより、チームメンバーが必要な情報にアクセスしやすくなったり、特定のタスクを実行しやすくなったりします。
4. 他のセキュリティツールとの連携
msfrpc API を介して、他のツールと Metasploit を連携させることができます。
- SIEM連携: Metasploit でセッションが確立されたり、特定のイベントが発生したりした場合に、その情報を SIEM (Security Information and Event Management) システムに送信する。
- 脅威インテリジェンス連携: 脅威インテリジェンスフィードから得られた悪意のある IP アドレスやドメインに対して、自動的に Metasploit のスキャンモジュールを実行する。
- インシデントレスポンス連携: インシデントレスポンスプラットフォームからトリガーを受け取り、侵害された可能性のあるホストに対して Metasploit の Post モジュール (情報収集、永続化解除など) を実行する。
これらの連携により、セキュリティ運用全体の自動化と効率化を図ることができます。
セキュリティに関する注意点
msfrpcは非常に強力な機能ですが、設定や運用を誤ると深刻なセキュリティリスクになり得ます。以下の点に十分注意してください。
1. 強力な認証情報の設定
-U
と-P
オプションで、推測されにくい複雑なユーザー名とパスワードを設定してください。- デフォルトの認証情報 (例: `msf`/`msf`) や簡単なパスワードは絶対に使用しないでください。
- 認証情報は安全な場所に保管し、不必要に共有しないでください。
2. SSL/TLSの強制使用
- デフォルトではmsfrpcdはSSL/TLSを有効にして起動します。
-S
オプションで無効にしないでください。 - SSL/TLSにより、クライアントとサーバー間の通信が暗号化され、認証情報や実行コマンドが盗聴されるのを防ぎます。
- 自己署名証明書ではなく、信頼できる認証局 (CA) によって署名された証明書を使用することが理想的ですが、環境によっては自己署名証明書でも最低限の暗号化は提供されます(クライアント側での証明書検証の設定が必要になる場合があります)。
3. ネットワークアクセス制御
- 待ち受けアドレスの限定:
-a
オプションで、msfrpcdが待ち受けるIPアドレスを可能な限り限定してください。ローカルマシンからのみアクセスする場合は127.0.0.1
を指定します。特定のクライアントマシンからのみアクセスを許可する場合は、そのクライアントが接続してくるネットワークインターフェースのIPアドレスを指定します。0.0.0.0
(全インターフェース) での待ち受けは、必要な場合を除き避けるべきです。 - ファイアウォール: サーバーのホストベースファイアウォール (iptables, ufw, firewalld など) やネットワークファイアウォールで、msfrpcdが使用するポート (デフォルト: 55553) へのアクセスを、許可されたクライアントIPアドレスからのみに制限してください。
4. 実行ユーザー権限の最小化
- msfrpcdをroot権限で実行することは避けてください。専用の一般ユーザーアカウントを作成し、そのユーザーでmsfrpcdを実行することを推奨します。
- これにより、万が一msfrpcd自体に脆弱性があった場合に、攻撃者が得られる権限を制限することができます。
5. 定期的なアップデート
- Metasploit Frameworkは頻繁にアップデートされます。msfrpcdを含むMetasploit Frameworkを常に最新の状態に保ち、既知の脆弱性に対処してください。
6. APIトークンの管理 (該当する場合)
- 一部のAPI連携では、パスワードの代わりに永続的なAPIトークンを使用できます。
- これらのトークンはパスワードと同様に機密情報として扱い、安全に管理してください。
- 不要になったトークンは削除してください。
- Metasploit Proなどでは、トークンの生成・管理機能が提供されています。
まとめ
msfrpcは、Metasploit Frameworkの強力な機能を外部からプログラム的に制御するためのインターフェースです。msfrpcdサーバーを適切に設定・起動し、pymetasploit3などのクライアントライブラリを使用することで、以下のような多くのメリットを享受できます。
- 自動化による効率向上: 定型作業をスクリプト化し、時間と労力を節約できます。
- リモートからの柔軟な操作: 場所を選ばずにMetasploitインスタンスを制御できます。
- ツール連携による高度化: 他のセキュリティツールと組み合わせ、より洗練されたワークフローを構築できます。
- カスタムソリューション開発: 特定のニーズに合わせた独自のツールやインターフェースを作成できます。
一方で、msfrpcは強力な機能であるがゆえに、セキュリティリスクも伴います。認証の強制、SSL/TLSによる暗号化、厳格なアクセス制御は必須です。これらの対策を怠ると、Metasploitが悪用される危険性が高まります。
この記事では、msfrpcdの起動方法、Pythonライブラリpymetasploit3を用いた基本的な使い方、実践的なユースケース、そして重要なセキュリティ上の注意点について解説しました。msfrpcを安全かつ効果的に活用し、ペネトレーションテストやセキュリティ評価の自動化・効率化に役立ててください。
さらに深く学びたい場合は、Metasploitの公式ドキュメントや、利用するクライアントライブラリのドキュメントを参照することをお勧めします。
参考情報
-
Metasploit Framework – Kali Linux Tools:
https://www.kali.org/tools/metasploit-framework/
Kali LinuxにおけるMetasploit Frameworkの概要ページ。msfrpcdについても触れられています。
-
Metasploit Documentation – RPC API:
https://docs.metasploit.com/docs/using-metasploit/advanced/rpc/rpc-api.html
Rapid7による公式のRPC APIドキュメント。サーバーの起動方法、認証、API呼び出しについて詳細に説明されています。(情報はdocs.metasploit.com や metasploit.help.rapid7.com など複数の場所に分散している可能性があります)
-
pymetasploit3 – PyPI:
https://pypi.org/project/pymetasploit3/
Pythonライブラリ pymetasploit3 のPyPIページ。インストール方法や基本的な使い方の例が記載されています (最終更新: 2019年)。
-
pymetasploit3 – GitHub (DanMcInerney):
https://github.com/DanMcInerney/pymetasploit3
pymetasploit3 の GitHub リポジトリ。ソースコードや詳細な使用例を確認できます。