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 为⾝份认证框架;包含“登录” 及“记住我”功能
Step2: 创建密钥随机⽣成类GenerateCipherKey。
此⽅法与Shiro1.2.5及以上随机⽣成密钥所调⽤的org.pto.
AbstractSymmetricCipherService#generateNewKey()⽅法作⽤⼀致。
Step3: 修改Shiro配置⽂件。
在安全管理器SecurityManager中加⼊rememberMeManager;
添加rememberMeManager,调⽤getCipherKey()随机⽣成密钥。
Step4: 运⾏Demo。
运⾏后进⾏攻击,验证结果如下:
Cookie的加密密钥已变更,不再是Shiro1.2.4 中所采⽤的默认密钥;
在Shiro配置⽂件中设置的“随机⽣成密钥” 已⽣效;
可以采⽤此⽅法进⾏AES密钥保护。
总结
Shiro RememberMe反序列化漏洞总结:
学习了解⼀个框架的最佳途径就是分析源码,⽹上的解析⽂章仅作为辅助⼯具。
⽇后在涉及到加解密等信息处理时,要注意保护加解密算法、密钥等敏感信息。
漏洞修复总结:
升级Shiro依赖版本、硬编码密钥私有化以及随机⽣成密钥三种修复⽅案,均有各⾃的适⽤情况。对于任何项⽬中存在的漏洞最佳修复⽅式就是“外挂式”修复,尽可能保证代码结构的松耦合,因修复⽽添加的内容不影响原有程序的正常运⾏。
最后,作为⼀名⼩⽩程序媛,通过完成这次shiro反序列化漏洞的修复研究,感触特别深的是阅读源码真的是学习的⼀种好的⽅式,虽然在⼀开始读源码的时候觉得读不下去,很难懂,但是硬着头⽪继续往下读感觉就会慢慢好⼀点,这样可以让我们特别准确深刻的理解⼀个原理。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论