camilolb/warden

GitHub: camilolb/warden

一个本地运行的 Node.js 供应链安全 CLI 工具,解决依赖中的恶意包与合规风险。

Stars: 58 | Forks: 1

**你的依赖项守护者** [![npm version](https://img.shields.io/npm/v/warden-cli.svg?style=flat-square)](https://www.npmjs.com/package/warden-cli) [![Node.js](https://img.shields.io/badge/node-%3E%3D18.0.0-brightgreen?style=flat-square)](https://nodejs.org) [![TypeScript](https://img.shields.io/badge/TypeScript-5.x-blue?style=flat-square)](https://www.typescriptlang.org) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=flat-square)](https://opensource.org/licenses/MIT) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](docs/en/contributing.md) _一个面向 Node.js 开发者的安全 CLI 工具。扫描恶意包、检测山寨包、监控外联连接、强制执行许可证合规性并审计你的供应链 —— 100% 本地运行,数据永不离开你的机器。_ [安装指南](#installation) | [命令列表](#commands) | [检测功能](#detection) | [策略配置 (.wardenrc)](#policy) | [文档](#documentation) | [路线图](#roadmap) **[English docs](docs/en/README.md)** | **[Documentacion en espanol](docs/es/README.md)** ## 为什么选择 warden? npm 生态系统中供应链攻击问题日益严重: - **山寨包** — 名称与流行包相似(如 `lodashs`、`expres`) - **安装后脚本** — 运行 `npm install` 时立即执行任意代码 - **凭证外泄** — 读取 `process.env` 并将令牌发送到外部服务器 - **代码混淆** — `eval()`、`Function()`、十六进制编码载荷隐藏在依赖项中 - **维护者账号被盗** — 合法包被劫持 `warden` 通过静态分析、运行时监控、许可证合规性和可强制执行策略为你提供可见性与控制权 —— 全部在本地运行。 ![ezgif-6b34a4c635f7349f](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/ee49475876072605.gif) ## 安装 ``` npm install -g warden-cli ``` **要求:** Node.js >= 18,npm >= 8 ``` warden --version # 0.2.0 warden doctor # health check + security score ``` ## 命令 | 命令 | 描述 | |------|------| | **`warden check [path]`** | 预安装门控 — 若检测到危险版本则阻止 `npm install` | | **`warden scan [path]`** | 对 node_modules 进行静态分析 — 包含 11 种检测类别 | | **`warden audit [path]`** | 可读且分组输出的 npm audit | | **`warden fix [path]`** | 应用漏洞修复(默认为干运行) | | **`warden monitor`** | 实时外联连接监控 | | **`warden config`** | 跨 Node 版本管理 npm 安全设置 | | **`warden update [path]`** | 带有备份功能的交互式依赖更新器 | | **`warden license [path]`** | 允许/拒绝列表驱动的许可证合规扫描器 | | **`warden doctor`** | 环境健康检查并给出安全评分(0-100) | | **`warden report [path]`** | 生成 JSON/Markdown 格式安全报告 | | **`warden versions`** | 管理已知危险包版本列表 | ### warden check [path] 预安装门控。读取 `package.json` 与 `package-lock.json`,若发现危险版本则阻止安装。可将其添加到 `preinstall` 脚本以实现自动化: ``` { "scripts": { "preinstall": "warden check" } } ``` ``` warden check # check current directory warden check ./my-project ``` ### warden scan [path] 路径为可选参数,默认为当前目录。 ``` warden scan # scan current directory warden scan ./my-project warden scan ./my-project --only-dangerous warden scan ./my-project --output json > report.json ``` **选项:** `--only-dangerous` `--verbose` `--output json` ### warden audit [path] ``` warden audit ./my-project --level high ``` **选项:** `--level ` ### warden fix [path] ``` warden fix ./my-project # dry-run (preview) warden fix ./my-project --apply # apply safe fixes warden fix ./my-project --apply --force # include breaking changes ``` ### warden monitor ``` warden monitor --interval 2 --alert warden monitor --pid 9832 ``` ### warden license [path] ``` warden license ./my-project warden license ./my-project --deny GPL-3.0,AGPL-3.0 warden license ./my-project --allow MIT,ISC,Apache-2.0 --fail-on-unknown warden license ./my-project --output json ``` ### warden update [path] ``` warden update ./my-project --patch-only ``` ### warden doctor ``` warden doctor ``` ### warden versions ``` warden versions # list all known dangerous versions warden versions add event-stream@3.3.6 --reason "..." # add to your local list warden versions add pkg@1.0.0 --reason "..." --source "url" --severity high warden versions remove event-stream@3.3.6 # remove from your local list ``` ### warden report [path] ``` warden report . --format markdown --out security-report.md ``` ## 检测 Warden 会跨 **12 种检测类别** 扫描 `node_modules` 中的每个包: | 类别 | 检测内容 | 严重等级 | |------|----------|----------| | **危险版本** | 与 63 个已知恶意 `name@version` 条目精确匹配 | 高 | | **山寨包** | 基于 Levenshtein 距离的名称相似性检测 | 高 | | **代码混淆** | `eval()`、`new Function()`、XOR 加密、`Buffer.from('base64')`、十六进制/Base64 载荷、字符串反转、动态 `require()` | 高 | | **反取证** | 自删除(`unlinkSync(__filename)`)、篡改证据(写入自身 `package.json`)、文件替换 | 高 | | **生命周期脚本** | `preinstall`、`postinstall`、`prepare` 存在于 package.json | 高 | | **系统执行** | `exec()`、`spawn()`、`child_process`、`shelljs`、`execa` | 高 | | **文件系统访问** | 读写 `.ssh`、`.env`、`.aws/credentials`、`/etc/passwd` | 高 | | **环境变量外泄** | `process.env.TOKEN`、`SECRET`、`AWS_*`、`GITHUB_TOKEN` | 高 | | **加密操作** | `crypto.createCipher()` 等可能表示勒索软件的加密行为 | 中 | | **网络调用** | `fetch()`、`http.request()`、`WebSocket`、`axios`、`got` | 中 | | **原生二进制文件** | `.node`、`.so`、`.dll`、`.exe` 文件(不可审计的代码) | 中 | | **Git 依赖** | `git+https://`、`github:` — 绕过 npm 注册表检查 | 中 | ### 风险分级 | 等级 | 条件 | |------|------| | **DANGEROUS** | 已知危险版本;或存在山寨包;或反取证 + 混淆/执行/生命周期;或混淆 + 网络;或执行 + 网络/环境;或生命周期 + 执行/混淆/网络;或文件系统 + 执行;或加密 + 网络 | | **SUSPICIOUS** | 任意单一风险信号 | | **CLEAN** | 无检测结果 | ## 策略 在项目根目录创建 `.wardenrc` 文件以强制执行安全策略: ``` { "scan": { "ignorePackages": ["esbuild", "rollup"], "failOnRisk": "DANGEROUS", "maxSuspicious": 20, "blockDangerousVersions": true }, "audit": { "failOnSeverity": "high" }, "license": { "deny": ["GPL-3.0", "AGPL-3.0", "SSPL-1.0"], "allow": ["MIT", "ISC", "Apache-2.0", "BSD-2-Clause", "BSD-3-Clause"], "failOnUnknown": true }, "policy": { "bannedPackages": ["request", "colors"] } } ``` ### 退出码 | 退出码 | 含义 | |--------|------| | `0` | 成功 | | `1` | 策略违规(禁止包或可疑数量超限) | | `2` | 发现 DANGEROUS 包 | | `3` | 漏洞阈值超出 | | `4` | 许可证违规 | | `99` | 错误 | ## CI/CD 集成 ``` # GitHub Actions - run: npm install -g warden-cli - run: warden scan . - run: warden audit . --level high - run: warden license . - run: warden report . --format markdown --out security-report.md ``` ## 数据文件 检测数据存储在可编辑的 JSON 文件中,无需修改代码即可贡献: | 文件 | 用途 | 贡献方式 | |------|------|----------| | `src/data/popular-packages.json` | 山寨包检测用(150+ 包名) | 在数组中添加包名 | | `src/data/licenses.json` | SPDX 许可证分类 | 在对应分类中添加标识符 | | `src/data/dangerous-versions.json` | 63 个已知恶意 `name@version` 条目 | 添加条目或使用 `warden versions add` | 用户自定义条目保存在 `~/.warden/dangerous-versions.json`,运行时与内置列表合并。已知事件包括:event-stream (2018)、ua-parser-js (2021)、node-ipc (202)、Shai-Hulud 攻击(2025年9月,40+ 包)、Axios RAT 攻击(2026年3月)。 ## 架构 ``` src/ ├── index.ts # CLI entry point ├── data/ # Editable JSON (popular packages, licenses) ├── types/ # Domain types (as const enums, zero any) ├── constants/ # Detection patterns, thresholds, features ├── services/ # Business logic (no CLI knowledge) │ ├── AstAnalyzer.ts PackageScanner.ts RiskCalculator.ts │ ├── NpmrcManager.ts AuditRunner.ts NetworkMonitor.ts │ ├── DependencyAnalyzer.ts PolicyLoader.ts LicenseScanner.ts │ ├── TyposquatDetector.ts DangerousVersionsChecker.ts ├── commands/ # Thin CLI handlers (10 commands) └── utils/ # display, prompt, fs helpers ``` ## 技术栈 | 依赖 | 用途 | |------|------| | [acorn](https://github.com/acornjs/acorn) | JavaScript AST 解析器 | | [commander](https://github.com/tj/commander.js) | CLI 框架 | | [chalk](https://github.com/chalk/chalk) | 终端颜色 | | [ora](https://github.com/sindresorhus/ora) | 加载动画 | | [cli-table3](https://github.com/cli-table/cli-table3) | 表格输出 | **除上述五项外零运行时依赖。无 API 调用,无遥测。** ## 安全保障 - **100% 本地** — 数据永不离开你的机器 - **无需 root** — `lsof`/`ss` 可在普通用户下运行 - **只读默认** — 扫描、审计、doctor、许可证、报告均不修改文件 - **显式确认** — 破坏性操作(修复、配置禁用)需确认 - **自动备份** — 文件修改前自动备份(修复、更新) ## 文档 | 语言 | 链接 | |------|------| | English | [docs/en/](docs/en/README.md) | | Español | [docs/es/](docs/es/README.md) | 包含:快速入门、命令参考、检测模式、策略配置、架构、CI/CD 集成与贡献指南。 ## 路线图 - [ ] 单元测试套件(vitest) - [ ] `warden sbom` — 软件物料清单(支持 CycloneDX/SPDX) - [ ] `warden diff` — 比较两个快照的安全配置 - [ ] GitHub Code Scanning 的 SARIF 输出 - [ ] Windows 支持 `warden monitor` - [ ] GitHub Actions 可复用动作 - [ ] VS Code 扩展 - [ ] 供应链风险评分(包年龄、维护者数量、下载趋势) ## 贡献 欢迎贡献!从以下开始: - **添加检测模式** — 编辑 `src/constants/patterns.ts` - **添加流行包** — 编辑 `src/data/popular-packages.json` - **添加许可证标识符** — 编辑 `src/data/licenses.json` - **报告危险版本** — 编辑 `src/data/dangerous-versions.json` 或运行 `warden versions add` - **编写测试** — `RiskCalculator.ts` 和 `TyposquatDetector.ts` 为纯函数,适合单元测试 ## 许可证 MIT
为 Node.js 社区构建。如果 warden 帮你发现问题,不妨给它一颗星。
标签:MITM代理, Node.js >= 18, Node.js安全, Python库, SEO: 供应链安全, SEO: 依赖审计, SEO: 安全扫描, TypeScript, 云安全监控, 依赖审计, 外联监控, 威胁情报, 安全CLI, 安全插件, 开发者工具, 恶意包扫描, 本地化安全工具, 类型劫持检测, 自动化攻击, 许可证合规, 运行时监控, 静态分析