freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

CVE-2023-36025 Windows SmartScreen安全功能绕过漏洞分析
绿盟科技 2023-12-27 15:05:56 270469

0x00 概述

CVE-2023-36025是微软于11月补丁日发布的安全更新中修复Windows SmartScreen安全功能绕过漏洞。攻击者可以通过诱导用户单击特制的URL来利用该漏洞,对目标系统进行攻击。成功利用该漏洞的攻击者能够绕过Windows Defender SmartScreen检查及其相关提示。该漏洞的攻击复杂性较低,可创建并诱导用户点击恶意设计的 Internet 快捷方式文件 (.URL) 或指向此类文件的超链接来利用该漏洞,无需特殊权限即可通过互联网进行利用。

0x01 漏洞复现

根据网上公开EXP,构造一个恶意的smb服务器,构造恶意的zip文件如下:

构造恶意的url文件,其中`URL`填入我们指定的恶意zip文件下的vbs文件。

正常情况下用户双击来自网络的可执行文件的时候,会触发Windows Defender SmartScreen的检查。然而,当点击恶意url文件,windows会首先解压恶意zip文件并放入临时目录,然后调用Wscript执行vbs文件。

按常理说,虽然解压了vbs文件到本地目录,但vbs本质上还是来自于网络中的可执行文件,应该触发Windows Defender SmartScreen的检查,但事实却是没触发,这也就是漏洞所在。

0x02 漏洞定位

在复现了该漏洞后,由于没有详细的漏洞细节披露,只能推测微软可能patch的位置,问题可能有两处:

  1. explorer在解压zip文件后没有调用SmartScreen进行检查,这种情况问题微软就可能patch在explorer解压文件,调用程序执行文件这块的执行逻辑。  
  2. explorer正确解压了文件,并且在执行恶意vbs文件前正确调用了SmartScreen进行检查,只是绕过了SmartScreen执行逻辑,导致返回了安全的结果,如果是这样,patch就可能出现在smartScreen中。

由于diff explorer与SmartScreen并不现实,这里直接使用process monitor查看diff前后的执行逻辑差别。

可以看出问题出现在explorer,在未修复的版本中没有调用SmartScreen进行检查而是直接启动了wscript去执行我们的恶意vbs文件。

接下来逻辑就比较清晰,往上追溯堆栈,寻找可能为执行逻辑相关的dll文件,然后根据堆栈调用与diff来寻找功能代码,定位漏洞点。

经过枯燥的审计过程,通过对其中的堆栈进行审查,发现了几个强相关dll文件,分别为windows.storage.dll与zipfldr.dll。

其中前者更多是关于explorer的各种操作的dll依赖库,而后者更专注于对压缩文件夹的处理,通过zipfldr.dll,explorer能够像处理普通文件夹一样处理ZIP文件。用户可以在其中查看、打开、复制和移动文件,就像它们是常规文件夹一样。

通过图上windows.storage.dll的调用堆栈,配合diff可以发现,漏洞出现在windows.storage.dll中的CInvokeCreateProcessVerb::ProcessCommandTemplate函数中。

0x03 漏洞分析与修复

通过对CInvokeCreateProcessVerb::ProcessCommandTemplate函数的功能审计,可以确定该函数是用来处理和执行一个命令模板。

我们关心的逻辑主要在关于CheckSmartScreenWithAltFile的验证部分。在未安装补丁版本中可以看到部分执行逻辑如下:

explorer首先调用ParamIsApp判断将要执行或者下载的文件是否带有参数,如果没有参数则调用ShouldDownloadItem判断该文件是否需要下载,如果需要下载则调用DownloadItem函数。

该函数通过调用SHELL32!CLocalCopyHelper::Download实现下载后返回Shell Item对象。

下载后调用CInvokeCreateProcessVerb::InitSelectedItem函数对shell item对象进行了一系列的初始化,并且检查文件路径是否恶意。

最后调用CheckSmartScreenWithAltFile进行smartscreen验证。

CheckSmartScreenWithAltFile中通过IsSmartScreenEnabled实现com调用到smartscreen.exe进行合法验证,如果验证失败,则调用SafeOpenPromptForShellExec弹框警告。  

以上的思路似乎都没有问题,但是紧随其后的第二个逻辑就有了一些问题。也就是对ParamIsApp不满足条件的处理,由上图我们可以看出在执行的文件没有参数的情况下,我们是没办法绕过smartscreen的,可是我们通过url又没法给file路径带参数。

但是当我们调试exp的时候发现,exp调用的是Wscript执行,这种就不满足ParamIsApp的处理。

如下图所示,如果执行带有参数,windows认为这个就是安全的(奇怪的回路),在几乎一套流程下调用DownloadItem函数后没有进行smartscreen验证。

这种行为也许是可以理解的,因为如果我们通过file:去下载执行远程文件的时候,确实是无法带参数执行。但是微软确实没有考虑到如果解压到本地路径后再调用系统应用启动的情况。

在补丁中,微软也是不出所料的在第二个逻辑下添加了CheckSmartScreenWithAltFile验证。

0x04 漏洞影响

该漏洞影响了Windows 10和Windows 11的绝大多数发行版。并且由于逻辑漏洞的特殊性,该漏洞配合社会工程学将带来一些比较大的危害。值得一提的是,TA544组织曾利用该漏洞作为攻击链的一环。 

可以看出该组织利用该漏洞使用file://.zip/*.vhd的方法令目标挂载了一个vhd文件,该磁盘中可能是一个白加黑文件,配合其他工具执行调用。

为了防范该漏洞,建议用户及时更新系统补丁,并且不要轻信来自陌生人的邮件或链接。同时,也要注意检查系统中是否存在异常的磁盘或文件。如果发现有可疑的活动,应立即报告给安全专家或相关部门。

# 安全漏洞 # 漏洞分析 # windows漏洞 # 漏洞复现
本文为 绿盟科技 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
M01N Team
绿盟科技 LV.10
绿盟科技官方账号
  • 1639 文章数
  • 336 关注者
《高级威胁研究报告(2025版)》发布
2025-04-03
《网络安全2025:冲刺“十四五”》发布
2025-04-01
《2025网络安全趋势报告》发布
2025-04-01
文章目录