使用 John the Ripper 进行密码审计

Kali LinuxBeginner
立即练习

引言

在本实验中,你将获得使用 John the Ripper 的实践经验。John the Ripper 是一款广泛使用的开源密码安全审计和密码恢复工具。了解如何使用此类工具对于识别密码策略中的漏洞和加强整体系统安全性至关重要。你将学习收集密码哈希、使用 John the Ripper 识别弱密码、生成已破解密码的报告以及制定改进密码策略的建议等实际步骤。本实验还将涉及密码审计过程的自动化,全面概述密码安全最佳实践。

收集用于审计的密码哈希

在此步骤中,你将学习如何收集密码哈希,这对于密码审计至关重要。在 Linux 系统上,密码哈希通常存储在 /etc/shadow 文件中。但是,直接访问此文件需要 root 权限。在本实验中,我们创建了一个名为 /etc/shadow_dummy 的虚拟 shadow 文件供你使用。

首先,让我们检查一下虚拟 shadow 文件的内容。

cat /etc/shadow_dummy

你应该会看到类似以下的输出,显示用户名及其对应的密码哈希:

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

接下来,你将把这个虚拟 shadow 文件复制到你当前的工作目录 (~/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)执行字典攻击。

首先,请确保你位于 ~/project 目录,该目录包含你的 hashes.txtwordlist.txt 文件。

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 是一个手动工具,但其执行可以被脚本化以定期运行,从而使审计流程更高效和主动。自动化有助于持续监控密码强度并识别新出现的漏洞。

一种简单的自动化方法是创建一个 shell 脚本,执行你已学到的步骤:收集哈希值、运行 John the Ripper 和生成报告。

让我们在你的 ~/project 目录中创建一个名为 audit_script.sh 的简单 shell 脚本。

cd ~/project
nano audit_script.sh

nano 编辑器中,添加以下内容:

#!/bin/bash

## 定义路径
HASH_FILE="/etc/shadow_dummy" ## 在实际场景中,这应该是 /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"

## 如果输出目录不存在,则创建它
mkdir -p "$OUTPUT_DIR"

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

## 步骤 1:复制哈希值
cp "$HASH_FILE" "$OUTPUT_DIR/hashes.txt"
echo "Hashes copied to $OUTPUT_DIR/hashes.txt"

## 步骤 2:运行 John the Ripper
echo "Running John the Ripper..."
john --wordlist="$WORDLIST_FILE" "$OUTPUT_DIR/hashes.txt"

## 步骤 3:生成报告
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.txt 和一个 cracked_passwords_YYYYMMDD_HHMMSS.txt 文件(其中 YYYYMMDD_HHMMSS 是当前时间戳)。

cracked_passwords_20231027_083500.txt  hashes.txt

此脚本可以在真实的 Linux 系统上使用 cron 等工具进行计划,以定期运行,从而实现持续的密码审计。

总结

在此实验中,你已成功学习如何使用 John the Ripper 进行密码审计。你首先从一个模拟的 shadow 文件收集密码哈希值,然后使用 John the Ripper 和一个单词列表来识别弱密码。你生成了一份已破解密码的报告,并提出了改进密码策略的关键建议,例如强制执行最小长度、复杂度要求以及避免常用密码。最后,你创建了一个基本的 shell 脚本来自动化密码审计过程,展示了如何将这些任务整合到持续的安全监控策略中。这种实践经验为你提供了密码安全审计的基础知识,这是任何系统管理员或安全专业人员的关键技能。