Cisco'Mariano Graziano:Graffiti: the spraying attacks slayer

Mariano:大家好,一开始介绍一下我是谁,我现在是安全的研究员,是思科团队的,我们做很多的工作,不同的团队。每天我和不同的团队,不同的项目为了减缓这个目标而努力。是一个学者,我们有以前学术的专长,同时我也做了博士、博士后的一些研究,所以我有很多的博士论文还有学术的研究。
什么是Spraying,这是一个设计,我们对于Spraying有很多的研究,研究它是什么样的情况和它的问题。我们对Spraying的技术有很多的描述,一个描述就是要根据我们怎么样来做,首先是基础之上的Spraying,这个可能是对攻击者很难来猜到这个邮件或者怎么样来跳跃。

一个可能的方式来越过这些问题,一个简单的方式那就是把100多个东西复制到里边,这100个复制实际上就放在这个壳的概念里。我们如果在执行过程当中,可以通过我们的密码,我们还有数据的Spraying,这个数据我们也要越过,这是我们的目的,来进行预警和防御。

这些数据的形式,可能是基于一些口令的,比如说不同的链接上的口令,我们有这么多复制的链接。第一个设备要进行Spraying的数据,这样的话,我们就可以执行了,这是我们的定义,大家应该有一个概念,什么是Spraying了。

我们看看Spraying这个技术在整个演化过程当中是怎么的。我想强调,实际上这个时间轴,这是我建立的轴,这个轴包括了公共的一些技术,公共的技术我认为是论文中记录的Spraying的情景。

当然有一些里程碑式的事件,比如最开始Spraying是2001年,我们是第一个由Telnetd Team发现的,2004年我们开始谈论Spraying,我们可以看到挖掘的问题,然后来解决这个问题。从2004年之后我们看到了更多的挖掘,有不同的技术来做Spraying,2007年之后我们有了一个完全的革命和演变,我们用这个技术来控制这个Spraying。

所以这时候是成为了一个飞跃成为一个普遍的概念,可以看到这个Spraying意义不到了第二步控制方面。最后这个数据,我们看到思科实际上在运营方面、系统方面我们了攻击者要避开这些问题,所以2010年我们有这样的战略,这个Spraying在和内核方面我们使用过滤的技术,然后我们有数据的Spraying。

这些年实际上我们看到很多的漏洞利用和挖掘,实际上影响了很多的设备。2010年我们有非常好的一个项目在Spraying的领域,实际上我们Windows和其他的浏览器,还有其他的团队有了新的发现。2014年有这么一个论文,是更详细的介绍了Spraying。

在2016年的时候,基本上我们买了很多关于电脑相关非常有价值的技术。有一些研究者他们就开始去抱怨,而且也比较担心36Bit的,但是事实上我们看一下这个问题,Spraying仍然是一个非常有价值的技术。

因为首先一般来说我们可以用UAF的这种漏洞,如果是64位的话,这个空间就更大了,但是这些数据库还没办法很好的配置。对于某一些类型的漏洞来讲,我们觉得它对Spraying仍然是一个比较好的技术应用。而且他也曾经指出,在64位的操作系统里面,可以更好的发挥作用。

很多研究人员他们从不同的角度都进行了研究,也有一些研究人员提出了一些防御的计划和解决方案。第一个是关于Heap Spraying,有来自于Egele、Nozzle和Bubble这些不同的解决方案,他们每一个只能应用于某一类型的引擎。
JITsec、Bania、JITDefender和Lobotomy,我们看到这些技术其实只是应用于某一些领域,还有数据的Spraying,在这里面没有很好的解决方案,有一个很好的例子就是EMET-Windows09,它可能会有更进一步的更新,但是仍然还是一个很好的通用的工具来帮助这些应用。

它有很多的特色,其中有一个好处就是没有把这个工作变得更加复杂。像这些浏览器的解决方案,有一些都是特别复杂的。在这里面,它只能应用于某一类型的浏览器和应用,这些就是一些问题。我们现在没有一些技术可以能够囊括所有的可能出现的这些OS Agnostic。如果说从理想来讲,我们希望没有一种操作系统是这样一种解决方案。

所以我们想要设计一个防御计划,我们退一步去看一下Spraying的一些问题。我们看到一个特别特殊的行为,因为如果要想一下这种问题的话,基本上我们在某一个特定的时间段会配置某一些内存,我们可以在这张图上看到绿色的线和红色的线,它是正常的一些活动的情况。

一般正常的这些用户在上网的时候,他就会表现出这样一种形态。但是我们看到另外有一个内存的峰值,有一个漏洞,那就是灰色的那条线所表示的。我们也可以看到,大概10秒钟的样子,它就达到了400M比特,在这个里面肯定是要给他有一个很好的标识。

