はじめに
Hashcat を用いたマスクアタックの実施に関するこの実験へようこそ。Hashcat は、強力で汎用性の高いパスワードリカバリツールであり、パスワード強度テストや紛失したパスワードの復旧のためにサイバーセキュリティ分野で広く使用されています。
標準的なブルートフォースアタックは、考えられるすべての文字の組み合わせを試すことでパスワードを推測しようとしますが、これは非常に時間がかかる可能性があります。マスクアタックは、よりインテリジェントで効率的なブルートフォースアタックの一種です。これは、パスワードの構造に関する情報(例えば、長さや特定の場所で使用される文字の種類など、「大文字で始まり、数字 2 つで終わる」など)を持っている場合に使用されます。
この実験では、マスクを使用してパスワードの構造を定義する方法を学び、サンプル SHA1 ハッシュをクラックするために Hashcat を使用して、このターゲットを絞ったアプローチの強力さと効率性を実証します。
マスクアタックの概念を理解する
このステップでは、マスクアタックの基本的な概念を学びます。はじめに述べたように、このアタックはブルートフォースアタックの特殊な形態です。
パスワードをクラックする必要があると想像してください。しかし、いくつかの手がかりがあります。
- パスワードは正確に 6 文字の長さであることを知っています。
- 最初の文字は大文字であることを知っています。
- 最後の 2 文字は数字であることを知っています。
標準的なブルートフォースアタックは、「aaaaaa」や「123456」のような組み合わせを試すのに時間を浪費します。しかし、マスクアタックを使用すると、「マスク」またはテンプレートを定義でき、クラッキングツールに既知のパターンに適合する組み合わせのみを試すように指示できます。上記の例では、マスクは [大文字][任意][任意][任意][数字][数字] と指定します。
これにより、可能性のある組み合わせが劇的に減少し、クラッキングプロセスが大幅に高速かつ効率的になります。次のステップでは、Hashcat がこれらの強力なマスクを作成するために使用する具体的な構文を学びます。このステップは純粋に概念的なものであり、コマンドは必要ありません。
?l ?u ?d ?s のような組み込み文字セットを学ぶ
このステップでは、マスクの構成要素となる Hashcat の組み込み文字セットについて学びます。
Hashcat は、「charset」と呼ばれる特別なプレースホルダーを使用して、パスワードマスクの各位置の文字の種類を定義します。これらは最も一般的な組み込み charset です。
?l: すべての小文字 (aからz) を表します。?u: すべての大文字 (AからZ) を表します。?d: すべての数字 (0から9) を表します。?s: すべての標準的な特殊文字 (例:!@#$%^&*) を表します。?a: 上記すべて (?l?u?d?s) を表します。
例えば、パスワードが 4 文字で、大文字、それに続く 2 つの小文字、そして数字で構成されているとわかっている場合、マスクは ?u?l?l?d となります。これにより、Pass9、Word1、Test0 のような候補が生成されます。
これらの定義は Hashcat のヘルプメニューで確認できます。マスクに関連するヘルプ情報を表示するには、ターミナルで次のコマンドを実行してください。
hashcat --help | grep "?l"
組み込み文字セットをリストするセクションが表示され、上記の情報が確認できます。
?l | abcdefghijklmnopqrstuvwxyz | Lowercase letters
特定パターンを持つサンプル SHA1 ハッシュを作成する
このステップでは、今後のステップでクラックするパスワードのターゲット SHA1 ハッシュを作成します。パスワードアタックを実行するには、まず攻撃対象となるハッシュが必要です。
明確なパターンに適合するパスワード LabX99! を選択しましょう。このパスワードは以下の構造を持っています。
- 1 文字目:大文字 (
L) - 2 文字目:小文字 (
a) - 3 文字目:小文字 (
b) - 4 文字目:大文字 (
X) - 5 文字目:数字 (
9) - 6 文字目:数字 (
9) - 7 文字目:特殊文字 (
!)
まず、このパスワードの SHA1 ハッシュを生成しましょう。echo コマンドの -n フラグは、文字列に改行文字が追加されるのを防ぐため非常に重要です。改行文字が追加されると、結果のハッシュが変わってしまいます。
ターミナルでこのコマンドを実行してください。
echo -n "LabX99!" | sha1sum
出力は、ハッシュの後にダッシュが続きます。
0e6cc6531a1a5545942a38a9339571934219c5b0 -
このハッシュを target_hash.txt という名前のファイルに保存します。このファイルが Hashcat の入力となります。
echo "0e6cc6531a1a5545942a38a9339571934219c5b0" > target_hash.txt
cat target_hash.txt でファイルが正しく作成されたことを確認できます。
固定長パスワードのマスクアタックコマンドを構築する
このステップでは、私たちが持っている情報に基づいて、マスクアタックを実行するための完全な Hashcat コマンドを構築します。
マスクアタックのための Hashcat コマンドには、いくつかの主要なコンポーネントがあります。
-m <mode>: このフラグはハッシュタイプを指定します。MD5、SHA1、bcrypt のような各ハッシュアルゴリズムには、固有のモード番号があります。-a <attack_mode>: このフラグはアタックモードを設定します。マスクアタックの場合、モードは常に3です。hash_file: クラックするハッシュが含まれるファイルへのパスです。mask: パスワード構造を定義するマスクパターンです。
まず、SHA1 の正しいモードを見つける必要があります。これは、Hashcat のヘルプ出力を検索することで見つけることができます。
hashcat --help | grep "SHA1"
ハッシュタイプのリストが表示されます。標準的な SHA1 ハッシュのモードは 100 です。
100 | SHA1 | Raw Hash
次に、パスワード LabX99! のマスクを作成しましょう。特定した構造と学習した charset に基づいて、以下のようになります。
L->?uab->?l?lX->?u99->?d?d!->?s
これらを組み合わせると、最終的なマスクは ?u?l?l?u?d?d?s となります。
これで完全なコマンドを組み立てることができます。また、--force フラグを追加します。これは、Hashcat が最適でない環境(VM で CPU を実行するなど)を検出した場合でも実行するように指示するもので、この実験には必要です。
最終的なコマンド構造は hashcat -m 100 -a 3 target_hash.txt ?u?l?l?u?d?d?s --force です。これは次のステップで実行します。
マスクアタックを実行し、結果を確認する
このステップでは、マスクアタックコマンドを実行し、Hashcat がパスワードを正常にクラックしたことを確認します。
すでにコマンドは構築されています。それでは、ターミナルで実行してアタックを開始しましょう。
hashcat -m 100 -a 3 target_hash.txt ?u?l?l?u?d?d?s --force
Hashcat が開始されます。いくつかの警告が表示されるかもしれませんが、--force を使用したため無視しても安全です。アタックが開始され、マスクが非常に特定されているため、ほぼ瞬時に完了するはずです。出力にはセッションのステータスが表示され、最終ステータスが Cracked と表示されるはずです。
...
Session..........: hashcat
Status...........: Cracked
Hash.Name........: SHA1
Hash.Target......: 0e6cc6531a1a5545942a38a9339571934219c5b0
Time.Started.....: ...
Time.Estimated...: 0 secs (0.00ms)
Guess.Mask.......: ?u?l?l?u?d?d?s [7]
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........: 192.9 kH/s (0.01ms) @ Accel:128 Loops:1 Thr:1 Vec:8
Recovered........: 1/1 (100.00%) Digests
Progress.........: 11881376/11881376 (100.00%)
Rejected.........: 0/11881376 (0.00%)
Restore.Point....: 456976/456976 (100.00%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1
Candidates.#1....: LuvX98! -> LuvX99#
Hardware.Mon.#1..: Temp: 46c
...
パスワードがクラックされると、Hashcat はそれを "potfile" (hashcat.potfile) というファイルに保存します。クラックされたパスワードを表示するには、元のコマンド引数とともに --show フラグを使用できます。
結果を表示するには、このコマンドを実行してください。
hashcat -m 100 target_hash.txt --show
出力には、ハッシュとクラックされた平文パスワードがコロンで区切られて表示されます。
0e6cc6531a1a5545942a38a9339571934219c5b0:LabX99!
おめでとうございます。マスクアタックを正常に実行しました!
まとめ
この実験では、Hashcat を使用してブルートフォースマスクアタックを正常に実行しました。
以下のことを学びました。
- マスクアタックのコアコンセプトを、ターゲットを絞ったブルートフォース手法として理解する。
- Hashcat の組み込み文字セット (
?l,?u,?d,?s) を使用してパスワードの構造を定義する。 - ターゲットパスワードの SHA1 ハッシュを生成する。
- 正しいハッシュモード、アタックモード、マスクを指定して完全な Hashcat コマンドを構築する。
- アタックを実行し、
--showオプションを使用してクラックされたパスワードを表示する。
マスクアタックは、パスワードクラッキングおよびセキュリティ監査における基本的なテクニックです。パスワードのパターンに関するわずかな情報でさえ、それを破るのに必要な時間と労力を劇的に削減できることを示しています。


