はじめに
この実験では、ZIP アーカイブを対象としたパスワードクラッキング技術の実践的な経験を積みます。強力なオープンソースのパスワードクラッキングツールである John the Ripper と、ZIP ファイルを John the Ripper が理解できるハッシュ形式に変換するユーティリティである zip2john を連携して使用します。この実験では、パスワード保護された ZIP ファイルを作成し、そのハッシュを抽出し、その後クラッキングを試みる手順を説明します。さらに、古い ZIP 暗号化方法に内在する脆弱性について学び、機密データを保護するためのより安全な代替手段を発見します。
パスワード保護された ZIP ファイルの作成
このステップでは、簡単なテキストファイルを作成し、それをパスワード保護された ZIP アーカイブに圧縮します。この ZIP ファイルは、その後のクラッキング試行のターゲットとして機能します。デモンストレーション目的で、簡単で推測しやすいパスワードを使用します。
まず、ホームディレクトリの project フォルダにいることを確認してください。
cd ~/project
次に、secret.txt という名前のファイルを作成し、いくつかのコンテンツを追加します。
echo "This is a secret message." > secret.txt
次に、secret.txt を含む archive.zip という名前のパスワード保護された ZIP アーカイブを作成します。プロンプトが表示されたら、パスワードとして password123 を入力してください。
zip -e archive.zip secret.txt
パスワードの入力を求められます。
Enter password:
Verify password:
adding: secret.txt (deflated 29%)
現在のディレクトリの内容を一覧表示することで、ZIP ファイルの作成を確認できます。
ls -l
archive.zip と secret.txt が一覧表示されているはずです。
zip2john を使用して ZIP ファイルからハッシュを抽出する
このステップでは、zip2john ユーティリティを使用して archive.zip ファイルからパスワードハッシュを抽出します。このハッシュは、John the Ripper が元のパスワードをクラッキングするために使用できるパスワードの表現です。
まず、~/project ディレクトリにいることを確認してください。
cd ~/project
次に、archive.zip に対して zip2john を実行し、その出力を zip_hash.txt という名前のファイルにリダイレクトします。
zip2john archive.zip > zip_hash.txt
このコマンドはハッシュを抽出し、zip_hash.txt に保存します。zip2john の出力は通常以下のようになります(実際のハッシュは異なります)。
archive.zip:$zip$*0*1*0*...*secret.txt*$/zip$
ハッシュが抽出されたことを確認するために、zip_hash.txt ファイルの内容を表示できます。
cat zip_hash.txt
出力には、抽出されたハッシュ文字列が表示されるはずです。
John the Ripper で ZIP ハッシュをクラックする
ハッシュを抽出したので、次は John the Ripper を使用してパスワードのクラッキングを試みます。このデモンストレーションでは、先ほど設定したパスワードを含む簡単な単語リストを使用します。
まず、~/project ディレクトリにいることを確認してください。
cd ~/project
John the Ripper は、一般的なパスワードを試すために単語リストをよく使用します。この実験では、ターゲットパスワードを含む小さなカスタム単語リストを作成します。
echo -e "test\npassword\n123456\npassword123\nadmin" > wordlist.txt
次に、zip_hash.txt ファイルと wordlist.txt を使用して John the Ripper を実行します。
john --wordlist=wordlist.txt zip_hash.txt
John the Ripper はハッシュと単語リストを処理します。成功した場合、クラックされたパスワードが表示されます。出力は以下のようになります。
Using default input encoding: UTF-8
Loaded 1 password hash (PKZIP [32/64])
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
password123 (archive.zip)
1g 0:00:00:00 DONE (2023-10-27 10:30) 100.0g/s 100.0p/s 100.0c/s 100.0C/s password123
また、クラックされたパスワードは、以下のコマンドを実行して確認することもできます。
john --show zip_hash.txt
このコマンドは、John the Ripper が正常にクラックし、内部の pot ファイルに保存したパスワードを表示します。
archive.zip:password123
1 password hash cracked, 0 left
ZIP 暗号化の脆弱性を理解する
このステップでは、前のステップで使用した標準 ZIP 2.0 暗号化方式に内在する脆弱性について学びます。これらの脆弱性を理解することは、より強力な暗号化方式が必要とされる理由を理解する上で重要です。
zip コマンドで使用されるデフォルトの暗号化(「従来の PKZIP 暗号化」または「ZIP 2.0 暗号化」と呼ばれることが多い)は、弱いことが知られています。これは独自のアルゴリズムを使用しており、既知平文攻撃や総当たり攻撃など、特に現代のコンピューティングパワーにおいては様々な攻撃に対して脆弱です。
主な脆弱性:
- 独自のアルゴリズム: このアルゴリズムは、現代の暗号化標準(例:AES)のように公開審査を受けていません。
- 弱い鍵導出: 鍵導出関数は単純であり、攻撃者がパスワードを推測したり総当たり攻撃したりすることを容易にします。
- 既知平文攻撃: 攻撃者が暗号化された ZIP ファイルと、その中の少なくとも 1 つのファイル(たとえ小さくても)の平文版の両方にアクセスできる場合、暗号化キーを非常に迅速に復元できることがよくあります。これは重大な脆弱性です。
- 限定的な鍵空間: 短いパスワードの場合、実効鍵空間が小さいため、総当たり攻撃が可能になります。
これらの脆弱性のため、機密データに対して標準の ZIP 2.0 暗号化を使用することは強く推奨されません。たとえ中程度の複雑さのパスワードであっても、攻撃者が十分なリソースを持っている場合や既知平文が存在する場合には、比較的迅速にクラックされる可能性があります。
このステップではコマンド実行は必要ありませんが、安全なデータ処理のためにこれらの概念を理解することが重要です。
ZIP アーカイブを効果的に保護する
従来の ZIP 暗号化の脆弱性を考慮すると、機密データを保護する際にはより強力な方法を使用することが不可欠です。このステップでは、より堅牢な暗号化標準である AES-256 について学び、使用します。
LabEx VM にインストールされているものを含む多くの最新のzip実装は、AES 暗号化をサポートしています。ZIP アーカイブを作成する際に、暗号化方法を指定できます。
AES-256 暗号化で ZIP アーカイブを作成するには、通常、パスワードには-Pフラグ、メソッドには-mフラグを使用するか、利用可能な場合はデフォルトの強力な暗号化に依存します。ただし、zipコマンドの-eフラグは、弱い PKZIP 2.0 暗号化にデフォルト設定されることがよくあります。AES-256 のようなより強力な暗号化のためには、明示的にサポートしている7z(7-Zip)またはWinRARを使用する方が良い場合が多いです。
7zは強力なアーカイブで広く使用されているツールであるため、7zを使用して AES-256 暗号化アーカイブを作成する方法を実演しましょう。まず、p7zip-fullをインストールします。
sudo apt-get install -y p7zip-full
次に、このデモンストレーションのために新しいファイルを作成します。
echo "This is a highly secret message." > super_secret.txt
次に、AES-256 暗号化を使用してsecure_archive.7zという名前の 7z アーカイブを作成します。プロンプトが表示されたら、強力なパスワード(例:StrongPassword!23)を入力してください。
7z a -p secure_archive.7z super_secret.txt
パスワードの入力が求められます。
Enter password (will not be echoed):
Verify password (will not be echoed):
このコマンドは、デフォルトで AES-256 暗号化を使用して7zアーカイブを作成します。これは、従来の ZIP 2.0 暗号化よりも大幅に安全です。7zアーカイブは、強力な暗号化アルゴリズムと鍵導出関数により、クラックがはるかに困難です。
7zアーカイブが作成されたことを確認できます。
ls -l
secure_archive.7zが一覧に表示されているはずです。
安全なアーカイブのためのベストプラクティス:
- 強力な暗号化を使用する: 常に AES-256 暗号化(例:
7zまたは AES を明示的にサポートする最新のzipツールを使用)を優先してください。 - 強力なパスワードを使用する: 大文字と小文字の英字、数字、記号を組み合わせます。少なくとも 12〜16 文字の長さを目指してください。
- 既知平文を避ける: 推測しやすいファイルや公開されているファイルを暗号化アーカイブに含めないでください。
- ツールを定期的に更新する: アーカイブソフトウェアが最新の状態であることを確認し、最新のセキュリティパッチと改善点を活用してください。
これらのプラクティスに従うことで、アーカイブデータのセキュリティを大幅に向上させることができます。
まとめ
この実験では、パスワードで保護された ZIP アーカイブの作成、zip2johnを使用したハッシュの抽出、そしてJohn the Ripperを使用したそれらのハッシュのクラッキングに成功しました。この実践的な経験により、パスワードクラッキングのプロセスが実証され、古い暗号化方式の脆弱性が浮き彫りになりました。さらに重要なことに、従来の ZIP 2.0 暗号化に固有の弱点についての理解を深め、7zのようなツールを使用した AES-256 暗号化のような、より安全な代替手段についても学びました。議論されたベストプラクティスを適用することで、機密データを堅牢な暗号化標準で保護することを保証できます。