它控制着大小,还控制着速度,他可以把这些主要的应用让他们能够在一个正常的条件下运行。我们还可以看到这个图,因为它控制着大小,大小也是一个很重要的参数,因为它也是在Spraying领域里面决定着它的活跃程度,在某些实验里面,我们也是进行利用和开发,一步一步的,每次我们都会进行检测和计算,看看是成功还是失败。

我们做了很多的实验,可以发现对于这样一种特殊的漏洞利用,小于131MB的话,如果说是132MB,绝大多数的情况下,这些漏洞的利用有的时候是被高估了的,有80%的是131MB,但是也取决于我们从这个攻击者的角度来讲。如果说我们想要实现一个攻击的话,我们就要知道攻击的网站访问情况是怎么样的。

我们也看到了,通过Allocator来保护这些应用,我们通过这样一个强大的系统,不需要依赖于操作系统的这些信息。我们的这个系统必须要和存储的配置器独立开来,只有这样的话,我们才能够确保它的安全性。

这个系统可以独立的在微软或者Linux的系统上应用,还有这个系统所使用的这种标题符也应该是合理的。而且因为我们希望去利用Virtualization-VT-X这个系统,我们的这个系统也必须要非常合理。也就是说,它可以和其他类型的技术能够有一个比较,这些就是我们框架的要求。

我们的框架是基于我们创建的一个虚拟化的环境,这里面有几个概念,一般来说,我们每一次切换这个模式的时候都会有一个Vmexit,我们进行配置的时候,就需要了解到许多的状态。还有虚拟机的控制结构,它包括了很多方面的,

有主机,还有客机的零件,还有扩展的配置,我们可以转化成EPT,必须要把这个客机转换成主机,能够去识别的这样一个配置。我们也可以进行EPT的一些配置,一般来说,它能够帮助我们更好的去解读它的虚拟的概念。

这个是我们系统的一个架构,有一些应用,比如说浏览器,它在进行一些配置的时候都需要遵循这样一个流程,在每一个节点上面,比如说内存、数据提取等等,而且对于第一个组件,当我们达到了某一种水平的时候,第二个元素就是数据的检测器,这是攻击的检测器,也可以看到,是不是有哪些潜在的威胁在发生。

第一个就是内存追踪器,第二个就是攻击的检测器。内存的追踪器,我们可以了解到内存的系统,我们还需要一种方式去应对它的运作。因为特别是在某一种结构下面,我们希望能够创造一个页面,然后创建和删除,看看有没有什么样的变化。

我们要看一下它是怎么来完成的,对于每一个流程来讲,我们都在看PTE的检测。要看这个页面的创建、修改和移除,如果说创建了一个页面,不管是直接的还是一个结构的一部分,我们还需要去检查这个PDE,如果说有一个新的页面条目的话,我们就需要去注意到它的属性是怎样的。

我们也做了一些实验,还有整个的预警系统。我们通过这样一种修改的内存页,系统可能就不再会奏效了。所以为了解决这些问题,我们能够监测到一些异常,但是和内核的一些基础架构还是需要通过一些假设来验证的,我们把它叫做干扰的问题。

我们发现这里有一些问题,所以我们做了一些实验。我们决定要去监控某一个特殊的过程,再看其他的流程,比如说在Overhead for Internet Explorer为10上面是22%。这些我们称之为V虚拟化,是一个组件,可以创建某一个内存的沙箱。

对于某一个具体单一的流程,来给它制作一个内存的沙箱。我们看它是如何在操作当中使用的,在每一层创建一个流程的时候,我们都会去收集所有的这些物理的关于这个具体流程的一些Page,需要保护这些Page,它是基于EPT的。

在每个环境下面,我们都要去改变这个EPT的指征。这些指征都会指向这个Page,也就是我们想要去保护的这个Page。我们希望能够促进一个我们能够保护的过程。

在这里面,我们也是专门去进行了一些设计。可以先看一下第一个Demo。在第一个Demo里面,它是一个正常浏览器的使用情况,首先我们看一下这个框架,我们做了一个搜索,一个正常搜索的操作,我们看到这个Driver就很成功的加载上来了。

然后会传递一些信息,锁定目标,我们的浏览器是Explorer,我们打开这个页面,再次做一些研究,这个保护了那个部分。然后我们再做一些系统进行回应,这样的话确保我们的框架没有漏洞。

回到这个PPT现在说一下我们的架构,架构实际上是非常活跃的,如果只是最开始的时候我们使用了一些案例,我想强调的是每个人都可以插入、拔出,我们要保护所有的地域,可以建立你自己的地址,我们通过插入进行活跃,找到执行的方式,我们看不同企图的分布,

这些随意的分布,我们建立这个架构,这个案例实际上可以使我们进行这个应用,因为我们有这么一个壳的口令。实际上攻击者可以使用这个漏洞,比如默认的使用他可以找到这个漏洞。

