John the Ripper を使用した NTLM ハッシュのクラッキング

Kali LinuxBeginner
オンラインで実践に進む

はじめに

この実験では、強力なパスワードクラッキングツールである John the Ripper を使用して、NTLM (NT LAN Manager) ハッシュをクラックする実践的な経験を積みます。NTLM ハッシュは、Windows 環境でユーザーパスワードを保存するためによく使用されます。これらのハッシュがどのようにクラックされるかを理解することは、パスワードセキュリティの脆弱性を理解し、より強力なセキュリティ対策を実装するために不可欠です。

まず、NTLM ハッシュの抽出をシミュレートし、次に John the Ripper 用に正しくフォーマットする方法を学びます。その後、辞書攻撃(単語リストを使用)とブルートフォース攻撃(インクリメンタルモードを使用)という 2 つの主要なクラッキング方法を使用します。最後に、NTLM ハッシュのセキュリティへの影響と、強力なパスワードポリシーの重要性について考察します。この実験は、サイバーセキュリティの基本的な概念に対する実践的なアプローチを提供します。

システムから NTLM ハッシュを抽出する

このステップでは、NTLM ハッシュの抽出をシミュレートします。実際のシナリオでは、NTLM ハッシュは、Windows システムの Security Account Manager (SAM) データベース、Active Directory、またはネットワークトラフィックなど、さまざまなソースから抽出できます。この実験では、~/project ディレクトリに hashes.txt という名前のファイルが既に用意されており、サンプル NTLM ハッシュが含まれています。

まず、hashes.txt ファイルの存在を確認し、その内容を調べましょう。このファイルには複数の行が含まれており、各行はユーザーのエントリとその NTLM ハッシュを表しています。フォーマットは通常、ユーザー名、ユーザーID、LM ハッシュ(多くの場合空またはデフォルト)、NTLM ハッシュ、その他のフィールドを含みます。ここでは NTLM ハッシュの部分に焦点を当てます。

ls コマンドを使用して現在のディレクトリのファイルを一覧表示し、次に cat コマンドを使用して hashes.txt の内容を表示します。

ls -l ~/project/hashes.txt
cat ~/project/hashes.txt

以下のような出力が表示され、ファイルの詳細はその内容とともに示されます。

-rw-r--r-- 1 labex labex 300 Mar 10 10:00 /home/labex/project/hashes.txt
user1:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
user2:501:aad3b435b51404eeaad3b435b51404ee:209c6174efb4b710:209c6174efb4b710:::
user3:502:aad3b435b51404eeaad3b435b51404ee:8846f7eaee8fb117ad065adec1000000:::
user4:503:aad3b435b51404eeaad3b435b51404ee:e52cac67419a9a224a30370a31323334:::
user5:504:aad3b435b51404eeaad3b435b51404ee:d41d8cd98f00b204e9800998ecf8427e:::

NTLM ハッシュは、各行の 4 番目のフィールドで、コロンで区切られています。例えば、user1 の NTLM ハッシュは 31d6cfe0d16ae931b73c59d7e0c089c0 です。

John the Ripper 用に NTLM ハッシュをフォーマットする

このステップでは、NTLM ハッシュを John the Ripper 用に準備します。John the Ripper は多くの場合、さまざまなハッシュフォーマットを自動的に処理できますが、期待される入力を理解しておくことは良い習慣です。NTLM ハッシュの場合、John the Ripper は通常 username:NTLM_hash というフォーマットを期待します。

私たちの hashes.txt ファイルには追加のフィールドが含まれています。ユーザー名と NTLM ハッシュのみを抽出する必要があります。これを行うために cut コマンドを使用できます。cut コマンドは、ファイルの各行からセクションを抽出できます。ここでは : を区切り文字として使用し、最初のフィールドと 4 番目のフィールドを選択します。

以下のコマンドを実行してハッシュを抽出しフォーマットし、その出力を ~/project ディレクトリにある ntlm_hashes.txt という新しいファイルにリダイレクトしてください。

cut -d ':' -f 1,4 ~/project/hashes.txt > ~/project/ntlm_hashes.txt
cat ~/project/ntlm_hashes.txt

John the Ripper 用に準備されたフォーマット済みのハッシュが表示されるはずです。

