Hashcat でハッシュをクラッキングする

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

はじめに

この実験では、世界で最速のパスワード回復ツールである Hashcat を使用して、暗号化ハッシュをクラックする方法を学びます。Hashcat のインストール、ハッシュファイルの準備、GPU アクセラレーションの設定、およびサンプルの MD5 ハッシュに対するブルートフォース攻撃の実行を練習します。

実践的な演習を通じて、実際のパスワードの例をクラックしながらパフォーマンスを最適化する方法を学びます。パスワード回復やセキュリティテストに必要な重要なサイバーセキュリティ技術の実践的な経験を積むことができます。

Hashcat をインストールする

このステップでは、世界で最速のパスワード回復ツールである Hashcat をインストールします。Hashcat は、ブルートフォース攻撃、辞書攻撃、ルールベースの攻撃など、さまざまな攻撃方法を使ってハッシュをクラックするための強力なユーティリティです。

始める前に、ハッシュとは何かを理解しましょう。ハッシュとは、入力(パスワードなど)を受け取り、スクランブルされた出力を生成する数学関数によって生成される固定長の文字列です。パスワードシステムは、セキュリティ上の理由から、平文のパスワードではなくこれらのハッシュを保存します。Hashcat は、保存されたハッシュと一致するようにさまざまな組み合わせを試すことで、元のパスワードを回復するのに役立ちます。

まず、正しい作業ディレクトリにいることを確認する必要があります。~/project ディレクトリは、すべての実験操作を行う場所です。

cd ~/project

次に、Ubuntu のパッケージマネージャを使用して Hashcat をインストールします。パッケージマネージャは、ソフトウェアとその依存関係のダウンロードとセットアップを処理します。2 つのコマンドを一緒に実行します。まずパッケージリストを更新し (update)、次に Hashcat をインストールします (install)。

sudo apt-get update && sudo apt-get install -y hashcat

-y フラグは、インストールを自動的に確認し、インストール中に 'yes' を入力する手間を省いてくれます。

インストールが完了したら、Hashcat のバージョンを確認することで、正しくインストールされていることを検証しましょう。これは、ソフトウェアが使用可能な状態であることを確認するための良い方法です。

hashcat --version

インストールされたバージョン番号が表示されるはずです。例えば:

v6.2.6

このバージョン番号が表示されることは、Hashcat がシステムに正しくインストールされていることを意味します。次のステップでは、実際のハッシュファイルを扱い、クラッキング操作を行います。バージョン番号は、ドキュメントを参照したりトラブルシューティングを行ったりする際にも役立ちます。なぜなら、機能はバージョンによって異なる場合があるからです。

ハッシュファイルを準備する

このステップでは、後続のステップでクラッキングに使用するサンプルハッシュファイルを作成します。ハッシュとは、入力データを表す暗号化アルゴリズムによって生成される固定長の文字列です。ハッシュファイルには、Hashcat を使ってクラッキングを試みるこれらの暗号化ハッシュが含まれています。

まず、正しい作業ディレクトリにいることを確認します。cd コマンドは現在のディレクトリを変更します。

cd ~/project

MD5 ハッシュを含む簡単なテキストファイルを作成しましょう。MD5 は、128 ビットのハッシュ値を生成する広く使用されている暗号化ハッシュ関数です。nano テキストエディタを使って新しいファイルを作成し、編集します。

nano hashes.txt

以下のサンプル MD5 ハッシュをファイルに追加します。これらは、平文の値がわかっている一般的なテストハッシュです(Ctrl+O で保存し、Ctrl+X で nano を終了します)。

5f4dcc3b5aa765d61d8327deb882cf99  ## password: "password"
098f6bcd4621d373cade4e832627b4f6  ## password: "test"

あるいは、echo コマンドを使って直接ファイルを作成することもできます。> 演算子は新しいファイルを作成し、>> は既存のファイルに追加します。

echo "5f4dcc3b5aa765d61d8327deb882cf99" > hashes.txt
echo "098f6bcd4621d373cade4e832627b4f6" >> hashes.txt

cat コマンドを使ってハッシュファイルの内容を確認します。このコマンドは、ファイルの内容をターミナルに表示します。

cat hashes.txt

