JSON Web Token (JWT)是一个开放标准(RFC 7519) ,用于作为 JSON 对象在各方之间安全地传输信息,因为它是经过数字签名的,所以此信息可以进行验证和信任,通常用于身份验证和授权。
官网地址:https://jwt.io/
JWT结构:JWT由以点(.)分隔的三个部分组成,分别是HEADER、PAYLOAD、VERIFY SIGNATURE。
HEADER:报头,由Token的类型和所使用的签名算法组成,将由base64进行加密(该加密是可以对称解密的),签名算法可以确保JWT在传输过程中不会被恶意用户所篡改,用于构成 JWT 的第一部分。
PAYLOAD:攻击载荷,其中包含声明,声明是关于实体(通常是用户)和其他数据的语句,声明也会通过base64进行加密,最终形成JWT的第二部分。
有三种类型的声明: registered claims, public claims, and private claims。
VERIFY SIGNATURE:验证签名,使用标头中指定的算法,并对其进行签名。将会通过标头中指定的算法结合secret进行加盐签名(私钥加密),其中header和payload将通过base64UrlEncode()方法进行base64加密然后通过字符串拼接 "." 生成新字符串,最终生成JWT的第三部分。
JWT输出是三个由点分隔的 Base64-URL字符串,这些字符串可以在HTML和HTTP环境中轻松传递,同时与基于XML的标准(如SAML)相比更加紧凑。
JWT的解析:
真实情况,一般是在请求头里加入Authorization,并加上Bearer标注最后是JWT(格式:Authorization: Bearer <token>)
敏感信息泄露:由于JWT的PAYLOAD部分是Base64编码的,可直接解码查看敏感信息。
算法篡改:HEADER部分中的alg字段可以改为none,当alg字段为空时,后端将不执行签名验证。系统就会从JWT中删除相应的签名数据(这时,JWT就会只含有头部 + ‘.’ + 有效载荷 + ‘.’),然后将其提交给服务器。
暴力破解:破解HS256(对称加密算法)密钥,如果HS256密钥的强度较弱的话,攻击者可以直接通过暴力破解攻击方式来破解密钥。
使用强签名算法:对称密码密钥长度至少256位,非对称加密密钥长度至少2048位。
密钥管理:定期更换签名密钥,使用硬件安全模块(HSM)或密钥管理服务(KMS)。
监控与响应:实时阻断攻击。
某云平台漏洞(2020年)
漏洞点:JWT签名密钥硬编码在代码中。
后果:攻击者伪造管理员JWT,删除生产环境所有容器。
某网站使用JWT进行身份验证,但未校验alg字段,如何绕过签名验证?
原文始发于微信公众号(小白学安全):网安60秒丨JWT攻击
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论