企业可以备案几个网站搜索引擎优化网页
一名网络空间安全专业学生学习APT相关内容时所做的漏洞复现实验,如有错误或有待改进的地方,还请大家多多指教。
漏洞CVE-2017-0199复现实验
- 1 概述
- 1.1 漏洞背景
- 1.2 漏洞简介
- 2 复现实验
- 3 可能导致失败的原因
- 3.1 ActiveX被默认禁止执行hta程序
- 3.2 其他问题
- 4 附录
1 概述
1.1 漏洞背景
微软Office系列在世界范围内都是Windows甚至MacOs等操作系统上最常用的办公软件。而另一方面,利用Word、RTF、Excel等文档为载体进行攻击的方法层出不穷,一种非常流行的攻击模式就是:攻击者向目标发送钓鱼邮件,邮件中包含一个用看似合法有意义的文件名和内容包装自己的恶意文档,该文档内包含恶意宏代码、恶意链接甚至嵌入了病毒木马等,当用户打开文档时,激活恶意代码执行入侵行为。很多勒索病毒传播、肉鸡制造甚至大规模的APT攻击经常会用这种模式的攻击方式。
1.2 漏洞简介
攻击载体: Microsoft Office RTF文档
受影响Office版本: Microsoft office 2016、2013、2010、2007。
前置知识:
RTF: 富文本格式(Rich Text Format),类似于doc格式,有很强的兼容性,Windows的“写字板”就能打开该格式文件并查看内容,而 “记事本”甚至能直接用来编辑RTF格式文件。
OLE: OLE(Object Linking and Embedding,对象连接与嵌入),是一种面向对象的技术,利用这种技术可开发可重复使用的软件组件(COM)。简单来说,Office使用了OLE技术后,我们能够将各种格式的文件嵌入文档中,一个简单的例子如下,我们将一个RAR文件直接复制进doc文档。当然,嵌入的方式非常多,这也导致可能出现可被利用的漏洞。
HTA: HTML Application(HTML应用程序),是软件开发的新概念,直接将HTML保存成HTA的格式,就是一个独立的应用软件,与VB、C++等程序语言所设计的软件界面没什么差别。即将一个HTML文件保存为HTA格式后,能够直接双击运行。使用HTML、JS和CSS编写即可,但HTA文件拥有比普通网页大得多的权限——桌面程序的所有权限(读写文件、操作注册表等),种种特点都使它成为恶意代码的可用格式。
利用该漏洞的攻击流程:
攻击方利用Office提供的OLE技术,将包含了恶意链接的URL Moniker(COM对象)嵌入RTF文档中,该恶意链接指向远程服务器中的恶意HTA文件。攻击方利用钓鱼邮件等方式诱使用户保存RTF文档到计算机中并打开,于是URL Moniker使winword.exe向恶意链接指向的地址发出HTTP请求,服务器返回一个带有嵌入式恶意代码的假RTF文件,并在HTTP响应头部添加键值对(Content-Type:application/hta),这使winword.exe以为这是一个HTA文件,于是通过COM对象查找处理hta文件的程序Microsoft HTA(mshta.exe),于是mshta.exe打开这个假RTF文件,自动加载并执行包含PowerShell命令的VB脚本。
攻击流程图:
2 复现实验
攻击端操作系统: Windows 10
HTTP服务: Python3 HTTPServer
被攻击端操作系统: Windows 7 x64
被攻击端办公软件: Office 2016
攻击端将在Test文件夹内开启Python3自带的HTTPServer,在该文件夹中放入1.rtf,则地址”[IP]:[Port]/1.rtf”即可访问到该文件,因此先在Test文件夹下创建1.rtf并写入如下诱导性内容。
我们还需要修改HTTPServer配置文件 [python目录]\Lib\http\server.py中的MIME type,添加对.rtf文件请求时返回请求头的content内容。
在Test文件夹下开启HTTPServer。
新建一个文档,该文档是构造好后发给被攻击端的,选择 “插入”–“对象”。
选择 “由文件创建”,并将“文件名”填为攻击端服务器下1.rtf的地址,勾选 “链接到文件”。
确定后,将生成一个与1.rtf内容相同的内嵌对象。
我们将该文档另存为.rtf文档。(当然,也可以在一开始就创建一个.rtf文档再插入对象)
再修改MIME type,使客户端请求.rtf文件时,设置http响应头content:application/hta,这样才能让目标以hta格式打开文档执行代码。
修改攻击端服务器下1.rtf的内容,用记事本打开该文件。
内容全部删除,并将恶意代码复制进去,这里恶意代码的功能就是打开目标计算机上的计算器。
重启HTTPServer。
将test.rtf发送给被攻击端,目标打开文件。
打开文档即会出现一个弹窗,关掉弹窗(最好点“是”,点“否”的话可能需要多次双击链接文字),然后双击文字内容(相当于打开链接,向攻击端服务器发送请求)。
出现一个弹窗(并不重要),与此同时可以看到计算器已经被打开,此外还能看到一个文件运行框,标题是攻击端服务器1.rtf的地址,这是运行一个hta程序会出现的样子。
当然,这个过程中目标不仅在一打开文档时就会面对一个警告弹窗,还要点“是”,然后还需要双击链接文字,这会让攻击成功率大大降低,如希望一打开文件就自动发送请求运行hta,则需要对test.rtf进行一些修改。
以“记事本”方式打开test.rtf。
将\object\objautlink\rsltpict修改为\object\objautlink\objupdate\rsltpict。
再打开test.rtf文档。
可以看到弹出了打开文件时就会出现的弹窗,同时任务栏出现了hta程序运行进程和计算器进程,实现了打开文档自动发送请求运行hta程序。
3 可能导致失败的原因
3.1 ActiveX被默认禁止执行hta程序
现象: 如出现提示:“用于创建此对象的程序是Word,您的计算机尚未安装此程序或此程序无响应…”,则可能是该问题导致。
解决: 将注册表中“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\ActiveX Compatibility{3050f4d8-98b5-11cf-BB82-00AA00BDCE0B}”的“Compatibility Flags”项由400修改为0。
3.2 其他问题
做这个复现实验的时候其实并不顺利,3.1列出了最为重要且导致失败后不会有报错信息而让实验者不知道错在哪的一点,还有很多其他的小问题。
如:没有提前在HTTPServer配置文件中加上对.rtf文件请求的响应头设置代码,这可能导致目标后来双击文字链接时出现问题;嵌入链接时提示缺少Packager,需要下载一个packager.exe存放到C:\Windows\system32\目录下;攻击者第二次修改攻击端服务器下的1.rtf时,要用记事本打开并将格式内容全部删掉,而不是用其他文档编辑器打开且仅删掉文字内容,然后再写入恶意代码。等等…
4 附录
附hta程序代码:
<script>
var objShell = new ActiveXObject("wscript.shell");
objShell.Run("%SystemRoot%\\system32\\calc.exe");
</script>