user1:31d6cfe0d16ae931b73c59d7e0c089c0
user2:209c6174efb4b710
user3:8846f7eaee8fb117ad065adec1000000
user4:e52cac67419a9a224a30370a31323334
user5:d41d8cd98f00b204e9800998ecf8427e

この ntlm_hashes.txt ファイルには、ユーザー名とその対応する NTLM ハッシュのみが含まれており、これは John the Ripper にとって理想的なフォーマットです。

単語リストを使用して NTLM ハッシュをクラックする

このステップでは、John the Ripper を使用して単語リスト(辞書攻撃とも呼ばれます)を使用して NTLM ハッシュをクラックします。単語リストは、一般的なパスワード、辞書単語、または以前に漏洩したパスワードのリストを含むファイルです。これは、弱いパスワードをクラックするための最も効果的な方法であることがよくあります。

~/project ディレクトリに wordlist.txt という名前の簡単な単語リストファイルを用意しました。まず、その内容を確認しましょう。

cat ~/project/wordlist.txt

以下のような内容が表示されるはずです。

password
123456
qwerty
admin
test

次に、wordlist.txt を使用して John the Ripper で ntlm_hashes.txt のハッシュをクラックします。コマンド john --format=NT --wordlist=wordlist.txt ntlm_hashes.txt は、ハッシュフォーマットを NTLM(NT)として指定し、使用する単語リストとハッシュを含むファイルを指定します。

john --format=NT --wordlist=~/project/wordlist.txt ~/project/ntlm_hashes.txt

John the Ripper はハッシュのクラックを試みます。以下のような出力が表示され、どのハッシュがクラックされたかを示します。

Using default input encoding: UTF-8
Loaded 5 password hashes with no different salts (NT [MD4 HASHES])
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
123456           (user4)
test             (user2)
password         (user1)
3g 0:00:00:00 DONE (2023-10-27 08:00) 100.0% (ETA: 08:00) 3.750g/s 11.25p/s 11.25c/s 11.25C/s 123456...test
Session completed.

クラッキングプロセス後、john --show コマンドを使用してクラックされたパスワードを表示できます。

john --show ~/project/ntlm_hashes.txt

出力には、クラックされたハッシュとその対応するプレーンテキストパスワードのリストが表示されます。

user1:password
user2:test
user4:123456

3 password hashes cracked, 2 left

これにより、user1 のパスワードは passworduser2 のパスワードは testuser4 のパスワードは 123456 であることがわかります。他の 2 つのハッシュ(user3user5)は、この単語リストではクラックされませんでした。これは、それらのパスワードがより強力であるか、または私たちの簡単な単語リストに含まれていないことを示唆しています。

インクリメンタルモードで NTLM ハッシュをクラックする

このステップでは、John the Ripper のインクリメンタルモードを探索します。これはブルートフォース攻撃を実行します。単語リスト攻撃とは異なり、インクリメンタルモードは短い単純な組み合わせから始めて徐々に複雑さを増しながら、体系的に文字の組み合わせを試します。この方法は、単語リストにないパスワードをクラックするのに効果的ですが、長いまたは複雑なパスワードの場合は非常に時間がかかる可能性があります。

John the Ripper のインクリメンタルモードは、文字セットとルールを使用してパスワードを生成します。NTLM ハッシュの場合、NT フォーマットを指定し、--incremental オプションを使用できます。John the Ripper には組み込みのインクリメンタルモード(例:alnumdigitsall)があります。ここでは、さまざまな文字セットを試すデフォルトのインクリメンタルモードを使用します。

インクリメンタルモードを実行する前に、以前にクラックされたハッシュとの競合を避けるために、John the Ripper のセッションをリセットしておくのが良い習慣です。

john --session=reset

次に、ntlm_hashes.txt ファイルに対してインクリメンタルモードで John the Ripper を実行します。このプロセスは、残りの未クラックハッシュの複雑さによっては、数分かかる場合があります。

john --format=NT --incremental ~/project/ntlm_hashes.txt

John the Ripper が残りのハッシュをクラックしようとすると、以下のような出力が表示される場合があります。

