0Pricing
Security+ Academy · 课时

身份验证失效与不安全反序列化

了解薄弱的会话管理、凭据填充和不安全反序列化漏洞如何让攻击者劫持账户并执行代码。

身份验证失效与不安全反序列化 是 CoddyKit 上的免费 Security+ Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Security+ Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Security+ Academy 课程共包含 4 节课。

什么是失效的身份验证?

失效的身份验证是指应用在验证用户身份和管理会话方面存在弱点。身份验证机制失效后,Attacker 可能攻陷 Password、密钥或会话令牌,冒充其他用户的身份。此 OWASP Top 10 类别涵盖范围广泛的漏洞:凭据薄弱、会话管理不当、缺少 MFA,以及不安全的凭据存储。

凭据填充与 Password 喷洒

凭据填充会利用此前数据泄露事件中获得的大量用户名与 Password 对照表,尝试登录其他网站,从而利用用户重复使用 Password 的习惯。Password 喷洒则采取相反的方法:使用少量常见 Password(例如 Password1!)尝试登录大量账户,以避免触发账户锁定阈值。这两种攻击之所以能够成功,是因为 Password Policy 薄弱且缺少 MFA。

# Password spraying concept (defensive awareness)
# Attacker tries 'Password1!' against 10,000 accounts
# rather than trying 10,000 passwords against 1 account
# This avoids triggering lockout policies (e.g., 5 attempts/account)

# Defense: MFA + adaptive authentication + rate limiting

薄弱的会话管理

会话将已通过身份验证的用户与其应用状态关联起来。薄弱的会话管理漏洞包括:可预测的会话令牌值(Attacker 可以猜到的连续 ID)、永不过期的令牌、通过 HTTP 而非 HTTPS 传输的令牌,以及 Logout 时未使令牌失效。获得有效会话令牌的 Attacker 无需知道用户的 Password,就可以冒充该用户。

# Signs of weak session management:
# /login response sets:
# Set-Cookie: session=1042  (predictable, sequential)
# Missing: Secure; HttpOnly; SameSite flags
# Missing: session expiry / Max-Age
# Logout does NOT invalidate server-side session

会话固定与会话劫持

会话固定会迫使受害者使用由 Attacker 选择的会话 ID。例如,Attacker 发送一个带有预设会话 Cookie 的链接;受害者完成身份验证后,Attacker 使用同一个会话 ID 访问该账户。会话劫持则通过 XSS、网络嗅探(在未加密连接上)或窃取 Cookie 来盗取现有会话令牌。解决方法是:登录后重新生成会话 ID,并在所有地方使用 HTTPS。

不安全的 Password 存储

以明文或弱哈希(MD5、SHA-1)形式存储 Password,是严重的身份验证失效问题。数据库遭到攻陷后,明文 Password 和弱哈希可以立即被利用。Safe Password 存储要求使用专为 Password 设计的自适应哈希算法:bcrypt、Argon2或带有每个用户随机盐值的PBKDF2。这些算法被有意设计得较慢,因此会显著增加离线破解的计算成本。

# Python example — secure password hashing with bcrypt
import bcrypt

# Hash a password (includes random salt automatically)
password = b'UserSuperSecret123'
hashed = bcrypt.hashpw(password, bcrypt.gensalt(rounds=12))

# Verify
bcrypt.checkpw(password, hashed)  # returns True

什么是不安全的反序列化?

序列化会将对象状态转换为某种格式(JSON、XML、二进制),以便存储或传输。反序列化则从该格式重建对象。当应用未经验证就反序列化由 Attacker 控制的数据时,就会发生不安全的反序列化,使 Attacker 能够修改序列化对象,以操纵应用逻辑、提升权限或在 Server 上执行任意代码。

反序列化攻击示例

一种常见的攻击模式是将序列化对象放入 Cookie 或 API 参数中传递。例如,使用 ObjectInputStream.readObject() 处理不可信数据的 Java 应用,可能通过常用库(Apache Commons Collections)中的小工具链触发远程代码执行(RCE)。Attacker 构造 Malicious 序列化载荷并将其发送给应用,代码会在反序列化期间执行,通常早于任何身份验证检查。

