一文看懂认证安全问题总结篇
字数 1917 2025-08-18 11:38:31

认证安全全面解析与最佳实践

认证技术分类概述

认证技术可分为以下几大类:

  1. 公钥基础设施:PKI、X509标准
  2. Web会话管理:Cookie、Session、JWT
  3. Windows认证体系:ADS、LM/NTLM、Kerberos
  4. 开放授权协议:OAuth、OpenID
  5. 单点登录方案: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
    

常见安全问题

  1. Cookie未设置HttpOnly导致XSS劫持

    
    
  2. 会话固定(Session Fixation)攻击

    • 攻击条件:
      • 中间人劫持注入SessionID
      • 同源XSS修改Cookie
      • CRLF注入SessionID
      • URL传递SessionID(当use_only_cookies=0)
  3. 防御措施:

    session_destroy();
    session_regenerate_id();
    $_SESSION['valid_id'] = session_id();
    

JWT安全

JWT结构

  • 头部(Header)
  • 负载(Payload)
  • 签名(Signature)
  • Base64URL编码格式(+/=被替换为-_.)

常见攻击方式

  1. 修改认证方式攻击:

    • 将算法改为none绕过验证
    • 将RSA改为HS256,使用公钥伪造签名
  2. 弱密钥暴力破解:

    • 针对HS256签名的暴力破解
  3. Refresh Token滥用:

    • 利用Refresh Token与Access Token的非关联性
  4. JWT注入:

    • 当JWT字段用于数据库查询时可能引发SQL注入

单点登录(SSO)安全

CAS流程

  1. 用户访问App系统,重定向到CAS Server
  2. 用户登录CAS,生成ST(Service Ticket)
  3. 跳转回App,传递ST参数
  4. App验证ST有效性
  5. 验证通过后建立本地会话

SAML安全

常见漏洞

  1. 删除签名标签绕过认证
  2. XML解析差异导致校验绕过
    • 示例:python-saml组件忽略标签属性后的值
  3. 缺少过期机制导致重放攻击

测试工具

  • SAML Raider(Burp Suite插件)

OAuth与OpenID安全

OAuth 2.0四种模式

  1. 授权码模式(最安全)
  2. 隐式模式(简化授权码模式)
  3. 密码模式
  4. 客户端模式

常见攻击方式

  1. 开放重定向漏洞

    • 利用通配符重定向规则绕过
    • 示例:redirect_uri=https://evil.example.com@client.example.com/cb
  2. 认证流混淆

    • 利用客户端对多个AS使用相同重定向URI
  3. 信息泄露

    • 通过XSS获取access_token
    
    
  4. 重定向URL漏洞

    • 服务端未严格校验redirect_uri
    • 可导致CSRF或XSS攻击
  5. 会话固定

    • AS在授权后未及时注销会话
  6. 账号关联CSRF

    • 诱骗用户关联攻击者控制的第三方账号

Windows认证安全

NTLM认证流程

  1. 客户端发送用户名
  2. 服务端返回Challenge
  3. 客户端用密码Hash加密Challenge生成Response
  4. 服务端验证Response

攻击方式

  • Pass The Hash(PTH):
    privilege::debug
    sekurlsa::pth /user:admin /ntlm:<hash> /domain:example.com /run:cmd.exe
    

Kerberos认证流程

  1. AS-REQ:客户端请求TGT
  2. AS-REP:AS返回加密的TGT和会话密钥
  3. TGS-REQ:客户端请求服务票据
  4. TGS-REP:TGS返回服务票据
  5. AP-REQ:客户端向服务出示票据

攻击方式

  1. 黄金票据(Golden Ticket)

    • 需要KRBTGT账户的NTLM Hash
    kerberos::golden /domain:example.com /sid:S-1-5-21-... /rc4:<krbtgt_ntlm_hash> /user:fakeuser /ptt
    
  2. 白银票据(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
    
  3. Kerberoasting

    • 请求服务票据后离线破解
  4. MS14-068漏洞

    • 通过修改PAC提升权限
    • 检测补丁:systeminfo | findstr /i kb3011780

最佳实践建议

  1. Web会话

    • 强制使用HttpOnlySecure标志
    • 启用session.use_strict_mode
    • 定期轮换会话密钥
  2. OAuth实现

    • 严格校验redirect_uri
    • 使用state参数防CSRF
    • 限制令牌有效期
  3. Windows域

    • 定期更换KRBTGT密码(每6个月)
    • 监控异常Kerberos请求
    • 及时安装安全补丁
  4. 通用原则

    • 实施多因素认证
    • 记录和监控认证日志
    • 定期进行安全审计
认证安全全面解析与最佳实践 认证技术分类概述 认证技术可分为以下几大类: 公钥基础设施 :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关键配置: 常见安全问题 : Cookie未设置HttpOnly导致XSS劫持 会话固定(Session Fixation)攻击 攻击条件: 中间人劫持注入SessionID 同源XSS修改Cookie CRLF注入SessionID URL传递SessionID(当 use_only_cookies=0 ) 防御措施: 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 重定向URL漏洞 : 服务端未严格校验 redirect_uri 可导致CSRF或XSS攻击 会话固定 : AS在授权后未及时注销会话 账号关联CSRF : 诱骗用户关联攻击者控制的第三方账号 Windows认证安全 NTLM认证流程 客户端发送用户名 服务端返回Challenge 客户端用密码Hash加密Challenge生成Response 服务端验证Response 攻击方式 : Pass The Hash(PTH): Kerberos认证流程 AS-REQ :客户端请求TGT AS-REP :AS返回加密的TGT和会话密钥 TGS-REQ :客户端请求服务票据 TGS-REP :TGS返回服务票据 AP-REQ :客户端向服务出示票据 攻击方式 : 黄金票据(Golden Ticket) : 需要KRBTGT账户的NTLM Hash 白银票据(Silver Ticket) : 需要服务账户的NTLM Hash Kerberoasting : 请求服务票据后离线破解 MS14-068漏洞 : 通过修改PAC提升权限 检测补丁: systeminfo | findstr /i kb3011780 最佳实践建议 Web会话 : 强制使用 HttpOnly 和 Secure 标志 启用 session.use_strict_mode 定期轮换会话密钥 OAuth实现 : 严格校验 redirect_uri 使用state参数防CSRF 限制令牌有效期 Windows域 : 定期更换KRBTGT密码(每6个月) 监控异常Kerberos请求 及时安装安全补丁 通用原则 : 实施多因素认证 记录和监控认证日志 定期进行安全审计