后现代艺术:解构主义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生存的保障。

后现代艺术:解构主义APT》上有5条评论

发表评论

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

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>