ペネトレーションテストシナリオにおける John the Ripper

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

はじめに

このドキュメントでは、ペネトレーションテストのシナリオにおける John the Ripper (JtR) の使用方法について解説します。John the Ripper は、強力で広く利用されているオープンソースのパスワードクラッキングツールです。ペネトレーションテスターにとって、最も一般的なセキュリティ脆弱性の一つである弱いパスワードを特定し、悪用するための不可欠なユーティリティです。

この実験では、JtR を典型的なペンテストワークフローに統合する方法を学びます。まず、キャプチャされた shadow ファイルからユーザーのパスワードをクラックし、その情報を権限昇格のコンテキストで使用します。次に、JtR を適用して保護されたファイルのパスワードをクラックします。最後に、発見事項を文書化し、関係者に報告するための重要なステップを学びます。

ペネトレーションテストワークフローへの John the Ripper の統合

このステップでは、偵察中に取得したハッシュをクラックするというパスワード攻撃の最初のフェーズを実行します。ローカル権限昇格の一般的なターゲットは、Linux システムでユーザーのパスワードハッシュを格納する /etc/shadow ファイルです。これは、~/project ディレクトリに shadow.txt ファイルを提供することでシミュレート済みです。

まず、カスタム単語リストを使用して shadow.txt ファイルに対して John the Ripper を実行しましょう。単語リストは、単純に潜在的なパスワードを含むテキストファイルです。

クラッキングプロセスを開始するには、次のコマンドを実行します。

john --wordlist=wordlist.txt shadow.txt

John はハッシュをロードし、wordlist.txt からの各パスワードをそれらに対してテストします。weakuser のパスワードは単語リストに含まれているため、すぐにクラックされます。

Using default input encoding: UTF-8
Loaded 1 password hash (sha512, 512/512 AVX512BW 16x)
Cost 1 (iteration count) is 5000 for all loaded hashes
Will run 4 processing threads
Press 'q' or Ctrl-C to abort, almost any other key for status
password123      (weakuser)
1g 0:00:00:00 DONE (2023-10-27 10:30) 100.0g/s 100.0p/s 100.0c/s 100.0C/s password123
Use the "--show" option to display all of the cracked passwords reliably
Session completed

パスワードがクラックされると、John はそれを ~/.john/ ディレクトリにある john.pot というファイルに保存します。特定のハッシュファイルに対してクラックされたパスワードを表示するには、--show オプションを使用できます。

クラックされたパスワードを表示するには、このコマンドを実行します。

john --show shadow.txt

ユーザー名とクラックされたパスワードが表示されます。

weakuser:password123:19657:0:99999:7:::

1 password hash cracked, 0 left

ユーザーのパスワードを正常にクラックしました。これは、多くのペネトレーションテストにおける重要な最初のステップです。

ローカル権限昇格のための John the Ripper の使用

このステップでは、クラックされたパスワードを権限昇格に使用する方法を学びます。weakuser のパスワードをクラックした後、次に論理的なステップは、そのアカウントがどのようなアクセス権を提供するかを確認することです。もし weakusersudo 権限を持っているか、機密ファイルにアクセスできる場合、システムに対するより多くの制御を得ることができます。

これをシミュレートするために、先ほどクラックしたパスワード(password123)を使用して weakuser アカウントに切り替えてみましょう。

su (substitute user) コマンドを使用して weakuser に切り替えます。

su weakuser

システムはパスワードを求めます。password123 と入力して Enter キーを押します。

Password:

パスワードが正しい場合、コマンドプロンプトが変更され、現在 weakuser として操作していることが示されます。

weakuser@...:/home/labex/project$

実際のペネトレーションテストでは、このユーザーの視点からシステムを探索します。例えば、sudo -l を実行して sudo 権限を確認します。この実験では、アカウントにアクセスできることを示すだけで十分です。

次に、exit と入力して元の labex ユーザーシェルに戻ります。

exit

この演習は、弱いパスワードの直接的な影響を示しています。それは、不正なアカウントアクセスにつながる可能性があり、それがさらなるシステム侵害への足がかりとなります。

ネットワークペネトレーションテストにおける John the Ripper の適用

このステップでは、John the Ripper の汎用性がシステムパスワードハッシュを超えてどのように拡張されるかを見ていきます。ペネトレーションテスターは、ファイル共有上やポストエクスプロイテーション中に、ZIP アーカイブなどのパスワードで保護されたファイルを見つけることがよくあります。JtR はこれらもクラックできます。

~/project ディレクトリに protected.zip という名前のパスワードで保護されたファイルを提供しました。プロセスは 2 つのステージで構成されます。まず、ファイルからクラック可能なハッシュを抽出し、次に John を使用してそのハッシュをクラックします。

多くの JtR 関連ツールは、さまざまなファイルタイプからハッシュを抽出するのに役立ちます。ZIP ファイルの場合、zip2john を使用します。次のコマンドを実行して、protected.zip からハッシュを抽出し、zip_hash.txt という名前のファイルに保存します。

zip2john protected.zip > zip_hash.txt

zip_hash.txt の内容を表示して、ハッシュがどのように見えるかを確認できます。

cat zip_hash.txt

