基于攻击特征的Apache Shiro反序列化攻击检测模型

2022-07-06 01:41冯美琪李建欣
信息安全研究 2022年7期
关键词:序列化字段攻击行为

冯美琪 韩 杰 李建欣

1(中国民航信息网络股份有限公司运行中心 北京 101318)

2(北京航天万源科技有限公司 北京 100176)

近年来,Apache Shiro安全框架由于其强大的功能和易用性,逐渐成为主流的开源安全框架,其反序列化漏洞问题同样备受关注.通过分析近3年国家攻防演练的攻击手段,发现Apache Shiro反序列化漏洞在实战中较为实用,成为攻防演练中使用率较高的漏洞之一.在实际工作中,按照官方修复建议进行版本升级后,发现仍会存在Apache Shiro反序列化漏洞,而现有检测手段无法准确检测出利用该漏洞进行攻击的异常请求.

2006年已有学者提出了反序列化漏洞[1].2015年Lawrence[2]在Apache的Commons Collections基础库中找到了Java反序列化攻击的执行链,后续更多的Java类库被验证存在反序列化漏洞.Apache Shiro作为Java安全框架的一种,其反序列化漏洞的利用链与Java反序列化漏洞一致,区别在于攻击者在利用Apache Shiro漏洞构建恶意请求时还要事先知道AES加解密的密钥.目前暂未发现关于Apache Shiro反序列化漏洞利用检测的专项研究,而针对Java反序列化漏洞的研究,钱劼等人[3]通过网页访问在默认应用中的空文件判断是否存在Java反序列化漏洞,提供了一种应急漏洞扫描的方法.杜笑宇等人[4]则对漏洞利用链进行研究,提出了一种反序列化漏洞调用链挖掘的方法,挖掘潜在调用链.郭瑞[5]提出在反序列化之前进行安全性检查的方法防范反序列化漏洞.现有文献研究多为应急漏洞扫描、漏洞利用链分析等,针对漏洞利用攻击的检测较少,主要集中在人工智能在漏洞检测方面的应用[6].而在实际工作中发现,现有的APT检测设备对于Apache Shiro反序列化漏洞攻击的检测主要基于特征值匹配,即Set-Cookie:rememberMe=deleteMe.此类方法会产生大量告警,并存在较多误报,需要大量人力进行人工研判,无法满足安全运营过程中应急响应及处置的要求.

本文针对现有方法的不足之处,结合漏洞利用时的攻击特征,构建攻击检测模型,提升网络安全监测能力[7].攻击特征需要从正常用户访问和漏洞利用访问时的HTTP包深入分析研究,对比二者之间的显著差异,据此建立检测模型.在分析过程中,选取存在显著差异的特征作为主要指标,使其检测结果更加准确.

1 Apache Shiro“记住我”原理

Apache Shiro安全框架提供“记住我”功能,让用户在关闭浏览器后,再次访问时免登录即可恢复之前的会话.其主要的工作原理是[8]:在首次访问时,若用户选择“记住我”功能,则服务器会将身份信息序列化、AES加密和Base64编码后,作为rememberMe的值增加到Cookie中并返回给用户,在用户第2次访问时携带此Cookie进行访问.首次访问时的工作原理如图1所示.

图1 首次访问时Apache Shiro“记住我”工作原理

在用户第2次访问时,服务器会对Cookie中的rememberMe字段进行逆向操作,即Base64解码、AES解密和反序列化,获得身份信息后与服务器端数据进行对比,若一致则完成身份确认,返回用户请求的内容.用户再次访问时的工作原理如图2所示.

图2 再次访问时Apache Shiro“记住我”工作原理

由于Apache Shiro的“记住我”功能在实现过程中采用AES加解密,key值硬编码在代码中,且网上有很多Apache Shiro框架的key值,攻击者可以通过key值爆破获取到真实key值,依据这个key值构造恶意请求以达到预期的攻击效果.

2 Apache Shiro反序列化攻击检测模型设计

2.1 漏洞实验环境搭建

根据漏洞的详细描述,该漏洞主要影响Apache Shiro 1.2.4及以下的版本[9].因此,下载相关版本的Apache Shiro包,使用Docker技术进行漏洞实验环境搭建,如图3所示.

