内容字号:默认大号超大号

段落设置:段首缩进取消段首缩进

字体设置:切换到微软雅黑切换到宋体

拉斯维加斯娱乐多份报关单变为1份报关单今年以来归并舱单2166批

拉斯维加斯娱乐模数转换器绿盟科技网络安全攻防实验室安全研究员

2018-02-06 16:21 出处:拉斯维加斯娱乐 人气:   评论(0
拉斯维加斯娱乐为玩家们提供安全稳定的在线真人游戏大全,拉斯维加斯网上娱乐网上正规娱乐游戏平台。

  随着REST API的流行,JSON的使用也越来越多,但其中存在的安全问题却不容忽视,特别是由于反序列化导致的远程代码执行更是威力十足。虽然反序列化漏洞出来已有一段时间,前期的一些防御方案随着时间的推移不再有效,但是却广泛。

  绿盟科技网络安全攻防实验室安全研究员廖新喜为大家阐述了由Java JSON库的反序列化特性导致的RCE,议题内容涉及Gson、Jackson和Fastjson这三个最常用的JSON序列化库的序列化和反序列的操作,并分析其安全机制,从安全机制上发现其潜在的安全漏洞。另外,他还公布了部分未公开的反序列化payload、0day。

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

  廖新喜:反序列化漏洞在这两年影响非常广泛,主持人也介绍了,今天我主要讲Java json 反序列化,也会讲到Java反序列化防御。我叫廖新喜,来自绿盟科技。首先介绍一下json,再介绍json安全特性,接着会介绍Fastjson 反序列的PoC。最后Java防序列化防御。json是什么,就是一个大的数据结构,有一些键值对。Gson,是谷歌公司发布的一个开源代码的Java库,用于序列化和反序列化,序列化即将Java对象转换成JSON结构,而反序列刚好相反,则是将JSON字符串结构转换成Java对象。这是GSON应用的的实例,Gson提供了toJson与fromJson两个转换函数,实现JSON字符串和Java对象的转换。

  Fastjson是由阿里巴巴开发,号称速度非常快。提供两个主要接口toJsonString和parseObject来分别实现序列化和反序列化。使用方法介绍完了,进入今天的正题,JSON的安全特性。首先我们看一下GSON,会用到默认的构造函数,如果没有找到的话会调用sun.misc.Unsafe生成一个实例,Gson默认只会反序列化那些基本类型,比如String,Date,URL等,如果反序列化的类型不在这个之内就需要程序员自己实现其反序列化机制。对于基本类型都是通过反射直接调用Field.set方法来实现,这一块应该不存在安全问题,也是推荐使用的。

  Jackson的安全特性,无参默认构造方法,不会序列化非Public属性。这一块其实还有很多绕过,我们看一下Jackson和Fastjson,序列化和反序列化非常相似,也需要一个无参的默认方法,也有Jackson特有的属性,需要通过enableDeultTyping方法来打开支持多态的特性。Fastjson也有一个@type来指定具体的反序列化类。

  分析完JSON安全特性之后,我们可以看一下Fastjson的结构,主要是涉及反序列化这一块。最外层有一个门面类JSON提供了一些静态方法,其具体功能都是由DeultJSONParser实现的,在DeultJSONParser中引用了ParserConfig,主要保存反序列的一些配置。还引用了JSONLexer,处理JSON字符流。在DeultJSONParser中还会调用一些Deserializer类,完成JSON字符串到Java对象的转换。反序列化过程中的主要工作都是在JavaBeanDeserializer完成。

  说到JNDI,2016年的blackhat大会上讲到了,但是对于json这一块没有涉及。JNDI就是Java命令和目录接口,提供了很多实现方式,主要有RMI,LDAP,CORBA等。我们可以看一下它的架构图,JNDI提供了一个统一的外部接口,底层SPI则是多样的。在使用JNDIReferences的时候可以远程加载外部的对象。如果说其lookup方法的参数是我们可以控制的,可以将其参数指向我们控制的RMI服务,切换到我们控制的RMI/LDAP服务等等。这段代码主要讲到了在1099端口上创建一个RMI服务,RMI的内容则是通过外部的http服务地址获取。模数转换器绿盟科技网络安全攻防实验室安全在客户端则是将lookup的地址指向刚才我们创建的RMI服务,即能达到远程代码执行的目的。

  流程:首先者准备Rmi服务和web服务,者将Rmi绝对径注入Lookup方法中,者JNDI接口会指向者控制的RMI服务器,JNDI接口将执行外部加载类的构造函数,把那个加载进来进行初始化,初始化的过程中就会执行我们的恶意代码。另外一种类型,基于Field的类型,不需要setter方法,利用HashSet触发,Fastjson默认处理Set类型都是通过HashSet来实现,通过epuals方法触发。一般通过Field类型都是利用Collection的equals(),toString(),hashCode()来触发的。

  这个是调用栈,一个类的加入到会调用HashSet.add(),然后跑到putval,再到这个加载的equals方法,最后执行到lookup方法。而基于BeanPorperty类型的则是通过setter或者getter方法触发,最后调用到lookup方法。

  今天我们主要讲这个json反序列化防御和Java反序列化防御,这一块对于开发者来说是最需要的。GSON基本无安全风险。Jackson如果不打开enableDeultTyping也没有风险。如果一定要实现多态的特性,可以在具体类上加上jsonTypelnfo注解,这样子类也生效,在反序列化的时候,就不存在RCE的问题。Fastjson不起用Autotype就没问题。其他的json库,因为主流,还是不使用,里面的问题更多。

  这是对于json的想法,因为现在都是堵RCE的漏洞,堵远程代码执行的漏洞,但是对于DOS或者一些其他漏洞可能不是太关注,像json或者Fastjson里面有很多的漏洞,但是没有精力关注。

  Java反序列化防御:主要从三个方面来讲:1,过时的。2,错误的。3,正确的。这是反序列化利用时序图,整个反序列化利用的过程,首先我们解释一下,Java应用调用readObject,这一块就会实现类的实现化。像我们现在的主流机制,这种方案都是在这一块实行的,其实他有很多这样的接口,这个接口的话还包括resolveproxyclas。最后返回,返回之后再强制转换,这个时候其实相对来说已经晚了。因为前面已经去完成了反序列化了。最后,会有一个垃圾回收机制,我们也可以看到Gadget还常多的,这个图来说我们可以看到如果要防御的话怎么防御呢?首先是在实例化之前阻拦,另外实例化之后,如果说这个Gadget是第三方库要以来依赖,把这个一些方法之前加上白名单或者的控。

分享给小伙伴们:
本文标签: 模数转换器

相关文章

评论

发表评论愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。

签名: 验证码: 点击我更换图片

评论列表

    Copyright © 2015-2017 拉斯维加斯娱乐 版权所有 网站地图