homeofe/supply-chain-guard

GitHub: homeofe/supply-chain-guard

一款开源的多生态软件供应链安全扫描器,用于检测恶意包、凭据泄露及供应链攻击链并生成 SBOM。

Stars: 5 | Forks: 3

# supply-chain-guard 开源的软件供应链安全扫描器,支持 npm、PyPI、Cargo、Go、RubyGems、Composer、NuGet、Docker、Terraform、VS Code 扩展、GitHub Actions 和 GitHub 仓库。可检测恶意软件活动(GlassWorm、Vidar、Shai-Hulud)、虚假 AI 工具仓库、账号接管,以及涵盖所有主要 lockfile 格式(npm、pnpm、yarn、bun)的 180 多个威胁指标。生成包含真实依赖清单的 CycloneDX 1.6 SBOM,验证 SLSA 来源,并将各项发现关联为攻击链事件。 [![npm version](https://img.shields.io/npm/v/supply-chain-guard?logo=npm)](https://www.npmjs.com/package/supply-chain-guard) [![npm downloads](https://img.shields.io/npm/dw/supply-chain-guard?logo=npm&label=weekly%20downloads)](https://www.npmjs.com/package/supply-chain-guard) [![Node.js](https://img.shields.io/badge/Node.js-%3E%3D20-green?logo=node.js)](https://nodejs.org) [![TypeScript](https://img.shields.io/badge/TypeScript-Strict-blue?logo=typescript)](https://www.typescriptlang.org/) [![CI](https://img.shields.io/github/actions/workflow/status/homeofe/supply-chain-guard/ci.yml?branch=main&label=CI&logo=github)](https://github.com/homeofe/supply-chain-guard/actions/workflows/ci.yml) [![AAHP Verify](https://static.pigsec.cn/wp-content/uploads/repos/cas/55/550da9e704d7314b22904fe0b4a1ec655eb5fd970000eb00be6f984fa8f4b5de.svg)](https://github.com/homeofe/supply-chain-guard/actions/workflows/aahp-verify.yml) [![Last commit](https://img.shields.io/github/last-commit/homeofe/supply-chain-guard?logo=github)](https://github.com/homeofe/supply-chain-guard/commits/main) [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) ![supply-chain-guard 扫描恶意 npm 包:风险指标、GlassWorm 事件关联及修复计划](https://static.pigsec.cn/wp-content/uploads/repos/cas/51/51a63b133e2530f61f2d29ad4c3fe3026fd8794e1a09bfa85445c28bc434a66a.gif) ## 目录 - [背景](#background) - [检测内容](#what-it-detects) - [安装](#installation) - [快速开始](#quickstart) - [输出格式](#output-formats) - [CI 退出代码控制](#ci-exit-code-control) - [过滤](#filtering) - [策略配置](#policy-configuration-v44) - [基线差异对比](#baseline-diffing-v44) - [示例输出](#example-output) - [支持的生态系统](#supported-ecosystems) - [工具对比](#how-it-compares) - [GitHub Action](#github-action) - [面向 AI 编程代理 (MCP)](#for-ai-coding-agents-mcp) - [实时威胁订阅源](#live-threat-feed) - [安装守卫](#install-guard) - [添加自定义模式](#adding-custom-patterns) - [架构](#architecture) - [贡献指南](#contributing) - [更新日志](#changelog) ## 背景 若要深入了解 GlassWorm 是如何渗透进软件供应链的,以及本工具背后的检测技术,请阅读此博客文章:[GlassWorm 是如何进入的以及我们是如何将其拒之门外的](https://blog.elvatis.com/how-glassworm-gets-in-and-how-we-locked-it-out/)。 ## 检测内容 ### 恶意软件活动 - GlassWorm 活动特征及 Solana 区块链 C2 - Vidar/GhostSocks 信息窃取程序(2026 年 4 月 Claude Code 泄露活动) - Shai-Hulud 自我复制型 npm 蠕虫 - XZ Utils 后门(CVE-2024-3094)、SolarWinds SUNBURST、Codecov、ua-parser-js、coa/rc - 虚假 AI 工具仓库(Claude Code、Copilot、Cursor、ChatGPT、OpenClaw 诱饵) ### 代码级威胁 - 混淆执行:eval+atob、eval+Buffer.from、模板字面量 eval、动态 `import()` - 不可见 Unicode、RTL 覆盖、SVG 脚本注入、隐写术 - 针对编码 payload 的香农熵分析 - Proxy 处理器陷阱、来自外部源的 WebAssembly ### 供应链攻击 - Install hook 深度分析(窃取机密信息、下载执行链、二进制 blob) - 基于莱文斯坦距离的拼写错误检测,比对 npm 前 100 名包并包含已知安全白名单 - 依赖混淆与命名空间抢注 - 已知恶意版本黑名单(axios、ua-parser-js、coa、rc、event-stream、node-ipc、colors、faker) - 发布异常检测(维护者变更、版本空档、新增脚本) ### 基础设施与 CI/CD - GitHub Actions:未锁定的 actions、机密信息窃取、编码 payload、curl 管道 - Dockerfile:curl 管道、未锁定基础镜像、硬编码机密、SUID 位 - Terraform/IaC:内联脚本、外部模块、硬编码机密 - 包管理器配置(.npmrc、.yarnrc、pip.conf):HTTP 仓库、暴露的 token - Git hooks 与子模块安全 ### 仓库信任信号 - GitHub 仓库元数据分析(账号年龄、刷 Star、单次提交仓库) - 发布产物扫描(.exe、.7z、双重扩展名、LNK 快捷方式、PE magic) - README 诱饵检测(泄露/盗版/诱导性紧急用语) ### 针对 AI 编程代理的提示词注入 (v5.2.19) 检测嵌入在包 README 中的、用于控制 LLM 的 token,这些 token 会针对代替人类开发者阅读文档的下游 AI 编程代理(Claude Code、Cursor、Copilot)。下面的示例 token 在原始 README 中经过了 HTML 转义,因此这些模式不会标记文档本身——它们在任何 Markdown 查看器中都能正常渲染: - `<system-reminder>` / `<system-prompt>` (Anthropic 系列) - `<|im_start|>` / `<|im_end|>` ChatML (OpenAI、Llama、Mistral、Qwen) - `[INST]` / `[/INST]` (Mistral、Llama 指令微调版) - `<|system|>` / `<|user|>` / `<|assistant|>` (Phi、Gemma、Granite、通用角色 token) - 自然语言越狱措辞("ignore previous instructions") ### 凭据检测 - AWS 访问密钥(AKIA/ASIA)、GitHub token(ghp_/gho_)、npm token - SSH 私钥、通用 API 密钥、PEM 私钥 ### Dead-Drop 解析器 / C2 检测 - Steam 社区个人资料、Telegram 频道、Pastebin、GitHub Gists - DNS TXT 记录、DNS-over-HTTPS、动态 WebSocket URL - 已知 C2 域名和 IP(来自 IOC 黑名单) ### 关联引擎 (v4.2) 将各项独立发现链接为事件级别的攻击链: - "GlassWorm 活动"(标记 + eval + 数据窃取) - "Vidar 窃取程序感染"(dead-drop + 浏览器数据窃取 + dropper) - "npm 账号接管"(维护者变更 + install hooks + C2) - "虚假仓库恶意软件"(诱饵 + exe 发布 + 新账号) - 15+ 种带置信度评分的关联规则 ### 信任度评估 (v4.2) 每次扫描进行 4 维度的信任度评分: - 发布者信任度 (40%) / 代码质量 (30%) / 依赖信任度 (20%) / 发布流程 (10%) ## 安装 ``` npm install -g supply-chain-guard ``` 或者直接使用 npx: ``` npx supply-chain-guard scan ./my-project ``` ### pre-commit 将扫描器作为 [pre-commit](https://pre-commit.com) hook 运行(Python 生态团队无需接触 npm 即可获得相同的把关机制)。将以下内容添加到您的 `.pre-commit-config.yaml` 中: ``` repos: - repo: https://github.com/homeofe/supply-chain-guard rev: v5.6.2 hooks: - id: supply-chain-guard ``` 扫描器会将其风险历史记录写入被扫描仓库的 `.scg-history/` 目录中; 当设置了 `--no-history` 时则不会写入,而该 hook 现在正是使用了此参数。对于未使用该标志的普通扫描,请将该文件夹添加到您的 `.gitignore` 中。 此 hook 会在每次提交时扫描仓库根目录,并在发现高危或严重结果时失败。 ### Docker 通过官方多架构镜像(linux/amd64、linux/arm64)在无需 Node 工具链的情况下运行扫描器。该镜像会在每次发布 tag 时发布到 GHCR: ``` docker run --rm -v ${PWD}:/scan ghcr.io/homeofe/supply-chain-guard scan /scan ``` `${PWD}` 适用于 bash、zsh 和 PowerShell;在 cmd.exe 中请改用 `%cd%`。 ## 快速开始 ``` # 扫描本地目录 supply-chain-guard scan ./my-project # 扫描 GitHub repo(包括信任信号分析) supply-chain-guard scan https://github.com/user/repo # 分析 GitHub repo 的信任信号 + 恶意软件 supply-chain-guard repo https://github.com/user/repo # 扫描 npm package(下载但不安装) supply-chain-guard npm suspicious-package-name # 扫描 PyPI package supply-chain-guard pypi suspicious-package # 扫描 VS Code extension supply-chain-guard vscode publisher.extension-name # 从 Open VSX registry 扫描 VS Code extension(VSCodium 等) supply-chain-guard vscode publisher.extension --registry openvsx # 检测 dependency confusion supply-chain-guard confusion ./my-project # 扫描整个 GitHub organization supply-chain-guard org my-github-org # 扫描自某次 commit 以来更改的文件(diff 模式) supply-chain-guard scan ./project --since HEAD~5 # 监控 Solana C2 wallet supply-chain-guard monitor --once ``` ## 输出格式 ``` supply-chain-guard scan ./project # Human-readable text (default) supply-chain-guard scan ./project --format json # JSON (for CI/CD pipelines) supply-chain-guard scan ./project --format html # Standalone HTML report supply-chain-guard scan ./project --format markdown # Markdown (for PR comments) supply-chain-guard scan ./project --format sarif # SARIF 2.1.0 (GitHub Code Scanning) supply-chain-guard scan ./project --format sbom # CycloneDX 1.6 SBOM with real dependency inventory supply-chain-guard scan ./project --sbom-output sbom.json # Write SBOM to file separately supply-chain-guard scan ./project --format badge # Shields.io endpoint JSON supply-chain-guard scan ./project --format gitlab # GitLab Dependency Scanning report (security-report-schemas 15.2.4, see examples/gitlab-ci.yml) ``` ### 徽章 从 CI(gist 或 gh-pages)发布徽章 JSON,然后指向 Shields: 当扫描发现高危/严重问题时会以非零代码退出——这正是 徽章必须更新为红色的时候。在生成步骤中抵消退出代码(或在发布 步骤使用 `if: always()`),以确保糟糕的扫描永远不会让徽章卡在绿色: ``` - name: Generate badge JSON run: supply-chain-guard scan . --format badge > badge.json || true - name: Publish to gist if: always() run: gh api gists/YOUR_GIST_ID -X PATCH -F "files[badge.json][content]=@badge.json" env: GH_TOKEN: ${{ secrets.BADGE_GIST_TOKEN }} ``` ``` ![supply-chain-guard](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/YOUR_USER/YOUR_GIST_ID/raw/badge.json) ``` ## CI 退出代码控制 ``` supply-chain-guard scan ./project --fail-on critical # Fail only on critical supply-chain-guard scan ./project --fail-on high # Fail on high or above supply-chain-guard scan ./project --fail-on info # Fail on any finding ``` ## 过滤 ``` supply-chain-guard scan ./project --min-severity high supply-chain-guard scan ./project --exclude SOLANA_MAINNET,HEX_ARRAY ``` ## 策略配置 (v4.4) 在您的项目根目录中创建 `.supply-chain-guard.yml` 以自定义行为: ``` rules: disable: - HEX_ARRAY - CHARCODE_OBFUSCATION severityOverrides: GHA_UNPINNED_ACTION: medium allowlist: packages: - internal-utils domains: - company.internal githubOrgs: - my-org suppress: - rule: RELEASE_EXE_ARTIFACT reason: Legitimate Windows installer baseline: file: .scg-baseline.json ``` ## 基线差异对比 (v4.4) 仅报告新发现(忽略已知的基线): ``` # 将当前发现保存为 baseline supply-chain-guard scan ./project --save-baseline .scg-baseline.json # 在后续扫描中,仅显示新发现 supply-chain-guard scan ./project --baseline .scg-baseline.json ``` ## 示例输出 ``` ╔══════════════════════════════════════════════════════════════════════════════╗ ║ supply-chain-guard v5.1.0 ║ ╚══════════════════════════════════════════════════════════════════════════════╝ Target ./suspicious-package Type directory · 18 / 18 files scanned Duration 142ms Time 2026-04-07T12:00:00.000Z ┌─────────────────────────────── RISK SCORE ─────────────────────────────────┐ │ │ │ 83 / 100 █████████████████████████████████░░░░░ CRITICAL │ │ │ └──────────────────────────────────────────────────────────────────────────────┘ ┌──────────────────────────── FINDINGS SUMMARY ───────────────────────────────┐ │ CRITICAL 3 ████████████████████████████████ │ │ HIGH 1 ██████████ │ │ MEDIUM 0 ──────────────────────────────── │ │ LOW 0 ──────────────────────────────── │ │ INFO 0 ──────────────────────────────── │ └──────────────────────────────────────────────────────────────────────────────┘ ┌──────────────────────────────── FINDINGS ───────────────────────────────────┐ │ │ │ [CRITICAL] DEAD_DROP_STEAM │ │ Steam Community profile URL used as dead-drop C2 resolver │ │ src/config.js:12 │ │ match https://steamcommunity[.]com/profiles/76561198... │ │ fix Remove external URL resolution; use static configuration │ │ │ │ ············································································· │ │ │ │ [CRITICAL] VIDAR_BROWSER_THEFT │ │ Browser credential file access (infostealer pattern) │ │ src/steal.js:45 │ │ match AppData[...]Google[...]Chrome[...]Login Data │ │ fix Never access browser credential stores │ │ │ │ ············································································· │ │ │ │ [CRITICAL] DROPPER_TEMP_EXEC │ │ Dropper: file written and executed from temp directory │ │ src/loader.js:23 │ │ match saveFile(tmpdir, payload); exe‹c›(tmpPath) │ │ fix Remove dropper logic; audit all exec() call sites │ │ │ └──────────────────────────────────────────────────────────────────────────────┘ ┌─────────────────────────── TRUST BREAKDOWN ─────────────────────────────────┐ │ Publisher ██████░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 20/100 │ │ Code █████████░░░░░░░░░░░░░░░░░░░░░░░░░ 30/100 │ │ Dependencies ████████████████████████████████████ 100/100 │ │ Release ██████████████████████████░░░░░░░░░ 80/100 │ │────────────────────────────────────────────────────────────────────────────│ │ Overall █████████████░░░░░░░░░░░░░░░░░░░░░░ 48/100 │ └──────────────────────────────────────────────────────────────────────────────┘ ┌──────────────────────────── CORRELATED INCIDENTS ───────────────────────────┐ │ │ │ [CRITICAL] Vidar Stealer Infection 95% confidence │ │ Multiple infostealer indicators: dead-drop resolvers for C2, │ │ browser credential theft, and crypto wallet targeting. │ │ Indicators: DEAD_DROP_STEAM, VIDAR_BROWSER_THEFT, DROPPER_TEMP_EXEC │ │ │ └──────────────────────────────────────────────────────────────────────────────┘ ``` ## 支持的生态系统 | 生态系统 | 命令 | 扫描内容 | |-----------|---------|---------------| | npm | `scan`, `npm` | package.json、安装脚本、tarball;lockfile:package-lock.json、pnpm-lock.yaml、yarn.lock (v1 + Berry)、bun.lock | | PyPI | `pypi` | setup.py、setup.cfg、pyproject.toml、install hooks | | Cargo/Rust | `scan` | Cargo.toml、build.rs、proc macros | | Go | `scan` | go.mod、init() 函数、CGo、插件加载 | | RubyGems | `scan` | Gemfile、Gemfile.lock(恶意 gem IOC、http/git 源) | | Composer/PHP | `scan` | composer.json、composer.lock(恶意包 IOC、http 仓库) | | NuGet/.NET | `scan` | packages.lock.json、*.csproj、nuget.config(恶意包 IOC、http feed) | | Docker | `scan` | Dockerfile、docker-compose.yml、Containerfile | | Terraform | `scan` | .tf、.hcl 文件(provisioner、模块、机密信息) | | VS Code | `vscode` | .vsix 文件、activation events、危险 API | | GitHub Actions | `scan` | .github/workflows/*.yml | | GitHub 仓库 | `repo` | 信任信号、发布版本、README 诱饵 | | Solana | `monitor` | C2 钱包 memo 交易 | ## 工具对比 supply-chain-guard 是专注于恶意软件/行为/活动 IOC 的防护层:它在完全本地化的环境下,静态扫描您实际安装的内容(node_modules、包、Docker 镜像、VS Code 扩展、Actions 工作流、IaC),以发现恶意行为和已知的活动指标。它不执行 CVE 查找:请将其与 osv-scanner 或 npm audit 搭配使用以检测已知漏洞。下述大多数工具衡量的是不同的维度,因此它们是互补的,而非竞争关系。 | 工具 | 侧重点 | 恶意软件/行为检测 | 已知 CVE 查找 | 生态系统 | 开源 | 需要账号 | |---|---|---|---|---|---|---| | **supply-chain-guard** | 已安装产物中的恶意软件活动、IOC、行为启发式检测;SBOM + SLSA 验证 | 是:180+ 静态启发式检测以及活动 IOC 匹配,完全本地/离线 | 否 | npm(包括 pnpm/yarn/bun lockfile)、PyPI、Cargo、Go、RubyGems、Composer、NuGet、Docker、Terraform/IaC、VS Code 扩展、GitHub Actions、GitHub 仓库 | 是 (Apache-2.0) | 否 | | [OSV-Scanner](https://github.com/google/osv-scanner) | 依赖清单中的已知漏洞(查询 OSV.dev 数据库) | 仅通过 OSV MAL- 条目识别已知恶意版本;无行为或 IOC 分析 | 是(支持离线模式) | 11+ 生态系统,19+ lockfile 格式,容器镜像,SBOM 输入 | 是 (Apache-2.0) | 否 | | [Socket](https://socket.dev) | 对整个包仓库进行主动的行为分析 | 是:在安全公告发布之前,针对整个仓库检测 70+ 种风险类型;引擎为闭源且在云端运行 | | npm、PyPI、Maven、Go、Cargo、RubyGems、NuGet 等;Actions 工作流 | 仅 CLI (MIT);检测引擎为专有 | 是(Firewall Free 除外) | | [GuardDog](https://github.com/DataDog/guarddog) | 对单个包进行启发式 0-10 风险评分(YARA + 注册表元数据) | 是:仅使用启发式检测,无已知恶意软件或活动 IOC 数据库;支持沙箱扫描 | 否 | npm、PyPI、Go、RubyGems、GitHub Actions、VS Code 扩展 | 是 (Apache-2.0) | 否 | | [OpenSSF Scorecard](https://github.com/ossf/scorecard) | 上游仓库的安全实践评分(分支保护、锁定、审查等) | 否:评估项目的安全卫生状况,从不分析已发布的包内容 | 仅针对被评估的仓库本身(OSV 检查) | GitHub 仓库,部分 GitLab | 是 (Apache-2.0) | 否(自运行 CLI 需 GitHub token) | | npm audit | 为您的 npm 依赖树查找安全公告,内置于 npm | 在安全公告发布后识别已知恶意版本;无行为或 IOC 分析;`audit signatures` 用于验证来源 | 是(GitHub 公告数据库) | 仅 npm | 是(CLI;查询属于注册表端服务) | 否 | 客观的说明:Socket 面向整个仓库的行为检测比任何本地扫描器所能做到的都要深入,其代价是使用闭源引擎和云端分析。Scorecard 在其所在维度(上游安全卫生预测)上是行业标准,supply-chain-guard 并不能替代它。OSV-Scanner 和 npm audit 确实会标记已知的恶意包:它们之间的差距在于公告发布的延迟,而不是能力的缺失。 ### 搭配使用推荐 - **CI 组合拳**:运行 `osv-scanner --lockfile=package-lock.json` 检查已知的 CVE 和 MAL- 条目,然后运行 `supply-chain-guard scan .` 以检测已安装依赖树中的行为和活动 IOC 威胁。两个维度,一个任务,且均受退出代码控制。 - **零安装 npm 基线**:`npm audit --audit-level=high` 加上 `npx supply-chain-guard scan .` 即可涵盖公告已知的漏洞和未上报的恶意软件,而无需添加任何额外的依赖项。 - **安装前的可疑包审查**:在将其安装到您的计算机之前,先运行 `guarddog npm scan ` 获取独立的启发式评分,并通过 `supply-chain-guard npm ` 进行活动 IOC 和 install hook 分析。 ## GitHub Action ``` name: Supply Chain Security on: [push, pull_request] jobs: scan: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: homeofe/supply-chain-guard@v5 with: fail-on: critical comment-on-pr: true ``` ### Action 输入参数 | 输入 | 描述 | 默认值 | |-------|-------------|---------| | `path` | 要扫描的路径 | `.` | | `format` | 输出格式 (text/json/markdown/html/sarif/sbom) | `markdown` | | `min-severity` | 报告的最低严重级别 | `low` | | `exclude-rules` | 要排除的规则 ID,逗号分隔 | | | `fail-on` | 在此严重级别或以上时使检查失败 | `critical` | | `comment-on-pr` | 将发现结果作为 PR 评论发布 | `true` | ## 面向 AI 编程代理 (MCP) supply-chain-guard 既是用于扫描代理生态系统的工具,也是为该生态系统服务的工具。 **扫描代理攻击面**(在每次 `scan` 中自动执行): - MCP 服务器配置:`.mcp.json`、`.cursor/mcp.json`、`.vscode/mcp.json`、 `claude_desktop_config.json` - 恶意服务器包、C2 endpoint、 明文 HTTP 服务器、转发至远程服务器的机密、工具描述中的 提示词注入(MCP_ 规则) - 代理技能和规则文件:`.claude/skills/**/SKILL.md`、`.claude/settings.json` hooks、`.cursorrules`、`.github/copilot-instructions.md`、`AGENTS.md`、`CLAUDE.md` - 注入的控制 token、不可见的 Unicode 指令通道、下载执行和 凭据窃取指令、危险的 hook 命令(SKILL_/AGENT_ 规则) **内置 MCP 服务器** - 让您的 AI 代理在安装包之前对其进行审查: ``` npm install -g supply-chain-guard claude mcp add supply-chain-guard supply-chain-guard mcp ``` 此形式适用于所有 shell(bash、zsh、PowerShell、cmd),并避免了首次 连接时的 npx 冷启动超时。在 bash/zsh 上,您可以改用单行命令 `claude mcp add supply-chain-guard -- npx -y supply-chain-guard mcp`; 请注意,PowerShell 会吞掉单独的 `--`,因此在 Windows 上 推荐使用上述全局安装的形式。 它通过 stdio 暴露了三个工具:`ioc_lookup`(针对 npm/PyPI/RubyGems/Composer/NuGet 的 离线 IOC 和已知恶意版本检查)、`scan_directory` 和 `scan_npm_package`。 适用于 Claude Code、Claude Desktop 和 Cursor 的客户端配置代码片段请见:[docs/mcp.md](docs/mcp.md)。 ## 实时威胁订阅源 内置的 IOC 订阅源随每次发布一同提供,并且相同的数据会在每次 推送到 main 分支时作为 [feed.json](feed.json) 发布——因此防护能在 活动被收录的当天即刻生效,而无需等待下一次发布: ``` supply-chain-guard feed stats # entry counts by type and severity supply-chain-guard feed refresh # pull the latest published feed into the local cache ``` 在接下来的 24 小时内,刷新后的订阅源会自动合并到每次扫描中。 ## 安装守卫 在包管理器运行其生命周期脚本之前拦截已知的恶意包—— 这是唯一一个完整黑名单可在 git 历史记录中审查的安装拦截器, 完全离线,无需账号: ``` supply-chain-guard guard npm install lodash # clean: npm runs normally supply-chain-guard guard pnpm add axios@1.14.1 # known-bad: blocked, exit 2 ``` 支持 npm、pnpm、yarn 和 bun。守卫标志应放在管理器名称之前: `--dry-run` 用于检查命令而不实际调用管理器,`--force` 则无视发现的问题继续执行(并伴有明显的警告)。管理器名称 之后的所有内容均原样传递给管理器。 所有检查均针对内置的 IOC 订阅源(如有 `feed refresh` 缓存则包含在内)、已知恶意版本黑名单和拼写错误 启发式检测进行离线执行——无需网络调用,无遥测。 限制:由于无法在离线状态下解析版本范围和标签 (`^1.2.3`、`latest`),因此版本锁定的 IOC 仅在精确匹配时触发。仅包含名称的 IOC (整个恶意包)则在任何版本下都会触发。请在安装后 使用 `scan` 获取针对整棵依赖树、行为级别的全面覆盖。 ## 添加自定义模式 编辑 `src/patterns.ts` 以添加新的检测规则: ``` { name: "my-custom-pattern", pattern: "regex-pattern-here", description: "What this detects", severity: "high", rule: "MY_CUSTOM_RULE", } ``` ## 架构 ``` scan() -> collectFiles() -> per-file analysis -> Pattern matching (170+ rules across 12 categories) -> Entropy analysis (Shannon entropy for encoded payloads) -> IOC blocklist check (known C2 domains, IPs, hashes) -> Install hook deep analysis (secret harvesting, download-exec) -> Dependency risk analysis (Levenshtein typosquatting) -> Sub-scanners (lockfile, GitHub Actions, Docker, Cargo, Go, IaC) -> SLSA verifier (provenance level 0-3, sigstore/cosign, attestations) -> SBOM generator (reads package-lock.json → real CycloneDX 1.6 components) -> GitHub trust signal analysis (account age, stars, releases) -> Correlation engine (links findings into incidents) -> Trust breakdown (4-dimension scoring) -> Report generation (text/json/html/markdown/sarif/sbom) ``` ## 贡献指南 请参阅 [CONTRIBUTING.md](CONTRIBUTING.md) 获取指南。最有影响力的贡献是为新出现的威胁添加新的检测模式。 ## 更新日志 完整的发布历史请见 [CHANGELOG.md](CHANGELOG.md)。 ## 许可证 [Apache-2.0](LICENSE) - 版权所有 2026 Elvatis - Emre Kohler
标签:GraphQL安全矩阵, MITM代理, SBOM, TypeScript, WebSocket, 依赖分析, 安全扫描器, 安全插件, 文档安全, 硬件无关, 自动化攻击, 自定义DNS解析器, 请求拦截, 配置审计