本文作者: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),它是在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"
当然你也可以通过手工方式添加域:插入---文档部件---域
此时会有一段文字显示“!异常的公式结尾”
然后选中此文字,右键点击“切换域代码”,此时变成大框号,同时有默认代码在里面。
替换代码成为:DDEAUTO c:\\windows\\system32\\cmd.exe "/k calc.exe"即可。
然后保存,然后重新打开此文档,则会进行提示是否需要更新。
当用户一旦点击“是”则自动运行域中的命令。
点击“是”则执行代码。
RTF
和word相同的方法,在CTF文件中创建域,在域中添加代码即可。
保存后打开此RTF文档,提示和word一样,执行成功后,会在D盘根目录创建一个1.txt,文件内容是:你是谁。
Outlook
1.正常邮件
此漏洞针对outlook 2013和2016版本,并且需要利用RTF模式下代码才生效。创建邮件,设置好文本格式:设置文本格式—AA RTF。
在正文中插入RTF文档的payload即可。
插入之后会弹窗提示是否需要更新链接,点击“否”,同时插入的代码是看不到的。
插入后显示:
完成后发生,接收者在回复的时候回执行命令(当然过程需要点击“是”允许才可以)。
2.约会邀请
打开outlook,约会邀请,将WORD中的Payload粘贴在约会邀请正文中,当你复制Payload到正文时,会弹出窗口,选择"否"后,发送约会邀请。当接收则收到邀请时查看则会触发payload。
点击“是”
触发payload
其他office命令执行
在Excel里面输入=cmd|'/c calc'!A0保存打开会有意想不到的结果。
检测
利用一些规则检测,此处采用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?"等相关内容。
防御
1、注册表防御参考wdormann在GitHub代码库中上传的.reg文件,快速在注册表中禁用DDEAUTO功能。
2、禁止office相关“自动更新链接”功能
3、漏洞补丁
微软并未将此作为真正意义上的是漏洞来看待,表示Office在文件打开前已给出告警,不属于安全问题,所以没有官方补丁,不过可以下载0patch团队出了dde的补丁(非微软官方)
https://0patch.blogspot.be/2017/10/0patching-office-dde-ddeauto.html
本文作者:pull
本文属于安全脉搏原创金币奖励计划
转载请参考:https://www.secpulse.com/archives/61458.html