在这方面我们再次使用这个方式,我们使用简单的方式进行执行,我们要检查这个基础是不是合适,然后再进行执行,然后再去除这个漏洞。

给大家一个例子,有很多的感应器在这个上面,我们做的事情是把我们的这些页面的口令进行程序化,我们一个字一个字的检查。如果我们把页面上所有的字都进行检查,看到这些点是不是可知性的,然后我们看这个分布情况,就会进行这个架构。

我们看到这些实验,进行了一些尝试,首先要进行设计,然后来测量整个溢出的一些元素,我们的记忆方面。我们想测量这个元素,这个元素是非常活跃的,在这一方面我们想强调它的行为,

我们找一个设计作为标杆进行对比,每秒8MB的速度进行分布,所以在Windows7,80%的记忆我们是可以追踪到的,在Linux3.2当中是25%,这个数字是很高的,这是我们最坏情景的情况下做的比例。

我们做的第二个实验是启动的比例。我们把这个比例从100MB到400MB测量这个重叠性,在这个画面上越低是这个活跃的比例,越高是另一个极端,因为我们看到我们的记忆和框架之间是有这样的联系的。

然后我们做下一个实验,那就是看准确性,看看它是不是有效。我们怎么做呢?我们拿一些变量,我们有不同的目标标的,还有一些Flash,我们使用不同的技术来启动我们的系统,在我们的系统就可以找到这些点,这个比例是150MB。

这实际上是一个比较老的方式,因为我们需要记录这种方式,我们需要这样的东西。让公众能够得到在市场上比较容易得到的东西,我们可以执行,能够良好的记录。

我们做了另一个实验,是一个非常大师级的实验。我们有很多的文件,有很多的学术论文,我们拿出了1千个恶意的PDF,在我们的库存中看到是恶意的软件。然后我们做了150的MB,这是比较低的,比较保守的一个起点,然后我们进行挖掘。

我们用系统进行运转,首先1000的PDF,1000个恶意软件,我们的架构可以保护我们的任务,也就是说把这1000个恶意的软件去除,可以侦测到这个不好的PDF。

我们也做了一个全球的实验,我们看到这样的事实,我们需要把系统应用到机器和设备上,需要有这样的要求。我们布置了系统,让两个用户做7天,每天8到10小时作为工作时间,然后我们放到了Windows7的机器当中,还是用了150MB的基准。

结果得到了什么呢?在7天之后,我们收集了所有的日志和结果,发现他们访问了差不多500个不同的网站,我们测到了实际上非常活跃,这个平均每天是8到9次。我们调查了非常高水平的产出,有一些页面,我们会讨论为什么有这样的前景?

这些元素告诉我们这些数据有不同频率的密码。最主要的原因,这些页面包括他们访问了一些网站,实际上这些网站,包括很多的内容,他们插入了不同的地址。我们是基于这个漏洞,看我们怎么样来把这个涂鸦配置,首先要设定我们的目标,我们监督的目标要有名字。

然后我们还要指出比率,比如说以150作为我们的比率,我们把Windows和其他的系统进行应用,有某一个文件。

在这些演示中,我们建立了我们的病毒,我们看这个表现。驱动情况,我们上传,看到这些页面的情况,解除漏洞的信息,然后我们访问这些页面,检查浏览器,我们看这个记忆。然后运转,看它的地点,我们看到这个攻击者实际上被跟踪了。

我们系统的局限是什么呢?第一个局限,我们要执行在记忆的追溯方面,包括架构,比如说有一定的频率,需要修正一些情况。即使可能是在这个学术论文上发表的一些情况我们也进行修改,如果你想在微软方面进行运作的话现在可能还不行。我们的框架需要基于数据,不能在其他的领域进行运作。

未来我们有什么样的工作?我们建议应该有更强有力的,比现在更好的体系,我们需要在我们的记忆之上建立更好插入的情景。我们更多的使用可能在其他的领域就会更好了,我们需要更好的浏览器版本,也需要这个内核的Spraying。因为如果在那种情况下,启动的时候地址可能是20或者是25的MB,有的时候进行堆积。

最后做一下结论,我们展示了第一个解决方案,对任何的一种Spraying的攻击来进行保护。我们建议、设计和执行这方面的行为,使用我们的技术来做保护,保护我们的使用者,给他们沙箱进行保护,是开源的情景。这个可以克隆我们的研究,希望大家能够使用,能够把这个利用到你们自己的实验中。如果你们想看文字的东西,我们有论文。

以上就是我向大家介绍的全部内容,谢谢!

上一篇:Google'James Forshaw:Documented to Fail

下一篇:Intel李海飞:从用户角度分析微软Office的攻击界面