ターミナルに 2 つの MD5 ハッシュが表示されるはずです。このファイルは、次のステップで Hashcat を設定してブルートフォース攻撃を実行する際のハッシュクラッキングの対象となります。既知のテストハッシュを持っていることで、クラッキングの設定が正しく機能していることを確認することができます。

GPU サポートを設定する

このステップでは、Hashcat が GPU アクセラレーションを利用してハッシュクラッキングを高速化するように設定します。Hashcat は CPU と GPU の両方のリソースを活用できますが、GPU は数千の小さなコアを持ち、同時に多くの計算を実行できるため、パスワードクラッキングに特に有効です。この並列処理能力により、GPU はブルートフォース攻撃において CPU よりもはるかに高速です。

GPU サポートを設定する前に、まず Hashcat が利用可能なハードウェアデバイスを確認しましょう。検出されたすべての OpenCL デバイスをリストするには、このコマンドを実行します。

hashcat -I

このコマンドは、利用可能な OpenCL デバイスを表示します。LabEx VM 環境では、次のような出力が表示されるはずです。

OpenCL Platform #1: NVIDIA Corporation
* Device #1: NVIDIA GeForce GTX 1080 Ti, 10240/11264 MB allocatable, 28MCU

この出力には、GPU の詳細(モデルやメモリ容量など)が表示されます。次に、Hashcat のパフォーマンスを最適化するための設定ファイルを作成します。設定ファイルを使用すると、設定を自動化できるため、毎回入力する必要がなくなります。

次のコマンドで設定ファイルを作成し、編集します。

nano ~/.hashcat/hashcat.conf

次の設定を追加します(Ctrl+O で保存し、Ctrl+X で終了します)。

--force
--opencl-device-types=1,2
--workload-profile=4

各パラメータの機能を説明します。

  • --force:潜在的な問題を検出しても Hashcat を継続させます(実験環境で便利です)
  • --opencl-device-types=1,2:CPU(タイプ 1)と GPU(タイプ 2)の両方のデバイスを処理に使用できるようにします
  • --workload-profile=4:最高のパフォーマンスプロファイルを設定し、省電力よりも速度を優先します

すべてが正しく動作していることを確認するには、ベンチマークテストを実行します。

hashcat -b

ベンチマークでは、さまざまなハッシュアルゴリズムがテストされ、次のようなパフォーマンス指標が表示されます。

Speed.#1.........: 12345.7 MH/s (98.23ms) @ Accel:1024 Loops:1024 Thr:256 Vec:1

これらの数値は、システムが 1 秒間に試行できるハッシュの数を示しています。数値が高いほど、クラッキング速度が速いことを意味します。ベンチマークにより、GPU アクセラレーションが有効になっており、次のステップで実際のブルートフォース攻撃を実行する準備ができていることが確認されます。

ブルートフォース攻撃を実行する

このステップでは、Hashcat を使用してブルートフォース攻撃を実行し、先ほど準備した MD5 ハッシュをクラッキングします。ブルートフォース攻撃は、正しいパスワードが見つかるまですべての可能な文字の組み合わせを体系的にチェックする試行錯誤的な方法です。このアプローチは、パスワードの構造に関する情報がない場合に特に有用です。

まず、ハッシュファイルを保存した作業ディレクトリに移動しましょう。これにより、Hashcat がクラッキング対象のファイルにアクセスできるようになります。

cd ~/project

