引言
在当今的数字环境中,强大的密码策略对于保护敏感信息至关重要。然而,即使有策略在执行,漏洞依然可能存在。本实验将指导你使用强大的密码破解工具 John the Ripper 来评估现有密码策略的有效性。你将学会如何识别弱点,推荐更强的策略,并了解如何实施自动化的合规性检查以增强整体安全性。这次实践经验将为你提供密码安全审计和强制执行方面的实用技能。
在当今的数字环境中,强大的密码策略对于保护敏感信息至关重要。然而,即使有策略在执行,漏洞依然可能存在。本实验将指导你使用强大的密码破解工具 John the Ripper 来评估现有密码策略的有效性。你将学会如何识别弱点,推荐更强的策略,并了解如何实施自动化的合规性检查以增强整体安全性。这次实践经验将为你提供密码安全审计和强制执行方面的实用技能。
在此步骤中,你将开始了解如何在 Linux 系统上分析现有的密码策略。虽然在本实验中我们不会直接修改系统范围的策略,但了解这些策略的配置位置对于审计至关重要。我们将重点检查用于规定密码复杂度、有效期和锁定设置的常见配置文件。
首先,让我们检查 /etc/login.defs 文件,该文件包含 shadow password suite 的全局配置设置。此文件定义了密码老化、最小密码长度和最大密码年龄等参数。
使用 grep 命令在 /etc/login.defs 中查找与密码相关的设置:
grep -E "PASS_MAX_DAYS|PASS_MIN_DAYS|PASS_WARN_AGE|ENCRYPT_METHOD" /etc/login.defs
你应该会看到类似以下的输出,尽管具体数值可能有所不同:
PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0
PASS_WARN_AGE 7
ENCRYPT_METHOD SHA512
接下来,我们将查看 /etc/pam.d/common-password,这是一个 PAM (Pluggable Authentication Modules) 配置文件,用于控制密码复杂度规则。此文件通常包含 pam_cracklib.so 或 pam_pwquality.so 等模块,这些模块强制执行诸如要求大小写混合、数字和特殊字符等规则。
使用 cat 查看 /etc/pam.d/common-password 的内容:
cat /etc/pam.d/common-password
你将看到很多行,但请注意包含 pam_pwquality.so 或 pam_cracklib.so 及其参数(例如 minlen、difok、ucredit、lcredit、dcredit、ocredit)的行。
password [success=1 default=ignore] pam_unix.so obscure sha512 shadow
password requisite pam_pwquality.so retry=3 minlen=8 difok=3 reject_username enforce_for_root
password optional pam_gnome_keyring.so
password optional pam_kwallet.so
password optional pam_systemd.so
最后,让我们检查 /etc/security/pwquality.conf 文件,当使用 pam_pwquality.so 时,该文件提供了对密码质量设置更精细化的控制。
cat /etc/security/pwquality.conf
你可能会看到诸如 minlen、dcredit、ucredit、lcredit、ocredit、maxrepeat 等设置。
## Configuration for the pam_pwquality module
#
## The setting of the PAM module is usually in /etc/pam.d/common-password
#
## minlen = 8
## difok = 3
## dcredit = -1
## ucredit = -1
## lcredit = -1
## ocredit = -1
## minclass = 0
## maxrepeat = 0
## maxsequence = 0
## gecoscheck = 0
## dictcheck = 1
## usercheck = 1
## enforce_for_root
通过检查这些文件,你可以很好地了解系统上当前的密码策略设置。
在此步骤中,你将使用 John the Ripper (JtR) 来测试密码策略的有效性。我们将模拟一个场景,你拥有一个密码哈希文件,并尝试破解弱密码。
首先,我们创建一个用于演示的虚拟密码文件。我们将创建一个名为 passwords.txt 的文件,其中包含一些弱密码。
echo "user1:password123" > ~/project/passwords.txt
echo "user2:welcome" >> ~/project/passwords.txt
echo "user3:labexrocks" >> ~/project/passwords.txt
现在,我们需要将这些明文密码转换为 John the Ripper 可以理解的格式。我们将使用 unshadow(JtR 的一个组件)来合并一个虚拟的 /etc/passwd 和 /etc/shadow 文件。为简单起见,我们将直接使用 passwords.txt 文件与 JtR 的 stdin 模式进行破解。
让我们创建一个名为 wordlist.txt 的简单字典文件,John the Ripper 将使用它来尝试破解密码。
echo "password123" > ~/project/wordlist.txt
echo "welcome" >> ~/project/wordlist.txt
echo "labexrocks" >> ~/project/wordlist.txt
echo "secret" >> ~/project/wordlist.txt
echo "123456" >> ~/project/wordlist.txt
现在,使用 John the Ripper 使用 wordlist.txt 来破解 passwords.txt 中的密码。
john --format=raw-md5 --wordlist=~/project/wordlist.txt ~/project/passwords.txt
你可能会看到类似以下的输出,表明密码已被破解:
Using default input encoding: UTF-8
Loaded 3 password hashes with no different salts (Raw-MD5 [MD5])
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
password123 (user1)
welcome (user2)
labexrocks (user3)
3g 0:00:00:00 DONE (2023-10-27 08:30) 100.0% 3g/s 100.0p/s 100.0c/s 100.0C/s password123 welcome labexrocks
Session completed.
要查看已破解的密码,你可以使用 --show 选项:
john --show ~/project/passwords.txt
输出:
user1:password123
user2:welcome
user3:labexrocks
3 password hashes cracked, 0 left
这演示了使用简单的字典文件可以多么容易地破解弱密码。
在此步骤中,你将根据上一步的破解结果,识别模拟密码策略中的漏洞。John the Ripper 能够轻松破解密码这一事实表明存在明显的弱点。
根据破解出的密码(password123、welcome、labexrocks),以下是一些允许它们被破解的常见漏洞:
welcome 和 labexrocks 是简单的字典词或易于猜测的短语。password123 是一种常见模式。一个强大的策略应该强制要求混合使用大写字母、小写字母、数字和特殊字符。password123 和 labexrocks 分别有 11 和 10 个字符长,但由于其简单性,它们仍然容易受到攻击。策略应强制执行最小长度,通常为 12 个字符或更多,以增加攻击者的搜索空间。password123 这样的密码遵循可预测的模式,这些模式通常包含在破解字典中。为了模拟识别这些漏洞,让我们考虑一下更强的密码策略可能是什么样的。例如,如果我们的当前策略允许 minlen=8 且没有特定的字符类别要求,那么 welcome(7 个字符)将不符合要求,但 password123(11 个字符,无特殊字符)将通过。破解结果突出表明,即使密码满足了基本的长度要求,如果未强制执行复杂度检查和字典检查,它仍然可能很弱。
思考 pam_pwquality.so 模块的参数(如 minlen、dcredit、ucredit、lcredit、ocredit、dictcheck)如何调整才能防止此类弱密码。例如,设置 dcredit=-1 将要求至少包含一个数字,ucredit=-1 要求包含大写字母,依此类推。
此步骤主要是概念性的,侧重于分析先前破解练习的结果以理解策略的不足之处。
在此步骤中,你将根据已识别的漏洞制定更强密码策略的建议。有效的密码策略需要在安全性和可用性之间取得平衡。
以下是关于更健壮密码策略的一些建议:
/etc/security/pwquality.conf 中设置 minlen=12 或在 /etc/pam.d/common-password 中设置 pam_pwquality.so minlen=12。/etc/security/pwquality.conf 中设置 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1 或在 /etc/pam.d/common-password 中设置 pam_pwquality.so dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1。password123、qwerty、123456)。
/etc/security/pwquality.conf 中设置 dictcheck=1 usercheck=1 或在 /etc/pam.d/common-password 中设置 pam_pwquality.so dictcheck=1 usercheck=1。/etc/pam.d/common-password 中使用 pam_unix.so 设置 remember=5(例如,password required pam_unix.so obscure sha512 shadow remember=5)。/etc/pam.d/common-auth 中使用 pam_tally2.so 或 pam_faillock.so(例如,auth required pam_faillock.so deny=3 unlock_time=600)。为了演示概念性的更改,让我们设想我们正在更新一项策略。我们实际上不会修改系统文件,但你可以看到 pwquality.conf 文件可以如何被编辑。
打开一个虚拟文件来模拟策略建议:
nano ~/project/recommended_policy.txt
向文件中添加以下内容:
## Recommended Password Policy Settings
minlen = 14
dcredit = -1
ucredit = -1
lcredit = -1
ocredit = -1
dictcheck = 1
usercheck = 1
maxrepeat = 3
maxsequence = 3
保存并退出 nano(Ctrl+S,Ctrl+X)。
这些设置将强制要求最小长度为 14 个字符,要求至少包含一个数字、一个大写字母、一个小写字母和一个特殊字符,并阻止使用字典词和用户名。
在此步骤中,你将了解如何实现自动化策略合规性检查。虽然直接的系统范围策略执行通过 PAM 和其他配置文件完成,但自动化检查可用于根据定义的策略定期审计用户密码或系统配置。
在此实验中,我们将使用一个 shell 脚本来模拟一个简单的合规性检查。该脚本将检查一个虚拟用户的密码是否满足基本的长度要求。在实际场景中,此类脚本会更复杂,可能会与 OpenSCAP 等工具或自定义脚本集成,以审计实际的密码哈希(如果允许且符合道德规范)或配置文件。
首先,让我们创建一个虚拟用户和一个虚拟密码哈希文件来模拟系统状态。我们不会创建实际的系统用户。
echo "testuser:\$6\$salt\$hashedpassword" > ~/project/dummy_shadow.txt
现在,创建一个名为 check_password_compliance.sh 的简单 shell 脚本,该脚本检查 dummy_shadow.txt 中 testuser 的密码长度是否大于某个值(例如,10 个字符)。
nano ~/project/check_password_compliance.sh
向脚本中添加以下内容:
#!/bin/bash
## This script simulates a basic password length compliance check.
## In a real scenario, you would parse actual shadow file entries
## or use more sophisticated tools.
MIN_LENGTH=10
PASSWORD_HASH=$(grep "testuser" ~/project/dummy_shadow.txt | cut -d':' -f2)
## For demonstration, we'll just check the length of a placeholder hash.
## In reality, you'd need to crack or analyze the actual hash.
## Here, we're just checking if the hash string itself is long enough,
## which is NOT how real password length checks work, but serves as a
## placeholder for a compliance check.
if [ ${#PASSWORD_HASH} -ge $MIN_LENGTH ]; then
echo "Compliance Check: testuser password hash length meets minimum requirement ($MIN_LENGTH characters)."
exit 0
else
echo "Compliance Check: testuser password hash length DOES NOT meet minimum requirement ($MIN_LENGTH characters)."
exit 1
fi
保存并退出 nano(Ctrl+S,Ctrl+X)。
使脚本可执行:
chmod +x ~/project/check_password_compliance.sh
现在,运行合规性检查脚本:
~/project/check_password_compliance.sh
你应该会看到指示基于虚拟哈希长度的合规性输出:
Compliance Check: testuser password hash length meets minimum requirement (10 characters).
这个简单的例子说明了自动化合规性检查的概念。在生产环境中,可以使用 cron 定期运行此类脚本,以确保持续遵守密码策略。更高级的检查将涉及解析实际的密码哈希(如果允许且有适当的安全考虑)、与字典列表进行比对,或与安全合规框架集成。
在此实验中,你获得了审计和执行密码策略的实践经验。你通过检查 /etc/login.defs、/etc/pam.d/common-password 和 /etc/security/pwquality.conf 等关键文件,学习了如何在 Linux 系统上分析现有的密码策略配置。然后,你使用 John the Ripper 演示了弱密码被破解的容易程度,突显了强策略的重要性。基于这些发现,你制定了更强密码策略的建议,重点关注长度、复杂度与字典检查。最后,你通过创建一个简单的脚本来验证密码策略的遵守情况,探索了自动化合规性检查的概念。此实验提供了密码安全审计的基础理解,使你具备识别和缓解与密码相关的漏洞的技能。