当前位置: 首页 > news >正文

7-Zip漏洞CVE-2024-38366:绕过Windows安全标记的压缩包攻击解析

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 Zone,ID=3)。

这个标记有什么用呢?当用户尝试运行一个带有MoTW标记的可执行文件(.exe, .msi等)或脚本文件(.ps1, .js等)时,Windows SmartScreen筛选器会介入,弹出一个蓝色的安全警告窗口,提示“Windows已保护你的电脑”,并阻止直接运行。用户必须手动点击“更多信息”,再选择“仍要运行”才能执行。这是防止用户误运行网络下载的恶意程序的关键一步。

2.2 7-Zip的“快捷方式”:符号链接与硬链接

7-Zip作为压缩软件,其核心功能之一就是“解压”——将打包在一起的文件释放到磁盘上。在释放文件时,7-Zip支持创建一种叫做“链接”的东西。链接分为两种主要类型:

  • 符号链接:类似于Windows的快捷方式(.lnk),但它是在文件系统层面工作的。它是一个特殊的文件,内容指向另一个文件或目录的路径。
  • 硬链接:可以理解为给同一个文件数据块起了多个“名字”。删除任何一个“名字”(硬链接)都不会删除实际数据,只有所有指向该数据块的“名字”都被删除,数据才会真正释放。

在压缩包内存储一个链接,解压时再创建它,是一种节省空间和保持文件结构的好方法。

2.3 漏洞触发点:链接创建与属性继承的错配

漏洞就出在7-Zip处理“链接”文件与“MoTW”属性的结合部。根据漏洞研究人员的分析,其核心流程如下:

  1. 攻击者制作恶意压缩包:攻击者将一个恶意程序(如malware.exe)放入压缩包。同时,他在压缩包内创建一个指向这个malware.exe的符号链接硬链接文件,命名为“safe.doc.lnk”(名字具有欺骗性)。
  2. 用户解压:用户使用存在漏洞的7-Zip版本(23.01及之前)解压该压缩包到本地目录。
  3. 漏洞发生:7-Zip在解压过程中,先创建了目标文件malware.exe。由于该文件是从网络压缩包中解压而来,Windows系统会为其正确附加MoTW属性。然而,当7-Zip接着创建指向malware.exe的链接文件(safe.doc.lnk)时,它没有将这个新创建的链接文件标记为来自网络
  4. 安全机制被绕过:此时,磁盘上存在两个入口指向同一个恶意程序:
    • 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

  1. 访问7-Zip官方网站(务必核对域名,防止仿冒站)。
  2. 下载并安装最新版本(截至我撰写本文时,修复版本为24.07或更高)。新版7-Zip在解压链接文件时,会正确地为其设置MoTW属性。
  3. 安装时,如果旧版本正在运行,请先关闭。建议选择“为所有用户安装”以获得更好的兼容性。

辅助安全习惯

  • 养成“先查杀,后解压”的习惯:对于来源不明的压缩包,可以先使用杀毒软件进行扫描。
  • 注意解压后的文件类型:警惕那些看似是文档但图标是“快捷方式”箭头,或后缀名为.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,可以考虑以下临时方案:

  1. 禁用7-Zip对链接的支持:这需要修改7-Zip的源代码并重新编译,对普通用户不现实。但可以作为一个知识要点:在CPP/Windows/FileIO.cpp中,与创建链接相关的函数(如SetFileLink)是修改的关键点。
  2. 使用替代解压工具:临时改用其他已确认修复了类似漏洞的压缩软件,如最新版的WinRAR、Bandizip(需确认其版本安全性)或PeaZip。
  3. 强制所有文件继承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]`r`nZoneId=3" | 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属性。

在代码层面,这通常涉及在创建链接(调用CreateHardLinkCreateSymbolicLinkAPI)之后,立即调用SetFileAttributes或通过备份/恢复数据流的方式,将:Zone.Identifier这个备用数据流(ADS)从压缩包的“上下文”复制到新创建的链接文件上。

5.2 如何验证你的7-Zip已修复

