Part1 前言
这个小工具的编写源于一个HW蓝队项目,我曾经作为蓝队人员值守了2周,期间发现很多蓝队人员对于反序列化系列漏洞原理不清楚,导致对设备告警的各种反序列化攻击不能有效地研判,也就是说不能底气十足地告诉客户,这个告警是设备误报、是扫描行为、是攻击行为、还是Web应用的用户正常行为。于是在这个项目中,我就慢慢变成了一个攻击流量研判的角色了,帮助客户对这些设备的告警进行研判。
其中对于shiro反序列化攻击告警研判起来尤其困难,原因如下:
1. 攻击行为全过程都是流量加密的,单看数据包看不出啥来,就是一堆脏数据。当时的监控设备只要是数据包出现了rememberMe字段,就会告警,这显然是不准确的。而且告警设备只会把数据包贴出来,都是加密的没法查看。
2. 即便解密出明文数据包,很多蓝队工作人员并不了解java反序列化漏洞,辨别不出明文数据包里是正常的Java类,还是攻击者所用的恶意Java类。
3. Github上搜索了各种脚本,有的有bug,有的不支持GCM加密模式,有的功能不完善。
Part2 研究过程
-
原理分析
shiro反序列化攻击行为不能有效分析的原因,主要是由于这种攻击行为需要提前知道一个key值,攻击者用这个key值把含有攻击行为代码的数据包进行加密,也就说蓝队人员需要有这个key值才能把数据包解密了。但是我的想法是,常用的key值大概就100多个左右,用这些key去遍历解密数据包,直到解密成功还原出明文文本为止,再通过各种检测规则,去研判解密后的明文数据包中是否真实含有反序列化攻击代码。
-
工具编写
于是我费了1天的时间各种调试,写了一款小工具,帮助蓝队人员快速研判Shiro反序列化攻击行为。写完了之后,也帮助上家公司天眼团队完成了Shiro解密的小插件,给他们提供了这个解密思路。
-
工具使用方法
将“rememberMe”的值填入文本框中,点击“使用列表中的Key进行解密”,程序会尝试用“Key值列表”中所有的key对数据包进行解密,一旦解密成功,紧接着对还原出的明文数据包中的java危险类名进行检测,继续判断数据包中是否有反序列化攻击代码。
如果想手工分析,本程序还提供了一个“使用指定Key手工分析”的选项卡,填入“rememberMe”值之后,填入“AES Key”,选择CBC加密模式或GCM加密模式,点击“使用指定Key进行解密”按钮,即可看到解密后的文本。
关注“网络安全abc123”公众号后,回复数字“1111”,即可得到此蓝队工具的下载地址。后期我会继续维护这个蓝队小工具,大家有什么好的建议或者想法,可以给我留言。
后续打算继续加上冰蝎2、冰蝎3、哥斯拉等流量加密shell的解密功能,暂时也想做到一键解密,这个工作量不小,目前这个功能还在调试过程,等我把工具打磨稳定了,没有太多bug时,很快就会放出来。
Part3 总结
1. 各种Java反序列化攻击,需要蓝队工作人员对Java漏洞有一些了解,不然遇到各种变形的payload,很难有效地研判攻击行为。
2. Shiro反序列化有两种常用的加密模式,分别是CBC和GCM,大家使用的时候注意选择。
专注于红队、蓝队技术分享
每周一篇,敬请关注