FireEye最近记录了在Windows HTA处理程序中使用Office RTF文档在野外使用的0-day漏洞的攻击。 该漏洞随后被命名为CVE-2017-0199,并在2017年4月的Microsoft Update进行了修补。在任何样本或相关信息中都没有出现如何重现此漏洞的信息,但是ActiveBreach团队却做了一个非常有意思的研究,他们能够利用这一漏洞绕过已知的缓解措施,如EMET。
这篇文章描述了如何在没有用户基于我们研究的交互这一情况下利用这个漏洞,其中所讨论的技术可能与攻击者所使用的技术不同。 还要强调的一点是,这个问题不仅仅局限于RTF文件,我们还使用了其他的Office文档类型来成功地利用了这一点。
具体步骤
虽然FireEye所述的重现问题的技术步骤很少,但是文章还是有几个提示的:
首先,是在使用OLE2嵌入式链接对象时发现这一问题的,其次是处理HTA文件。
要将OLE2链接对象嵌入到文档中,请打开Microsoft Word并单击插入对象按钮,如下面的屏幕截图所示:
选择从文件创建,将URL插入到HTA文件,并勾选链接到文件和显示为图标。
将文档另存为DOCX,DOC或RTF文件,所有这些都可以处理OLE2链接对象。
在这一步,需要一些社交工程才能让用户运行有效载荷,因为它们必须双击OLE对象的图标。 但是如果用户这样做了,就不会显示警告或运行提示,如下所示:
然而在这里需要注意,图标和文字可能会使那些受过教育的用户感到有些可疑; 因此,可以通过替换图标和文件名以及在Word中呈现的对象来进行改进,只需要不勾选“显示为图标”的复选框并将文档内容类型选择为应用程序/ rtf或应用程序/文档即可:
这会使HTA如下图所示:
到这里仍然需要用户交互——用户必须双击“hello”文本,或者保存文件以强制文档执行链接,更新内容并进行显示。
但是在FireEye的描述中没有明确说明用户交互是必需的以及提示打开文档时有效载荷应该自动运行的。 ActiveBreach团队的研究是如何实现的呢?当我们进一步了解RTF RFC时发现了“ objupdate”控件:
此控件的描述特别有趣——因为这意味着对象将在显示之前更新:
因此,这里其实可以创建一个包含 objupdate控件的文档,并最终迫使它在启动时进行更新。这一步可以通过使用以前创建的文档并在文本编辑器中进行修改来实现:
原版的:
{ object objautlink rsltpict objw9027 objh450 { * objclass Word.Document.8} { * objdata
注入 objupdate控件的文档:
{ object objautlink objupdate rsltpict objw9027 objh450 { * objclass Word.Document.8} { * objdata
打开RTF文件就会发现现在导致托管的HTA文件可以在没有用户交互的情况下运行:
还需要注意的是,我们的研究表明,如果用户没有安装Microsoft Office,那么该问题仍然可以在WordPad中利用,但需要进行交互。
如何检测并响应?
应急中心已经发布了一些Yara规则来检测这个问题。 但在许多情况下,检测并不是非常准确,并且可能会产生误报,因为它们主要依赖于对基于包含OLE2Link对象的RTF文档的检测。而这并不一定意味着恶意行为,也可能是一个合法嵌入的对象。
因此为了有效地检测CVE-2017-0199,Yara规则应该添加一个条件来识别 objupdate控件。