Hashcat でコンビネータ攻撃を実行する

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

はじめに

この実験では、強力で汎用性の高いパスワード回復ツールである Hashcat を使用した、コンビネータ攻撃として知られる特定のパスワードクラッキング技術を探求します。コンビネータ攻撃とは、2 つの別々の単語リストを組み合わせてパスワード候補を生成する方法です。例えば、一方のリストに「password」が含まれ、もう一方のリストに「123」が含まれている場合、この攻撃は「password123」という組み合わせをテストします。

このアプローチは、2 つの単語を連結して形成されたパスワード、または単語と数字や記号のシーケンスを連結して形成されたパスワードに対して特に効果的です。この実験を通して、単語リストの準備方法、適切な Hashcat コマンドの構築方法、サンプルハッシュに対する攻撃の実行方法、および結果の検証方法を学びます。

コンビネータ攻撃の概念を理解する

このステップでは、Hashcat におけるコンビネータ攻撃のコアコンセプトを学びます。この攻撃は、攻撃モード-a 1で指定されます。これは、最初の単語リストからベースとなる単語を取得し、それに 2 番目の単語リストの単語を付加して、新しいパスワード候補を作成することで機能します。このプロセスは、両方のリストのすべての単語に対して繰り返されます。

例えば、2 つのリストがあるとします。

  • wordlist1.txt: admin, user
  • wordlist2.txt: 123, !

コンビネータ攻撃は、以下の候補を生成します:admin123, admin!, user123, user!.

この方法は、単一の巨大な辞書ファイルを用意することなく、潜在的なパスワード空間を大幅に拡張します。まず、Hashcat のヘルプメニューで攻撃モードを確認しましょう。

コンビネータ攻撃に関する情報をフィルタリングするために、以下のコマンドを実行してください。

hashcat --help | grep "Combinator"

出力には、コンビネータ攻撃モードとその対応する番号を明示的に言及する行が表示されるはずです。

-a, --attack-mode         |      ## | Attack-mode
...
                          |      1 | Combinator
...

これにより、コンビネータ攻撃に使用する正しいフラグが-a 1であることが確認できます。

攻撃に使用する 2 つの単語リストを作成する

このステップでは、コンビネータ攻撃で使用する 2 つの単語リストを作成します。この実験では、小さめのカスタム単語リストを 2 つ作成します。実際のシナリオでは、これらのリストははるかに大きく、より一般的な単語、名前、パターンを含むでしょう。

ターゲットパスワードは、一般的な単語と数字のシーケンスの組み合わせです。単語の部分をwordlist1.txtに、数字の部分をwordlist2.txtに配置します。

まず、いくつかの候補となるベース単語を含むwordlist1.txtを作成します。改行(\n)を処理するために-eフラグ付きのechoコマンドを使用します。

echo -e "admin\nuser\npassword\nguest" > wordlist1.txt

次に、一般的な数字の接尾辞を含むwordlist2.txtを作成します。

echo -e "2024\n!@#\n123\nxyz" > wordlist2.txt

これで、両方のファイルのコンテンツをcatコマンドを使用して確認し、正しく作成されたことを確認します。

最初の単語リストを確認します。

cat wordlist1.txt

期待される出力:

admin
user
password
guest

2 番目の単語リストを確認します。

cat wordlist2.txt

期待される出力:

2024
!@#
123
xyz

これらの 2 つの単語リストにより、Hashcat はパスワード候補password123を形成できるようになります。

2 つの単語リストを使用したコンビネータ攻撃コマンドの構築

このステップでは、コンビネータ攻撃のための完全な Hashcat コマンドを構築します。実行する前に、コマンドの各部分が何をするのかを理解することが重要です。

コンビネータ攻撃の一般的な構文は次のとおりです:hashcat [options] <hash-file> <wordlist1> <wordlist2>

ここで、使用するコマンドの内訳を示します。

  • hashcat: 実行可能プログラムです。
  • -m 0: ハッシュタイプを指定します。モード0は MD5 に対応します。
  • -a 1: 攻撃モードを1(コンビネータ攻撃)に設定します。
  • hash.txt: クラックしたいハッシュを含むファイルです。これは、実験のセットアップ中に作成されました。
  • wordlist1.txt: パスワード候補の左側部分を含む最初の単語リストです。
  • wordlist2.txt: パスワード候補の右側部分を含む 2 番目の単語リストです。

