《身份认证漏洞排查实战指南》
第1章 认证基础

一、认证基础

1.1 什么是身份认证

身份认证(Authentication)是验证用户或系统声称的身份是否真实有效的过程。它是网络安全的第一道防线,确保只有合法用户才能访问受保护的资源。简单来说,身份认证回答的是三个核心问题:

  • 你是谁? —— 用户声明自己的身份(如用户名、邮箱)。
  • 如何证明? —— 用户提供凭证来证明身份的真实性。
  • 是否可信? —— 系统验证凭证的有效性,决定是否放行。

📌 认证 vs 授权

概念 说明 类比
认证 验证身份(你是谁?) 出示身份证
授权 赋予权限(你能做什么?) 凭身份证进入不同区域

1.2 认证三要素

认证三要素是构建身份验证体系的三大支柱,分别对应不同的验证维度:

🔑 你知道的

知识因素 —— 用户记忆的秘密信息

  • 密码 / 口令
  • PIN码
  • 安全问题的答案

⚠️ 易被猜测、钓鱼、撞库攻击

📱 你拥有的

持有因素 —— 用户持有的物理设备

  • 手机(短信验证码)
  • 硬件令牌(RSA SecurID)
  • 智能卡 / USB Key

⚠️ 可能丢失、被盗、被克隆

👤 你是什么

固有因素 —— 用户独特的生物特征

  • 指纹
  • 人脸识别
  • 虹膜 / 声纹

⚠️ 不可更改,存在隐私风险

🔑 你知道的 密码 / PIN / 密保 知识因素 📱 你拥有的 手机 / 令牌 / 智能卡 持有因素 👤 你是什么 指纹 / 人脸 / 虹膜 固有因素 多因素认证(MFA)组合使用两种或三种要素

1.3 常见认证协议概览

不同的应用场景催生了多种认证协议,每种协议都有其设计目标和安全特性。以下是业界主流的认证协议对比:

协议 类型 传输方式 安全强度 典型场景
HTTP Basic 简单认证 Base64编码明文 低 内部API测试
HTTP Digest 摘要认证 MD5哈希 中 旧版Web应用
NTLM 挑战-响应 NTLM哈希 中 Windows域环境
Kerberos 票据认证 加密票据 高 企业AD域
OAuth2 授权委托 Bearer Token 高 第三方登录授权
SAML 联合身份 XML断言 高 企业SSO
JWT 自包含令牌 JSON + 签名 高 REST API / 微服务
常见认证协议架构对比 HTTP Basic / Digest 明文/哈希传输 无状态,每次请求携带 NTLM 挑战-响应机制 Windows集成认证 Kerberos 票据 + 时间戳 KDC分发票据 OAuth2 授权码 / 隐式 / 客户端 第三方授权委托 SAML XML断言 企业级联合SSO JWT JSON Web Token 自包含、无状态 ⚠️ 安全等级:低 ⚠️ 安全等级:中 ✅ 安全等级:高 现代应用推荐使用 OAuth2 + JWT 或 SAML 实现安全认证

1.4 JWT 令牌结构详解

JWT(JSON Web Token)是目前最流行的无状态认证令牌,由三部分组成:

// JWT 格式:header.payload.signature
// 示例令牌:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
部分 内容 作用
Header 算法类型(alg)和令牌类型(typ) 声明签名算法
Payload 声明(claims):用户信息、过期时间等 携带用户身份数据
Signature 对前两部分进行签名 防篡改验证
Header {"alg":"HS256","typ":"JWT"} 算法 + 类型 Payload {"sub":"123","name":"John"} 用户声明数据 Signature HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret) 防篡改签名 JWT 三部分通过 "." 连接,Base64URL 编码传输

1.5 认证协议选择建议

在实际渗透测试和系统设计中,选择合适的认证协议至关重要:

  • 内部系统:优先使用 Kerberos 或 NTLM(Windows 环境)
  • Web 应用:推荐 OAuth2 + JWT 组合,支持无状态和跨域
  • 企业 SSO:SAML 是成熟的选择,支持跨组织联合
  • API 服务:JWT 自包含令牌,减少数据库查询
  • 遗留系统:HTTP Digest 比 Basic 更安全,但仍需配合 HTTPS

💡 渗透测试提示: 检查认证实现时,重点关注令牌存储方式(Cookie vs LocalStorage)、签名算法强度(HS256 vs RS256)、过期时间设置、以及是否启用 HTTPS 传输。JWT 的 "none" 算法漏洞是常见攻击入口。

专注课程资料整理