月度归档:2014年07月

为啥有些评测不靠谱

看到了Intel Security ATD的评测宣传,有感而发,有些想法共同探讨一下。

先谈谈几个矛盾的地方

  • AV/IPS评测动不动就是99.x%的检测率。都不用说APT了,针对消费者的Crimeware都还满天飞。就现在AV的普及率,如果真这么有效的话,怎么会有这么大的黑色产业。
  • IPS/IDS客户反馈出名的误报率高,而且是超级高,这个也变相造就了SIEM这个市场。各种公开评测动不动就说99%检测率,0误报,谁对谁错?

问题在哪里

  • 现在的评测基本上都是以样本检测,没有考虑过时间或者生存期的问题。现在大的趋势是,样本实际存活的时间很短,如果有漏报等到有了检测,黄花菜都凉了,人早换枪了。
  • 评测和用户体验严重脱节,消费市场还好,但是企业市场尤其是针对性的攻击的检测都是极差的。客户每天都在叫要检测,但是评测形式还是一片大好。
  • 评测还没法不做,因为很多客户还是很看重这个。所以一般公司都是有独立的队伍专门搞评测,就是为了那个虚假的检测率。

忽视还是正视

  • 首先,这是不是个问题?很多人都选择了直接忽视,长此以往很可能就是大家一起被拍死在沙滩上。所以,先得承认这是个问题。
  • 用流行的互联网思路,客户体验至上。就现在的Thread Landscape,就是不管什么技术和平台,提供不了真实的防护,帮客户解决不了这个问题,都是虚的。
  • 改变评测现状很难,大家从教育评测机构开始吧,帮着想想怎么做更好。
  • 从我做起,千万不要让评测毁了产品!

 

 

后现代艺术:解构主义APT

[……]

古典艺术APT发展的顶峰毫无疑问是Duqu和Stuxnet。从某种意义上来说,这两个东西其实是代表了两个极端,Duqu是维特根斯坦,一剑封喉,内核漏洞唯快不破,而Stuxnet则是柏拉图,丝丝入扣,大量漏洞互相配合。这两个真正意义上APT的出现,宣告了一个时代的来临,但很遗憾地也宣布了这个时代注定不属于大宋。因为主观上,这种团队合作和组织协调在我宋还没有出现的土壤,客观上,神洞或者一堆神洞的可能性已经很小了,加上现在基本上是老一代中年危机,新一代打酱油的时期,APT中的T问题不大,但A真是很难,P就更谈不上了。

当传统的路子被别人走光了的时候,后现代主义艺术便应运而生,而解构主义APT则是它开出的一朵的奇葩。同传统意义上的APT相反,解构主义APT不再强调0day,甚至不再强调漏洞之间的协作性,因为对于解构主义APT来说,并不存在一个中心,比如特定的漏洞或者利用方法,相应的,建立在中心之上的结构也不复存在。它的颠覆意义在于把所有的环节碎片化,离散化,环节之间更多的靠人而不是依赖代码来进行连接,这样一来,以无序但庞大的数据库对应环境的多样性,以攻击者的经验来对付受害者的无知,实际上从另外一条路上更有效地适应了APT这一名词的核心理念。

以某通过IE植入的APT为例。它通过flash来发送收发核心攻击代码,因此所有的恶意元素只存在于内存中,除非是对全内存进行dump,否则无法获得关键部分数据。在收集信息方面,它并不简单地判断浏览器和平台版本,而是在此基础上,从攻击端收取各种加密的攻击数据,逐个尝试可用的攻击代码。一旦成功后,APT所有收尾工作依赖于一个内存加载的模块,后续的目标价值判断以及提权等步骤,均基于攻击者的主观衡量来控制和实施。

简单解释一下。首先,一个通用的漏洞是充分但不必要的条件。这很容易理解,对于一个没打完补丁的系统来说,千里送0day是属于资敌行为,更何况没打完补丁的情况在现实中远大于打完补丁的情况。其次,补丁的判断并不需要特殊的技巧,选择性地找出几个代表漏洞即可,以某xor [xx], 20000h漏洞为例,2013年7月前,五行JS即可触发,补丁后,类似漏洞可以通过增加调用来触发。再次补丁后到xp生命周期结束的补丁为止,类似漏洞可以通过事件调用方式触发,所以对应选择三次触发代码,就能准确覆盖几乎所有补丁状况。最后,payload是通过精心设计的rop来加载内存dll实现的,不存在一个显式的进程创建或者模块加载过程,因此现有基于白名单或者信任关系的模块调用检测根本无能为力。

