Metasploit Frameworkの隠れた(?)ツールを徹底解説
Metasploit Frameworkは、ペネトレーションテストやセキュリティ研究において広く利用されている強力なプラットフォームです。数多くのエクスプロイトモジュールや補助ツールが含まれていますが、その中には特定の状況下で非常に役立つものの、あまり知られていないツールも存在します。今回解説するmsf-halflm_second
もその一つです。
この記事では、msf-halflm_second
がどのようなツールで、どのような場面で役立つのか、そして具体的な使い方について、初心者にも分かりやすく解説していきます。特に、古いWindowsシステムに残存する可能性のあるLAN Manager (LM) ハッシュの弱点に焦点を当て、その解析プロセスを詳しく見ていきましょう。🕵️♂️
1. msf-halflm_secondとは何か? 🤔
msf-halflm_second
は、Metasploit Frameworkに含まれるコマンドラインツールの一つです。その主な目的は、LAN Manager (LM) ハッシュの後半部分 (second half) を解析・クラックすることにあります。
1.1. なぜLMハッシュ? 古い認証方式の遺産
LMハッシュは、Windows NTが登場する前の古いWindows OS (LAN Manager, Windows for Workgroups, Windows 95/98など) で標準的に使用されていたパスワードハッシュ形式です。後方互換性のために、Windows NT以降のOS (Windows 2000, XP, Server 2003など) でも、設定によってはLMハッシュがNTハッシュ (より強力なハッシュ形式) と共に保存されていました。
しかし、LMハッシュには設計上の深刻な脆弱性が存在します:
- 大文字小文字を区別しない: パスワードはハッシュ化される前に全て大文字に変換されます。これにより、パスワードの探索空間が大幅に縮小します。
- パスワード長の制限と分割:
- パスワードが14文字を超える場合、LMハッシュは生成されません (正確には、特定の値が格納され、認証には使えなくなります)。
- パスワードが14文字以下の場合、まず14文字になるようにNULL文字 (ASCII 0) でパディングされます。
- その後、前半7文字と後半7文字に分割され、それぞれ独立してDESベースの暗号化処理が行われます。
この「7文字ずつ分割して処理する」という点が最大の弱点です。どんなに長いパスワード (最大14文字) でも、実質的には最大7文字のパスワードを2回クラックするのと同じ難易度になってしまうのです。現代の計算能力をもってすれば、7文字のパスワード (大文字のみ+記号) の総当たり攻撃は比較的容易です。
⚠️ 注意: Windows Vista/Server 2008以降のOSでは、デフォルトでLMハッシュの保存が無効になっています。また、グループポリシーなどでLMハッシュの保存を無効化することが強く推奨されています。したがって、現代的な環境でLMハッシュに遭遇する機会は稀ですが、古いシステムが残存している環境や、互換性のために設定が変更されている場合には依然として問題となる可能性があります。
1.2. msf-halflm_secondの役割
msf-halflm_second
は、このLMハッシュの後半7文字部分の解析に特化したツールです。特に、MetasploitのSMBキャプチャモジュール (auxiliary/server/capture/smb
) などで、固定されたチャレンジ値 (1122334455667788
) を使用してLMチャレンジ/レスポンス認証を傍受した場合に真価を発揮します。
通常のLM認証では、サーバーはランダムな8バイトのチャレンジ値をクライアントに送信します。クライアントはパスワードのLMハッシュを鍵として、このチャレンジ値を暗号化し、レスポンスとしてサーバーに返します。サーバーは自身の持つLMハッシュで同じ計算を行い、結果が一致すれば認証成功となります。
しかし、auxiliary/server/capture/smb
モジュールでチャレンジ値を固定 (1122334455667788
) すると、同じパスワードを持つクライアントは常に同じレスポンスを返すことになります。この固定チャレンジに対するレスポンス(=暗号化されたLMハッシュ)と、パスワードの前半7文字が分かっていれば、msf-halflm_second
は後半7文字を効率的にブルートフォース(総当たり)攻撃で見つけ出すことができるのです。
2. 前提知識と準備 ⚙️
このツールを効果的に使うためには、いくつかの前提知識と準備が必要です。
2.1. 必要な知識
- Metasploit Frameworkの基本操作:
msfconsole
の起動、モジュールの検索 (search
)、選択 (use
)、オプション表示 (show options
)、設定 (set
)、実行 (run
/exploit
) など、基本的なコマンド操作に慣れている必要があります。 - LM/NTLM認証の概要: LMハッシュとNTハッシュの違い、チャレンジ/レスポンス認証の基本的な仕組みを理解していると、ツールの動作原理や応用方法がより深く理解できます。特にLMハッシュの7文字分割の仕組みは重要です。
- パスワードハッシュとクラッキングの基礎: ハッシュとは何か、なぜクラックできるのか(ブルートフォース、辞書攻撃、レインボーテーブルなど)といった基本的な知識があると役立ちます。
2.2. 必要な環境
- Metasploit Framework: 当然ながら、Metasploit Frameworkがインストールされている必要があります。Kali Linuxなどのペネトレーションテスト用ディストリビューションには標準で含まれていることが多いです。
最新版のMetasploit Frameworkを利用することをお勧めします。インストールやアップデートについては、公式サイトや各ディストリビューションのドキュメントを参照してください。
2.3. ツールの存在確認
msf-halflm_second
は、Metasploit Frameworkにバンドルされている独立したコマンドラインツールとして提供されています。通常のLinuxターミナルやコマンドプロンプトから直接実行できます。
まず、ツールが存在し、実行可能かを確認しましょう。ターミナルを開き、以下のコマンドを実行します。
msf-halflm_second -h
以下のようなヘルプメッセージが表示されれば、ツールは利用可能です。
Usage: msf-halflm_second <options>
OPTIONS:
-h Display this help information
-n <hash> The encrypted LM hash to crack
-p <pass> The decrypted LANMAN password for bytes 1-7
-s <chal> The server challenge (default value 1122334455667788)
(注: ヘルプメッセージの内容はバージョンによって若干異なる場合があります)
もしコマンドが見つからない (command not found
) と表示される場合は、Metasploit Frameworkのインストールパスが環境変数PATH
に含まれていない可能性があります。Metasploitのインストールディレクトリ内のtools
ディレクトリなどを探してみてください (例: /usr/share/metasploit-framework/tools/exploit/
など、環境によって異なります)。
また、msfconsole
内からもauxiliary/analyze/halflm_second
というモジュールとして利用できるか確認してみましょう。ただし、私の調査した範囲では、このパスのモジュールは標準では存在しないか、古いバージョンでのみ提供されていた可能性があります。基本的にはコマンドラインツールとして利用するのが確実です。
msfconsole
msf6 > search halflm_second
もしモジュールが見つかれば、それを利用することも可能ですが、本記事では主にコマンドラインツールとしての使い方を解説します。
3. 基本的な使い方 (コマンドラインツール) 💻
msf-halflm_second
の基本的な使い方は非常にシンプルです。主に3つのオプションを指定して実行します。
3.1. 主要オプション
ヘルプメッセージ (msf-halflm_second -h
) で確認したオプションについて詳しく見ていきましょう。
オプション | 必須 | 説明 | 例 |
---|---|---|---|
-h |
いいえ | ヘルプメッセージを表示します。 | msf-halflm_second -h |
-n <hash> |
はい | 解析対象となる、暗号化されたLMレスポンス全体 (LMハッシュではない点に注意) を16進数文字列で指定します。通常、SMBキャプチャなどで取得したチャレンジ/レスポンスの値です。LMハッシュ自体は32文字 (16バイト) ですが、キャプチャされるレスポンスは通常48文字 (24バイト) です。 | -n daf07fe6c760f6e45d069e8eb8df08dcecf946cd083f94aa |
-p <pass> |
はい | 既に判明している、パスワードの前半7文字を指定します。必ず大文字で指定する必要があります (LMハッシュの仕様のため)。 | -p PASSWORD |
-s <chal> |
いいえ | 認証時に使用されたサーバーチャレンジを16進数文字列で指定します。デフォルト値は1122334455667788 です。Metasploitのauxiliary/server/capture/smb モジュールでチャレンジ値を固定した場合、通常はこのデフォルト値が使われます。異なるチャレンジ値で取得したレスポンスを解析する場合は、その値を指定する必要があります。 |
-s 1122334455667788 (デフォルト) |
3.2. 実行例
仮に、以下の情報が得られているとします。
- 取得したLMレスポンス:
daf07fe6c760f6e45d069e8eb8df08dcecf946cd083f94aa
- 使用されたチャレンジ:
1122334455667788
(デフォルト) - パスワードの前半7文字 (大文字):
NEVER1Q
この場合、以下のコマンドを実行します。
msf-halflm_second -n daf07fe6c760f6e45d069e8eb8df08dcecf946cd083f94aa -p NEVER1Q -s 1122334455667788
あるいは、チャレンジがデフォルト値の場合は -s
オプションを省略できます。
msf-halflm_second -n daf07fe6c760f6e45d069e8eb8df08dcecf946cd083f94aa -p NEVER1Q
3.3. 出力の解釈
解析に成功すると、以下のような出力が得られます (実際の出力は若干異なる場合があります)。
[*] Trying one character...
[*] Trying two characters...
[*] Trying three characters...
[*] Trying four characters...
[*] Trying five characters...
[*] Trying six characters...
[*] Trying seven characters...
[*] Cracked: NEVER1Q2
この例では、パスワードの後半部分が「2」であることが特定されました。したがって、完全なパスワードは「NEVER1Q2」(大文字小文字は不明) であると推測できます。
もし解析に失敗した場合 (指定した前半パスワードが間違っている、レスポンスやチャレンジの値が間違っている、など) は、最後まで探索しても結果が見つからず、”Cracked:” の行が表示されない可能性があります。
4. 連携シナリオ: SMBハッシュ取得からの解析 🔗
msf-halflm_second
が最も効果を発揮するのは、MetasploitのSMBキャプチャモジュールと連携するシナリオです。以下にその典型的な流れを示します。
ステップ1: SMBレスポンスのキャプチャ (固定チャレンジ使用)
まず、msfconsole
を起動し、auxiliary/server/capture/smb
モジュールを使用します。ここで重要なのは、CHALLENGE
オプションをmsf-halflm_second
のデフォルト値である1122334455667788
に設定することです。また、取得したハッシュを保存するためにJOHNPWFILE
オプションも設定しておくと便利です。
msf6 > use auxiliary/server/capture/smb
msf6 auxiliary(server/capture/smb) > show options
Module options (auxiliary/server/capture/smb):
Name Current Setting Required Description
---- --------------- -------- -----------
CAINPWFILE no The local filename to store the hashes in Cain&Abel format
CHALLENGE Random yes The 8 byte challenge value to use (HEX)
JOHNPWFILE no The local filename to store the hashes in John the Ripper format
LOGFILE no The local filename to store the captured hashes
SRVHOST 0.0.0.0 yes The local host or network interface to listen on. This must be an address on the local machine or 0.0.0.0 to listen on all addresses.
SRVPORT 445 yes The local port to listen on.
SSL false no Negotiate SSL for incoming connections
SSLCert no Path to a custom SSL certificate (default is randomly generated)
SSLVersion Auto yes Specify the version of SSL/TLS to be used (Auto, TLS1, TLS1.1, TLS1.2, SSL2, SSL3)
SUPPRESS_NO_NTLMV2_RESPONSEtrue yes Suppress the log messages for clients that do not respond with NTLMv2
msf6 auxiliary(server/capture/smb) > set CHALLENGE 1122334455667788
CHALLENGE => 1122334455667788
msf6 auxiliary(server/capture/smb) > set JOHNPWFILE /tmp/captured_hashes.txt
JOHNPWFILE => /tmp/captured_hashes.txt
msf6 auxiliary(server/capture/smb) > run
[*] Auxiliary module running as background job 0.
[*] SMB Capture Server started.
次に、ターゲットとなるクライアントに、Metasploitを実行しているマシン上のSMB共有 (存在しなくても良い) へアクセスさせます。これは、悪意のあるWebページにUNCパス (\\<MetasploitのIPアドレス>\share
) を埋め込んだり、メールで送信したり、あるいはLLMNR/NBT-NSスプーフィング (auxiliary/spoof/llmnr
, auxiliary/spoof/nbns
) などと組み合わせることでトリガーできます。
クライアントが接続を試みると、認証情報がキャプチャされ、コンソールと指定したファイル (/tmp/captured_hashes.txt
) に記録されます。
[*] SMB Captured - 2025-03-30 04:47:00 +0000 - <ターゲットIP>
[*] SMB Captured - <ターゲットIP>:139 Request Captured: <ターゲットユーザー名> Domain: <ターゲットドメイン> OS: Windows_Version LM: OS_LM_Version
[*] SMB Captured - <ターゲットIP>:139 NTLMv1 Response Captured: <ターゲットユーザー名> Domain: <ターゲットドメイン> OS: Windows_Version LM: OS_LM_Version
LMHASH:daf07fe6c760f6e45d069e8eb8df08dc NTHASH:ecf946cd083f94aa0000000000000000
LM_CLIENT_CHALLENGE:eeb88e9966554433
HOST:<ターゲットIP> DOMAIN:<ターゲットドメイン> USER:<ターゲットユーザー名> TIME:2025-03-30T04:47:00.000Z LMHASH:daf07fe6c760f6e45d069e8eb8df08dc NTHASH:ecf946cd083f94aa0000000000000000 LM_CHALLENGE:eeb88e9966554433 NTLM_CHALLENGE:0101000000000000eeb88e996655443300000000000000000000000000000000
[*] SMB Captured - <ターゲットIP>:139 LM Response Captured: <ターゲットユーザー名> Domain: <ターゲットドメイン> OS: Windows_Version LM: OS_LM_Version
LM_RESPONSE:daf07fe6c760f6e45d069e8eb8df08dcecf946cd083f94aa
HOST:<ターゲットIP> DOMAIN:<ターゲットドメイン> USER:<ターゲットユーザー名> TIME:2025-03-30T04:47:00.000Z LM_RESPONSE:daf07fe6c760f6e45d069e8eb8df08dcecf946cd083f94aa
この出力から、以下の情報が得られました:
- LMレスポンス (
msf-halflm_second
の-n
オプション用):daf07fe6c760f6e45d069e8eb8df08dcecf946cd083f94aa
- LMハッシュ (前半・後半の解析用):
daf07fe6c760f6e45d069e8eb8df08dc
(レスポンスの前半32文字) - NTハッシュ:
ecf946cd083f94aa0000000000000000
- 使用されたチャレンジ (確認用):
1122334455667788
(キャプチャログにはクライアントチャレンジも含まれる場合があるため注意)
また、/tmp/captured_hashes.txt
にはJohn the Ripper形式で記録されます。
<ターゲットユーザー名>:$NETLM$1122334455667788$daf07fe6c760f6e45d069e8eb8df08dcecf946cd083f94aa
ステップ2: パスワード前半の解析
次に、取得したLMハッシュ (daf07fe6c760f6e45d069e8eb8df08dc
) の前半部分 (daf07fe6c760f6e4
) を解析し、パスワードの前半7文字を特定します。
これには、John the RipperやHashcatなどの専用パスワードクラッキングツールを使用します。John the Ripperを使う場合の例を示します。
まず、LMハッシュの前半部分だけをファイルに保存します。
echo "user:daf07fe6c760f6e4" > /tmp/lm_first_half.txt
次に、John the Ripperを実行します (辞書ファイル password.lst
を使用)。
john --format=lm --wordlist=password.lst /tmp/lm_first_half.txt
クラックに成功すると、パスワードの前半部分 (例: NEVER1Q
) が表示されます。
あるいは、Metasploit内のクラッキングモジュール (auxiliary/analyze/crack_windows
など) を利用することもできますが、John the RipperやHashcatを直接使う方が柔軟性が高い場合が多いです。
ステップ3: msf-halflm_secondによる後半解析
パスワードの前半7文字 (NEVER1Q
) が判明したら、いよいよmsf-halflm_second
の出番です。ステップ1で取得したLMレスポンス (-n
) と、ステップ2で判明した前半パスワード (-p
) を指定して実行します。チャレンジはデフォルト値 (1122334455667788
) を使用したため、-s
オプションは省略可能です。
msf-halflm_second -n daf07fe6c760f6e45d069e8eb8df08dcecf946cd083f94aa -p NEVER1Q
これにより、パスワードの後半部分 (例: 2
) が特定されます。
ステップ4: 結果の統合
最後に、特定された前半部分 (NEVER1Q
) と後半部分 (2
) を結合し、完全なパスワード (NEVER1Q2
) を復元します。ただし、これはLMハッシュから復元されたものであり、元々のパスワードの大文字小文字は反映されていません。実際のパスワードは「Never1q2」や「never1Q2」などである可能性もあります。NTハッシュ (ecf946cd083f94aa0000000000000000
) のクラックも試みることで、大文字小文字を含めて特定できる可能性があります。
5. 注意点と限界 ⚠️
msf-halflm_second
は特定の条件下で有効ですが、万能ではありません。以下の点に注意してください。
- LMハッシュの利用状況: 現代のWindows環境 (Vista/Server 2008以降) では、LMハッシュはデフォルトで無効です。グループポリシーで無効化されている場合も多く、このツールが活躍する場面は限定的です。古いシステムや特殊な設定が残る環境がターゲットとなります。
- NTLMv1/v2への非対応: このツールはLMハッシュ (のレスポンス) 専用です。NTLMv1や、より安全なNTLMv2、Kerberos認証の解析には使用できません。
- チャレンジ値の重要性:
msf-halflm_second
は、特定のチャレンジ値 (デフォルト:1122334455667788
) に対するレスポンスを解析するように設計されています。異なるチャレンジ値で取得したレスポンスを解析する場合は、-s
オプションで正しいチャレンジ値を指定する必要があります。ランダムなチャレンジ値で取得したレスポンスの場合、このツール単体での解析は困難です (他のツールや手法が必要になります)。 - パスワード前半への依存: このツールは、パスワードの前半7文字が既知であることを前提としています。前半部分が特定できなければ、後半部分の解析は開始できません。
- 処理速度: パスワード後半の探索空間は7文字分ですが、それでも対象文字セットによっては時間がかかる場合があります。
6. まとめ ✨
msf-halflm_second
は、Metasploit Frameworkに含まれるニッチながらも興味深いツールです。古いWindows認証方式であるLMハッシュの脆弱性を利用し、特に固定チャレンジ値でキャプチャされたLMレスポンスの後半部分を解析するのに役立ちます。
現代のセキュリティ環境では活躍の場は限られますが、レガシーシステムが残存する環境でのペネトレーションテストや、認証プロトコルの歴史と脆弱性を学ぶ上で価値のあるツールと言えるでしょう。SMBキャプチャモジュールや他のパスワードクラッキングツールとの連携により、限定的ながらもパスワード復元の手がかりを得られる可能性があります。
💡 ポイントのおさらい:
- LMハッシュの後半7文字の解析に特化。
- 固定チャレンジ (
1122334455667788
) で取得したLMレスポンスに有効。 - パスワードの前半7文字 (大文字) が既知である必要がある。
- コマンドラインツールとして利用するのが基本。
- 現代では利用場面は限定的だが、教育的価値やレガシー環境での利用可能性あり。
7. 参考情報・さらなる学習のために 📚
- Metasploit Unleashed: Metasploit Frameworkの包括的な無料オンライントレーニングコース。様々なモジュールやツールの使い方を学べます。
https://www.offsec.com/metasploit-unleashed/ - Metasploit Framework Documentation: Rapid7による公式ドキュメント。
https://docs.metasploit.com/ (リンク先は変更される可能性があります) - LMハッシュに関する情報 (Microsoft Learn): LMハッシュの概要や無効化について。
- Kali Linux Tools – metasploit-framework: Kali Linuxに含まれるMetasploit関連ツールのリストと簡単なヘルプ。
https://www.kali.org/tools/metasploit-framework/
コメント