Apache Shiro是一款强大且易用的Java安全框架,使用范围很是普遍。Shiro默认使用CookieRememberMeManager,其处理cookie的流程是:rememberMe cookie值–>Base64解码–>AES解密–>反序列化。在Shiro<=1.2.4版本下,AES密钥是硬编码的,致使攻击者能够构造加密的反序列化数据执行任意命令。java
下载Shiro 1.2.4的代码,先看看CookieRememberMeManager.java文件,发现其继承AbstractRememberMeManager类。安全
跟进到AbstractRememberMeManager类,在80行发现定了私有常量DEFAULT_CIPHER _KEY_BYTES,值为Base64.decode("kPH+bIxk5D2deZiIxcaaaA=="),而这就是咱们须要找的硬编码AES key。服务器
解密后的数据会通过AbstractRememberMeManager类的getRememberedPrincipals方法处理,并在该方法中调用了convertBytesToPrincipals方法.cookie
继续向上追踪,最后到DefaultSerializer类的deserialize方法调用了readObject,对解密的数据进行反序列化。框架
因为该漏洞攻击特征被加密,和正常数据看起来类似,在护网等场景下被攻击者大量使用,而且较难在不影响正常业务状况下直接作拦截。特别是对云上安全产品,客户的服务器、应用、业务种类繁多,直接封禁rememberMe cookie难以实现,所以须要先行对数据进行处理再作决定。工具
咱们须要模拟Shiro对Cookie处理的过程,对加密数据进行处理后再进行,处理过程的流程图以下:学习
提取含有rememberMe cookie的值,对其作base64解码,再利用AES key对数据进行解密,因为该漏洞是AES key硬编码致使的,咱们收集了市面上攻击者经常使用的20个AES key,覆盖绝大部分Shiro反序列化攻击行为。编码
对数据解密后,先判断解密后数据是否以” aced0005”开头,即拥有Java序列化数据的特征。可是到了这步,仍然没办法确认是不是攻击,正经常使用户的rememberMe值解密后也是序列化的数据。但这里咱们很清楚,此处存在漏洞是所以对数据作了反序列化操做即存在反序列化入口,而实际触发漏洞还须要有一个完整的利用链条。所以,咱们提取了常见工具的20余条利用链的特征,再对解密数据进行判断,从而能正确的处理攻击数据。加密
3.1攻击详情spa
3.2 最近一周攻击趋势
百度安全智能一体化解决方案中已支持上述漏洞检测,而且开放了智能化编排的入口,用户只须要编写简单的脚本,就可以对特定数据进行处理,进行触发告警、拦截等措施。智能一体化解决方案以下:
对于此类无明显攻击特征的行为,WAF等设备一般没法直接拦截,智能网关先将旁路流量给到智能分析中心,经过用户添加的智能编排脚本处理,再将结果反馈到智能网关,对相应的攻击进行拦截,可以准确、有效地保护用户的资产。
另外,智能分析中心还集成了智能API识别,可以有效地对API进行分类识别,帮助用户梳理API资产;同时还集成了AI白模型等能力,当用户对资产进行一段时间的学习后,可以有效地防护未知攻击、0day攻击等。
本文由百度安全原创,转载请注明出处及原文连接