dfs333/trivycompromiseanalysis

GitHub: dfs333/trivysupplychainanalysis

该项目通过 TLA+ 和 PRISM 对 Trivy/TeamPCP GitHub Actions 供应链攻击进行形式化建模、穷尽验证和概率量化分析,并附带语料库实证研究与 USENIX 论文。

Stars: 0 | Forks: 0

# 多阶段 CI/CD 供应链攻击的定量分析 对 2026 年 3 月 Trivy / “TeamPCP” GitHub Actions 供应链破坏事件(**CVE-2026-33634**)进行的**经过形式化验证的定量重建**——使用 TLA+ 建模,通过 TLC 进行 详尽检查,并使用 PRISM 概率模型检测器进行量化。 ![模型检测](https://img.shields.io/badge/TLC-10%2F10%20configs%20green-brightgreen) ![PRISM](https://img.shields.io/badge/PRISM-MDP%20%2B%20DTMC%20%2B%20parametric-blue) ![语料库](https://img.shields.io/badge/corpus-189%20real%20workflows-informational) ![CVE](https://img.shields.io/badge/incident-CVE--2026--33634-critical) [![验证](https://static.pigsec.cn/wp-content/uploads/repos/cas/f5/f5acfe8dce6a25e85907ab3b9795e0d0a81b502cf4ae76bb4079cea10546c57e.svg)](https://github.com/dfs333/trivysupplychainanalysis/actions/workflows/verify.yml) [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.21387135.svg)](https://doi.org/10.5281/zenodo.21387135) ## 发生了什么,以及这证明了什么 攻击者通过移动一个被广泛使用的 Action(`trivy-action` / `setup-trivy`)上的浮动版本标签,导致数千个下游流水线在下一次例行运行时,携带生产凭证执行了攻击者控制的 代码,泄露的机密信息随后为第二阶段的 npm 蠕虫提供了种子。本项目提出了事件报告无法在形式上回答的问题: - **完全轮换与部分凭证轮换。** 模型证明了实际发生的*部分* 轮换**并未**阻断攻击,而*完全*轮换则可以——这与记录在案的事件起因相符。 - **SHA 绑定隔离了流水线。** 绑定了 commit-SHA 的流水线被证明绝对不会 被攻陷,*即使其相邻流水线被攻陷,甚至即使被盗凭证仍然 有效*——破坏仅局限于未绑定的子集(一个形式化的隔离定理 + 一个量化残余攻击面的精化关系)。 - **可能性有多大,速度有多快,影响有多广。** 精确的攻陷概率、预期的 攻陷时间、两阶段 npm 传播级联,以及封闭形式的参数化 结果,均根据真实的恶意软件包频率数据进行校准。 - **该发现经受住了自动化搜索的考验。** 一个 LLM 提议者(Claude Opus 4.8)在 防御者策略空间中针对已验证的 PRISM 预言机进行搜索,最终在无人类 指导的情况下——收敛于相同的最低成本且可证明安全的策略:轮换残余凭证。 提议者负责建议;模型检测器负责决策。 ## 关键结果 | 问题 | 结果 | |---|---| | 记录在案的攻击是否可达? | **是** —— TLC 返回了精确的 3 步档案追踪 | | 部分轮换是否足够? | **否**(`NoExfiltration` 失败);完全轮换**可以** | | 混合环境中的 SHA 绑定 | **隔离成立**,覆盖 8,185 个状态;破坏被遏制 | | P(攻陷),脆弱配置 | **1.0**;E[时间] **6 天**;P(≤30 天) **0.9985** | | 多阶段级联 | P(达到阶段 2) **= q**;E[首个下游] **16 天**;**轮换 → 0** | | 参数化(封闭形式) | E[攻陷天数] **= (p+1)/p**;P(阶段 2) **= q**(精确值) | | 层 1 语料库(189 个真实工作流) | 浮动标签比例 **f = 0.3698**;构造覆盖率 **88.2%** | | 校准(OpenSSF/OSV) | npm = 214,497 份报告 (94.2%);**2026 年 2 月→3 月:329 → 1,048 (×3.19)** | | 自动化缓解搜索 | LLM 提议,PRISM 验证 → **仅轮换最优**(得分 -0.05),在 4 轮内收敛 | ## 三层验证 1. **结构忠实度**(`TrivySupplyChain/layer1/`)—— 对真实 GitHub Actions 工作流 语料库进行静态分析,测量所建模构造的出现频率 (14/14 单元测试;浮动标签比例馈入层 3)。 2. **事件重建**(`TrivySupplyChain/`)—— TLA+ 模型 + 10 个 TLC 配置重现了攻击,并证明了哪些缓解措施可以阻断它(可达性、 隔离、精化、残余面)。 3. **预测性校准**(`TrivySupplyChain/layer3/`)—— PRISM MDP/DTMC 计算 概率、预期时间以及多阶段级联,并根据 OpenSSF 恶意软件包数据集和记录在案的 2 月→3 月时间线进行了校准。 ## 仓库布局 ``` TrivySupplyChain/ The model + verification harness TrivySupplyChain.tla Core TLA+ transition system MCTrace.tla, SecureWorkflow.tla, MCRefine.tla cfg_*.cfg 10 TLC configurations (the validation table) tools/tla2tools.jar Bundled TLA+ / TLC 2.19 layer1/ Corpus analyzer (Python) + fixtures + tests layer3/ PRISM models (.prism/.props) + bundled PRISM 4.10.1 asi_evolve/ LLM mitigation-search loop (run_evolve.py) over the verified PRISM oracle + an archived executed run (example_run.json) run-all.ps1 Reproduce all 10 TLC checks env-check.ps1 One-shot environment doctor Trivy-USENIX-paper/ USENIX paper: main.tex (compiles standalone), main.pdf, and the filled-in validation-results .docx Trivy-TeamPCP-Dossier.md Incident dossier — the sourced evidence base (read-only) ``` ## 复现指南 **环境要求:** Windows + JDK(设置 `JAVA_HOME`);Python 3.10+(层 1 和校准); Node.js(仅用于重新生成 Word 文档);Git for Windows(提供 PRISM 原生库所需的 MinGW 运行时 DLL)。TLA+ 工具和 PRISM **已捆绑**在此仓库中。 ``` # 0. 验证 toolchain powershell -File TrivySupplyChain\env-check.ps1 # 1. Layer 2 — 全部 10 项 TLC 检查(可达性、缓解措施、隔离、细化) powershell -File TrivySupplyChain\run-all.ps1 # 2. Layer 1 — 语料库分析(单元测试 + 测量的 floating-tag 比例) powershell -File TrivySupplyChain\layer1\run-layer1.ps1 # 3. Layer 3 — PRISM:概率、多级联、参数化、校准 powershell -File TrivySupplyChain\layer3\run-layer3.ps1 # 4. (可选)ASI-Evolve 缓解策略搜索 — Claude Opus 提出策略, # PRISM 验证每一个。需要 Anthropic SDK + 一个 API key。 pip install -r TrivySupplyChain\asi_evolve\requirements.txt python TrivySupplyChain\asi_evolve\run_evolve.py ``` 层 1–3 是自包含的,无需任何 API 密钥。只有第 4 步的*提议者*是 LLM; 它的 PRISM 预言机(`asi_evolve/evaluate.py`)可独立运行,也是实际对 各项策略进行评分的组件。 `.tla`、`.prism` 和 `.py` 源代码是可移植的;只有运行脚本是 Windows PowerShell。请参阅 `TrivySupplyChain/README.md` 获取手动(跨平台)命令。 ## 论文 `Trivy-USENIX-paper/main.tex` 是采用 USENIX Security 双栏格式的正式文稿。它是 自包含的(标准的 CTAN 宏包),可以在 Overleaf 或任何 TeX 引擎上编译: ``` pdflatex main.tex && pdflatex main.tex # or: tectonic main.tex ``` 编译后的论文是 `main.pdf`;填写好的验证报告(Word)是 `QA -- Validation Results (Filled In).docx` —— 两者均位于 `Trivy-USENIX-paper/` 中。 ## 分支 - **`main`** —— 当前修正后的分析。请从此处构建。 - **`pre-mercor-fix`** —— 在 Mercor→v1 重新标记之前该项目的存档重建(Mercor 的破坏是通过阶段 2 的 LiteLLM 后续跟进发生的,而不是直接的 trivy-action 执行)。仅供参考;请查看该分支上的 `PRE-MERCOR-FIX.md`。 ## 状态与范围 由 **Franklin Hanna** 撰写的研究预印本正在进行中(隶属机构/电子邮件在 `main.tex` 中仍是占位符)。事件 事实取自公开档案(Aqua、GHSA、CVE-2026-33634、Unit 42、Microsoft、 Wiz、ReversingLabs、Endor Labs、OpenSSF/OSV 等)。建模假设及其 局限性在论文的*局限性与有效性威胁*部分有明确说明。 ## 引用 如果您使用了这项工作,请引用归档发布版本(Zenodo DOI [10.5281/zenodo.21387135](https://doi.org/10.5281/zenodo.21387135));机器可读的 元数据位于 [`CITATION.cff`](CITATION.cff) 中。 ``` @software{hanna_2026_trivy_teampcp, author = {Hanna, Franklin}, title = {Formal Analysis of the Trivy / TeamPCP GitHub Actions Supply-Chain Attack (CVE-2026-33634)}, year = {2026}, version = {v1.0.0}, publisher = {Zenodo}, doi = {10.5281/zenodo.21387135}, url = {https://doi.org/10.5281/zenodo.21387135} } ``` ## 许可证 - **代码与形式化方法产物**(分析器、TLA+/PRISM 模型、脚本、生成器)—— [Apache License 2.0](LICENSE)。 - **论文文本及其呈现形式**(`Trivy-USENIX-paper/`)—— [CC BY 4.0](Trivy-USENIX-paper/LICENSE)。 捆绑的第三方工具保留其各自的许可证:PRISM 为 GPL (`TrivySupplyChain/layer3/prism/COPYING.txt`),TLA+ 工具为 MIT。
标签:AI合规, CI/CD安全, DevSecOps, JS文件枚举, Llama, StruQ, 上游代理, 形式化验证, 文档安全, 漏洞分析, 路径探测, 软件开发工具包, 逆向工具