次に、この新しいハッシュファイルに対して John the Ripper を実行します。今回は単語リストを指定せず、John にデフォルトモードを使用させます。これには、一般的なパスワードのバリエーションを試すシングルクラックモードが含まれます。

john zip_hash.txt

John はパスワードを非常に迅速にクラックするはずです。

Using default input encoding: UTF-8
Loaded 1 password hash (PKZIP, 32/64)
Cost 1 (iteration count) is 1000 for all loaded hashes
Will run 4 processing threads
Press 'q' or Ctrl-C to abort, almost any other key for status
supersecret      (protected.zip)
1g 0:00:00:00 DONE (2023-10-27 10:35) 100.0g/s 12345p/s 12345c/s 12345C/s supersecret
Session completed

以前と同様に、--show オプションを使用して ZIP ファイルのクラックされたパスワードを表示します。

john --show zip_hash.txt
protected.zip:supersecret

1 password hash cracked, 0 left

ZIP ファイルのパスワードを正常に回復しました。これにより、JtR がペネトレーションテスト中に見つかるさまざまな種類のデータにどのように適用できるかが実証されました。

John the Ripper 攻撃からの発見事項の文書化

このステップでは、ペネトレーションテストの重要かつ非技術的な側面である文書化に焦点を当てます。脆弱性を発見するだけでは不十分です。修正できるように、それらを明確に文書化する必要があります。優れたレポートは、脆弱性、その影響、および修正のための推奨事項を詳細に記述します。

次に、markdown ファイルに簡単な発見事項レポートを作成します。nano テキストエディタを使用して、findings.md という名前のファイルを作成します。

nano findings.md

nano エディタ内で、次のテキストをコピーして貼り付けます。このテンプレートは、これまでに発見した 2 つの脆弱性を文書化します。

## ペネトレーションテストの発見事項 - 弱いパスワード

### 発見事項 1: 弱いユーザーアカウントパスワード

- **脆弱性:** ユーザー `weakuser` の弱いパスワード。
- **パスワード:** `password123`
- **影響:** ローカル権限昇格および不正なシステムアクセスにつながる可能性。
- **推奨事項:** 複雑性と長さを要求する強力なパスワードポリシーを施行する。`weakuser` のパスワードをリセットする。

### 発見事項 2: 保護されたアーカイブの弱いパスワード

- **脆弱性:** アーカイブ `protected.zip` の弱いパスワード。
- **パスワード:** `supersecret`
- **影響:** アーカイブ内の機密データは、ファイルを見つけたすべての人に公開されます。
- **推奨事項:** すべての暗号化されたファイルおよびアーカイブに、強力で複雑なパスワードを使用する。

テキストを貼り付けた後、ファイルを保存し、Ctrl+X、次に Y、最後に Enter を押して nano を終了します。

これで、発見事項の明確かつ簡潔な記録が作成されました。これは、あらゆるプロフェッショナルなペネトレーションテストの不可欠な部分です。

関係者への弱いパスワードの報告

この最終ステップでは、システム管理者や経営陣などの関係者に適した、ハイレベルなサマリーを作成する練習をします。詳細な発見事項ドキュメントは技術チーム向けですが、サマリーレポートはリスクと対応の必要性をより直接的に伝えます。

メールやレポートのサマリーをシミュレートする、report_summary.txt という名前のシンプルなテキストファイルを作成します。

nano エディタを使用してファイルを作成します。

nano report_summary.txt

nano エディタ内で、次のサマリーをコピーして貼り付けます。このテキストは、問題と必要なアクションを明確かつ簡潔に伝えます。

To: System Administrator
From: Penetration Tester
Subject: Critical Vulnerability: Weak Passwords Detected

This report summarizes critical password vulnerabilities discovered during the recent penetration test.

1. User 'weakuser' has a crackable password ('password123'), posing a risk of privilege escalation.
2. A protected file 'protected.zip' uses a weak password ('supersecret'), exposing its contents.

Immediate action is required to enforce a stronger password policy and reset the identified weak passwords.

ファイルを保存し、Ctrl+X、次に Y、そして Enter を押して nano を終了します。

これで、このシナリオのペネトレーションテストワークフローが完了しました。脆弱性を特定して悪用しただけでなく、それらが対処されることを保証するために文書化し、レポートを準備しました。これにより、発見から修正までのサイクルが完了します。

サマリー

この実験の完了おめでとうございます!John the Ripper を使用した現実的なペネトレーションテストワークフローを正常に実行しました。

この実験では、以下の方法を学びました。

  • shadow ファイルからのハッシュをクラックすることにより、John the Ripper をペンテストプロセスに統合する方法。
  • クラックされたパスワードを使用して、ローカル権限昇格の試みをシミュレートする方法。
  • 保護された ZIP アーカイブのパスワードをクラックすることにより、JtR をさまざまなデータタイプに適用する方法。
  • 発見事項を明確かつ構造化された方法で文書化することの重要な重要性を理解する方法。
  • 関係者に脆弱性を効果的に伝えるためのサマリーレポートを作成する方法。

これらのスキルは、倫理的ハッキングおよびセキュリティ監査に関わるすべてのサイバーセキュリティ専門家にとって基本的です。