一文看懂认证安全问题总结篇
字数 1917 2025-08-18 11:38:31
认证安全全面解析与最佳实践
认证技术分类概述
认证技术可分为以下几大类:
- 公钥基础设施:PKI、X509标准
- Web会话管理:Cookie、Session、JWT
- Windows认证体系:ADS、LM/NTLM、Kerberos
- 开放授权协议:OAuth、OpenID
- 单点登录方案:SSO及相关协议(SAML、CAS等)
Web会话管理安全
Cookie与Session机制
Cookie特性:
- 存储在客户端浏览器
- 六元组结构:
setcookie(name,value,expire,path,domain,secure,httponly) - 关键安全属性:
secure:仅通过HTTPS传输httponly:阻止JavaScript访问
Session特性:
- 存储在服务端
- PHP关键配置:
session.cookie_lifetime = 0 session.cookie_path = / session.cookie_httponly = 1 session.use_strict_mode=1 session.cookie_secure = on session.use_only_cookies = 1
常见安全问题:
-
Cookie未设置HttpOnly导致XSS劫持
-
会话固定(Session Fixation)攻击
- 攻击条件:
- 中间人劫持注入SessionID
- 同源XSS修改Cookie
- CRLF注入SessionID
- URL传递SessionID(当
use_only_cookies=0)
- 攻击条件:
-
防御措施:
session_destroy(); session_regenerate_id(); $_SESSION['valid_id'] = session_id();
JWT安全
JWT结构:
- 头部(Header)
- 负载(Payload)
- 签名(Signature)
- Base64URL编码格式(+/=被替换为-_.)
常见攻击方式:
-
修改认证方式攻击:
- 将算法改为
none绕过验证 - 将RSA改为HS256,使用公钥伪造签名
- 将算法改为
-
弱密钥暴力破解:
- 针对HS256签名的暴力破解
-
Refresh Token滥用:
- 利用Refresh Token与Access Token的非关联性
-
JWT注入:
- 当JWT字段用于数据库查询时可能引发SQL注入
单点登录(SSO)安全
CAS流程
- 用户访问App系统,重定向到CAS Server
- 用户登录CAS,生成ST(Service Ticket)
- 跳转回App,传递ST参数
- App验证ST有效性
- 验证通过后建立本地会话
SAML安全
常见漏洞:
- 删除签名标签绕过认证
- XML解析差异导致校验绕过
- 示例:
python-saml组件忽略标签属性后的值
- 示例:
- 缺少过期机制导致重放攻击
测试工具:
- SAML Raider(Burp Suite插件)
OAuth与OpenID安全
OAuth 2.0四种模式
- 授权码模式(最安全)
- 隐式模式(简化授权码模式)
- 密码模式
- 客户端模式
常见攻击方式
-
开放重定向漏洞:
- 利用通配符重定向规则绕过
- 示例:
redirect_uri=https://evil.example.com@client.example.com/cb
-
认证流混淆:
- 利用客户端对多个AS使用相同重定向URI
-
信息泄露:
- 通过XSS获取
access_token
- 通过XSS获取
-
重定向URL漏洞:
- 服务端未严格校验
redirect_uri - 可导致CSRF或XSS攻击
- 服务端未严格校验
-
会话固定:
- AS在授权后未及时注销会话
-
账号关联CSRF:
- 诱骗用户关联攻击者控制的第三方账号
Windows认证安全
NTLM认证流程
- 客户端发送用户名
- 服务端返回Challenge
- 客户端用密码Hash加密Challenge生成Response
- 服务端验证Response
攻击方式:
- Pass The Hash(PTH):
privilege::debug sekurlsa::pth /user:admin /ntlm:<hash> /domain:example.com /run:cmd.exe
Kerberos认证流程
- AS-REQ:客户端请求TGT
- AS-REP:AS返回加密的TGT和会话密钥
- TGS-REQ:客户端请求服务票据
- TGS-REP:TGS返回服务票据
- AP-REQ:客户端向服务出示票据
攻击方式:
-
黄金票据(Golden Ticket):
- 需要KRBTGT账户的NTLM Hash
kerberos::golden /domain:example.com /sid:S-1-5-21-... /rc4:<krbtgt_ntlm_hash> /user:fakeuser /ptt -
白银票据(Silver Ticket):
- 需要服务账户的NTLM Hash
kerberos::golden /domain:example.com /sid:S-1-5-21-... /target:server1 /service:cifs /rc4:<service_ntlm_hash> /user:fakeuser /ptt -
Kerberoasting:
- 请求服务票据后离线破解
-
MS14-068漏洞:
- 通过修改PAC提升权限
- 检测补丁:
systeminfo | findstr /i kb3011780
最佳实践建议
-
Web会话:
- 强制使用
HttpOnly和Secure标志 - 启用
session.use_strict_mode - 定期轮换会话密钥
- 强制使用
-
OAuth实现:
- 严格校验
redirect_uri - 使用state参数防CSRF
- 限制令牌有效期
- 严格校验
-
Windows域:
- 定期更换KRBTGT密码(每6个月)
- 监控异常Kerberos请求
- 及时安装安全补丁
-
通用原则:
- 实施多因素认证
- 记录和监控认证日志
- 定期进行安全审计