
1. 项目概述一个被忽视的“安全后门”如果你是一个经常从网上下载压缩包然后双击解压运行里面程序的人那么今天聊的这个话题可能直接关系到你的电脑安全。最近一个关于7-Zip的漏洞编号CVE-2024-38366在安全圈里引起了不小的讨论它被描述为可以绕过Windows的“Mark of the Web”安全机制。听起来有点技术别急我用大白话给你翻译一下这相当于你从网上买了个带锁的箱子压缩包Windows系统保安在箱子外面贴了个“此物来自网络小心”的标签MoTW。正常情况下你打开箱子拿出里面的东西比如一个.exe程序保安看到标签会提醒你“这东西来路不明运行有风险”。但这个漏洞就像是有人发明了一种特殊的开箱手法能神不知鬼不觉地把那个“小心”标签给撕掉。于是保安就看不到警告你可能会在毫无防备的情况下运行了恶意软件。我之所以花时间深入研究这个漏洞是因为7-Zip几乎是装机必备的压缩解压工具用户基数巨大。而这个MoTW机制是Windows防御网络下载恶意软件的一道重要防线。防线被悄无声息地绕过意味着攻击门槛被大幅降低。攻击者不再需要费尽心思去诱导用户点击“更多信息-仍要运行”他们只需要把恶意程序打包进一个特殊的7z压缩包你一旦用有漏洞的7-Zip解压并运行恶意程序就能“静默”执行。这对于普通用户和企业安全管理员来说都是一个需要立刻重视和处理的隐患。2. 漏洞核心原理深度拆解标签是如何“消失”的要理解这个漏洞我们得先搞明白Windows的MoTW机制和7-Zip处理文件的方式。2.1 Windows MoTW互联网文件的“检疫标签”MoTW全称“Mark of the Web”中文可以理解为“网络标记”。它不是文件本身的内容而是Windows NTFS文件系统的一个扩展属性叫做“Zone.Identifier”区域标识符。当你从互联网如浏览器、邮件、聊天软件下载一个文件时Windows会在该文件上附加这个流数据记录它的来源区域通常为Internet ZoneID3。这个标记有什么用呢当用户尝试运行一个带有MoTW标记的可执行文件.exe, .msi等或脚本文件.ps1, .js等时Windows SmartScreen筛选器会介入弹出一个蓝色的安全警告窗口提示“Windows已保护你的电脑”并阻止直接运行。用户必须手动点击“更多信息”再选择“仍要运行”才能执行。这是防止用户误运行网络下载的恶意程序的关键一步。2.2 7-Zip的“快捷方式”符号链接与硬链接7-Zip作为压缩软件其核心功能之一就是“解压”——将打包在一起的文件释放到磁盘上。在释放文件时7-Zip支持创建一种叫做“链接”的东西。链接分为两种主要类型符号链接类似于Windows的快捷方式.lnk但它是在文件系统层面工作的。它是一个特殊的文件内容指向另一个文件或目录的路径。硬链接可以理解为给同一个文件数据块起了多个“名字”。删除任何一个“名字”硬链接都不会删除实际数据只有所有指向该数据块的“名字”都被删除数据才会真正释放。在压缩包内存储一个链接解压时再创建它是一种节省空间和保持文件结构的好方法。2.3 漏洞触发点链接创建与属性继承的错配漏洞就出在7-Zip处理“链接”文件与“MoTW”属性的结合部。根据漏洞研究人员的分析其核心流程如下攻击者制作恶意压缩包攻击者将一个恶意程序如malware.exe放入压缩包。同时他在压缩包内创建一个指向这个malware.exe的符号链接或硬链接文件命名为“safe.doc.lnk”名字具有欺骗性。用户解压用户使用存在漏洞的7-Zip版本23.01及之前解压该压缩包到本地目录。漏洞发生7-Zip在解压过程中先创建了目标文件malware.exe。由于该文件是从网络压缩包中解压而来Windows系统会为其正确附加MoTW属性。然而当7-Zip接着创建指向malware.exe的链接文件safe.doc.lnk时它没有将这个新创建的链接文件标记为来自网络。安全机制被绕过此时磁盘上存在两个入口指向同一个恶意程序malware.exe带有MoTW标记运行会触发警告。safe.doc.lnk没有MoTW标记系统认为它是一个安全的本地文件。当用户被诱导去点击那个看似无害的“safe.doc.lnk”时Windows检查该链接文件本身没有MoTW标记因此不会弹出任何安全警告直接执行了它指向的malware.exe。恶意程序就此得以“静默”运行。关键点解析漏洞的本质是7-Zip在创建文件系统链接时没有将源文件来自网络的安全上下文MoTW属性正确地传播或继承到新创建的链接对象上。这破坏了Windows安全模型的一个基本假设对来自网络的文件的所有访问入口都应被标识。3. 影响范围与严重性评估这个漏洞的威胁不容小觑我们可以从以下几个维度来评估3.1 受影响软件版本7-Zip版本号 23.01 的所有版本均受影响。这涵盖了相当长一段时间内下载的7-Zip。其他集成7-Zip代码库的软件许多第三方文件管理器、备份工具、安装程序制作工具等可能内置了老版本的7-Zip动态库如7z.dll来处理压缩包。这些软件同样面临风险且更新往往滞后。3.2 攻击场景鱼叉式钓鱼攻击攻击者针对特定目标如企业员工发送精心制作的压缩包内含伪装成文档、图片的恶意链接文件。软件供应链攻击攻击者入侵某些开源软件或插件的发布渠道将官方发布的压缩包替换为植入恶意链接的版本。恶意网站下载诱导用户下载所谓的“破解工具”、“游戏模组”、“文档模板”压缩包。3.3 漏洞优势从攻击者视角低交互无需用户通过复杂的安全警告对话框成功率高。高隐蔽性链接文件可以伪装成任何类型如.docx.lnk,.pdf.lnk,.jpg.lnk利用用户对非可执行文件格式的放松警惕。利用成本低制作这样的恶意压缩包几乎没有技术门槛。3.4 CVSS评分该漏洞被赋予较高的基础评分。通常此类绕过核心安全机制、需要低用户交互的漏洞CVSS v3.1评分可能在7.0 - 8.0高危范围内。具体分数取决于攻击向量、权限要求等因素但“高危”定性是明确的。4. 修复方案与实操指南面对这个漏洞无论是个人用户还是企业IT管理员都需要立即采取行动。4.1 个人用户立即升级与安全习惯首要措施升级7-Zip访问7-Zip官方网站务必核对域名防止仿冒站。下载并安装最新版本截至我撰写本文时修复版本为24.07或更高。新版7-Zip在解压链接文件时会正确地为其设置MoTW属性。安装时如果旧版本正在运行请先关闭。建议选择“为所有用户安装”以获得更好的兼容性。辅助安全习惯养成“先查杀后解压”的习惯对于来源不明的压缩包可以先使用杀毒软件进行扫描。注意解压后的文件类型警惕那些看似是文档但图标是“快捷方式”箭头或后缀名为.lnk的文件。在文件夹选项中开启“显示文件扩展名”可以让你看清.docx.lnk这样的伪装。使用“右键解压”而非双击对于压缩包尽量使用右键菜单中的“7-Zip - 解压到...”选项而不是直接双击打开再拖拽。这有时能让你更清楚地看到解压过程和解压出的文件列表。4.2 企业IT管理员批量部署与深度防护对于企业环境个人用户的升级往往滞后且不统一需要集中化管理。1. 软件统一分发与升级使用微软SCCM、Intune、组策略软件分发或第三方端点管理工具将最新的7-Zip安装包静默推送到所有企业终端。编写部署脚本自动卸载旧版本并安装新版本。一个简单的PowerShell脚本框架如下# 停止可能运行的7-Zip进程 Get-Process -Name 7z* -ErrorAction SilentlyContinue | Stop-Process -Force # 卸载旧版本假设通过MSI安装 $uninstallString Get-WmiObject Win32_Product | Where-Object {$_.Name -like *7-Zip*} | Select-Object -ExpandProperty IdentifyingNumber if ($uninstallString) { Start-Process msiexec.exe -ArgumentList /x $uninstallString /qn -Wait } # 下载并安装新版本 $installerPath $env:TEMP\7z2407-x64.msi Invoke-WebRequest -Uri https://www.7-zip.org/a/7z2407-x64.msi -OutFile $installerPath Start-Process msiexec.exe -ArgumentList /i $installerPath /qn -Wait # 清理 Remove-Item $installerPath Write-Host 7-Zip 已升级至安全版本。 -ForegroundColor Green注意实际部署前需在测试环境验证并确保下载源可信。对于非MSI版本需要调整安装逻辑。2. 应用控制与策略限制启用Windows Defender应用程序控制或第三方应用程序白名单策略。只允许运行经过企业签名的或位于可信目录下的可执行文件。这可以从根本上阻止未知恶意程序的运行无论它是否绕过了MoTW。使用组策略限制.zip/.7z等压缩文件格式的默认处理程序强制使用经过安全配置的软件打开。3. 网络与终端检测在防火墙或邮件网关上配置策略对附件中的压缩包进行深度内容检测DCI尝试识别其中包含的恶意链接文件。部署的终端检测与响应EDR解决方案应具备检测可疑的“从.lnk文件启动子进程”行为的能力特别是当父进程是7-Zip或解压工具时。4.3 临时缓解措施如果无法立即升级如果因为兼容性等原因无法立即升级7-Zip可以考虑以下临时方案禁用7-Zip对链接的支持这需要修改7-Zip的源代码并重新编译对普通用户不现实。但可以作为一个知识要点在CPP/Windows/FileIO.cpp中与创建链接相关的函数如SetFileLink是修改的关键点。使用替代解压工具临时改用其他已确认修复了类似漏洞的压缩软件如最新版的WinRAR、Bandizip需确认其版本安全性或PeaZip。强制所有文件继承MoTW这是一个比较“粗暴”但可能有效的PowerShell脚本可以在解压后对目录下的所有文件包括链接强制添加Zone.Identifier谨慎使用可能影响正常文件# 为指定目录下所有文件添加Internet区域标识符模拟MoTW function Set-MoTWForDirectory { param([string]$Path) Get-ChildItem -Path $Path -Recurse -File | ForEach-Object { $zoneFile $($_.FullName):Zone.Identifier [ZoneTransfer]rnZoneId3 | Set-Content -Path $zoneFile -Stream Zone.Identifier -Force } } # 示例为D:\Downloads\ExtractedFolder目录下所有文件设置MoTW # Set-MoTWForDirectory -Path D:\Downloads\ExtractedFolder重要警告此方法会修改所有文件包括原本安全的本地文件可能导致某些合法软件行为异常。仅作为应急研究使用不建议在生产环境大规模部署。5. 漏洞修复的技术细节与验证方法了解漏洞如何被修复能帮助我们更深刻地理解安全机制并验证修复是否有效。5.1 7-Zip官方修复思路在修复版本中7-Zip的开发团队修改了文件解压的逻辑。核心修复点在于当解压一个文件系统链接时如果源文件或链接本身是从具有MoTW标记的压缩包中提取的那么新创建的链接文件也必须被显式地标记上MoTW属性。在代码层面这通常涉及在创建链接调用CreateHardLink或CreateSymbolicLinkAPI之后立即调用SetFileAttributes或通过备份/恢复数据流的方式将:Zone.Identifier这个备用数据流ADS从压缩包的“上下文”复制到新创建的链接文件上。5.2 如何验证你的7-Zip已修复作为用户或管理员我们不应只听信版本号最好能实际验证一下。这里提供一个简单的验证方法准备测试压缩包你需要一个能创建特殊压缩包的工具。最简单的方法是使用PowerShell配合7-Zip命令行版7z.exe。创建测试文件首先创建一个无害的测试程序比如一个用C#写的弹出消息框的简单程序或者直接用calc.exe的副本命名为test.exe。创建一个指向它的符号链接在命令行以管理员身份运行中执行mklink test.lnk C:\Windows\System32\calc.exe这里用calc.exe代替你的test.exe作为示例因为创建指向任意exe的链接需要特定权限和方式此处仅为说明原理。实际攻击中链接是在压缩包内预置的。模拟攻击并验证更实际的验证是从网络下载一个已知的“概念验证”测试包PoC或者使用已公开的脚本生成一个测试用的7z文件。用旧版23.01和新版24.077-Zip分别解压到不同目录。检查MoTW属性解压后对解压出的.lnk文件检查其MoTW属性。可以使用PowerShell命令Get-Item -Path .\path\to\your\extracted\file.lnk -Stream Zone.Identifier -ErrorAction SilentlyContinue如果使用有漏洞的旧版解压此命令可能返回错误流不存在或显示ZoneId0本地计算机证明MoTW未被设置。如果使用已修复的新版解压此命令应成功返回数据流内容并显示ZoneId3Internet区域证明MoTW已被正确附加。5.3 给开发者的启示安全编码实践这个漏洞给所有处理来自不可信源文件的开发者提了个醒安全上下文继承当你的程序创建新文件对象尤其是链接、副本时必须考虑是否应该继承源文件的安全属性如MoTW、ACL权限等。默认拒绝原则对于来自网络的文件处理时应采取更严格的安全策略。当不确定时为其附加MoTW是更安全的选择。代码审计定期对涉及文件操作、尤其是跨安全边界文件操作的代码进行安全审计。重点关注文件创建、复制、链接创建等API的调用上下文。6. 长期防护策略与安全生态思考修复一个具体的软件漏洞是“治标”建立长期有效的安全防护习惯和认知才是“治本”。6.1 纵深防御体系不要依赖单一安全机制。MoTW是重要的一环但你的安全防线应该包括实时防病毒/反恶意软件作为基础防线。终端检测与响应用于发现可疑行为和进行威胁狩猎。应用程序控制/白名单限制可执行程序的运行范围。用户安全教育永远是最薄弱也是最重要的一环。培训用户识别钓鱼邮件、可疑附件和网站。6.2 软件供应链安全7-Zip是一个开源、可信赖的软件但它的漏洞依然影响了无数用户。这凸显了软件供应链安全的重要性及时更新为所有软件建立补丁管理流程尤其是像压缩工具、浏览器、办公软件这类与外部数据交互频繁的“入口”软件。来源验证只从官方或可信渠道下载软件。最小权限原则日常使用电脑时尽量使用标准用户账户而非管理员账户这可以限制许多漏洞的利用效果。6.3 对普通用户的终极建议作为每天使用电脑的普通人你可以记住以下三点就能规避绝大部分类似风险保持更新开启Windows自动更新并定期手动检查像7-Zip、浏览器、Office这类关键软件是否有新版本。来源可信下载软件去官网邮件附件要警惕陌生链接不要点。遇警则停只要系统弹出安全警告无论是蓝色的SmartScreen还是黄色的防病毒警告一定要停下来看清楚想明白这个文件是不是你主动要运行的不要习惯性地点“仍然运行”。这个7-Zip漏洞的修复是安全领域里一场悄无声息但至关重要的防御升级。它提醒我们即使是最常用、最受信任的工具其安全细节也值得持续关注。及时行动更新你的7-Zip就是为你自己的数字世界关上了一道潜在的危险之门。