图3 漏洞实验环境效果

其中:Docker版本为19.03.13,Apache Shiro版本为1.2.4.

2.2 正常情况分析

利用漏洞实验环境模拟正常用户在开启“记住我”功能的前提下访问网站,主要包括访问首页、用户登录、访问个人主页以及退出登录等访问行为.其访问过程中HTTP包的主要流向及特征如图4所示.

图4 正常情况下HTTP包特征

对正常用户访问时的HTTP包进行深度分析,发现4种明显访问特征:

1) JSESSIONID相同.

首次访问时,为每个用户开启1个session,服务器会创建Cookie,其中包含JSESSIONID信息,后续访问均会携带JESSIONID,用于服务器判断当前用户对应于哪个session.

2) HTTP响应包中包含特征值Set-Cookie:rememberMe=deleteMe.

在访问过程中,不同阶段出现的Set-Cookie:rememberMe=deleteMe具有不同的含义,主要有:①在第1次访问时出现,表示网站使用Apache Shiro框架;②登录时出现,表示此字段为登录的缺省值,先执行删除操作,再分配rememberMe,保证用户携带的rememberMe字段与服务器端下发的一致;③退出登录时出现,表示清除用户Cookie中携带的rememberMe字段,下次登录时再分配新的;④其余阶段出现,表示对于无效的rememberMe字段进行删除操作.

3) 同一用户在同一session的Cookie中rememberMe字段相同.

Cookie中的rememberMe字段为第1次登录时由服务器分配,关闭浏览器再次进入页面后,Cookie中的rememberMe字段值仍相同.以上情况说明,用户第1次访问会由服务器统一分配rememberMe字段的值,后续用户访问均会使用同一个rememberMe.

4) HTTP响应包中Set-Cookie:rememberMe=deleteMe出现2次.

正常用户在访问过程中,响应包中Set-Cookie:rememberMe=deleteMe会出现2次,1次是用户登录时,1次是用户退出登录时.

2.3 漏洞利用情况分析

通过分析,Apache Shiro反序列化漏洞的利用方式[10]主要有3种:一是反弹shell;二是命令执行;三是写入文件.以简单的命令执行为例,模拟攻击者利用Apache Shiro反序列化漏洞来达到命令执行目的的过程,主要观察HTTP包的变化情况,其访问过程中HTTP包的主要流向及特征如图5所示.

图5 漏洞利用情况下HTTP包特征

对漏洞利用情况访问时的HTTP包进行深度分析,发现4种明显访问特征:

1) Cookie中无JSESSIONID等字段.

在正常情况下,用户访问会携带其他Cookie字段,如JSESSIONID等,但由于攻击者目的明确,其往往只携带有攻击载荷的Cookie字段.有一种特例,即在HTTP请求包中含有非常见字段,如Testecho等,该字段一般为rememberMe中拟执行的命令或参数.

2) 同一用户Cookie中的rememberMe不断变化.

在正常情况下,服务器分配给一个用户的rememberMe字段是固定的,但是由于攻击者在漏洞利用之前先通过爆破等方式获取AES加解密的key值,导致其rememberMe字段的值不断变化.实际环境中的攻击请求,其变化频率可达到10条/min.

3) 相同payload不同key,rememberMe长度相同;不同payload相同key,rememberMe长度不同.

攻击者在利用Apache Shiro漏洞攻击时,rememberMe字段会迅速变化,其长度也不一致.为验证其具体的攻击行为,对相同payload不同key和不同payload相同key这2种情况下rememberMe长度进行探索,分析使用3个常见的key值执行2个不同的命令.3个key值如下.

key1:kPH+bIxk5D2deZiIxcaaaA==.

key2:2AvVhdsgUs0FSA3SDFAdag==.

key3:wGiHplamyX1VB11UXWol8g==.

拟执行的2个命令如下.

命令1:ls.

命令2:〈?php @eval($_POST[‘attack’]);?〉.

分别使用3个key值对2个命令进行加密操作,不同情况下rememberMe长度对比如表1所示:

表1 不同key值不同命令的rememberMe字符数对比

根据以上结果发现:

