Hashcat 辞書攻撃

LinuxBeginner

はじめに

Hashcat は、強力で多用途なパスワード回復ツールであり、サイバーセキュリティ分野において、パスワード強度テストや紛失したパスワードの回復によく使用されます。多数のハッシュアルゴリズムといくつかの攻撃モードをサポートしています。

この実験 (Lab) では、最も基本的なパスワードクラッキング技術の 1 つである辞書攻撃に焦点を当てます。Hashcat の「ストレート」攻撃モード (-a 0) を使用して、カスタムの単語リスト (wordlist) を用いて単純な MD5 ハッシュをクラックする方法を学習します。この実践的な経験は、パスワードクラッキングの仕組みを理解するための強固な基盤を提供するでしょう。

辞書攻撃の概念の理解(-a 0)

このステップでは、辞書攻撃とその Hashcat での実装方法について学習します。

辞書攻撃とは、辞書または単語リスト (wordlist) と呼ばれるリスト内の単語をすべて体系的にパスワードとして入力することにより、パスワードで保護されたシステムに侵入する手法です。これは、特に弱いパスワードや一般的なパスワードに対して、シンプルでありながら効果的なテクニックです。

Hashcat では、この手法を「ストレート (Straight)」攻撃と呼び、攻撃モード番号 0 が割り当てられています。攻撃モードは -a オプションを使用して指定します。

hashcat --help コマンドを使用して、攻撃モード 0 の例を見てみましょう。出力を grep にパイプして、特定の行を検索します。

hashcat --help | grep -- "-a 0"

以下のような出力が表示され、-a 0 を使用した辞書攻撃の例が示されます。

  Wordlist         | $P$   | hashcat -a 0 -m 400 example400.hash example.dict
  Wordlist + Rules | MD5   | hashcat -a 0 -m 0 example0.hash example.dict -r rules/best64.rule

これにより、辞書攻撃を実行するには、Hashcat コマンドで -a 0 オプションを使用することが確認できます。ここで -a 0 はストレート(辞書)攻撃モードを表します。

ターゲットハッシュファイルとシンプルな単語リストの準備

このステップでは、辞書攻撃に必要な 2 つの必須ファイル、すなわちターゲットハッシュを含むファイルと単語リストファイルを準備します。すべての操作は ~/project ディレクトリ内で行います。

まず、ターゲットハッシュを格納するファイルを作成します。ここでは、文字列 "password123" の MD5 ハッシュである 482c811da5d5b4bc6d497ffa98491e38 を使用します。

echo コマンドを使用して、このハッシュを含む my_hash.txt という名前のファイルを作成します。

echo "482c811da5d5b4bc6d497ffa98491e38" > my_hash.txt

次に、my_wordlist.txt という名前のシンプルな単語リストファイルを作成します。実際の単語リストには数百万語が含まれることがありますが、この実験 (lab) のために、正しいパスワードを含む小さなリストを作成します。

echo "password" > my_wordlist.txt
echo "123456" >> my_wordlist.txt
echo "password123" >> my_wordlist.txt
echo "qwerty" >> my_wordlist.txt

次に、cat コマンドを使用して両方のファイルの内容を確認します。

まず、ハッシュファイルを確認します。

cat my_hash.txt

期待される出力:

482c811da5d5b4bc6d497ffa98491e38

次に、単語リストファイルを確認します。

cat my_wordlist.txt

期待される出力:

password
123456
password123
qwerty

これで、攻撃の準備が整ったターゲットハッシュと単語リストが揃いました。

MD5 ハッシュに対する辞書攻撃の実行

このステップでは、準備した MD5 ハッシュに対して辞書攻撃を実行します。

これを行うには、攻撃モード、ハッシュタイプ、ハッシュファイル、および単語リストファイルを指定する Hashcat コマンドを構築する必要があります。

コマンドの構造は次のとおりです。
hashcat [options] [hash_file] [wordlist_file]

使用するオプションは次のとおりです。

  • -a 0: ストレート(辞書)攻撃モードを指定します。
  • -m 0: ハッシュタイプを指定します。0 は MD5 に対応します。ハッシュタイプを正しく一致させることが重要です。
  • --force: このオプションは、仮想化環境や CPU で実行する際に、特定の警告をバイパスし、Hashcat の実行を強制するために必要となることがよくあります。

それでは、攻撃を開始するためのコマンドを実行します。

hashcat -a 0 -m 0 my_hash.txt my_wordlist.txt --force

Hashcat が起動し、ステータス画面が表示されます。単語リストが非常に小さいため、処理はほぼ瞬時に完了します。出力は次のようなものになります(開始時刻などの一部の詳細情報は異なります)。

hashcat (v6.2.6) starting

... (一部の初期警告と情報) ...

