整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

深入剖析CVE-2021-40444-Cabless利用链

CVE-2021-40444为微软MHTML远程命令执行漏洞,攻击者可通过传播Microsoft Office文档,诱导目标点击文档从而在目标机器上执行任意代码。该漏洞最初的利用思路是使用下载cab并释放、加载inf文件的形式执行恶意代码。独立安全研究员Eduardo B.在github公开了一种新的“无CAB”的漏洞利用方法及其POC。公众号之前发布的研判文章中已对在野利用中出现的新的Cabless利用链以及RAR文件隐藏载荷的巧妙方法进行了分析。本篇将进一步探究该利用链的技术本质,并在复现攻击场景的前提下尝试对利用链进行改进。

基于URL Scheme的Cabless利用链

与基于cab的攻击方式一样,新攻击链依然需要在Office文档中插入恶意htmlfile OLE对象,当目标用户点击文档后会请求访问远程html页面,而html页面中通过ActiveX控件调用".wsf:../" URL Scheme链接,最终调用wcript.exe执行RAR中嵌入的wsf脚本。

'.wsf:../../../Downloads/?.wsf'

URL Scheme也叫URL protocol,它的作用是通过链接启动对应的本地程序,格式为[scheme]://[host]/[path]?[query]。文件后缀名可同样用作scheme,调用相关文件类型绑定的程序。’?[query]’的存在则可利用URL Scheme与程序在处理路径时不同的行为,达到忽略真实后缀名,绕过扩展名校验的目的。在之前的攻击链中曾使用”.cpl”链接调用系统rundll32.exe程序将inf文件作为cpl文件加载执行。

目前公开的配合RAR的Cabless利用链的POC有两个利用条件,一是猜测到WINRAR的存储位置,默认其位于用户目录的Downloads文件夹下,否则无法获取wsf脚本位置;二是明确wscript.exe运行的当前路径(例如Documents目录),否则无法构造正确的路径。下面将从不同的利用场景考虑,思考更灵活的URL Scheme构造方式。

基于不同利用场景的利用链改进

配合RAR的Cabless利用链在实际执行时有两种可能,用户直接在WinRAR中打开DOCX文件,以及先解压再打开,对这两条攻击路径进行分别的探究。

直接在WINRAR中打开DOCX文件

当用户直接在WINRAR中打开压缩包中的DOCX文件时的进程树如下:

WinRAR的当前路径为RAR文件所在文件夹。

Word的当前路径为C:\Users\user\Documents,RAR中的DOCX文件被释放到%TEMP%临时文件夹中。

wscript.exe被触发执行后的当前路径为WinRAR的路径(也就是压缩包所在的文件夹)。

".wsf:"被用于Url Scheme唤起wscript.exe,而在被唤起后又被当作普通目录名去解析。’.wsf:’后的两个’.’可替换为其他内容,不影响执行,但是如果去掉这两个字符会在参数传递给wscript.exe时吞掉一个“../”导致找不到文件。这是因为wscript.exe解析路径的时候会将“.wsf:aa”整体当作一个host看待,后面拼接“../”就抵消了这层目录关系,相当于当前目录。

基于以上测试可知,当DOCX文件在WinRAR中直接执行时虽然DOCX文件释放于临时目录,但wscript.exe的当前目录即是RAR文件所在的目录。由此我们可以构造此情况下100%可用的URL Scheme(直接从当前路径读取RAR文件):

'.wsf:aa/../exp.rar1?.wsf'

先解压DOCX文件再打开

这种情况其实更复杂,也是公开的POC针对的场景,对应进程树:

直接点击解压后的DOCX文件打开时,Word的当前路径为DOCX文件所在路径,wscript.exe的路径也将保持一致。

值得注意的是,在一些情况下Word会将当前路径设置为C:\Users\Document,这可能是公开POC中构造路径的依据。但无论当前路径是什么,攻击者都必须成功获取(猜测)到RAR所在的文件夹。

漏洞修复

微软在9月的补丁中已将MHTML中使用URL Scheme的问题修复,在ieframe.dll中加入了一个新的校验函数IsValidSchemeName:

该函数将对URL Scheme进行校验,诸如”.cpl”、“.wsf”这种以文件扩展名启动应用程序的方式由于以字符“.”开头无法通过该校验函数的判断。

总结

本文主要分析了CVE-2021-40444的Cabless利用链中存在的路径问题以及对之前技术研判内容进行补充。通过分析CVE-2021-40444新利用链,可以看到该漏洞的根本原因是Office文档可以通过MHTML协议请求访问远程HTML页面从而执行JavaScript代码,并最终通过Url Scheme启动本地应用程序执行投递的恶意代码,而中间投递恶意代码的方式是可以替换的。同时也给了作为初学者的笔者很多启发,在分析漏洞时需加入对根本问题的思考:在攻击链中哪些部分是必不可少的,哪些是可以替换的。必不可少的部分作为漏洞根本问题要更深入地分析,而可以替换的部分要尝试去挖掘可替换的新利用链。而对于防守方,把握漏洞本质与漏洞利用必经之路,方能以不变应万变彻底控制各种漏洞利用变体。

了解更多

了解讨论网络安全和领取网络安全的学习资料“关注”并私信“资料”免费领取