次に、攻撃に適した特定のパラメータを使用して Hashcat を実行します。

  • -m 0:Hashcat に対して MD5 ハッシュを扱っていることを指示します(Hashcat では各ハッシュタイプに特定の番号が割り当てられています)
  • -a 3:攻撃モードをブルートフォースに設定します
  • ?a?a?a?a:パスワードマスクを定義します。これは、正確に 4 文字のパスワードを探していることを意味し、以下の文字が含まれる可能性があります。
    • 小文字のアルファベット (a - z)
    • 大文字のアルファベット (A - Z)
    • 数字 (0 - 9)
    • 特殊文字 (!@#$% など)

次のコマンドでブルートフォース攻撃を実行します。

hashcat -m 0 -a 3 hashes.txt ?a?a?a?a --force

Hashcat が実行されると、ターミナルにリアルタイムの統計情報が表示されます。この出力を使ってクラッキングの進捗状況を監視できます。

Session..........: hashcat
Status...........: Running
Hash.Name........: MD5
Hash.Target......: hashes.txt
Time.Started.....: [timestamp]
Speed.#1.........: [speed] H/s
Recovered........: 0/2 (0.00%)
Progress.........: [progress]
Rejected.........: 0
Restore.Point....: 0

クラッキング速度 (H/s) は、システムが 1 秒間に実行するハッシュ計算の数を示します。進捗インジケータを使って残り時間を推定できます。4 文字のパスワードの場合、ハードウェアによっては数分かかることがあります。

攻撃が完了したら、結果を確認できます。次のコマンドで、成功してクラッキングされたパスワードを表示します。

hashcat -m 0 hashes.txt --show

成功した場合の出力では、各ハッシュとそれに対応する平文のパスワードがペアになって表示されます。

5f4dcc3b5aa765d61d8327deb882cf99:password
098f6bcd4621d373cade4e832627b4f6:test

この出力は、Hashcat がテストファイル内の両方の MD5 ハッシュを元のパスワードに逆変換できたことを確認します。最初の列には元のハッシュが表示され、2 番目の列にはそのハッシュを生成した実際のパスワードが表示されます。

解読されたハッシュを確認する

この最後のステップでは、ブルートフォース攻撃の結果を検証し、分析します。Hashcat は自動的に成功してクラッキングされたパスワードを「ポットファイル (potfile)」と呼ばれる特別なファイルに保存します。このファイルは、クラッキングセッション中に回復したすべてのパスワードのデータベースとして機能します。このファイルを調べて、どのパスワードが成功してクラッキングされたかを確認しましょう。

まず、ハッシュファイルを保存した作業ディレクトリに移動します。これにより、正しいファイルを操作することができます。

cd ~/project

攻撃でクラッキングされたすべてのハッシュを表示するには、Hashcat で --show フラグを使用します。このコマンドは、hashes.txt ファイル内の MD5 ハッシュ(モード 0)を検索し、ポットファイル内で見つかった一致するものを表示します。

hashcat -m 0 hashes.txt --show

以下のような出力が表示され、元のハッシュの後にクラッキングされた平文のパスワードが表示されるはずです。

5f4dcc3b5aa765d61d8327deb882cf99:password
098f6bcd4621d373cade4e832627b4f6:test

クラッキングセッションをより包括的に理解するために、--status フラグを使用すると、有用な統計情報が提供されます。これにより、クラッキングされたハッシュの数、ハッシュの種類、およびパフォーマンス指標が表示されます。

hashcat -m 0 hashes.txt --status

これにより、以下のような重要な情報が表示されます。

Session.Name.....: hashcat
Status..........: Exhausted
Hash.Name.......: MD5
Hash.Target.....: hashes.txt
Time.Started....: [timestamp]
Time.Estimated..: [timestamp]
Recovered.......: 2/2 (100.00%)
Progress.......: [progress]
Speed.#1.......: [speed] H/s

クラッキングセッションの完全なレポートを生成し、後で保存して確認できるようにするには、以下のコマンドを使用します。最初のコマンドはフォーマットされたレポートファイルを作成し、2 番目のコマンドはその内容を表示します。

hashcat -m 0 hashes.txt --outfile-format=2 --outfile=results.txt
cat results.txt

レポートには、各クラッキングされたハッシュに関する詳細情報が含まれ、ハッシュの種類、平文のパスワード、および各ハッシュをクラッキングするのにかかった正確な時間が記載されます。このドキュメントは、クラッキングのパフォーマンスを分析したり、結果を他の人と共有したりする場合に特に有用です。

まとめ

この実験では、パッケージマネージャを更新し、バージョンを確認することで、強力なパスワード回復ツールである Hashcat のインストールと設定方法を学びました。また、サンプルの MD5 ハッシュを含むハッシュファイルを準備し、基本的な Linux コマンドを使用してその内容を確認しました。

さらに、パフォーマンス最適化のために Hashcat の GPU サポートを調査し、サンプルハッシュをクラッキングするためのブルートフォース攻撃を実施しました。この実践的な演習は、パスワード回復や脆弱性評価のシナリオにおける Hashcat の重要な役割を示しています。