thresher-sh/thresher

GitHub: thresher-sh/thresher

在隔离临时虚拟机中结合 22 款确定性扫描器与 8 个 AI 分析角色,对开源项目进行供应链安全深度审计并生成放行/拒绝报告。

Stars: 3 | Forks: 0

``` ___/| ___________/ | __________/ | ___/ _____ | ___/ \___/ \ | ___/ \ ______/ ___/ _ \______/ / __/ \__ ___----~ | ,__-~ \--~ | / _, T H R E S H E R \___/ __/ | / Separate the safe |_/ from the dangerous. ~ ``` 供应链安全扫描器。在加固的临时虚拟机(VM)中运行 22 个确定性扫描器及 8 个 AI 分析师角色。生成放行/拒绝报告。 ## 安装 ``` pip install -e . # 导入预构建 VM 镜像(快速 — 约30秒) thresher import latest # 或者自行构建(约10分钟) thresher build ``` ``` thresher scan https://github.com/owner/repo ``` ## 功能说明 ``` Host (macOS) └── Lima VM (ephemeral, firewalled, zero-sudo) ├── Hardened git clone (safe_clone.sh) ├── AI pre-dep discovery (hidden dependency sources) ├── Docker container (dependency resolution) ├── 22 deterministic scanners (parallel) ├── 8 AI analyst agents + adversarial verification └── Report synthesis ``` | 步骤 | 具体操作 | |------|-------------| | **隔离** | 临时 VM。3 层网络加固。无挂载,无开放端口。 | | **克隆** | 4 阶段加固克隆。中和所有已知的 git 执行攻击向量。 | | **发现** | AI 查找隐藏依赖(Makefile 中的 git clone,Dockerfile 中的 curl,子模块)。 | | **解析** | 单个 Docker 容器。仅下载源码。不运行安装脚本。 | | **扫描** | 22 个扫描器:SCA、SAST、行为、熵值、安装钩子、恶意软件、许可证。 | | **分析** | 8 个 AI 角色并行调查。对抗性验证减少误报。 | | **报告** | EPSS/KEV 数据充实。提供放行 / 警告 / 请勿使用 建议。 | | **清理** | VM 被销毁。无数据残留。 | 在生成最终报告副本之前,所有扫描数据均保留在 VM 内部。 ## 8 个分析师角色 每个角色都作为 Claude Code 无头代理在 VM 内运行,并配备专用工具。 | # | 角色 | 核心问题 | |---|---------|--------------| | 1 | **偏执狂** | 这段代码是恶意的吗? | | 2 | **行为主义者** | 是否存在未报告的漏洞? | | 3 | **调查员** | 这段代码可信吗? | | 4 | **渗透测试员:漏洞** | 我们将继承哪些漏洞? | | 5 | **渗透测试员:应用面** | 用户会怎样入侵? | | 6 | **渗透测试员:内存** | 这会在运行时被破坏吗? | | 7 | **基础设施审计员** | 部署它安全吗? | | 8 | **捕影者** | 这段代码隐藏了什么? | ## 22 个扫描器 | 工具 | 检测目标 | |------|-----------------| | Syft | SBOM 生成(为 Grype 提供数据) | | Grype | 依赖项中已知的 CVE | | OSV-Scanner | CVE + 恶意软件包公告 (MAL-*) | | Trivy | 容器/文件系统 CVE | | govulncheck | Go 漏洞(含调用链可达性分析) | | cargo-audit | 来自 RustSec 的 Rust 漏洞 | | Semgrep | 代码漏洞和危险模式 | | Semgrep (supply-chain) | 针对依赖源的自定义规则:数据外泄、下载并执行、编码载荷 | | Bandit | Python 安全反模式 | | GuardDog | 清单文件中的可疑行为 | | GuardDog (deps) | 针对实际依赖源码的行为启发式分析 | | Install Hooks | 包含网络/Shell 活动的 preinstall/postinstall 脚本 | | Entropy | 高熵字符串,base64,十六进制转义,JS 混淆器模式,对解码内容的 eval 调用 | | deps.dev | OpenSSF 记分卡,误植域名,版本历史异常 | | Registry Metadata | 维护者变更,tarball 大小突增,安装脚本的引入 | | Gitleaks | 硬编码的 API 密钥、令牌、凭证 | | Checkov | Dockerfile/Terraform/K8s 配置缺陷 | | Hadolint | Dockerfile 最佳实践 | | YARA | 已知恶意软件特征 | | ClamAV | 病毒和恶意软件特征 | | capa | 编译二进制文件中的能力 | | ScanCode | 基于文件内容的许可证合规性 | ## 用法 ``` # 使用 AI 分析进行全面扫描 thresher scan https://github.com/owner/repo # 仅使用 Deterministic scanners(无需 API key) thresher scan https://github.com/owner/repo --skip-ai # 自定义 VM 资源 thresher scan https://github.com/owner/repo --cpus 8 --memory 16 --disk 100 # 下载高风险隐藏依赖(binaries, tarballs) thresher scan https://github.com/owner/repo --high-risk-dep # 使用 tmux split-pane UI(左侧扫描,右侧日志) thresher scan https://github.com/owner/repo --tmux ``` 使用 [uv](https://docs.astral.sh/uv/): ``` uv run thresher scan https://github.com/owner/repo --skip-ai ``` ### 命令 | 命令 | 功能 | |---------|-------------| | `thresher scan ` | 扫描代码仓库 | | `thresher build` | 构建/重建缓存的基础 VM 镜像 | | `thresher stop` | 停止所有 VM 和 tmux 会话 | | `thresher list` | 列出 Releases 中可用的预构建 VM 镜像 | | `thresher import ` | 导入预构建的 VM 镜像(跳过构建步骤) | | `thresher export` | 导出你的基础 VM 镜像以进行分发 | ### 标志 | 标志 | 默认值 | 说明 | |------|---------|-------------| | `--depth N` | 2 | 传递依赖深度 | | `--skip-ai` | off | 仅运行确定性扫描器 | | `--high-risk-dep` | off | 下载高风险的隐藏依赖 | | `--verbose` | off | 详细的工具输出 | | `--output DIR` | `./thresher-reports` | 报告输出目录 | | `--cpus N` | 4 | VM CPU 数量 | | `--memory N` | 8 | VM 内存 | | `--disk N` | 50 | VM 磁盘空间 | | `--tmux` | off | Tmux 分屏界面 | ### 配置 将 `thresher.toml.example` 复制为 `thresher.toml`。命令行标志会覆盖配置文件中的值。 ``` model = "sonnet" depth = 2 output_dir = "./thresher-reports" tmux = false [vm] cpus = 4 memory = 8 disk = 50 [limits] max_json_size_mb = 10 max_file_size_mb = 50 max_copy_size_mb = 500 max_stdout_mb = 50 ``` ## 输出 ``` ~~~~~~~~~~~_/|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ FINDINGS P0 CRIT HIGH MED LOW 0 2 5 12 23 Report: ./thresher-reports/example-repo-20260401/ ~~~~~~~~~~~_/|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ``` 输出目录中的报告: | 文件 | 内容 | |------|----------| | `executive-summary.md` | 放行 / 警告 / 请勿使用 建议 | | `detailed-report.md` | 按优先级排列的所有发现及修复建议 | | `findings.json` | 机器可读格式(CVSS、EPSS、KEV、AI 评分) | | `sbom.json` | CycloneDX SBOM | | `scan-results/` | 原始扫描器输出 | ### 优先级 | 优先级 | 标准 | |----------|----------| | **P0** | CISA KEV(正在被积极利用),或 AI 确认的数据外泄/后门 | | **严重** | CVSS >= 9.0,EPSS > 90th 百分位,或 AI 风险 9-10 | | **高危** | CVSS 7.0-8.9,EPSS > 75th 百分位,或 AI 风险 7-8 | | **中危** | CVSS 4.0-6.9,EPSS > 50th 百分位,或 AI 风险 4-6 | | **低危** | 其他所有情况 | P0 或 严重 = **请勿使用**。仅 高危 = **警告**。中危 及以下 = **放行**。 ## 安全模型 | 层级 | 功能 | |-------|-------------| | **VM 隔离** | Lima `vz` 后端,`--plain`,无挂载,无端口转发 | | **零 sudo** | 扫描用户只能运行一个硬编码的 Docker 包装器 | | **3 层网络** | iptables 白名单 + hostResolver DNS + 网关固定 | | **加固克隆** | 4 阶段 safe_clone.sh(中和所有 git 执行攻击向量) | | **依赖沙箱** | `--network=none`,`--read-only`,`--cap-drop=ALL` | | **仅源码** | `pip download --no-binary`,`npm pack`,`cargo vendor` | | **宿主机边界** | 暂存目录,移除软链接,路径穿越拒绝,大小限制 | | **API 密钥** | tmpfs 读取即删,绝不存入 Shell 环境变量 | | **临时性** | 每次扫描后 VM 均被销毁 | ## 环境要求 - 搭载 Apple Silicon 的 macOS - [Lima](https://lima-vm.io) (`brew install lima`) - Python 3.11+ - `ANTHROPIC_API_KEY` 或 `claude login`(除非使用 `--skip-ai`) - [tmux](https://github.com/tmux/tmux) (`brew install tmux`) -- 可选 VM 大约需要 30 GB 磁盘空间。可通过 `--disk` 或 `thresher.toml` 进行配置。 ## 许可证 MIT
标签:AI安全分析, AMSI绕过, Docker容器安全, EPSS, GitHub安全, Go/No-Go报告, KEV, SAST, Thresher, 临时虚拟机, 威胁检测, 安全合规, 安全沙箱, 开源软件安全, 恶意软件扫描, 盲注攻击, 网络代理, 网络信息收集, 网络隔离, 自定义DNS解析器, 误报率降低, 请求拦截, 逆向工具