李海飞:大家好,我介绍一下自己,我之前在微软公司工作过一段时间,之前在一个安全公司,大概待了五年夺得时间,现在在Intel McAfee工作。基本上我是专注在微软的操作系统,我的研究方向和兴趣,做安全研究的目的就是为了帮助用户来进行真实世界当中的防御。
大家都知道CPU越来越流行,硬盘越来越便宜,数据越来越多,如何利用这些资源自动的有利于下一代的研究,包括如何自动的发现一些逻辑漏洞,自动的发现一些自动分析软件的攻击界面。我的研究基本上在CanSecWest,上周在BlueHat上也做了近乎类似的演讲,我今天希望有一些新的东西。
开始的时候我会做一个介绍,然后有一些我们一些Delivery Scenarios,接下来要解释一下OLE的攻击界面,很有意思。下面是讲一些Less-Known的Office Features,还有就是一个Office Apps。
我们说Office大家都知道,大家都用Office,Office其实就是一个生产力的软件,我们这里说的我们只是桌面的Office。我们的视角就是从用户的角度,我们做安全就是为了保护普通的用户。
比如说你在安全行业更久的时间,你会知道Office里面,在大概六七年前有很多的Office漏洞被发现,我们也不是讲这个,我们应该是从更高的层次来探讨这些问题。基本上回答一些问题,就是这个Office的威胁是怎么嵌入到用户或者是组织里,微软做了什么环节措施保护我们,什么环节没有做。我们会有一个感觉,这个Server到底有多大。
接下来讲一下Office的威胁是怎么传送的。很简单,大家都很常见,第一个就是从网站上下载,用浏览器,比如有一个人发了一个消息,可能是Twitter、E-Mail上,你点一个,下载一个Office打开,包括一些企业里面用的一些Web Access,
比如说用电子邮件,比如在企业里面用Fox-Mail,有一个附件,你直接打开,当你把这个文件保存到你的系统上之后,或者说你打开的时候,一个NTFS叫做Zone.Identifier会增加到这个文件流里面去。
这个是Mark of the Web,是在微博或者是电子邮件当中做的,主流的浏览器,包括Chrome、Outlook等等都支持这个Mark of the Web,三个非常主流的支持这个Mark of the Web,这就是一个典型的,微软会告诉你,不利于你打开。
Protected View是一个非常强的,他们研究很深,就发现最终结论是非常强壮。因为在Protected View上,一些可能带来安全威胁的Feature全部被Disable了,不能乱,我们知道很多软件最近很流行,所以说这样就非常安全。
问题是我们很Happy吗?这种用户经常被黑,举一个例子,在2013年的时候McAfee我们的实验室检测到一个Windows Exploit,大家做安全的应该很有印象,有一个非常著名的Tack。
大概从去年或者更长的时间,红病毒又开始流行,非常流行,有很多软件,甚至包括把乌克兰的电力给Down掉了。今年5月份的时候,Fireeye也发现了一个Zero Day,包含在Office文件里面,这也是一个很有趣的地方。
打个比方来说,用户在一个Office的软件想工作的话,必须要忽略两个警告,一个是Clicks,还有一个是Office Warnings。从CEO或者是CFO,他们其实在安全上也是普通用户,他们也经常被黑了。
微软已经警告了,但是用户并没有Get到这个Message。一点击就中招的Problem,难道微软就不能设计一个更好的吗?我们作为安全研究人员来说,我们不能说用户很傻我们就不去保护,这是不能接受的。
一个警告并不能对大多数的用户Work,现在很多软件也都在这么做,你可以诱骗用户点击这个东西,这也是一个问题,可以设计更好的一个AI。前面的内容基本上就是攻击用户的行为。
下面我们说一些更有技术性的,我们一直说过,从Protected View的沙箱里面逃逸出来是很可行的,但是如果不是逃逸,我们可以绕道走,可以解释这些问题。我们说主流的浏览器是很好的,有Protected View,
但是有一些特例,如果IE的选项、配置,可以加一些Web Sites,如果被设置的话,所有的从这个下来下载的文件Office都没有Protected View。在这个过程当中我也发现,去年11月份我发现,很多的戴尔的笔记本上面预装了这个软件,它会把所有戴尔的域名加进去,
包括戴尔的内盘,也是可以加一个附件,也在戴尔的域名里,这是导致没有攻击的原因。有一些浏览器甚至都不Care做这个。Outlook处理附件,从另一个攻击方式,我们说Outlook处理附件非常重要,具体是如何处理附件的?
我们基本上可以分为三类,第一类就是一些不安全的后缀名,比如说exe、vbs、psl、js等等,都是不安全的后缀名,在Outlook当中不可能被打开。还有html、pub、zip要用户双击以后保存,保存到硬盘上,双击打开这个文件再打开。
Outlook这个是安全的,这里面又包括几类,基本上就是Word、PowerPoint、Excel,还有其他的一些文件。如果是Word文件的话,也不单单是doc我们经常遇到的,甚至包括dot、dots、dotm,有很多,我没有办法一一列出来。
我们认为最危险的地方出现在Word、PowerPoint和Excel文件,这个文件格式非常简单,没有那么复杂,所以界面比较小,但是Wort、PowerPoint和Excel攻击性远远大于其他的,这是我们的一些结论。但是Outlook也考虑到了这种情况,所以Word、PowerPoint、Excle无要打开的话是在Protected View当中。
我们在公司里面很多人用微软的解决方案,有Exchange Server等等,如果一个员工发给另外一个员工,另一个员工收到这个文件直接打开的话就没有Protected View。这就导致一个内部的威胁,比一个员工的电脑被黑了,这个攻击者可以用他的帐号去发邮件给那个CEO,
那个CEO打开的话,比如说这个Word文档里面有一个Flash,他就马上就会被运行,这个CEO的电脑就容易被黑,所以内部威胁也是一个问题。如果说外部发的邮件,我们找一些人来测试,我们基本上看到有三种情况。
第一种就是说,如果这个文件附件是来自外面的话,第一个情况就是说所有的都是有Protected View,所以这个是最安全的,是大家都做的。第二种情况就是如果是一个知道的地址,就是这个用户跟那个有交互,没有Protected View,也可以接受。
第三种情况是最危险的,有的公司里面根本就没有Protected View,所有外面发的附件都没有Protected View,都可以来给你,这是有问题的。这是微软知道的一个问题,或者可以说是配置问题。
如果用Outlook,用Mark Internal As Unsafe,不管是谁打开的话都要有Protected View。如果你是某个公司的IT管理员的话,我强烈建议你们要做一下测试,就是发现邮件测试一下,检测你的配置。
下面我们讲一些更有技术性的,今年早些时候我们发现.xla的后缀名非常有意思,它是比较安全的,可以打开,表示一个应用。没有Protected View,这个问题就是对于这个xla没有,但是我们发现xla也可以同样的干普通的Excel可以做的事,
比如可以把Flash嵌入进去,可以干很多其他的事情。但是在Outlook打开,又可以做坏的事情,但是许多Protected View。所以微软认为这是一个安全漏洞,在几个月前已经修复了,如果有兴趣的话大家可以看一下。
下面我们讨论一个比较有意思的潜在的威胁,大家都知道云盘,很多人用了云盘,不一定用谷歌的云盘,有人用百度云盘,就是那么回事。你用Hotmail的话,这是我测试邮箱的一个邮件,是test.docx,在右边进行下载和打开,这是第一种情况。
右边有一个Save to One Drive Personal,我们知道这个云盘就是这么回事,就是那些文件。接下来如果这个用户在One Drive打开这个文件就没有Protected View,同样的事情也可以在Gmail上,或者是其他的云盘或者百度云盘,这些云盘的产品并不是为这个设计的,并不知道这个文件从哪里,他只是同步那些文件。
但是当他们跟E-Mail Service连在一起的话,这个是来自于攻击者的,而且很多电子邮件服务的都鼓励用户利用他的云盘,因为这是云时代,他们逼着你考虑。从安全云的角度,可以用一个Windows帐号连接所有的攻击,可以提高这个攻击的成功率。
我们讲一些不常见的Office App。因为Office不单单是Word、Excle、PowerPoint等等一些东西,我们解释所有的Office,微软是怎么把Office卖给你们的?甚至我跑到微软商店里看,现在主要是Office365,他并不单单是要你买一个Office365,并不单单是Word、PowerPoint、Excel,
如果是经典的安装的话,他并不让你选择装哪个App,是一次把所有的都给你装了。这意味着什么呢?这意味着普通用户可能会面对一个更大的攻击面,无如果我们要保护大多数的用户,我们要考虑一下Publisher,因为它们装在很多用户的机子上。
Publisher可以有pub File,可以包含一些VBA的Macros,他们用这个去包含宏去攻击用户。他们为什么这么做呢?为什么这是一个趋势?在Publisher上没有Protected View这个Feature。通过这种方式,再通过Protected View就可以提高他的攻击成功率。
因为如果有Protected View我们知道,你要有两个Word文件,如果没有,你就只要有一个Word,你只有Office的那个宏的,所以这个成功率明显会提高。
公平来讲,如果单Outlook做邮件,收那些Office附件其实是OK的,因为Office不认为这个PUB文件是一个安全的文件,所以有更多的用户交互,我们也讨论过。对于其他的场景来说,这是一个考虑的。
打比方说,你用Google Chrome下载一下就很容易中招。有些E-mail不像Outlook一样,他会考虑PUB文件是安全的,可以打开的,比如Mozilla Thunderbird。
有一个结论就是,微软卖Office的方式,导致了不必要的攻击界面。为什么说不必要呢?因为Publisher Access我不知道有几个人用这个,我甚至不知道怎么用。对于用户来说,你可以有一些小Tips,可以只安装你想要的一个App。
下面我讲一下OLE,如果你收到一个文档,文档里面嵌入另一个文档可以直接打开,对用户非常方便。从技术的角度上,OLE就是一个COM的子集。有两种OLE,如果激活的话,在同一个集成里。另外是一个Separate的OLE,你的另一个进程就会起来。
对于这个OLE,去年Black Hat我们探讨过,基本上是想搞清楚它是怎么工作的,也帮助了很多人去理解。基本上我们借助了三种攻击方式,第一种就是一个Ipersis Storage Load。你做过病毒或者是分析,你肯定对这个有影响,甚至在今天还很流行。
第二个就是一个逻辑漏洞,其实是Attack Vector2,IOleObject Doverb。第三种就是CoCreateInstance,在初始化过程就有了,会导致很多的问题。很多的漏洞在我们Black Hat当中发现。
我们发现OLE也在On Outlook上有,你看微软的文档很清楚,TNEF是一个Outlook支持的一个特殊的文件格式,写得很清楚,我们看到这个比较有意思,我们看了一下,我们发现非常有意思。
右边那个图就是说,当你收一个邮件的时候,你在Outlook上只要看到这个邮件,Flash Exploit就会中招,因为邮件的特殊性,你可以发那样的邮件,甚至比如说你发某一个CEO、CFO,很多组织都是用Outlook,Exchange,微软那一套来办公的。
甚至如果考虑到邮件的特殊性,其实是可以做成蠕虫,比如说你攻击一个数据,所有的电子邮件地址再发出去,就是一个很大的蠕虫。
如果有一个Flash Exploit,你首先是发一个邮件,诱惑这个用户去点那个连接,你打开,这个就是Pwning的一个模式。如果你直接打开,直接看一眼邮件,因为Outlook并没有沙箱,现在IE都是64位了,这是一个非常严重的问题。
在去年大概12月份微软修复了这个问题,我们报给他一个半月就修复了,下面是我们的Paper,如果没有看过的话你们可以看一下。
我们前面讲过的那个Tack,基本上是在Outlook里面。我们现在讲一下Separate Process,如果你打开一个PowerPoint文件,有一些逻辑的漏洞可以利用,所以逻辑的都是都是非常Powerful的。
我们想如果改成别的,我们把这个改一下会发生什么呢?如果我们把它改成Word,Word也提供一个接口,如果我们把这个数据包装好,这就会导致的情况,这个Word文档在后台会打开,也就是说你打开这个PowerPoint修复文件,后台会打开一个Word文档。你可以看到这个Process已经起来了,甚至米可以打开PDF,
这个看起来有点意思,我只是打开一个PowerPoint,但是后台打开了另一个进程。而且还可以同时控制这个进程的内容,这是我们看到的PDF。
这个Feature其实是用了一个PowerPoint动画,如果你看这个的话就可以看到,这是两个Object,在动画的控制板上它们可以连接在一起。在测试的时候我们意识到,首先我们可以控制这个内容,我们前面也说了,比如说可以拿一个Word的Exploit,看什么时候去Play或者是激活那个OLE Object。我相信很多人知道,可以有一些脚本。
现在我们说一下ASLR,我也不是特别懂。但是一个基本的事实就是,ASLR如果触发的话,主程序里要挂掉,或者是Crash,不能再起来,或者是IE可能允许再多一次,但是不能不断的试。
从理论上来说,如果一个Service的程序的话,其实你不用考虑ASLR,一次失败没关系,可以试,总会成功的。从我们刚才的情况,Word跟PowerPoint,如果从Word的文件,这个Word的程序肯定是Crash,但是PowerPoint那个会存在。
我们能够做的,我们的主程序是PowerPoint的格式可以存在。那个动画的方式在PowerPoint的时候,我们可以在不同的Exploit上,比如我们第一个黑的地址Crash了,我们可以黑另一个。
在真实世界当中,很多易被攻击的程序,包括Office、Adobe Reader,Office虽然有64位,但是还是非常大的主流。我们可以暴力破解,我们如果256个OLE Office动画功能的话,我们就可以暴力破解,得到ntdll.dll地址。
Alexander Sotirov和Mark Dowe在2008年的论文当中就讲过,这看起来是有兴趣的方式,用动画分析,可以直接打开很多的。在真实的世界中还是有一定的通用性,因为有很多被攻击的程序都支持这个,还有很多例子。
我们最早在去年7月份就报告给了微软,微软最近通知我们说,他们不想Fix了,这个太难Fix。
Office其实是一个非常复杂的软件,它有很多Feature,甚至很多Feature都不知道,有的是用到个位数的Feature,很多Feature大家都不知道,根本用不到,这是一个非常复杂的软件。更多的Feature,更多的攻击方法和攻击漏洞,我们分析有一个非常有意思的。
VBA引擎在Office上大家知道,现在软件越来越多了,他们搞了一个VBA引擎。但是你真的知道它是怎么工作的吗?打一个比方,VBA Code是怎么存放,怎么代表的?几个月前我就打算做这样一个研究,基本上来说,我们发现有一个OLE Stream,
在这个宏的文件,有一个dir的Stream包含了VBA Project的信息,不是说所有的都有这个dir Stream,其实这是一个压缩的,所以说你要得到它的信息需要解压缩。实际上微软已经有这个了,我们想要说的是,经过我们的研究,Office被打开了,解析这个的话,是在VBA之前,是先被解析了。
这是一个例子,是一个解压缩以后的dir Stream,有一些字符串。其中一个字符串是Libid,Suggesting it is a type Library File。如果我们改成一个远程的Libid,我们看一下在Debugging当中是怎么做的,我们看一下在VBE7上加载一个,到Typelib的API,第一个就是一个远程的反应,我们刚才疏漏了一个参数。
这意味着什么呢?意味着正在调用这个LoadTypeLib,攻击这个TypeLib的文件格式有一段历史了,在这个圈子里,如果你漏掉一个用户可以控制的TypeLib的话,非常容易导致代码执行,这个里面是非常容易导致的,EIP可以精确的控制,0x41414141。
TK在2008年就发现过这个问题,他报给微软以后,微软2009年给他回复,这是我在163上找到的。他的发现就是,恶意攻击者提供一个文件,但是微软不认为这是一个问题,他认为这不是一个典型的用户环境,是一个针对开发者的东西。
这个TypeLib系统不能被用户控制,因为你得到这个信息,已经有这个权限了。微软的官方语言我也不知道是什么意思。
下面看这个引擎,这个是你是不是可以被用户控制,在我们的攻击场景下,典型环境下说它是发一个Office文件,Word文件,PowerPoint、Excel都可以,在之前就已经发现了,一打开就中招。
所以说如果UNC的一个路径的话,你可以指向一个攻击者控制的一个TypeLib的文件,会导致非常严重的问题。我们报给微软以后,这是一个非常典型的TypeLib的可怕性,这个攻击手段,微软两天前才修复了这个漏洞。
发现一个新的Feature是Office上一个非常有用的方法,这个是我们凑巧发现的,还有多少我们不知道呢?微软在Office相关的方面有很多,但是这里面真的是有很多动不动就上百页,几百页,也容易睡着,所以说这也是一个非常有意思的东西。
你打开Office文件,是我的老板发给我的,或者同事发给我的,我不想让他知道我看了这个文章没有,可能是打开Office文件,我只是看一下,只是阅读一些东西。但是事实上来说,Word、PowerPoint、Excel都是可以直接允许的,我在2013年就开始提到了这个问题。
Word、PowerPoint、Excel并不是一个尊重隐私的App。如果在Protected View当中没有这个问题,但是我们也要指出,Publise没有这个。有人说我只看一个邮件有没有这个问题?桌面版的Outlook你看一个邮件不会暴露你的IP地址,你看过没有,它是一个尊重隐私的,这是事实。
接下来是一些结论,这些Attack Surface这些东西,Office的攻击界面非常大。而且我要强调一点的是,这取决于用户环境,取决于你用的什么浏览器,你的E-Mail客户端用的是什么,你用什么保存和打开附件,或者说你是不是加了Domain,跟你所处的环境有很大的关系。
作为研究者来说,研究Office整体安全的话,我们需要假装自己是一个普通的用户,我们知道宏的问题,甚至有一些UI Design的业务问题。从保护者的角度来说,我们保护用户的话,需要考虑整个用户环境和用户习惯。
Protected View是一个非常好的使用环境,我们建议在越多的环境启用越好。一些不必要的我建议你们删除,不像其他的IE、Edge,其他的Service或者是整个的Windows,这些他们能做什么事大部分还是知道的,有很多人研究,微软有很多的文档。
但是Office就是另一种,它有很多未知的领域,甚至很多很少人知道,或者是根本就没有人知道的一些Feature,而且发现这些Feature是发现Office问题的一个关键点。
我想感谢孙斌,感谢微软MSRC和Office Team跟我们讨论这个问题,Nicolas Joly帮助我们Review了这个Presentation。如果有什么问题我们再交流,谢谢!