《身份认证漏洞排查实战指南》
第1章 认证基础
一、认证基础
1.1 什么是身份认证
身份认证(Authentication)是验证用户或系统声称的身份是否真实有效的过程。它是网络安全的第一道防线,确保只有合法用户才能访问受保护的资源。简单来说,身份认证回答的是三个核心问题:
- 你是谁? —— 用户声明自己的身份(如用户名、邮箱)。
- 如何证明? —— 用户提供凭证来证明身份的真实性。
- 是否可信? —— 系统验证凭证的有效性,决定是否放行。
📌 认证 vs 授权
| 概念 | 说明 | 类比 |
|---|---|---|
| 认证 | 验证身份(你是谁?) | 出示身份证 |
| 授权 | 赋予权限(你能做什么?) | 凭身份证进入不同区域 |
1.2 认证三要素
认证三要素是构建身份验证体系的三大支柱,分别对应不同的验证维度:
🔑 你知道的
知识因素 —— 用户记忆的秘密信息
- 密码 / 口令
- PIN码
- 安全问题的答案
⚠️ 易被猜测、钓鱼、撞库攻击
📱 你拥有的
持有因素 —— 用户持有的物理设备
- 手机(短信验证码)
- 硬件令牌(RSA SecurID)
- 智能卡 / USB Key
⚠️ 可能丢失、被盗、被克隆
👤 你是什么
固有因素 —— 用户独特的生物特征
- 指纹
- 人脸识别
- 虹膜 / 声纹
⚠️ 不可更改,存在隐私风险
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 / 微服务 |
1.4 JWT 令牌结构详解
JWT(JSON Web Token)是目前最流行的无状态认证令牌,由三部分组成:
// JWT 格式:header.payload.signature
// 示例令牌:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
| 部分 | 内容 | 作用 |
|---|---|---|
| Header | 算法类型(alg)和令牌类型(typ) | 声明签名算法 |
| Payload | 声明(claims):用户信息、过期时间等 | 携带用户身份数据 |
| Signature | 对前两部分进行签名 | 防篡改验证 |
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" 算法漏洞是常见攻击入口。
专注课程资料整理