本文作者:pull

本文属于安全脉搏原创金币奖励计划

转载请参考:https://www.secpulse.com/archives/61458.html

本文参考Sensepost的Etienne Stalmans和Saif El-Sherei发表的介绍Ms office在不需要宏情况下,使用DDE进行攻击一篇博客文章:https://sensepost.com/blog/2017/macro-less-code-exec-in-msword/

DDE简介

动态数据交换(DDE),它是在Microsoft Windows操作系统中实现的客户端/服务器通信方法,自1987年早期的Windows 2.0基于Windows Messaging,并使用其功能来启动双方之间的连接,服务器侦听某些主题和消息,对其进行响应到客户端并终止连接。它被用于向诸如办公产品和浏览器的应用程序发送参数,发送命令到shell -explorer-来创建开始菜单组和链接,并在不同的应用程序和服务之间进行集成。

Microsoft将DDE定义为允许应用程序共享数据的一组消息和准则。 Microsoft文档说明,应用程序可以使用DDE协议进行一次数据传输,以便应用程序在新数据可用时将更新发送给彼此

攻击原理

DDE只不过是一个自定义字段,用户可插入文档。这些字段允许用户输入简单的说明,包括插入到新文档中的数据及插入位置。问题是恶意软件制作者可以创建包含DDE字段的恶意Word文件(而不需要打开另一个Office应用程序)、打开命令提示符和运行恶意代码。通常情况下,Office应用程序会显示两项告警内容。第一个是关于包含指向其他文件的链接的文档告警,第二个是关于打开远程命令提示符的错误告警

攻击还原

Word

新建一个Word文档,通过Ctrl+F9添加一个域,输入POC:

DDEAUTO c:\\windows\\system32\\cmd.exe "/k calc.exe"

当然你也可以通过手工方式添加域:插入---文档部件---域

t1.png

t2.png

此时会有一段文字显示“!异常的公式结尾”

t66.png

然后选中此文字,右键点击“切换域代码”,此时变成大框号,同时有默认代码在里面。

t3.png

替换代码成为:DDEAUTO c:\\windows\\system32\\cmd.exe "/k calc.exe"即可。

t4.png

然后保存,然后重新打开此文档,则会进行提示是否需要更新。

t5.png

当用户一旦点击“是”则自动运行域中的命令。

t6.png

点击“是”则执行代码。

t7.png

RTF

和word相同的方法,在CTF文件中创建域,在域中添加代码即可。

t8.png

保存后打开此RTF文档,提示和word一样,执行成功后,会在D盘根目录创建一个1.txt,文件内容是:你是谁。

Outlook

1.正常邮件

此漏洞针对outlook 2013和2016版本,并且需要利用RTF模式下代码才生效。创建邮件,设置好文本格式:设置文本格式—AA RTF。

t9.png

在正文中插入RTF文档的payload即可。

t10.png

插入之后会弹窗提示是否需要更新链接,点击“否”,同时插入的代码是看不到的。

t11.png

插入后显示:

t12.png

完成后发生,接收者在回复的时候回执行命令(当然过程需要点击“是”允许才可以)。

t16.png

t14.png

2.约会邀请

打开outlook,约会邀请,将WORD中的Payload粘贴在约会邀请正文中,当你复制Payload到正文时,会弹出窗口,选择"否"后,发送约会邀请。当接收则收到邀请时查看则会触发payload。

t15.png

点击“是”

t16.png

触发payload

t17.png

其他office命令执行

在Excel里面输入=cmd|'/c calc'!A0保存打开会有意想不到的结果。

t19.png

t20.png

t21.png

检测

利用一些规则检测,此处采用NVISO的规则,参考链接https://blog.nviso.be/2017/10/11/detecting-dde-in-ms-office-documents/。

代码如下:

// YARA rules Office DDE
// NVISO 2017/10/10 - 2017/10/12
// https://sensepost.com/blog/2017/macro-less-code-exec-in-msword/
 
rule Office_DDEAUTO_field {
  strings:
    $a = /<w:fldChar\s+?w:fldCharType="begin"\/>.+?\b[Dd][Dd][Ee][Aa][Uu][Tt][Oo]\b.+?<w:fldChar\s+?w:fldCharType="end"\/>/
  condition:
    $a
}
 
rule Office_DDE_field {
  strings:
    $a = /<w:fldChar\s+?w:fldCharType="begin"\/>.+?\b[Dd][Dd][Ee]\b.+?<w:fldChar\s+?w:fldCharType="end"\/>/
  condition:
    $a
}

rule Office_OLE_DDEAUTO {
  strings:
    $a = /\x13\s*DDEAUTO\b[^\x14]+/ nocase
  condition:
    uint32be(0) == 0xD0CF11E0 and $a
}

rule Office_OLE_DDE {
  strings:
    $a = /\x13\s*DDE\b[^\x14]+/ nocase
  condition:
    uint32be(0) == 0xD0CF11E0 and $a
}

当然你还可以通过windows事件查看器中查看响应的事件信息。事件ID号为300。消息体包含文本“是否启动应用程序c:\windows\system32\cmd.exe?"等相关内容。

t22.png

防御

1、注册表防御参考wdormann在GitHub代码库中上传的.reg文件,快速在注册表中禁用DDEAUTO功能。

t23.png

2、禁止office相关“自动更新链接”功能

t24.png

3、漏洞补丁

微软并未将此作为真正意义上的是漏洞来看待,表示Office在文件打开前已给出告警,不属于安全问题,所以没有官方补丁,不过可以下载0patch团队出了dde的补丁(非微软官方)

https://0patch.blogspot.be/2017/10/0patching-office-dde-ddeauto.html


本文作者:pull

本文属于安全脉搏原创金币奖励计划

转载请参考:https://www.secpulse.com/archives/61458.html


源链接

Hacking more

...