はじめに
この実験では、パスワードで保護された ZIP アーカイブをクラックする基本的なプロセスを学びます。これは、デジタルフォレンジックやペネトレーションテストで一般的に行われるタスクです。Linux で利用可能なコマンドラインツールの組み合わせを使用してこれを実現します。プロセスには、サンプル保護ファイルを作成し、そのパスワードハッシュを抽出し、強力なパスワード回復ツールである Hashcat を使用してハッシュをクラックし、元のパスワードを明らかにする作業が含まれます。
この実験の終わりまでに、以下の項目に精通しているでしょう。
- 暗号化された ZIP ファイルの作成。
zip2johnを使用したパスワードハッシュの抽出。- Hashcat で使用するためのハッシュの準備。
- Hashcat を使用した辞書攻撃の実行によるパスワードの回復。
パスワード保護された ZIP ファイルの作成
このステップでは、パスワードで保護された ZIP ファイルを作成します。これは、パスワードクラッキング演習のターゲットとなります。「暗号化」を意味する -e オプションを使用して、標準の zip コマンドを使用します。
まず、~/project ディレクトリにいることを確認してください。セットアッププロセスで、secret.txt という名前のファイルが既に作成されています。
次に、secret.txt ファイルから secret.zip という名前の暗号化された ZIP アーカイブを作成するために、以下のコマンドを実行します。
zip -e secret.zip secret.txt
システムはパスワードの入力と確認を求めます。この実験では、パスワード labex を使用します。labex と入力して Enter キーを押し、再度入力して確認してください。
Enter password:
Verify password:
adding: secret.txt (stored 0%)
コマンドが完了したら、ls コマンドを使用して、現在のディレクトリに secret.zip ファイルが作成されたことを確認できます。
ls -l
出力に secret.zip がリストされているはずです。
-rw-r--r-- 1 labex labex 218 May 20 10:00 secret.zip
-rw-r--r-- 1 labex labex 23 May 20 10:00 secret.txt
-rw-r--r-- 1 labex labex 32 May 20 10:00 wordlist.txt
zip2john を使用して ZIP ファイルからハッシュを抽出する
このステップでは、zip2john ユーティリティを使用して secret.zip ファイルからパスワードハッシュを抽出します。Hashcat のようなパスワードクラッキングツールは、暗号化されたファイルに直接作用するのではなく、そのハッシュに対して機能します。zip2john は、この目的のために特別に設計された John the Ripper スイートのツールです。
secret.zip を処理し、結果のハッシュを zip_hash.txt という名前の新しいファイルに保存するために、以下のコマンドを実行します。
zip2john secret.zip > zip_hash.txt
このコマンドは、ターミナルに直接出力しません。なぜなら、その出力を zip_hash.txt ファイルにリダイレクトしたからです。抽出されたハッシュを確認するには、cat コマンドを使用して新しいファイルの内容を表示できます。
cat zip_hash.txt
出力は以下のようになります。この文字列には、パスワードをクラックするために必要なすべての情報が含まれています。
secret.zip:$pkzip2$1*1*2*0*8*24*7b4f4718*0*28*0*8*24*7b4f*53a9*$/pkzip2$
Hashcat 互換のためのハッシュのフォーマット
このステップでは、Hashcat と互換性を持たせるために抽出したハッシュをフォーマットします。zip2john の出力には、ハッシュ文字列のプレフィックスとして元のファイル名 (secret.zip:) が含まれています。Hashcat は純粋なハッシュデータのみを必要とします。
zip_hash.txt の内容を再度確認しましょう。
secret.zip:$pkzip2$1*1*2*0*8*24*...
secret.zip: の部分を削除する必要があります。これを行う簡単な方法は cut コマンドを使用することです。これは、区切り文字に基づいてテキストを分割できます。ここではコロン (:) を区切り文字として使用し、2 番目のフィールドを選択します。
ハッシュを抽出し、hashcat_ready.txt という名前の新しいファイルに保存するために、以下のコマンドを実行します。
cut -d':' -f2 zip_hash.txt > hashcat_ready.txt
cut: 行の一部を切り取るコマンドです。-d':': 区切り文字がコロンであることを指定します。-f2: 2 番目のフィールドを要求することを指定します。
これで、新しいファイルの内容を表示して、ハッシュのみが含まれていることを確認します。
cat hashcat_ready.txt
出力は、ファイル名のプレフィックスがないハッシュ文字列であるはずです。
$pkzip2$1*1*2*0*8*24*7b4f4718*0*28*0*8*24*7b4f*53a9*$/pkzip2$
このファイルは、Hashcat と共に使用する準備ができました。
PKZIP のための正しい Hashcat モードを選択する
このステップでは、Hashcat のための正しいハッシュモードを特定する方法を学びます。Hashcat は数百種類のハッシュタイプをサポートしており、提供するタイプをモード番号で指定する必要があります。
抽出したハッシュは $pkzip2$ で始まります。これは使用されている ZIP 暗号化のタイプを示しています。Hashcat のヘルプドキュメントで "PKZIP" に関連するモードを検索することで、正しい番号を見つけることができます。
Hashcat のヘルプ出力内で "pkzip" を検索するには、以下のコマンドを使用します。
hashcat --help | grep -i "pkzip"
出力には、さまざまなバージョンの PKZIP 暗号化に関連するいくつかのハッシュモードがリストされます。
17200 | PKZIP (legacy) | Archives
17210 | PKZIP (legacy) (Compressed) | Archives
17220 | PKZIP (legacy) (Mixed) | Archives
17225 | PKZIP (legacy) (Mixed + Compressed) | Archives
20500 | PKZIP Master Key | Archives
20510 | PKZIP Master Key (Compressed) | Archives
単純なパスワード保護された ZIP から生成された私たちのハッシュは、「PKZIP (legacy)」タイプに対応します。出力からわかるように、このモード番号は 17200 です。次のステップでこのモードを使用して攻撃を開始します。
ZIP パスワードを復旧するための攻撃を開始する
このステップでは、Hashcat を使用してパスワードクラッキング攻撃を開始します。ここでは、「ストレート」または辞書攻撃を実行します。これは、Hashcat が指定されたリストのすべてのパスワードを試行するものです。すでに wordlist.txt という名前の簡単なリストを用意しています。
Hashcat のコマンド構造は次のとおりです。
hashcat [options] <hash_file> <wordlist_file>
前のステップに基づくと、完全なコマンドは次のようになります。
hashcat -m 17200 -a 0 hashcat_ready.txt wordlist.txt
コマンドの内訳を見てみましょう。
-m 17200: 前のステップで特定した PKZIP (legacy) のハッシュモードを指定します。-a 0: 攻撃モードを指定します。0はストレート(辞書)攻撃を表します。hashcat_ready.txt: ターゲットハッシュを含むファイルです。wordlist.txt: 潜在的なパスワードのリストを含むファイルです。
コマンドを実行します。Hashcat が起動し、バックエンドを初期化して攻撃を開始します。
hashcat (v6.2.6) starting
...
Session..........: hashcat
Status...........: Cracked
Hash.Name........: PKZIP (legacy)
Hash.Target......: $pkzip2$1*1*2*0*8*24*7b4f4718*0*28*0*8*24*7b4f*53a9*$/pkzip2$
Time.Started.....: ...
Time.Estimated...: 0 secs
Guess.Base.......: File (wordlist.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........: 248.2 kH/s (0.10ms) @ Accel:128 Loops:128 Thr:1
Recovered........: 1/1 (100.00%) Digests
Progress.........: 4/4 (100.00%)
Rejected.........: 0/4 (0.00%)
Restore.Point....: 3/4 (75.00%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1
Candidates.#1....: labex -> zzzzzzz
Hardware.Mon.#1..: Temp: 48c
$pkzip2$1*1*2*0*8*24*7b4f4718*0*28*0*8*24*7b4f*53a9*$/pkzip2$:labex
Started: ...
Stopped: ...
単語リストが小さかったため、Hashcat は非常に迅速にパスワードを見つけました。出力の最後の行には、ハッシュと復旧されたパスワード labex が表示されています。
おめでとうございます。ZIP アーカイブのパスワードを正常にクラックしました!
まとめ
この実験では、一般的なコマンドラインツールを使用してパスワードで保護された ZIP アーカイブをクラックするワークフロー全体を正常に完了しました。
以下の方法を学びました。
zipコマンドを使用して暗号化された ZIP ファイルを作成する。zip2johnを使用して ZIP ファイルからパスワードハッシュを抽出する。- 抽出したハッシュを
Hashcatと互換性のある形式にフォーマットする。 Hashcat内でターゲットの正しいハッシュタイプモードを特定する。Hashcatで辞書攻撃を開始し、パスワードを正常に復旧する。
これらのスキルは、デジタルフォレンジックや倫理的ハッキングなどのサイバーセキュリティ分野で不可欠な、パスワード復旧技術の基礎的な理解を形成します。教育目的で簡単なパスワードと小さな単語リストを使用しましたが、同じ原則がより複雑な実際のシナリオにも適用されます。