作为用户或管理员,我们不应只听信版本号,最好能实际验证一下。这里提供一个简单的验证方法:

  1. 准备测试压缩包:你需要一个能创建特殊压缩包的工具。最简单的方法是使用PowerShell配合7-Zip命令行版(7z.exe)。
  2. 创建测试文件:首先,创建一个无害的测试程序(比如一个用C#写的弹出消息框的简单程序,或者直接用calc.exe的副本)命名为test.exe
  3. 创建一个指向它的符号链接:在命令行(以管理员身份运行)中执行:
    mklink test.lnk C:\Windows\System32\calc.exe
    (这里用calc.exe代替你的test.exe作为示例,因为创建指向任意exe的链接需要特定权限和方式,此处仅为说明原理。实际攻击中,链接是在压缩包内预置的)。
  4. 模拟攻击并验证:更实际的验证是,从网络下载一个已知的“概念验证”测试包(PoC),或者使用已公开的脚本生成一个测试用的7z文件。用旧版(<=23.01)和新版(>=24.07)7-Zip分别解压到不同目录。
  5. 检查MoTW属性:解压后,对解压出的.lnk文件检查其MoTW属性。可以使用PowerShell命令:
    Get-Item -Path ".\path\to\your\extracted\file.lnk" -Stream Zone.Identifier -ErrorAction SilentlyContinue
    • 如果使用有漏洞的旧版解压,此命令可能返回错误(流不存在),或显示ZoneId=0(本地计算机),证明MoTW未被设置。
    • 如果使用已修复的新版解压,此命令应成功返回数据流内容,并显示ZoneId=3(Internet区域),证明MoTW已被正确附加。

5.3 给开发者的启示:安全编码实践

这个漏洞给所有处理来自不可信源文件的开发者提了个醒:

  • 安全上下文继承:当你的程序创建新文件对象(尤其是链接、副本)时,必须考虑是否应该继承源文件的安全属性(如MoTW、ACL权限等)。
  • 默认拒绝原则:对于来自网络的文件,处理时应采取更严格的安全策略。当不确定时,为其附加MoTW是更安全的选择。
  • 代码审计:定期对涉及文件操作、尤其是跨安全边界文件操作的代码进行安全审计。重点关注文件创建、复制、链接创建等API的调用上下文。

6. 长期防护策略与安全生态思考

修复一个具体的软件漏洞是“治标”,建立长期有效的安全防护习惯和认知才是“治本”。

6.1 纵深防御体系不要依赖单一安全机制。MoTW是重要的一环,但你的安全防线应该包括:

  • 实时防病毒/反恶意软件:作为基础防线。
  • 终端检测与响应:用于发现可疑行为和进行威胁狩猎。
  • 应用程序控制/白名单:限制可执行程序的运行范围。
  • 用户安全教育:永远是最薄弱也是最重要的一环。培训用户识别钓鱼邮件、可疑附件和网站。

6.2 软件供应链安全7-Zip是一个开源、可信赖的软件,但它的漏洞依然影响了无数用户。这凸显了软件供应链安全的重要性:

  • 及时更新:为所有软件建立补丁管理流程,尤其是像压缩工具、浏览器、办公软件这类与外部数据交互频繁的“入口”软件。
  • 来源验证:只从官方或可信渠道下载软件。
  • 最小权限原则:日常使用电脑时,尽量使用标准用户账户,而非管理员账户,这可以限制许多漏洞的利用效果。

6.3 对普通用户的终极建议作为每天使用电脑的普通人,你可以记住以下三点,就能规避绝大部分类似风险:

  1. 保持更新:开启Windows自动更新,并定期手动检查像7-Zip、浏览器、Office这类关键软件是否有新版本。
  2. 来源可信:下载软件去官网,邮件附件要警惕,陌生链接不要点。
  3. 遇警则停:只要系统弹出安全警告(无论是蓝色的SmartScreen还是黄色的防病毒警告),一定要停下来看清楚,想明白这个文件是不是你主动要运行的,不要习惯性地点“仍然运行”。

这个7-Zip漏洞的修复,是安全领域里一场悄无声息但至关重要的防御升级。它提醒我们,即使是最常用、最受信任的工具,其安全细节也值得持续关注。及时行动,更新你的7-Zip,就是为你自己的数字世界关上了一道潜在的危险之门。

http://www.jsqmd.com/news/1144318/

相关文章:

  • Windows 11 22H2 双显卡排错指南:5步解决程序错误调用集显问题
  • Docker CE 24.0 在 CentOS 7/8 的 5 步安装与 3 步卸载完整流程
  • 作为一个给团队打绩效的人,我想说几句
  • Docker 26.0 安装后 5 项必做配置:镜像加速、用户组与存储驱动优化
  • 高德地图 JS API 2.0 海量标注优化:3500+数据下首屏加载提速4倍实战
  • PROPKA 3深度解析:蛋白质pKa预测的实战指南与算法原理
  • DALL·E 3 vs DALL·E 2 API 对比:3 大核心差异与 5 项成本/效果实测
  • KeenTune UI 可视化平台部署:AnolisOS 8 单机3步完成,算法调优过程可视化
  • CSS 颜色模块 Level 4 实战:3种现代颜色表示法(RGB/HSL/OKLCH)对比与应用
  • Mermaid图表工具:5分钟掌握文本绘图,告别拖拽式设计烦恼
  • Windows Server 安全与便利权衡:3种替代IE ESC的浏览器配置方案
  • macOS Ventura 13+ 系统“已损坏”报错:5 步完整排查与修复指南(含终端权限)
  • CVPR2022 MulT vs CVPR2025 TADFormer:多任务学习Transformer的3点演进剖析
  • YOLOv8 C2f 模块详解:从 CSP 到 4 种残差连接的梯度流优化
  • SQL Server 查询优化器揭秘:从关系代数到物理运算符的3层转换
  • Typora免费试用指南:下载安装与理性激活策略
  • Lua-协程
  • Jetson Orin Nano 上源码编译 ROS 2 Humble 实战指南
  • Windows 10/11 鼠标指针方案管理:从.inf安装到Cursors文件夹的2种部署方法对比
  • 36V转5V/3.3V稳压芯片推荐:80V耐压LDO与60V/80V降压DC-DC对比
  • GBDT vs XGBoost vs 随机森林:3 种集成模型在药物活性预测中的 R² 对比
  • Ubuntu 22.04/24.04 运行32位程序:4步安装i386架构库解决No such file or directory
  • ESXi 虚拟机 2 种删除方式对比:从清单移除 vs 从磁盘删除的 4 点差异
  • SQL Server 2022 备份与恢复实战:3种恢复模式下的完整/差异/日志备份策略对比
  • CSS ::before/::after 实战:5个场景解析 content 属性的 3 种高级用法
  • 5分钟掌握Python程序打包神器:Auto-Py-To-Exe新手到专家完整指南
  • 云服务器传code全链路解析:ssh、scp、unzip协同实战
  • 泛微OA漏洞深度剖析:从高频漏洞原理到实战攻防与加固策略
  • Arch Linux 2024.07.01 移动安装:GPT+MBR 双分区表实现 UEFI/BIOS 双启动
  • Windows 10 鼠标指针重置问题:3步永久修复方案与系统权限深度解析