John the Ripper を使用したパスワード監査

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

はじめに

この実験では、広く使用されているオープンソースのパスワードセキュリティ監査およびパスワード回復ツールである John the Ripper のハンズオン体験を行います。このようなツールの使用方法を理解することは、パスワードポリシーの脆弱性を特定し、システム全体のセキュリティを強化するために不可欠です。この実験では、パスワードハッシュの収集、John the Ripper を使用した弱いパスワードの特定、クラックされたパスワードのレポート生成、およびパスワードポリシー改善のための推奨事項の策定といった実践的な手順を学びます。また、パスワード監査プロセスの自動化についても触れ、パスワードセキュリティのベストプラクティスを包括的に概観します。

監査のためのパスワードハッシュの収集

このステップでは、パスワード監査に不可欠なパスワードハッシュの収集方法を学びます。Linux システムでは、パスワードハッシュは通常/etc/shadowファイルに保存されています。しかし、このファイルに直接アクセスするには root 権限が必要です。この実験の目的のため、使用する/etc/shadow_dummyという名前のダミーシャドウファイルを作成しました。

まず、ダミーシャドウファイルの内容を確認しましょう。

cat /etc/shadow_dummy

以下のような出力が表示され、ユーザー名とその対応するパスワードハッシュが表示されるはずです。

user1:5f4dcc3b5aa765d61d8327deb882cf99
user2:21232f297a57a5a743894a0e4a801fc3
user3:d41d8cd98f00b204e9800998ecf8427e
user4:e10adc3949ba59abbe56e057f20f883e
user5:a8b7c6d5e4f3g2h1i0j9k8l7m6n5o4p3

次に、このダミーシャドウファイルを現在の作業ディレクトリ(~/project)にコピーして、John the Ripper から簡単にアクセスできるようにします。

cp /etc/shadow_dummy ~/project/hashes.txt

これで、hashes.txtファイルが~/projectディレクトリに正常にコピーされたことを確認します。

ls ~/project/hashes.txt

出力はファイルの存在を確認するはずです。

/home/labex/project/hashes.txt

弱いパスワード特定のための John the Ripper の実行

このステップでは、John the Ripper を使用して、準備したhashes.txtファイルから弱いパスワードを特定します。John the Ripper は、辞書攻撃を含む様々なクラッキングモードを使用できます。ここでは、定義済みの単語リスト(wordlist)を使用した辞書攻撃を実行します。

まず、hashes.txtファイルとwordlist.txtファイルが配置されている~/projectディレクトリにいることを確認してください。

cd ~/project

次に、hashes.txtファイルとwordlist.txtファイルを使用して John the Ripper を実行します。--wordlistオプションは、単語リストへのパスを指定します。

john --wordlist=wordlist.txt hashes.txt

John the Ripper はハッシュの処理を開始します。一致するものが見つかった場合、クラックされたパスワードが表示されます。出力は以下のようになります。

Using default input encoding: UTF-8
Loaded 5 password hashes with no different salts (LM HASH, descrypt/BSDI crypt/other crypt(3) [DES/AES-NI])
Press 'q' or Ctrl-C to abort, almost any other key for status
password         (user1)
123456           (user2)
test             (user3)
admin            (user4)
4g 0:00:00:00 DONE (2023-10-27 08:30) 400% (ETA: 08:30) 0.000c/s 0p/s 4.000w/s 4.000P/s user1, user2, user3, user4
Session completed.

この例では、John the Ripper はuser1user2user3user4のパスワードを正常にクラックしました。user5のパスワードは、単純な単語リストに含まれていないためクラックされませんでした。

これまでに John がクラックしたパスワードを確認するには、--showオプションを使用します。

john --show hashes.txt

出力にはクラックされたパスワードがリスト表示されます。

user1:password
user2:123456
user3:test
user4:admin

4 password hashes cracked, 1 left

このコマンドは、クラッキングセッションの結果を確認するのに役立ちます。

クラックされたパスワードに関するレポートの生成

このステップでは、クラックされたパスワードに関するレポートを生成する方法を学びます。John the Ripper は、クラックされたパスワードをファイルに保存します。通常は~/.john/john.potです。--showオプションを使用してこれらのクラックされたパスワードを表示でき、これが基本的なレポートとして機能します。

クラックされたパスワードのクリーンなリストを取得するために、john --showの出力をファイルにリダイレクトできます。これは、さらに分析したり共有したりできるレポートを生成するための一般的な方法です。