Using default input encoding: UTF-8
Loaded 5 password hashes with no different salts (NT [MD4 HASHES])
Remaining 2 password hashes to crack
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
(user5)
(user3)
2g 0:00:00:00 DONE (2023-10-27 08:05) 100.0% (ETA: 08:05) 2.500g/s 7.500p/s 7.500c/s 7.500C/s
Session completed.

プロセスが完了したら、john --show を使用してクラックされたパスワードを再度確認します。

john --show ~/project/ntlm_hashes.txt

これで、user3user5 を含むすべてのハッシュがクラックされたはずです。user3 のパスワードは admin で、user5 のパスワードは空文字列(コロンの後に "" または何も表示されない)です。

user1:password
user2:test
user4:123456
user3:admin
user5:

5 password hashes cracked, 0 left

これは、単語リストに含まれていない可能性のあるパスワード、特に短くて単純なパスワードをクラックするためのインクリメンタルモードの効果を示しています。

NTLM ハッシュのセキュリティを理解する

このステップでは、NTLM ハッシュのセキュリティ上の影響と、強力なパスワードの実践の重要性について考察します。単語リストを使用して比較的単純なパスワードがどのように迅速にクラックされるか、またインクリメンタルモードのようなブルートフォース手法で辞書にない短いパスワードでさえ見つけられるかを学びました。

NTLM ハッシュは、いくつかの要因により脆弱であることが知られています。

  • ソルト(Salting)の欠如: 最新のハッシュアルゴリズム(例:bcrypt、scrypt)とは異なり、NTLM ハッシュは「ソルト」を使用しません。ソルトは、ハッシュ化する前にパスワードに追加されるランダムなデータであり、同じパスワードでも各ハッシュを一意にします。ソルトがないと、攻撃者は事前に計算されたテーブル(レインボーテーブル)を使用してハッシュを迅速にクラックできます。
  • 弱いハッシュアルゴリズム: NTLM は MD4 を使用しており、これは比較的古く、暗号学的に弱いハッシュアルゴリズムです。
  • 大文字・小文字の区別(LM ハッシュの場合、NTLM は区別するが): NTLM 自体は大文字・小文字を区別しますが、その前身である LM ハッシュは区別しなかったため、混乱を招き、時にはパスワードの実践が弱くなる原因となりました。

NTLM ハッシュクラッキングに関連するリスクを軽減するために、組織やユーザーは以下を行うべきです。

  • 強力なパスワードポリシーの実施: 大文字・小文字、数字、特殊文字を組み合わせた、長く複雑なパスワードを要求します。これにより、単語リスト攻撃とブルートフォース攻撃の両方が著しく困難になります。
  • 多要素認証(MFA)の実装: MFA は、パスワードだけでなく追加のセキュリティ層を提供し、攻撃者がパスワードをクラックした場合でも不正アクセスを大幅に困難にします。
  • 最新のハッシュアルゴリズムの使用: 新しいシステムや移行時には、bcrypt、scrypt、または Argon2 のような、ソルト付きの最新の適応型ハッシュアルゴリズムを優先します。
  • 定期的な監査と監視: 疑わしいログイン試行を継続的に監視し、パスワードの強度を監査します。

NTLM ハッシュの脆弱性を理解し、堅牢なセキュリティ対策を実装することで、システムとユーザーアカウントのセキュリティ体制を大幅に強化できます。

まとめ

この実験では、John the Ripper を使用して NTLM ハッシュをクラックする方法を学びました。まず、NTLM ハッシュの構造を理解し、John the Ripper で最適に使用できるようにフォーマットしました。次に、一般的なパスワードクラッキング手法である単語リスト攻撃とインクリメンタル(ブルートフォース)攻撃を適用し、弱いパスワードや単純なパスワードに対するそれらの有効性を示しました。

また、ソルトの欠如や弱いハッシュアルゴリズムの使用など、NTLM ハッシュのセキュリティ上の弱点についても理解を深めました。この理解は、強力なパスワードポリシー、多要素認証、および機密情報を保護するための最新で堅牢なハッシュアルゴリズムの採用の重要性を理解する上で不可欠です。この実践的な経験は、パスワードセキュリティと一般的なクラッキング方法論に関する基本的な理解を提供します。