2022年5月27日,我们发现有安全研究人员公开了一个新的Office漏洞,称为Follina,由白俄罗斯的一个IP地址上传。该漏洞的原理是利用Microsoft Office将远程HTML页面作为OLE对象插入的功能,文档打开后将访问远程HTML页面并执行其中的代码,攻击者利用js代码将页面重定向,使其通过"ms-msdt:"协议访问URL链接,调用本地msdt.exe并传入攻击者构造好的参数,最终执行任意PowerShell代码。值得注意的是,该漏洞在宏被禁用的情况下仍可被利用,具有较大的安全隐患。

6月初,研究人员公开了一个针对乌克兰的攻击样本(7908d7095ed1cde36b7fd8f45966fc56f0b72ca131121fdb3f8397c0710100e1),发现有组织使用Cobalt Strike Beacon恶意软件并利用该漏洞CVE-2022-30190对乌克兰国家组织进行了网络攻击。下面将对该漏洞的利用和此样本产生的流量进行分析。

二、Follina漏洞利用

1.使用网上已公开的poc

https://github.com/chvancooten/follina[ . ]py

2.在当前目录下生成clickme.docx和www下exploit.html,并启动监听

python follina.py -t docx -m binary -b windowssystem32calc.exe -H 127.0.0.1 -P 8080

3.在word启动时可以看到“正在打开http://localhost:8080/exploit[ . ]html”,说明word和服务端建立连接成功,弹出calc.exe,漏洞利用成功

三、TLS加密流量分析

1.捕获的流量中检测到nod-update[ . ]it可疑域名,每隔一段时间,Beacon会对nod-update[ . ]it发出A记录dns查询

2. 下图为样本通信时的流量,使用TLS加密

3.服务器已经不存活,主机无法上线,TCP建立握手连接失败

4.从流量导出的证书,颁发者是CN = R3 O = Let's Encrypt C = US ,指纹是85fbc86f7a5411e6472b167c8016723a51cc090a,R3的颁发机构为ISRG Root X1,是一个免费的证书颁发机构,由于免费证书申请不会经过严格的使用者身份验证,较容易获取,因此,经常被黑客或恶意程序使用。

5.观成瞰云(ENS)-加密威胁智能检测系统针对本次测试产生的加密流量进行检出,从握手检测、域名检测、证书检测进行多模型分析,综合评分为0.76。

四、总结

随着Follina漏洞的出现,改变了以前要“钓鱼”就要想办法绕过office宏禁止机制的攻击方法,取得了新的突破,网络攻击的手段变得越来越多样化,通信方式也变得隐蔽化和加密化,这一趋势给流量检测带来了更高挑战。

头条创作挑战赛# 在Excel VBA中,HTMLObjectElement对象表示HTML文档中的<object>元素。它允许您通过VBA代码访问和操作HTML文档中的<object>元素,例如Flash、Java Applets、嵌入式视频等。使用HTMLObjectElement对象,您可以在VBA中设置<object>元素的属性,例如高度、宽度、数据等,以及执行与<object>元素相关的操作。

以下是6个代码实例来解释说明HTMLObjectElement对象的用法:

1、获取HTMLObjectElement对象

Dim obj As HTMLObjectElement
Set obj = ActiveDocument.getElementById("myObject")

2、设置HTMLObjectElement对象的高度和宽度

obj.Height = 100
obj.Width = 200

3、获取HTMLObjectElement对象的数据属性

Dim data As String
data = obj.Data

4、设置HTMLObjectElement对象的数据属性

obj.Data = "http://example.com/myvideo.mp4"

5、获取HTMLObjectElement对象的classid属性

Dim classid As String
classid = obj.classid

6、设置HTMLObjectElement对象的classid属性

obj.classid = "clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B"

下面是两个Excel案例代码来解释HTMLObjectElement对象的使用:

1、在Excel中插入Flash动画

Sub InsertFlash()
    Dim obj As HTMLObjectElement
    Set obj = ActiveSheet.OLEObjects.Add(ClassType:="ShockwaveFlash.ShockwaveFlash", _
        Link:=False, DisplayAsIcon:=False, Left:=10, Top:=10, Width:=200, Height:=100).Object
    obj.Movie = "http://example.com/myflash.swf"
End Sub

2、在Excel中插入嵌入式视频

Sub InsertVideo()
    Dim obj As HTMLObjectElement
    Set obj = ActiveSheet.OLEObjects.Add(ClassType:="MediaPlayer.MediaPlayer", _
        Link:=False, DisplayAsIcon:=False, Left:=10, Top:=10, Width:=200, Height:=100).Object
    obj.URL = "http://example.com/myvideo.mp4"
End Sub

在这些代码中,我们使用HTMLObjectElement对象来访问和操作插入到Excel工作表中的<object>元素。我们可以设置<object>元素的高度、宽度、数据、classid等属性,以及执行与<object>元素相关的操作,例如播放Flash动画和嵌入式视频。

在使用HTMLObjectElement对象时,需要注意以下几点:

1、要确保已经正确地引用了Microsoft HTML Object Library。

2、要确保在HTML文档中正确地指定了<object>元素的classid属性,以便在VBA中正确地创建和引用HTMLObjectElement对象。

3、要确保在操作<object>元素之前,已经加载了完整的HTML文档。

4、要确保在设置<object>元素的属性之前,已经正确地验证了这些属性的值,以避免出现错误。

5、要确保在操作<object>元素之前,已经正确地验证了这些元素的状态和可用性,以避免出现错误。

6、在使用HTMLObjectElement对象时,应该遵循良好的编程实践,例如使用错误处理和代码注释等,以提高代码的可读性和可维护性。