① 相同payload不同key时,rememberMe长度相同,说明其在进行key值爆破;

② 不同payload相同key时,rememberMe长度不同,说明其已获取key值,正在进行命令执行尝试.根据攻击者攻击的思路,其在获取爆破出key值后会进行命令执行,此时疑似为攻击成功,需要人工介入进行确认及处置.

4) 包含Set-Cookie:rememberMe=deleteMe的响应包数量大于2.

根据访问的先后逻辑关系,正常情况下,除了第1次访问和退出登录时,响应包中存在Set-Cookie:rememberMe=deleteMe字符串,其余后续访问中的响应包中均不包含此类字符串.但由于攻击者构造的rememberMe字段不符合服务器可识别的类型,因此即便命令执行成功,仍会在响应包中包含deleteMe值.以反弹shell为例,发现ping攻击机的666端口成功反弹了shell,但是在响应包中仍包含Set-Cookie:rememberMe=deleteMe字符串,详细过程如图6所示.

图6 Apache Shiro反序列化漏洞反弹shell流程

2.4 检测特征提取

通过对比正常情况和异常情况下HTTP包的不同访问特征,提取相关特征作为模型中的检测特征,主要分为2个方面:一个是检测是否为攻击;另一个是检测攻击是否疑似成功.在检测是否为攻击的过程中,首先要确定同一IP地址HTTP请求包中rememberMe字段在单位时间内的变化频数,其次确定HTTP请求包中是否仅包含rememberMe字段,最后确定HTTP响应包中Set-Cookie:rememberMe=deleteMe的出现频数.以上3个指标用于检测相关请求是否为攻击请求.在检测攻击是否疑似成功时,通过分析攻击者的攻击思路,确定rememberMe字段长度的离散程度,通过计算该指标判断攻击是否疑似成功.

通过分析某IP地址1 min内HTTP请求包中rememberMe的去重数量,得到该IP地址请求包中rememberMe字段在单位时间内的变化频数,计算公式为

n=该IP地址1 min内HTTP请求中
rememberMe的去重数量,

(1)

通过计算该指标可以初步判断该IP地址是否为恶意IP,将明显的攻击IP检测出来.

通过分析某IP地址1 min内HTTP请求包Cookie中是否都只包含rememberMe这个字段,来辅助判断相关请求是否为攻击请求,表示是否为攻击者重复进行爆破.其计算公式为

single_col=IF(该IP地址1 min内HTTP请
求的Cookie中仅包含rememberMe字段).

(2)

通过分析某IP地址1min内包含Set-Cookie:rememberMe=deleteMe 的HTTP响应包数量来辅助判断相关请求是否为攻击请求,表示是否为攻击者高度伪造的攻击请求.其计算公式为

dl_n=该IP地址1 min内包含Set-Cookie:
rememberMe=deleteMe的HTTP响应包数量.

(3)

在完成攻击检测的条件下,进一步判断是否为疑似成功的攻击请求.通过分析攻击者的攻击思路,计算rememberMe字段长度的离散程度,该计算结果表示攻击者是否已经成功突破外网,进入内网进行命令执行、内存马注入等相关操作,其计算公式为

(4)

2.5 构建攻击检测模型

攻击特征提取结果无法直接应用于攻击检测,需要结合攻击检测流程模型进行应用.根据2.4节提到的指标,制定相关的检测流程,如图7所示.

图7 检测流程

首先需要确定是否存在漏洞,在存在漏洞的基础上,通过n>10这一显著特征判断是否为攻击.若是,则通过σ=0来判断攻击是否疑似成功;若不是,则依次通过single_col和dl_n的值进一步判断是否为攻击.若single_col和dl_n的值判断为攻击,则通过σ=0判断攻击是否疑似成功;若判断不是攻击,则说明为正常业务请求,为误报.

3 结果与分析

根据2.5节的攻击检测流程,在单位时间内rememberMe值的变化频数为明显特征,根据该特征可以快速判断是否为漏洞利用攻击,若该特征无法判断时,则辅以Cookie中字段类型的特征以及返回包中字段特征进一步判断.确认为攻击后则通过rememberMe长度变化的特征来进一步确定具体的攻击行为,进而确定是否疑似成功攻击.本文以实际的2个攻击行为和1个正常业务行为为例进行实验.