まず、~/projectディレクトリにいることを確認しましょう。

cd ~/project

次に、john --show hashes.txtの出力をcracked_passwords.txtという新しいファイルにリダイレクトします。

john --show hashes.txt > cracked_passwords.txt

このコマンドはターミナルに何も出力しませんが、現在のディレクトリにcracked_passwords.txtファイルが作成されます。

次に、cracked_passwords.txtファイルの内容を表示して、レポートが正しく生成されたことを確認します。

cat cracked_passwords.txt

以下のようなクラックされたパスワードのリストが表示されるはずです。

user1:password
user2:123456
user3:test
user4:admin

4 password hashes cracked, 1 left

このcracked_passwords.txtファイルは、脆弱でクラックされたパスワードを持つユーザーアカウントを詳細に示したレポートとして機能します。実際のシナリオでは、このレポートは直ちにパスワードを変更する必要があるユーザーを特定するために使用されます。

パスワードポリシー改善の推奨事項の生成

このステップでは、パスワード監査の結果に基づいて、パスワードポリシーを改善するための推奨事項を策定します。脆弱なパスワードを特定することは最初のステップに過ぎず、次の重要なステップは、将来そのような脆弱性を防ぐための対策を実装することです。

クラックされたパスワード(password123456testadmin)に基づくと、現在のパスワードポリシー(またはその欠如)が非常に単純で一般的なパスワードを許容していることは明らかです。