写到这里说一句,微软的两次十万大奖,其实都和通过控件来绕过现有防御机制相关。就思路和学术意义上来说,这两个东西非常有价值,但在应用中,从11年某bh的议题提出思路开始,野外并没有见过实战样本,究其原因,猜测有几个方面。第一、攻击的流程是一个链条,每一段需要与上下配合,这种方法通用性很好,但实际中未必有一个服务端能够同时运行在arm和x86构架上;第二、强调抽象其实损失了控制细节的能力,比如脚本能加载dll和运行程序,但做内存加载代码基本很难;第三、攻击实际上是低控制能力到高控制能力的过程,下层总是能模拟和完成上层的能力,回到上一抽象层,本质上是将到手的控制权拱手相让,属于开历史的倒车。世人只说第一个吃螃蟹的人,却没有说第一个吃蜘蛛的人,何哉?蜘蛛未必没有人吃过,只不过作为食品没法成为主流,脚本化亦如是。实践是检验真理的唯一标准,非不为也,实不能也。

所以回到APT上,同艺术一样,APT的发展总是同环境相关的。你如果不知道IE常常补出新的漏洞,自然就不知道用不同的漏洞可以无缝涵盖所有补丁;你如果不知道有用白名单控制加载的,自然不知道最好的方法是在内存中完成一切;你如果没有写过APT或者分析过APT,自然不会以攻击者的思路去解释攻击者的做法。在漏洞和攻击方式实际上日益减少的今天,离散化的解构主义APT是一个无奈但自然的选择。通用且美妙的外壳是容易被捅掉的,譬如FireFox上的UAF,而复杂化,交互化,就像一个千头万绪的案件一样,让人无从着手,正是解构主义APT生存的保障。

微软最近干了些啥

这几年IE被各种轮,最近大约是怒值蓄满了,微软憋着连放了两个大招,想着力解决Use-After-Free的问题。六月补丁中,微软搞了一个Isolated Heap,七月补丁又搞了一个Deferred Free,说起来代码改动不大,但是效果还是颇为明显。首先,六月份那个补丁把一些内部对象同用户可控内容的对象隔离开来,所以占用还能占用,但内容不是很好控制,这就断了精确控制的路。然后,七月的补丁让真正的释放动作延迟发生,这样你想去占用的时候,其实根本人家还没有释放,这是断了占用的路。两个小手段下来,瞬间门槛就提高了不少,如果说五月份之前可利用漏洞占总数的10%到15%的话,现在这个数值已经降到了2%到3%。当然,这个数据是烧某人自己的统计,而且还是报给微软了的,也许以后刷CVE得换换其它思路了。

再说点开心的事情吧,Isolated Heap保护还是很有限的,Deferred Free只有100000字节,可能会被撑爆。一些其它类型的漏洞,例如CVE-2014-2795字符串拷贝溢出,CVE-2014-2797变量类型混淆,基本是绕开了这两个机制,留到现在的话弹记事本还是没问题的。顺便说一句,这次HITCON拒了Royce Lu的议题,所以连同其他的神仙问题一起,这两个洞会在其它适当时候拿出来谈谈的。

其实防来防去,还是一个思路的问题,微软的补,用的是小手段,就像范闲一样,打打叶灵儿没问题,但对上庆国皇帝的王道真气,还是落了下乘。老实说这种类似的东西,平底锅早就写出来了,私下用可以,公开后却是意义不大,因为具体的利用是一个完整的链条,但从漏洞到记事本的路径是一棵树,删减枝条的方法基本上等价于挂一漏万。当然这里不是说这些方法没用,只是微软这些修补手段,气势不够磅礴,格调不够高雅,无论从美学上还是结果上看,提高门槛确实有效,但解决问题还是欠佳。

好吧,说了这么多,其实就是七月份那个补丁碍着我fuzzing了,我得一个一个的补,IE6到IE11啊,我靠。

话说回来,微软其实应该想一想,现在这么多利用,有没有什么共性。照烧某人看来,除开设计漏洞,这年头出问题的object同被利用的object,鲜有是同一个的,所以就着这个特性一刀往下切,破坏掉内存风水才是王道。这里面,第一个切掉的就应该是堆地址的线性增长,然后隔离堆应该做得更变态一些,同样大小的不同object不能出现在同一个堆中,还有merge和split应该更频繁一些,等等等等。一言以蔽之,提高各种内存分配的不确定性,基本目前的各种利用就会歇菜99%。这里确实存在一些效率的问题,但实际上内存分配与回收的频率远没有说严重影响到IE响应速度的地步,所以安全与效率之间的折衷,显然还是划算的。

嗯,这些东西,烧某人其实是不愿微软修的,起码给大家留点念想,别把这个脆弱的生态给破坏掉了,毕竟平底锅和火眼的股票同这个生态息息相关。说起来这两个公司的一线宋人,都还是酒红色的护照,拿着公司的钱,消着公司的灾,仅此而已。其实哪儿混饭不是混呢,为了生计还有人去3×0呢。所以了,大宋敌人什么的,就算是玩笑也请大家别开了,别的不说,举个栗子,最早是数字公司去接洽微软,但最后xp防护却给了鹅厂,可见数字公司形象差到什么程度了,就算这样,硅谷宋民对外ppt里面都没说过数字公司员工哪怕一个坏字。大家都是龙的传人,生是大宋人,死是大宋的死人,别往在辽宋人头上扣屎帽子了。