Session..........: hashcat
Status...........: Cracked
Hash.Type........: MD5
Hash.Target......: 482c811da5d5b4bc6d497ffa98491e38
Time.Started.....: Sun Nov 19 10:30:00 2023 (0 secs)
Time.Estimated...: Sun Nov 19 10:30:00 2023 (0 secs)
Guess.Base.......: File (my_wordlist.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#*.........:   133.7 kH/s (0.02ms) @ Accel:128 Loops:1 Thr:1 Vec:8
Recovered........: 1/1 (100.00%) Digests
Progress.........: 4/4 (100.00%)
Rejected.........: 0/4 (0.00%)
Restore.Point....: 3/4 (75.00%)
Restore.Sub.#*...: Salt:0 Amplifier:0-1 Iteration:0-1
Candidates.#*....: password123 -> qwerty
Hardware.Mon.#*..: Temp: 45c

Started: ...
Stopped: ...

Status...........: Cracked の行は、パスワードが単語リスト内で正常に見つかったことを示しています。

出力ステータスとキーワードの分析

このステップでは、前ステップの出力を詳しく確認し、その意味を理解します。Hashcat がハッシュを正常にクラックすると、結果を「potfile」と呼ばれるファイルに保存し、画面に成功を報告します。

ステータス出力の重要な行を分析しましょう。

  • Status...........: Cracked: これは最も重要なインジケータです。少なくとも 1 つのハッシュが正常にクラックされたことを確認します。もし Exhausted と表示されていた場合、Hashcat が単語リスト内のすべての単語を試行したが成功しなかったことを意味します。
  • Hash.Type........: MD5: ターゲットとしているハッシュアルゴリズムを確認します。
  • Hash.Target......: 482c811da5d5b4bc6d497ffa98491e38: 攻撃対象となっているハッシュを示します。
  • Guess.Base.......: File (my_wordlist.txt): パスワード候補のソースが、作成した単語リストファイルであることを示します。
  • Recovered........: 1/1 (100.00%) Digests: 提供された合計 1 つのハッシュのうち、1 つが復元されたことを示します。
  • Progress.........: 4/4 (100.00%): これは、単語リスト内の 4 つの単語すべてがテストされたことを示します。

クラックに成功すると、Hashcat はクラックされたハッシュとその対応する平文パスワードを自動的に potfile に保存します。このファイルのデフォルトの場所は ~/.local/share/hashcat/hashcat.potfile です。これにより、将来同じハッシュを再クラックする時間を無駄にすることがなくなります。

potfile が作成されたことを確認するためにその内容をリスト表示することもできますが、次のステップでは Hashcat のより直接的な機能を使用します。

'--show' オプションを使用したパスワードの表示

このステップでは、便利な Hashcat オプションを使用して、クラックされたパスワードを表示する方法を学習します。

potfile を直接確認することもできますが、Hashcat は --show オプションを提供しており、指定されたファイル内のハッシュに対するクラックされたパスワードを表示します。これは、ハッシュファイルと potfile を照合し、見つかった一致を出力します。

このオプションを使用するには、攻撃時と同様に、元のハッシュファイルを提供し、ハッシュタイプを指定する必要があります。

次のコマンドを実行します。

hashcat -m 0 my_hash.txt --show

Hashcat は、hash:password の形式で結果を即座に出力します。

482c811da5d5b4bc6d497ffa98491e38:password123

この出力は、元の MD5 ハッシュとそれに対応する平文パスワード "password123" を明確に示しています。

比較のために、potfile の生の内容を表示することもできます。これには同じ情報が表示されますが、特定のハッシュを確認したい場合には --show の方が分かりやすいことが多いです。

cat ~/.local/share/hashcat/hashcat.potfile

期待される出力:

482c811da5d5b4bc6d497ffa98491e38:password123

--show を使用することは、Hashcat のデータベース内で既にクラックされたパスワードを確認するための標準的な方法です。

まとめ

この実験では、Hashcat を使用した辞書攻撃の基本を学びました。カスタムで作成した小さな単語リストから候補をテストすることにより、MD5 ハッシュを正常にクラックすることに成功しました。

以下の主要なスキルについて実践的な経験を積みました。

  • 辞書攻撃の概念と Hashcat のストレートアタックモード (-a 0) の理解。
  • ターゲットハッシュファイルと単語リストファイルの準備。
  • 適切な攻撃モード (-a 0) とハッシュタイプ (-m 0) を指定して MD5 ハッシュに対する攻撃を開始すること。
  • ステータス画面を分析してクラックの成功を確認すること。
  • --show オプションを使用してクラックされたパスワードを表示すること。

この知識は、より高度なパスワードクラッキング技術を探求し、強力でユニークなパスワードを使用することの重要性を理解するための重要な基盤となります。