Cookie已死,有事烧纸

我一直觉得weibo是各种鸡汤各种显摆的地方,难得还有些人只聊些技术和研究进展,刚我就回了这么一贴。但我还是觉得weibo太短,有些东西实在没法言简意赅地白活出来,所以就有了这么一个长东西。当然,一如既往的,题目与内容没啥大关系。

首先说个漏洞的利用方式,是关于绕过的。其实说白了很简单,就是有一类漏洞可以转化为任意内存读写的问题,实际上这个就几乎干掉了所有的防御机制,因为函数指针被写后,流程被可以劫持,栈被改写后,传入参数可以被劫持,任意地址读取后,rop chain可以被实时构造,至于Cookie,根本不用碰它。这是一个不需要任何奇技淫巧的方法,简单粗暴,有点唯快不破的味道,所以有些漏洞不用测试ie11就能知道肯定是direct general的。

再退一步,任意内存地址读的问题。最近三年相当大一部分的ie漏洞都能转化为这个,方法是改写掉string的长度标记,让系统觉得这是一个合法的,非常长的字符串,然后再用这个string去读和计算内存内容。这个转化方法多样,有溢出的,有二次释放的,有直接地址加加减减的,林林总总,反正最后就是把长度标记给改掉了。任意读的结果上面说过,定位可执行模块地址,定位所需要的rop gadget,动态构造rop chain,野外有exp,找来看看就知道的。这里,如果任意内存读是其他可利用漏洞转化过来的,有很大的几率也可以绕过所有机制,除了沙盒。

再往后退,漏洞要能暴露个地址什么的,攻击者只好根据地址和经验来计算位置。如果啥都不能暴露,就只好随便找个什么哥来信了。

由于存在漏洞转化利用方式这么一说,所以在现有公开技术下,漏洞确实如Team509说,是有三六九等品相的。一等的如type confusion,heap overflow,任意地址加减乘除等,参考书目有这个、这等,这些利用技术都很简单而且大体定型,属于规定动作。但一类漏洞中,静态cast这种,千百年也难遇到一个,webkit以后也别指望再有的。堆溢出这个,有一个硬伤,就是写是连续的,微软要想防,把cookie放在object头就好。任意地址加减乘除这种,Cookie就完全失效。这一类漏洞造成的内存操作,稍微区分一下,如果是相对地址的越界操作,大体不影响效率的情况下很难防住,绝对地址的内存操作,要么堆管理摒弃对齐机制(这个不可能),要么堆的生长方式随机化(也不大可能)。我估计,一等漏洞,以后就要集中在最后这一类上。

最后这么一类问题,还有一个大杀器,我估计很多人都没有注意到。IE本身的string是只支持读,不支持写的,但是有些第三方的东西,比如flash里面的vector,是又能读又能写的。CVE-2013-0634用的就是这个,详见Haifei Li的分析文。我觉得这里面最有价值的一句话在最后一页,这个漏洞的利用方法,起码适用于所有能运行flash的上下文。那本身这个问题有多严重呢,我无聊写了一个试试看,反正连手机都直接direct general了。换句话说,你要找一个webkit的问题,那么不管android或者chrome(换内核后不算),ARM或者x86,32或者64位,都可以用大约3k字节的两个文件搞定。

上面这些是规定动作,微软不用花钱就能拿到的exp中,估计已有或者很快就可能看到很多。其实还有些自选动作,主要是那些不能转化为任意内存读写的,这一类漏洞也不少,很难归一个类出来,基本上一花一世界,一洞一利用。像去年same id那个CVE-2012-1875,call虚函数表偏移+8的,实际上能整出来个泄漏内存地址。我觉得我不适合说这个,应该让DarkMage来讲这一类的东西。

回过头来说IE11,从我的经验看,IE8的问题比IE7多,IE10的问题比IE9多,所以估计IE11还是有相当的搞头。IE10上面号称有vTable Guard,但实际上实现有问题,还能找到漏网之鱼。另外IE10有type confusion的问题,想必也会波及到IE11。要相信程序员归根结底是灵长类动物,人科人目,没法像理论上那样完美,啥都如学术界所言的话,函数式语言早该称霸地球了。

忘了福利了,八卦好像很多啊,雪村跑俄国去了,不过这是一个没啥用的定时炸弹,唯一的作用是让卖产品的多了些谈资。还有最近大辽好像有一些异动,好多人都和李老师一样,在山中静观世事,不过呢,还是那句话,出来混,迟早要还的。我一直很喜欢王小波一段话,关于砸碱的,大意是你要自己做护目镜,不然砸的碱飞溅起来,有些人瞎了左眼,有些人瞎了右眼,当然两只眼睛都瞎了就没啥可担心的,因为再没有眼睛可以瞎了。红脖子德州的NSS lab,把安全圈子的公司都得罪了一遍,也就无所谓了,只是不知道这些人以后出来,有啥公司会要。

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注