上篇进行了shiro反序列化漏洞的模拟攻击,进行攻击后,由于很多时候我们的系统采用了shiro框架,因此需要对现有系统进行漏洞修复,下面针对不同类型的系统提出了不同的修复方案。
反序列化漏洞成因:
rememberMe功能的AES密钥硬编码在代码中,造成密钥泄露。使得恶意攻击者可以利用系统在用户登录并勾选了“记住我”时所生成cookie的流程,构造恶意cookie,服务器收到该cookie后解析出的命令可能会造成信息泄露等安全风险。
针对此,我们提出三种修复方案。
修复方案一:升级Shiro依赖版本
修复方案二:私有化硬编码密钥
修复方案三:随机生成密钥
Step1: 创建用于验证的demo。
Demo的特性如下:采用Apache Shiro1.2.4 为身份认证框架;包含“登录” 及“记住我”功能
demo下载链接
Step2: 创建密钥随机生成类GenerateCipherKey。
此方法与Shiro1.2.5及以上随机生成密钥所调用的org.apache.shiro.crypto.
AbstractSymmetricCipherService#generateNewKey()方法作用一致。
Step3: 修改Shiro配置文件。
Step4: 运行Demo。
运行后进行攻击,验证结果如下:
Shiro RememberMe反序列化漏洞总结:
升级Shiro依赖版本、硬编码密钥私有化以及随机生成密钥三种修复方案,均有各自的适用情况。对于任何项目中存在的漏洞最佳修复方式就是“外挂式”修复,尽可能保证代码结构的松耦合,因修复而添加的内容不影响原有程序的正常运行。