# Insecure deserializing pattern (Python pickle — dangerous)
import pickle

# Attacker-controlled payload
class Exploit:
    def __reduce__(self):
        import os
        return (os.system, ('id',))  # executes 'id' on server

payload = pickle.dumps(Exploit())
pickle.loads(payload)  # RCE! Never deserialize untrusted data with pickle

防止不安全的反序列化

防御不安全反序列化的方法包括:使用 Java 原生序列化或 Python pickle 等危险格式时,Never 反序列化不可信数据。与二进制序列化相比,应优先使用仅包含数据的格式(JSON、XML)。如果必须进行反序列化,应实施完整性检查(使用 HMAC 对序列化对象进行签名),使用允许列表限制可被反序列化的 class,并在隔离的低权限环境中运行反序列化代码。

# Safe approach: sign serialized data before transmitting
import hmac, hashlib, json

def serialize_safe(data, secret):
    payload = json.dumps(data)  # use JSON, not pickle
    sig = hmac.new(secret.encode(), payload.encode(), hashlib.sha256).hexdigest()
    return payload + '.' + sig

将多因素身份验证作为控制措施

多因素身份验证(MFA)是应对失效身份验证最具影响力的单项控制措施。即使凭据因钓鱼、凭据填充或数据库泄露而遭到窃取,没有第二个因素的 Attacker 也无法完成身份验证。Microsoft 报告称,MFA 可阻止超过 99.9% 的自动化账户攻陷攻击。MFA 应对特权账户强制启用,并鼓励所有用户启用。

Account Lockout 与速率限制

Account Lockout 策略会在登录失败次数达到设定值后暂时禁用 Account,从而减缓暴力破解攻击。不过,Account Lockout 也可能让攻击者对合法 User 发起 Denial of Service——攻击者故意触发 Lockout,阻止合法 User 访问。速率限制(在连续失败后使用指数退避来减缓响应)和 CAPTCHA 挑战可以在降低 DoS 风险的同时缓解暴力破解。

OWASP Top 10 中的失效 Authentication

OWASP 将 失效的 Authentication列为严重风险,因为 Authentication 缺陷既常见又可能造成重大影响。失效 Authentication 的关键表现包括:允许凭据填充等自动化攻击,允许暴力破解或其他自动化攻击,允许使用默认、薄弱或广为人知的 Password,使用薄弱的凭据恢复流程,使用明文或弱哈希 Password,以及缺少或未有效实施多因素 Authentication。

快速检查

请测试您对本课 CompTIA Security+ (SY0-701) 概念的理解。

课程回顾

在本课中,您学习了:失效 Authentication 包括薄弱会话、凭据填充和不安全的 Password 存储,不安全的反序列化可能通过恶意序列化 Object 导致远程代码执行,以及 MFA、bcrypt Password 哈希、登录后重新生成会话和签名序列化数据是关键防御措施。接下来我们将探讨安全 SDLC、SAST 和 DAST 工具。

常见问题解答

「身份验证失效与不安全反序列化」课时是免费的吗?

是的 — 「身份验证失效与不安全反序列化」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Security+ Academy 课程的其余内容,请升级到 CoddyKit PRO。 Security+ Academy 课程共包含 4 节课。

「身份验证失效与不安全反序列化」这节课中我会学到什么?

了解薄弱的会话管理、凭据填充和不安全反序列化漏洞如何让攻击者劫持账户并执行代码。 你通过在浏览器中直接运行的动手代码来练习 Security+ Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Security+ Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Security+ Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「身份验证失效与不安全反序列化」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Security+ Academy 课中编写并运行代码吗?

能。每节 Security+ Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. SQL 注入与命令注入
  2. 跨站脚本攻击(XSS)与 CSRF
  3. 身份验证失效与不安全反序列化
  4. 安全 SDLC、SAST 与 DAST 工具
← 返回 Security+ Academy