Shiro反序列问题修复

#引言

Apache Shiro是一款开源安全框架,提供身份验证、授权、密码学和会话管理。Shiro框架直观、易用,同时也能提供健壮的安全性。

问题描述

公司的安全部门利用shiro破解工具:shiro-attack,可以暴力破解出系统shiro的AES秘钥
image.png

问题分析

本系统采用Shiro验权框架,而在使用Shiro时,如果使用方式不当会造成反序列化的漏洞

Shiro反序列化漏洞

加密的用户信息序列化后存储在名为remember-me的Cookie中。攻击者可以使用Shiro的默认秘钥伪造用户Cookie,进而在目标机器上执行任意命令

漏洞原理

Apache Shiro默认使用了CookieRemenerMeManager,其处理Cookie的流程:

  1. 得到rememberMe的Cookie值
  2. Base64解码
  3. AES解密
  4. 反序列化

然后AES的秘钥是硬编码的,就导致了攻击者可以构造恶意数据造成反序列的RCE漏洞。

AES加密秘钥在Shiro 1.2.4之前使用的硬编码:kPH+bIxk5D2deZiIxcaaaA==
如果采用此版本,建议先升级Shiro版本

寻找秘钥方式

我们如何获知选择的密钥是否与目标匹配呢?有一种思路是:当密钥不正确或类型转换异常时,目标Response包含Set-Cookie:rememberMe=deleteMe字段,而当密钥正确且没有类型转换异常时,返回包不存在Set-Cookie:rememberMe=deleteMe字段。
那么具体的检测方法一般包括如下几种:

漏洞关键元素

如果采用更新的版本,比如说本次项目中所有的1.5.4版本,则是使用了其他默认秘钥的问题。
在本次漏洞中,被暴力破解的秘钥是:4AvVhmFLUs0KTA3Kprsdag==
定位到代码行:
image.png
而此秘钥是Shiro比较常用的秘钥,可以参考文档:
https://blog.csdn.net/weixin_46137328/article/details/114986341

此方法往上继续查找
image.png
项目采用的是Spirng-Shiro框架,而securityManager方法就是将securityManager这个Bean注入到Spring容器中

问题修复

修改问题的思路其实也很简单,只要将此默认秘钥修改掉即可
此外,还升级了shiro到最新版本1.11.0,避免了其他一些低版本的安全问题

问题验证

下载shiro-attack

下载shiro-attack,安装jdk8运行环境
打开命令行,执行

java -jar shiro_attack-2.2.jar

运行后页面如下:
image.png

执行爆炸秘钥

将所要测试地址填入目标地址中,勾选AES GCM,点击“爆破秘钥”
image.png
无法再暴力破解出秘钥了,至此问题修复完成

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Shiro反序列化检测是指对Shiro框架可能存在的反序列化漏洞进行检测和防护的一种安全措施。通过该方法,可以防止黑客利用Shiro框架的反序列化漏洞进行攻击。 ShiroJava领域中广泛使用的开源安全框架,用于认证、授权和会话管理等安全功能。然而,由于Java序列化和反序列化机制的特性,可能导致应用程序在反序列化时存在安全风险。黑客可以通过构造恶意序列化数据,导致应用程序反序列化时执行恶意代码,从而实施攻击,比如远程代码执行、命令注入等。 为了防止这种安全风险,可以在Shiro框架中添加反序列化检测机制。这个机制可以对反序列化的数据进行检查,确保其合法性,并防止执行恶意代码。常见的防护方法包括: 1. 设置白名单:限制反序列化的类的类型和来源,只允许反序列化特定的类。 2. 安全配置:对Shiro框架及相关功能进行正确的安全配置,合理设置权限和角色。 3. 使用SafeXMLDecoder:SafeXMLDecoder是一个安全的XML反序列化工具,可以对输入数据进行验证和过滤,阻止恶意代码的执行。 此外,定期更新Shiro框架和依赖库,确保及时获取最新的安全补丁也是非常重要的。同时,开发人员也需要对Shiro框架和反序列化漏洞有一定的了解,及时关注相关安全动态,以便及时修复和更新。 总之,Shiro反序列化检测是一项重要的安全措施,可以有效预防黑客利用反序列化漏洞对Shiro框架进行攻击。通过合理的安全配置和验证机制,可以提高应用程序的安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值