Shiro rememberMe反序列化攻击检测思路

一、背景

Apache Shiro是一款强大且易用的Java安全框架,使用范围很是普遍。Shiro默认使用CookieRememberMeManager,其处理cookie的流程是:rememberMe cookie值–>Base64解码–>AES解密–>反序列化。在Shiro<=1.2.4版本下,AES密钥是硬编码的,致使攻击者能够构造加密的反序列化数据执行任意命令。java

下载Shiro 1.2.4的代码,先看看CookieRememberMeManager.java文件,发现其继承AbstractRememberMeManager类。安全

1.png

跟进到AbstractRememberMeManager类,在80行发现定了私有常量DEFAULT_CIPHER _KEY_BYTES,值为Base64.decode("kPH+bIxk5D2deZiIxcaaaA=="),而这就是咱们须要找的硬编码AES key。服务器

2.png

解密后的数据会通过AbstractRememberMeManager类的getRememberedPrincipals方法处理,并在该方法中调用了convertBytesToPrincipals方法.cookie

3.png

继续向上追踪,最后到DefaultSerializer类的deserialize方法调用了readObject,对解密的数据进行反序列化。框架

4.png

因为该漏洞攻击特征被加密,和正常数据看起来类似,在护网等场景下被攻击者大量使用,而且较难在不影响正常业务状况下直接作拦截。特别是对云上安全产品,客户的服务器、应用、业务种类繁多,直接封禁rememberMe cookie难以实现,所以须要先行对数据进行处理再作决定。工具

二、检测思路

咱们须要模拟Shiro对Cookie处理的过程,对加密数据进行处理后再进行,处理过程的流程图以下:学习

5.png

提取含有rememberMe cookie的值,对其作base64解码,再利用AES key对数据进行解密,因为该漏洞是AES key硬编码致使的,咱们收集了市面上攻击者经常使用的20个AES key,覆盖绝大部分Shiro反序列化攻击行为。编码

6.png

对数据解密后,先判断解密后数据是否以” aced0005”开头,即拥有Java序列化数据的特征。可是到了这步,仍然没办法确认是不是攻击,正经常使用户的rememberMe值解密后也是序列化的数据。但这里咱们很清楚,此处存在漏洞是所以对数据作了反序列化操做即存在反序列化入口,而实际触发漏洞还须要有一个完整的利用链条。所以,咱们提取了常见工具的20余条利用链的特征,再对解密数据进行判断,从而能正确的处理攻击数据。加密

三、检测效果

3.1攻击详情spa

7.png

3.2 最近一周攻击趋势

8.png

四、一体化解决方案

百度安全智能一体化解决方案中已支持上述漏洞检测,而且开放了智能化编排的入口,用户只须要编写简单的脚本,就可以对特定数据进行处理,进行触发告警、拦截等措施。智能一体化解决方案以下:

9.png

对于此类无明显攻击特征的行为,WAF等设备一般没法直接拦截,智能网关先将旁路流量给到智能分析中心,经过用户添加的智能编排脚本处理,再将结果反馈到智能网关,对相应的攻击进行拦截,可以准确、有效地保护用户的资产。

另外,智能分析中心还集成了智能API识别,可以有效地对API进行分类识别,帮助用户梳理API资产;同时还集成了AI白模型等能力,当用户对资产进行一段时间的学习后,可以有效地防护未知攻击、0day攻击等。


本文由百度安全原创,转载请注明出处及原文连接

相关文章
相关标签/搜索