攻击行为1:内部渗透测试时,利用网上现有Apache Shiro漏洞攻击工具进行测试,分别进行key值爆破、利用链爆破、命令执行和内存马注入,以上操作均成功执行.根据实验结果,发现rememberMe值的变化依旧是明显的特征,无论是频数的变化还是字段长度的变化,都可以在检测Apache Shiro反序列化漏洞攻击以及攻击成功与否方面发挥关键作用,其Cookie中携带的rememberMe字段详细信息如表2所示:

表2 攻击行为1 rememberMe字段特征

攻击行为2:外网IP地址120.x.x.x对某互联网网站在短时间进行频繁访问并且现有检测设备产生大量Apache Shiro告警信息.通过观察其HTTP请求包,发现每次访问的Cookie中携带的rememberMe字段值都不同,详细如表3所示:

表3 攻击行为2 rememberMe字段值

正常业务行为:用户正常在网站上进行操作并在登录时开启了“记住我”功能,其rememberMe字段值固定.

以上2个攻击行为和1个正常业务行为均被现有检测设备判定为Apache Shiro漏洞利用攻击,而采用2.5节的检测流程进行检测,得到的各行为指标值和检测结果如表4所示:

表4 测试样例的统计指标值和检测结果

需要说明的是,在正常情况下,包含Set-Cookie:rememberMe=deleteMe的响应包数量为2,分别是用户登录和退出登录时,由于实例验证过程中,统计分析的时间窗口一般无法完全覆盖用户登录和退出登录之间的全过程,只能覆盖用户的部分行为,因此在实际验证中,dl_n的值一般小于等于2.

对比已有检测设备的检测结果,攻击行为1和攻击行为2可以检测出是攻击行为,但无法确定是否疑似成功,而利用本文检测方法,可以进一步判断攻击行为1疑似成功,需要转到人工进一步处置.除此之外,针对正常的业务行为,现有检测方法将其检测为异常攻击行为并产生大量告警,说明现有检测设备存在一定误报,在一定程度上会增加企业的人力投入,降低安全事件的处置效率,而本文检测方法则可以识别其为误报,属于正常业务操作.因此也证明了本文分析方法的正确性.

4 结束语

在攻防演练和实际攻击中,Apache Shiro反序列化漏洞已经成为利用率最高且危害性较大的一种漏洞,如何及时有效地检测出漏洞利用攻击也成为了企业最为关注的问题.现有一些学者在反序列化漏洞检测方面的研究取得了很大进展,但对于如何检测反序列化漏洞利用攻击方面的研究成果还很少.本文从统计学的角度分析了Apache Shiro在正常情况和反序列化漏洞利用情况下的HTTP包特征,并提出了Apache Shiro反序列化漏洞利用攻击的检测流程,最后通过实例测试验证了该方法的有效性.

通过实验发现,本文的检测方法能够有效降低误报,但是对于攻击是否成功存在一定的误报,仍需人工进行研判分析,后续仍需思考如何实现自动化研判,实现安全事件自动化处置,提高处置效率.此外,本文检测方法中的统计指标是基于IP维度来计算的,针对分布式的攻击,本文的检测方法可能会被绕过,导致检出率降低,因此在下一步的工作中,需要重点研究如何唯一标识1个网络用户.

现有APT检测设备大多都是基于特征值检测,该方法无法识别异常的流量,存在严重的滞后性,已不能满足现有网络安全检测的需要,希望后续安全厂商可将大数据分析技术和异常流量分析技术集成到检测设备中,更好地防御APT攻击.

猜你喜欢
序列化字段攻击行为
癫痫伴发精神障碍患者攻击行为发生状况及高危因素
住院精神病人暴力攻击行为原因分析及护理干预
带钩或不带钩选择方框批量自动换
孤独症儿童攻击行为与病情严重程度、语言能力及智力水平的关系
浅谈台湾原版中文图书的编目经验
初中生写作序列化实践与思考
分层次序列化训练增强考场写作的增分因素
对“失序”的习作教学之思考和把脉
坚持以读促写 注重思维训练
无正题名文献著录方法评述