首页
社区
课程
招聘
[原创][看雪2017安全开发者峰会演讲回顾11]Java JSON 反序列化之殇
发表于: 2017-11-21 18:39 3914

[原创][看雪2017安全开发者峰会演讲回顾11]Java JSON 反序列化之殇

2017-11-21 18:39
3914



廖新喜 

廖新喜(xxlegend),绿盟科技网络安全攻防实验室安全研究员,擅长代码审计,Web漏洞挖掘,拥有丰富的代码审计经验,曾在Pycon 2015 China大会上分享Python安全编码。安全行业从业六年,做过三年开发,先后担任绿盟科技极光扫描器的开发和开发代表。目前专注于Web漏洞挖掘、Java反序列化漏洞挖掘。曾向RedHat、Apache、Amazon和Oracle提交多份漏洞报告。2016年网络安全周接受央视专访。《谁动了我的VIP账号?》



廖新喜:这两年这个影响非常广,主持人也介绍了。我主要讲java json,也讲到Java防御。我来自绿盟科技,我叫廖新喜。首先介绍一下json,再介绍一下json安全特性,接着会介绍一下Fastjson,还会介绍一下Java反序列化防御。





json是什么东西,就是一个大的结构,有一些键值。




Gson是谷歌公司发布的一个开源代码的json库。这是GSON的事例,讲一个对象转化为JSON,有这样一个字符串。将这个对象转换为这个字符串。




Fastjson是由阿里巴巴开发,号称速度非常快。这是一个事例。



再看一下它的安全特性,首先我们看一下GSON,主要是用了默认的构造函数,如果没有找到的话会调用sun.misc.Unsafe生成一个实例,如果这个之内就需要程序员自己实现,需要这个基本类型就是需要反射执行调用,这一块应该不存在安全问题的,也是推荐使用的。




jackson的安全特性,无参默认构造方法,不会序列化非Public属性。这一块其实还有很多绕过,我们看一下Jackson阶层,序列化和反序列化非常相似,也需要一个无参的默认方法,也有Jackson特有的属性,它也有一个@type可以打开序列化以及反序列化的结构。




我们可以看一下json的阶层,这个阶层提供的方法就是parserconfig,主要保存这个Java一些配置,我们可以看到他在实现由javabean等等。还有parserconfig实现这个解析上下文,这就用到反序列化,反序列化实现又有几部分,我们主要应用这个Javabean。



Fastjson PoC,一个是基于Templatelmpl,还有基于JNDI。




简单解说一下一些方法来触发,field类型是不需要的,也在那个上面放了一个Demo。构造一个Templatelmpl,各个方法里面我们实现了一个计算器,复写几个方法,看一下PoC,主要是前面加入了黑名单。




这些辅助代码,如果这些辅助代码不会触发,从这个情况下可以触发我们的恶意情况。如果说你解析的时候比如说调用fastjson,需要打开……(英文),这个其他下可以触发我们的漏洞。




为什么会触发,就涉及到fastjson会调用…首先我的这个应用调层Fastjson会实体化,会调用slmpl的方法,或者打开了之后就不需要了,最后会调用json方法。




这是整个调用栈,这个调用栈还是挺简单的。



基于JNDI,之前的时候也讲到了,对于json这一块没有想到还会可以利用起来,可以看到JNDI是什么东西,是提供两种基本方法,我们可以看一下它的图,JNDI提供一个外部接口,主要是包括MI或者IDE。如果那个里面内容是我们可以控制的,直接可以切入。比如说可以切换参数,比如说切换我们自己控制的途径,切换到SDP自己控制的服务器。




RMI的这个服务端的代码,我会创建1099的一个服务,然后把那个放到外部服务器里面,通过RMI指向那个服务,指向那个STV服务,加载那个回来,会在RMI client上执行,基本上大部分都是这样的方式。




攻击流程:首先攻击者准备Rmi服务和wed服务,攻击者将Rmi绝对路径注入Lookup方法中,受害者JNDI接口会指想空寂者控制的RMI服务器,JNDI接口向执行构造函数,把那个加载进来进行识别化,识别化的过程中就会执行我们的恶意代码。




这是另外一种类型,比如说基于Field的类型,不适用setter方法,利用hashset,比如说阶层这个序列化的机制触发的,Fastjson默认处理Set类型都是通过hashset来实现,通过equals方法触发。一般通过Pieid类型都是利用Collecton来加载的。




这是调用栈。


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 26205
活跃值: (63302)
能力值: (RANK:135 )
在线值:
发帖
回帖
粉丝
2
看雪编辑按:随着REST  API的流行,Json的使用也越来越多,但是其中存在的安全问题却不容忽视,特别是由于反序列化导致的远程代码执行更是威力十足。虽然此类漏洞出来已有一段时间了,并且前期的一些防御方案也随着时间的推移不再有效,但其传播仍然很广泛。在此次看雪峰会演讲中,绿盟科技网络安全攻防实验室安全研究员廖新喜为大家阐述了由Java  Json库的反序列化特性导致的RCE,议题内容涉及Gson,Jackson和Fastjson这三个最常用的Json库的序列化和反序列化讨论,并分析了这里面的安全机制,再从安全机制上发现其潜在的安全漏洞。另外,讲师还公布了部分未公开的反序列化payload。
以上内容为廖新喜演讲实录,由看雪学院(微信公众号:ikanxue)整理。
2017-12-2 18:42
0
游客
登录 | 注册 方可回帖
返回
//