Shiro反序列化漏洞修复
shiro反序列化漏洞分析、模拟攻击及修复(一)
shiro反序列化漏洞分析、模拟攻击及修复(二)
上篇进行了shiro反序列化漏洞的模拟攻击,进行攻击后,由于很多时候我们的系统采用了shiro框架,因此需要对现有系统进行漏洞修复,下面针对不同类型的系统提出了不同的修复方案。
1、漏洞修复分析及方案
反序列化漏洞成因:
rememberMe功能的AES**硬编码在代码中,造成**泄露。使得恶意攻击者可以利用系统在用户登录并勾选了“记住我”时所生成cookie的流程,构造恶意cookie,服务器收到该cookie后解析出的命令可能会造成信息泄露等安全风险。
针对此,我们提出三种修复方案。
修复方案一:升级Shiro依赖版本
- Apache官方的漏洞修复采用了在代码中随机生成**的方式,因此可以采用升级Shiro版本为1.2.5及以上。
- 此方案适用于开发初期或代码依赖库较简单不会产生依赖冲突。
修复方案二:私有化硬编码**
- 采用在Shiro配置文件中加入rememberMeManager管理器来硬编码指定加***,此**建议采用私有**,切勿采用网络上已有**。
- 此方案适用于代码的保密性较强或用于练习的项目。
修复方案三:随机生成**
- 在项目中新建随机生成AES加解***的方法,在Shiro配置文件的rememberMeManager中调用该方法进行**动态生成。此方案与升级Shiro版本的本质策略相同。
- 此方案适用于项目后期漏洞修复,可最小化对原有项目的影响。
2、漏洞修复Demo验证
Step1: 创建用于验证的demo。
Demo的特性如下:采用Apache Shiro1.2.4 为身份认证框架;包含“登录” 及“记住我”功能
demo下载链接
Step2: 创建**随机生成类GenerateCipherKey。
此方法与Shiro1.2.5及以上随机生成**所调用的org.apache.shiro.crypto.
AbstractSymmetricCipherService#generateNewKey()方法作用一致。
Step3: 修改Shiro配置文件。
- 在安全管理器SecurityManager中加入rememberMeManager;
- 添加rememberMeManager,调用getCipherKey()随机生成**。
Step4: 运行Demo。
运行后进行攻击,验证结果如下:
- Cookie的加***已变更,不再是Shiro1.2.4 中所采用的默认**;
- 在Shiro配置文件中设置的“随机生成**” 已生效;
- 可以采用此方法进行AES**保护。
总结
Shiro RememberMe反序列化漏洞总结:
- 学习了解一个框架的最佳途径就是分析源码,网上的解析文章仅作为辅助工具。
- 日后在涉及到加解密等信息处理时,要注意保护加解密算法、**等敏感信息。
漏洞修复总结:
升级Shiro依赖版本、硬编码**私有化以及随机生成**三种修复方案,均有各自的适用情况。对于任何项目中存在的漏洞最佳修复方式就是“外挂式”修复,尽可能保证代码结构的松耦合,因修复而添加的内容不影响原有程序的正常运行。