パスワードポリシーを改善するための主要な推奨事項を以下に示します。

  1. 最小長: 最小パスワード長を強制します。通常は 12 文字以上です。パスワードが長いほど、クラックは指数関数的に困難になります。
  2. 複雑性要件: 文字タイプの組み合わせの使用を義務付けます。
    • 大文字 (A-Z)
    • 小文字 (a-z)
    • 数字 (0-9)
    • 特殊文字 (!@#$%^&*()_+-=[]{}|;:'",.<>/?`~)
  3. 一般的なパスワードの回避: 一般的に使用される、または推測しやすいパスワード(wordlist.txtで見つかったものなど)のブラックリストを実装します。多くのシステムは、新しいパスワードをこのようなブラックリストと照合できます。
  4. 個人情報の不使用: ユーザーに対し、簡単に推測されたりオンラインで見つけられたりする可能性のある個人情報(名前、誕生日、ペットの名前など)を使用しないように助言します。
  5. 定期的な変更(注意が必要): 歴史的には推奨されていましたが、頻繁なパスワード変更の強制は、ユーザーがより単純で予測可能なパスワードを選択する原因となる可能性があります。より良いアプローチは、強力なパスワードを強制し、侵害が疑われる場合にのみ変更を要求することです。
  6. 多要素認証 (MFA): クリティカルなシステムには MFA を実装します。パスワードが侵害されたとしても、MFA は追加のセキュリティ層を提供します。
  7. パスワードマネージャー: ユーザーにパスワードマネージャーの使用を奨励または提供します。これらのツールは、さまざまなサービスに対して強力でユニークなパスワードを生成および保存できます。

理解を示すために、これらの推奨事項をどのように伝達するかを検討してください。例えば、簡単なポリシー声明を作成することができます。

~/projectディレクトリにpassword_policy_recommendations.txtという名前のファイルを作成し、いくつかの主要な推奨事項を追加しましょう。

cd ~/project
echo "--- Password Policy Recommendations ---" | tee password_policy_recommendations.txt > /dev/null
echo "1. Minimum length: 12 characters" | tee -a password_policy_recommendations.txt > /dev/null
echo "2. Complexity: Mix of uppercase, lowercase, numbers, special characters" | tee -a password_policy_recommendations.txt > /dev/null
echo "3. Avoid common passwords and personal information" | tee -a password_policy_recommendations.txt > /dev/null
echo "4. Implement Multi-Factor Authentication (MFA) for critical systems" | tee -a password_policy_recommendations.txt > /dev/null

次に、password_policy_recommendations.txtファイルの内容を表示します。

cat password_policy_recommendations.txt

出力には、推奨事項が表示されるはずです。

--- Password Policy Recommendations ---
1. Minimum length: 12 characters
2. Complexity: Mix of uppercase, lowercase, numbers, special characters
3. Avoid common passwords and personal information
4. Implement Multi-Factor Authentication (MFA) for critical systems

このファイルは、推奨事項の基本的なレポートを表します。

パスワード監査プロセスの自動化

このステップでは、パスワード監査プロセスの一部を自動化する方法を探ります。John the Ripper は手動ツールですが、その実行を定期的に実行するようにスクリプト化することで、監査プロセスをより効率的かつプロアクティブにすることができます。自動化は、パスワード強度を継続的に監視し、新たな脆弱性が現れた際に特定するのに役立ちます。

自動化の簡単な方法は、学習したステップ(ハッシュの収集、John the Ripper の実行、レポートの生成)を実行するシェルスクリプトを作成することです。

~/projectディレクトリにaudit_script.shという名前の簡単なシェルスクリプトを作成しましょう。

cd ~/project
nano audit_script.sh

nanoエディタ内で、以下の内容を追加します。

#!/bin/bash

## Define paths
HASH_FILE="/etc/shadow_dummy" ## In a real scenario, this would be /etc/shadow
WORDLIST_FILE="wordlist.txt"
OUTPUT_DIR="~/project/audit_results"
CRACKED_REPORT="$OUTPUT_DIR/cracked_passwords_$(date +%Y%m%d_%H%M%S).txt"

## Create output directory if it doesn't exist
mkdir -p "$OUTPUT_DIR"

echo "--- Starting Password Audit ---"

## Step 1: Copy hashes
cp "$HASH_FILE" "$OUTPUT_DIR/hashes.txt"
echo "Hashes copied to $OUTPUT_DIR/hashes.txt"

## Step 2: Run John the Ripper
echo "Running John the Ripper..."
john --wordlist="$WORDLIST_FILE" "$OUTPUT_DIR/hashes.txt"

## Step 3: Generate report
echo "Generating cracked password report..."
john --show "$OUTPUT_DIR/hashes.txt" > "$CRACKED_REPORT"

echo "Audit complete. Report saved to $CRACKED_REPORT"
echo "--- Audit Finished ---"

Ctrl+X、次にY、最後にEnterを押して保存してnanoを終了します。

次に、スクリプトを実行可能にします。

chmod +x audit_script.sh

それでは、スクリプトを実行して動作を確認しましょう。

./audit_script.sh

手動ステップと同様の出力が表示され、監査プロセスが実行中であり、レポートが生成されていることを示します。

--- Starting Password Audit ---
Hashes copied to /home/labex/project/audit_results/hashes.txt
Running John the Ripper...
Using default input encoding: UTF-8
Loaded 5 password hashes with no different salts (LM HASH, descrypt/BSDI crypt/other crypt(3) [DES/AES-NI])
Press 'q' or Ctrl-C to abort, almost any other key for status
password         (user1)
123456           (user2)
test             (user3)
admin            (user4)
4g 0:00:00:00 DONE (2023-10-27 08:35) 400% (ETA: 08:35) 0.000c/s 0p/s 4.000w/s 4.000P/s user1, user2, user3, user4
Session completed.
Generating cracked password report...
Audit complete. Report saved to /home/labex/project/audit_results/cracked_passwords_YYYYMMDD_HHMMSS.txt
--- Audit Finished ---

最後に、audit_resultsディレクトリと、その中のレポートファイルが作成されたことを確認します。

ls ~/project/audit_results/

hashes.txtcracked_passwords_YYYYMMDD_HHMMSS.txtファイル(YYYYMMDD_HHMMSS は現在のタイムスタンプ)が表示されるはずです。

cracked_passwords_20231027_083500.txt  hashes.txt

このスクリプトは、実際の Linux システムでcronのようなツールを使用して定期的に実行するようにスケジュールでき、継続的なパスワード監査を可能にします。

まとめ

この実験では、John the Ripper を使用したパスワード監査の方法を習得しました。ダミーのシャドウファイルからパスワードハッシュを収集することから始め、次に単語リストとともに John the Ripper を使用して脆弱なパスワードを特定しました。クラックされたパスワードのレポートを生成し、最小長、複雑性、一般的なパスワードの回避などを強制するパスワードポリシー改善のための主要な推奨事項を策定しました。最後に、パスワード監査プロセスを自動化するための基本的なシェルスクリプトを作成し、これらのタスクを継続的なセキュリティ監視戦略に統合する方法を示しました。この実践的な経験は、システム管理者またはセキュリティ専門家にとって重要なスキルであるパスワードセキュリティ監査の基礎的な理解を提供します。