完全な攻撃を実行する前に、--showフラグを使用するのが良い習慣です。このフラグは、新しいクラッキングセッションを開始せずに、すでにクラックされて potfile に保存されているハッシュを表示するように Hashcat に指示します。

--showフラグを付けてコマンドを実行し、ターゲットハッシュがまだクラックされていないことを確認しましょう。

hashcat -m 0 -a 1 hash.txt wordlist1.txt wordlist2.txt --show

これは初めて実行するため、コマンドは何も出力しません。これは期待される結果です。これにより、実際の攻撃に進む準備ができたことが確認できます。

攻撃を実行し、組み合わせを観察する

それでは、--showフラグなしでコンビネータ攻撃を実行します。これにより、クラッキングプロセスが開始されます。Hashcat は 2 つの単語リストを読み込み、それらを結合し、結果をハッシュ化し、hash.txt内のターゲットハッシュと比較します。

ターミナルで次のコマンドを実行します。

hashcat -m 0 -a 1 hash.txt wordlist1.txt wordlist2.txt

Hashcat が初期化され、ステータス画面が表示されます。単語リストは非常に小さいため、プロセスはほぼ瞬時に完了します。出力には、ハッシュがクラックされたことが表示されます。

以下に似た出力が表示されます(速度や時間などの一部の詳細が異なる場合があります)。

hashcat (v6.2.6) starting

...

Session..........: hashcat
Status...........: Cracked
Hash.Name........: MD5
Hash.Target......: e10adc3949ba59abbe56e057f20f883e
Time.Started.....: ...
Time.Estimated...: 0 secs (0.00ms)
Guess.Base.......: File (wordlist1.txt), File (wordlist2.txt)
Guess.Queue......: 2/2 (100.00%)
Speed.#*.........: ... H/s (...)
Recovered........: 1/1 (100.00%) Digests
Progress.........: 16/16 (100.00%)
Rejected.........: 0/16 (0.00%)
Restore.Point....: 4/4 (100.00%)
Restore.Sub.#*...: 4/4 (100.00%)
Candidates.#*....: 16

Cracked Hashes: 1/1
e10adc3949ba59abbe56e057f20f883e:password123

...
All hashes have been recovered

Started: ...
Stopped: ...

e10adc3949ba59abbe56e057f20f883e:password123という行は、元のハッシュとそのクラックされたプレーンテキストパスワードを明確に示しています。これにより、攻撃が成功したことが確認できます。

組み合わせパスワードの結果のために Potfile を確認する

このステップでは、Hashcat の potfile を確認します。potfile (hashcat.potfile) は、Hashcat が成功裏にクラックされたハッシュとその対応するパスワードを自動的に保存するプレーンテキストファイルです。これは、すでに解決されたハッシュを再クラックする時間を無駄にしないための便利な機能です。

デフォルトでは、potfile は~/.local/share/hashcat/ディレクトリにあります。

catコマンドを使用して potfile の内容を表示し、結果が保存されたことを確認します。

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

出力には、ハッシュとそのクラックされたパスワードがコロンで区切られて表示されます。

e10adc3949ba59abbe56e057f20f883e:password123

これにより、攻撃が成功し、結果が potfile に永続的に保存されたことが確認できます。同じ攻撃を再度実行した場合、Hashcat はクラッキングプロセス全体を再実行する代わりに、このファイルから結果を即座に取得するために--showフラグを使用します。

まとめ

この実験では、Hashcat を使用してコンビネータ攻撃を成功裏に実行しました。

以下のことを学びました。

  • Hashcat におけるコンビネータ攻撃(-a 1)の概念を理解する。
  • パスワード候補の基礎として機能する 2 つの別々の単語リストを作成する。
  • 攻撃モード、ハッシュタイプ、および入力ファイルを指定して、正しい Hashcat コマンドを構築する。
  • 攻撃を実行し、単語と数字のシーケンスを組み合わせて MD5 ハッシュを正常にクラックする。
  • 成功したクラックの結果が保存されているhashcat.potfileを見つけて確認する。

コンビネータ攻撃は、パスワードクラッキングにおける基本的なテクニックであり、特に予測可能な連結パターンに従うパスワードを扱う場合に役立ちます。