DevShedLabs/DevScan

GitHub: DevShedLabs/DevScan

一款开发者环境安全扫描器,用于检测运行时、发现已知漏洞、扫描暴露的密钥,并管理依赖项健康状态。

Stars: 3 | Forks: 1

# DevScan ![版本](https://img.shields.io/github/v/tag/DevShedLabs/devscan?label=version&sort=semver) ![许可证](https://img.shields.io/github/license/DevShedLabs/devscan) ![Go](https://img.shields.io/badge/built%20with-Go-00ADD8) 一款开发者环境安全与健康扫描器。它能够检测 runtime,检查已安装的 package,并揭示已知的漏洞和过时的依赖项——涵盖你的全局环境或特定项目。 使用 Go 构建。专为可脚本化、对 CI 友好和高度可扩展而设计。 ## 安装说明 ``` # 最新 release go install github.com/DevShedLabs/devscan@latest # 特定版本 go install github.com/DevShedLabs/devscan@v0.1.4 ``` 确保 `~/go/bin` 包含在你的 `$PATH` 中。如果尚未包含,请将以下内容添加到你的 shell 配置文件(`~/.zshrc`、`~/.bashrc` 等)中: ``` export PATH="$HOME/go/bin:$PATH" ``` 然后重新加载你的 shell(`source ~/.zshrc`)或打开一个新的终端。 安装完成后,使用以下命令保持 devscan 为最新版本: ``` devscan update ``` 或者从源码构建: ``` git clone https://github.com/DevShedLabs/devscan cd devscan go build -o devscan . ``` ## 命令 | 命令 | 描述 | |---|---| | `devscan doctor` | 全面扫描:runtime、package、漏洞、过时的依赖项 | | `devscan audit` | 仅扫描漏洞 | | `devscan outdated` | 仅扫描版本漂移 | | `devscan list` | 已检测到的 runtime 和 package 清单 | | `devscan locate` | 每个存在漏洞的 package 的文件系统路径 | | `devscan scan` | 用于管道传递的原始 JSON 扫描输出 | | `devscan fix` | 建议的修复命令 | | `devscan report` | 导出完整报告,支持 Markdown、HTML 或 JSON 格式 | | `devscan keyscan` | 扫描文件中暴露的 secret、API key 和 token | | `devscan osv` | 按包名、ID 或关键字搜索 OSV 安全公告 | | `devscan compile` | 将黑名单资源编译为单一索引 | | `devscan update-db` | 获取最新黑名单数据库并重新编译 | | `devscan intercept` | 管理 package manager shim 以实现实时安装保护 | | `devscan install-skill` | 将 Claude Code AI skill 安装到 `~/.claude/skills/` 中 | | `devscan update` | 将 devscan 更新至最新发布版本 | ## 用法 默认情况下,所有命令都会扫描当前目录。使用 `--global` 可扫描整台机器。 ``` # 获取已安装的版本 devscan --version # 当前项目的完整健康报告 devscan doctor # 审计当前项目的漏洞 devscan audit # 扫描整个机器(全局 packages) devscan audit --global # 筛选高危及以上级别 devscan audit --severity high # 显示 vulnerable packages 的确切安装位置 devscan locate # 扫描特定路径 devscan doctor --path ./my-app # 扫描项目及最多 2 层深度的所有子项目 devscan doctor --path ./my-app --depth 2 # 机器可读输出 devscan doctor --format json # CI: 如果发现 critical vulns 则非零退出 devscan audit --severity critical ``` ## 报告 生成可共享的报告,支持 Markdown、HTML 或 JSON 格式: ``` # 格式由输出文件扩展名推断 devscan report --output report.html devscan report --output report.md devscan report --output scan.json # 或显式指定格式(stdout) devscan report --html devscan report --md devscan report --json # 限定到某个路径 devscan report --output report.html --path ./my-app # 遍历子项目 devscan report --output report.html --path ./my-app --depth 2 # 干净的公开报告(移除内部路径和 package inventory) devscan report --output security-report.md --public ``` 报告内容包括: - 系统信息:OS、版本、芯片、架构 - 显示严重性计数和扫描持续时间的摘要卡片 - runtime 版本及其过时状态 - 按严重性分组的漏洞,附带 OSV 公告链接、修复版本及修复命令 - 每个存在漏洞的 package 安装的文件系统路径 - 完整的 package 清单 ## 黑名单 使用你自己精心策划的供应链黑名单来增强 OSV 漏洞数据。任何匹配黑名单的 package 都将与正常的 OSV 发现一起,被报告为 **critical**(严重)级别。 ### 设置 最快速的入门方法是从 [Aikido 的开源威胁情报源](https://github.com/AikidoSec/safe-chain/) 直接获取最新的数据库: ``` devscan update-db ``` 这将从 `malware-list.aikido.dev` 下载 npm 和 PyPI 恶意软件数据库,将其保存到 `~/.devscan/resources/`,并自动编译索引。`devscan update` 也会运行此步骤,因此每当你更新二进制文件时,数据库都会保持最新。 你也可以将自己的黑名单文件放入 `~/.devscan/resources/` 并手动编译: ``` devscan compile ``` 这会生成 `~/.devscan/devscan.json`。所有后续扫描都会自动加载编译后的索引——无需任何 flag,也无需重新构建。 添加或更新源文件后,重新运行 `devscan compile` 以重新生成索引。 ### 支持的格式 **CSV** — 必须包含标题行,且必须有 `Ecosystem` 和 `Name` 列,`Version` 为可选(省略则匹配任何版本): ``` Ecosystem,Namespace,Name,Version,Artifact,Published,Detected npm,,chai-utils-test,4.5.3,,,2026-06-04T00:00:00Z pypi,,tlask,3.1.4,,,2026-06-07T15:00:00Z ``` **JSON (通用)** — 必须指定 ecosystem: ``` [ { "ecosystem": "npm", "name": "evil-pkg", "version": "1.0.0", "reason": "MALWARE" } ] ``` **JSON (Aikido 风格)** — 通过 `package_name` 字段自动检测,默认视为 npm: ``` [ { "package_name": "evil-pkg", "version": "1.0.0", "reason": "MALWARE" } ] ``` ### 去重 被多个来源标记的 package 将合并为一个发现结果。漏洞描述会列出所有匹配的源文件,例如: ``` [CRIT] chai-utils-test@4.5.3 Malware detected This package appears in malwareDatabase_js.json, miasma-attack-packages.csv. Reason: MALWARE. Remove or replace it immediately. ``` ### 目录结构 ``` ~/.devscan/ resources/ ← drop source files here (*.csv, *.json) devscan.json ← compiled index (auto-used by all scans) advisories.yaml ← global user advisories (optional) / .devscan/ advisories.yaml ← project-scoped advisories (optional, commit to repo) ``` ## 用户公告 当安全公司发布有关受损 package 的披露时,OSV.dev 可能需要几天或几周的时间才能反映出来。用户公告让你可以立即标记一个 package——无需等待,无需重新编译。 ### 格式 在项目根目录创建 `.devscan/advisories.yaml`(提交到你的 repo 中),或者在 `~/.devscan/advisories.yaml` 中创建适用于所有项目的全局公告: ``` advisories: - ecosystem: crates.io package: onering version: "*" # all versions severity: critical reason: "Package compromised — backdoor injected" reference: "https://blog.sec.com/2026/06/onering" - ecosystem: npm package: left-pad version: "1.2.3" # specific version only severity: high reason: "Malicious version published" reference: "https://..." ``` `version: "*"` 匹配所有已安装的版本。特定版本(例如 `"1.2.3"`)仅匹配该确切发行版。 ### 工作原理 每次运行 devscan 时,用户公告都会合并到已编译的黑名单之上。无需重新编译步骤——只需放入文件并重新扫描。 要根据你的公告检查系统,而无需将每个 package 都发送给 OSV,请使用 `--advisories-only`: ``` # 快速、私密 —— 无对 OSV 的网络调用 devscan audit --advisories-only # 仅针对您的自定义 advisories 进行全局扫描 devscan audit --advisories-only --global ``` 当你刚刚添加了一个公告并想检查你的机器上是否存在该 package,而又不希望承受完整 OSV 扫描的延迟或数据暴露时,这非常有用。 匹配的 package 将与 OSV 和黑名单结果一起被报告为 **critical**(严重)级别的发现,并且参考 URL 会包含在发现描述中。 ### 安装时阻止 如果你启用了 intercept shim,用户公告也会在获取 package 之前阻止安装: ``` ╔══════════════════════════════════════════════════════════════════════╗ ║ DEVSCAN BLOCKED ║ ╚══════════════════════════════════════════════════════════════════════╝ [CRITICAL] onering Package compromised — backdoor injected — https://blog.sec.com/2026/06/onering cargo add was blocked. Remove this package from your command and try again. ``` ### 作用域 | 文件位置 | 作用域 | |---|---| | `.devscan/advisories.yaml` | 仅限当前项目——提交以与你的团队共享 | | `~/.devscan/advisories.yaml` | 本机上的所有项目 | 如果同时存在这两个文件,则会同时加载。 ## 密钥扫描 扫描源文件以查找暴露的 secret、API key 和 token: ``` # 扫描当前目录 devscan keyscan # 扫描特定路径 devscan keyscan --path ./my-app # 限制深度(适用于大型 monorepos) devscan keyscan --path /Users/me/projects --depth 3 # 仅筛选 critical devscan keyscan --severity critical # 导出为 HTML 或 Markdown devscan keyscan --path ./ --format html --output keyscan.html devscan keyscan --path ./ --format md --output keyscan.md # 重定向输出(同时启用实时进度计数器) devscan keyscan --path /Users/me/projects --depth 3 > keyscan.html ``` 可检测的 secret 类型: | 类别 | 示例 | |---|---| | AI 提供商 | OpenAI, Anthropic, Google AI, Groq, OpenRouter, Cohere, Replicate | | 云服务 | AWS access/secret key, GCP service account, Firebase, Azure | | 源代码控制 | GitHub token (ghp_, ghs_, gho_, github_pat_) | | 支付 | Stripe live key (sk_live_, pk_live_), PayPal, Braintree | | 消息传递 | Slack token 和 webhook, Twilio, SendGrid, Mailgun | | 注册表 | npm token | | 基础设施 | Heroku, Vercel, Netlify, Render, Cloudflare, DigitalOcean | | 监控 | Datadog, Sentry, New Relic | | 私钥 | RSA, EC, DSA, OpenSSH 私钥标头 | | 数据库 URL | 带有嵌入凭据的 Postgres, MySQL, MongoDB, Redis URL | | 命名变量 | 任何 `_KEY`, `_TOKEN`, `_SECRET`(其中服务名是已知的提供商) | 自动跳过:`node_modules/`、`vendor/`、`.git/`、`dist/`、二进制文件、文档(`.md`、`.rst`、`.txt`)以及示例/模板文件(`.example`、`.sample`、`.dist`)。 所有匹配的值在输出时都会被**脱敏处理**——仅显示足以识别 secret 类型的上下文,绝不显示完整值。 ### 包含在完整报告中 在任何 `devscan report` 中添加 secrets 部分: ``` devscan report --html --include-keys --output report.html devscan report --md --include-keys devscan report --json --include-keys --output report.json ``` ## Flag ``` --format string Output format: table|json|compact (default "table") --severity string Filter by severity: critical|high|medium|low --ecosystem string Filter by ecosystem: npm|pypi|packagist|crates.io|go --global Scan global packages (machine-wide) --project Scan current project directory (default) --path string Explicit project path to scan --depth int Traverse subdirectories up to this depth (0 = path only) --no-color Disable color output --no-cache Bypass cache and force a fresh advisory lookup --advisories-only Match only user advisories and blocklists — skip OSV network lookup --public Removes data not needed for public view, eg. repo -o, --output string Write report to file (report command only) ``` ## 修复命令 当有可用的修复方案时,devscan 会生成要运行的确切命令: | 生态系统 | 示例 | |---|---| | npm | `npm install pkg@^1.2.3` | | pypi | `pip install --upgrade pkg>=1.2.3` | | packagist | `composer require vendor/pkg:^1.2.3` | | crates.io | `cargo update -p pkg --precise 1.2.3` | | go | `go get module@v1.2.3` | | gem | `gem update pkg` | ## 退出码 | 代码 | 含义 | |---|---| | `0` | 干净 | | `1` | 常规错误 | | `2` | 发现漏洞 | | `3` | 发现严重漏洞 | | `4` | 发现过时的 package | 对 CI pipeline 很有用: ``` - name: Security scan run: devscan audit --severity high ``` ## 拦截 Intercept 使用 shim 包装 npm、pip、cargo 和 bun,在你编译好的黑名单中检查每个显式安装的 package,**在获取 package 之前**——也就是在任何 `postInstall` hook 执行之前。 大多数供应链攻击在安装期间通过 post-install hook 运行恶意代码,并使用 Bun 和 Rust 等工具对机器造成进一步破坏。Intercept 将它们挡在门外。 ### 工作原理 启用后,devscan 会将符号链接写入 `~/.devscan/shims/`: ``` ~/.devscan/shims/npm → devscan binary ~/.devscan/shims/pnpm → devscan binary ~/.devscan/shims/bun → devscan binary ~/.devscan/shims/pip → devscan binary ~/.devscan/shims/pip3 → devscan binary ~/.devscan/shims/cargo → devscan binary ~/.devscan/shims/go → devscan binary ~/.devscan/shims/composer → devscan binary ``` shim 目录位于你的 `PATH` 最前面。当你运行 `npm install evil-pkg` 时,shim 会首先运行,根据你编译的黑名单检查该 package,然后要么发出警告并阻止,要么透明地 exec 真正的二进制文件。非安装命令(`npm run`、`cargo build` 等)会瞬间透传,没有任何开销。 ### 设置 ``` # 1. 编译您的 blocklists(必需 —— shims 会检查编译后的 index) devscan compile # 2. 启用 shims 并修补您的 shell profile devscan intercept enable # 3. 重新加载您的 shell source ~/.zshrc ``` ### 命令 ``` # 启用 shims 并修补 shell profile devscan intercept enable # 禁用并清理 devscan intercept disable # 检查哪些 shims 处于活动状态以及 shims 目录是否在 PATH 上 devscan intercept status ``` ### 被阻止的安装是什么样的 ``` ╔══════════════════════════════════════════════════════════════════════╗ ║ DEVSCAN BLOCKED ║ ╚══════════════════════════════════════════════════════════════════════╝ [MALWARE] chai-utils-test@4.5.3 Found in: malwareDatabase_js.json npm install was blocked. Remove this package from your command and try again. Run `devscan audit` for a full vulnerability report. ``` 警告会以红色打印到 stderr,以便在周围的安装输出中脱颖而出。该进程以退出码 1 退出,从而阻止安装继续进行。 ### 保持 shim 为最新 `devscan update` 会自动重写 shim 以指向新的二进制文件。如果未来的版本中添加了新的 package manager,请重新运行 `devscan intercept enable` 来写入新的 shim——它是幂等的,随时运行都是安全的。 显式安装和 lockfile 安装都会被扫描。Lockfile 命令(`npm ci`、`bun install`、`composer install`、`composer update`、`go get`)会从当前目录读取 lock file,并在真正运行命令之前检查每个锁定的 package。 ### 支持的 package manager | 管理器 | 命令拦截 | |---|---| | npm | `npm install`, `npm i`, `npm add`, `npm ci` (lockfile) | | pnpm | `pnpm add`, `pnpm install` (lockfile) | | bun | `bun add`, `bun install` (lockfile) | | pip | `pip install`, `pip3 install` | | cargo | `cargo add`, `cargo install` | | go | `go get`, `go install`, `go.sum` (lockfile) | | composer | `composer require`, `composer install`, `composer update` (lockfile) | | code / code-insiders | `code --install-extension`, `code-insiders --install-extension` | ## IDE 保护 VS Code 扩展是一个日益常见的攻击面。恶意的发布者会克隆流行的扩展名称,躲过市场审查过程,并在安装或激活时执行任意代码。devscan 通过两种方式解决这个问题:审计你已经安装的内容,并在恶意扩展落地之前阻止它们。 ### 扫描已安装的扩展 devscan 会自动枚举你机器上所有 VS Code 系列编辑器中的扩展: - **VS Code** — `~/.vscode/extensions/` - **VS Code Insiders** — `~/.vscode-insiders/extensions/` - **Cursor** — `~/.cursor/extensions/` - **VSCodium** — `~/.vscode-oss/extensions/` 来自所有检测到的编辑器的扩展将被合并和去重。运行全面审计: ``` # 审计每个 VS Code 变体中所有已安装的 extensions devscan audit --global --ecosystem vscode # 列出每个已安装的 extension 及其版本和路径 devscan list --global --ecosystem vscode # 包含 extensions 的完整健康检查 devscan doctor --global ``` 扩展会根据 OSV.dev(使用 `VSCode` ecosystem)和你的本地黑名单进行检查——这与用于 npm、pip 和 cargo package 的 pipeline 相同。OSV 的 `VSCode` ecosystem 是有效的,但目前数据非常稀少;目前黑名单是主要的覆盖层。任何发现都会连同严重性、公告 ID 或黑名单来源以及扩展路径一起报告。 ### 在安装时阻止恶意扩展 启用 intercept shim 后,在获取扩展之前会拦截 `code --install-extension`: ``` # 1. 将已知的恶意 publishers/extensions 添加到您的 blocklist # (格式请参见 Blocklists 部分) # 2. 编译 blocklist devscan compile # 3. 启用 shims —— 为 `code`、`code-insiders` 和 `codium` 写入 shims devscan intercept enable # 4. 重新加载您的 shell source ~/.zshrc ``` 此后,任何试图通过 CLI 安装黑名单中扩展的操作都会被阻止: ``` ╔══════════════════════════════════════════════════════════════════════╗ ║ DEVSCAN BLOCKED ║ ╚══════════════════════════════════════════════════════════════════════╝ [CRITICAL] malicious-publisher.fake-copilot Found in: vscode-blocklist.csv code --install-extension was blocked. Remove this extension from your command and try again. ``` ### 扩展的黑名单格式 将 CSV 添加到 `~/.devscan/resources`,其中 `Ecosystem` 设置为 `vscode`,`Name` 设置为 `publisher.extensionname`: ``` Ecosystem,Name,Version,Reason vscode,malicious-publisher.fake-copilot,,MALWARE vscode,badactor.crypto-stealer,1.0.0,MALWARE ``` 省略 `Version` 可阻止该扩展的所有版本。然后重新编译: ``` devscan compile ``` ### GUI 安装 VS Code 扩展面板不会调用 `code` 二进制文件,因此 shim 无法拦截 GUI 安装。devscan 的安装后审计(`devscan audit --global --ecosystem vscode`)是针对该路径的防御手段——在从市场安装扩展后运行它,或者在 CI 中计划运行它。 ## OSV 搜索 直接从终端搜索 [OSV.dev](https://osv.dev) 获取安全公告——比 OSV Web UI 更快,且更易于脚本化。 ### 按包名 ``` # 某个 package 的所有 advisories(所有 ecosystems) devscan osv --package axios # 限定到特定的 ecosystem devscan osv --package axios --ecosystem npm # 仅影响特定版本的 advisories devscan osv --package axios --version 1.2.3 devscan osv --package requests --ecosystem pypi --version 2.28.0 ``` ### 按公告 ID 通过 CVE、GHSA、RUSTSEC、PYSEC 或任何 OSV ID 直接查询: ``` devscan osv CVE-2024-1234 devscan osv GHSA-xxxx-yyyy-zzzz devscan osv RUSTSEC-2024-0001 ``` ### 自由文本/关键字搜索 在所有 ecosystem 中搜索作为包名的术语,然后过滤出该术语出现在公告 ID、摘要、详细信息或包名中的结果: ``` devscan osv "onering" devscan osv "prototype pollution" --ecosystem npm ``` ### 详细模式 默认情况下,每个公告的结果显示一行摘要。使用 `--detail` 展开完整的公告文本、所有受影响的版本范围以及参考信息: ``` devscan osv --package lodash --detail devscan osv CVE-2024-1234 --detail ``` ### 保存报告 输出可以保存为 HTML、Markdown 或 JSON 格式——格式是根据文件扩展名推断的: ``` devscan osv --package axios --output report.html devscan osv --package axios --output report.md devscan osv --package axios --output report.json # 或显式指定格式 devscan osv --package axios --html devscan osv --package axios --json devscan osv --package axios --md # 保存报告中的 Detail 模式 devscan osv --package axios --detail --output report.html ``` ### 支持的生态系统 传递简称——devscan 会自动将其映射到 OSV 的 ecosystem 名称: | Flag 值 | OSV ecosystem | |---|---| | `npm` | npm | | `pypi` | PyPI | | `cargo`, `crates.io`, `rust` | crates.io | | `go` | Go | | `gem`, `ruby` | RubyGems | | `composer`, `packagist`, `php` | Packagist | ## 缓存 网络结果在本地缓存,以保持扫描快速。 | 数据 | TTL | 位置 (macOS) | |---|---|---| | 漏洞公告 (OSV.dev) | 1 小时 | `~/Library/Caches/devscan/` | | Runtime 最新版本 | 7 天 | `~/Library/Caches/devscan/versions/` | 在 Linux 上:`~/.cache/devscan/` · 在 Windows 上:`%LocalAppData%\devscan\` 随时强制重新查询: ``` devscan doctor --no-cache ``` ## 配置文件 将 `.devscan.json` 放在你的项目根目录或 home 目录中: ``` { "ignore": ["left-pad"], "severity_threshold": "medium", "ecosystems": ["npm", "pypi"], "auto_fix": false } ``` ## 支持的生态系统 | 生态系统 | Runtime | Package | 漏洞 | |---|---|---|---| | Node.js / npm | ✓ | ✓ | ✓ 通过 OSV.dev | | Bun | ✓ | ✓ (通过 npm) | ✓ 通过 OSV.dev | | Python / pip | ✓ | ✓ | ✓ 通过 OSV.dev | | PHP / Composer | ✓ | ✓ | ✓ 通过 OSV.dev | | Rust / Cargo | ✓ | ✓ | ✓ 通过 OSV.dev | | Go modules | ✓ | ✓ (项目) | ✓ 通过 OSV.dev | | Ruby / Gem | ✓ | ✓ | ✓ 通过 OSV.dev | | Homebrew | — | ✓ | ✓ 通过 OSV.dev | | VS Code 扩展 | — | ✓ (仅限黑名单) | ✓ 通过本地黑名单;OSV 的 `VSCode` ecosystem 存在,但暂无数据 | | Git | ✓ | — | — | 漏洞数据来源于 [OSV.dev](https://osv.dev) ——这是一个开放的、社区驱动的漏洞数据库,涵盖 npm、PyPI、Go、crates.io、Packagist、RubyGems 等。 大型扫描(1000 多个 package)会自动分批处理,以保持在 OSV API 的限制范围内。 ## Claude Code 集成 devscan 内置了一个 [Claude Code](https://claude.ai/code) skill,允许 AI agent 对任何项目运行 devscan——审计漏洞、扫描 secret、检查过时的 package 并生成报告。 一次性安装该 skill: ``` devscan install-skill ``` 这会将该 skill 复制到 `~/.claude/skills/run-devscan/` 中,使得 `/run-devscan` 在每个 Claude Code 会话的所有项目中可用。 安装后,Claude 可以运行如下命令: ``` audit this project for vulnerabilities scan for exposed secrets check for outdated dependencies generate an HTML report look up GHSA-29mw-wpgm-hmr9 ``` skill 的源码位于 [`cmd/skills/run-devscan/`](cmd/skills/run-devscan/) 并直接嵌入在二进制文件中——无需单独下载。 ## 架构 ``` devscan/ cmd/ # CLI commands (Cobra) internal/ detectors/ # Runtime detection (node, bun, python, git, php, rust, go) inspectors/ # Package inspection (npm, pip, composer, cargo, gomod, vscode extensions) advisory/ # Vulnerability lookups (OSV.dev + local blocklists) with 1hr cache intercept/ # Package manager shims — pre-install supply-chain blocking intercept/managers/ # Per-manager argument parsing (npm, pip, cargo, bun) versions/ # Runtime latest-version checks with 7-day cache keyscanner/ # Secret and API key detection (file-based pattern scanning) sysinfo/ # OS, chip, and architecture detection traverse/ # Sub-project discovery by manifest files output/ # Terminal renderers (table, JSON, compact) report/ # Export renderers (Markdown, HTML, JSON) schema/ # Shared types ``` JSON 输出 schema 是核心契约。CLI 以及未来的 TUI 和 GUI 层都是基于它的轻量级包装器。 ## 路线图 - [x] Runtime 最新版本检查 — Go, Node, Bun, Python, PHP, Rust, Git - [x] 所有受支持生态系统的修复命令 - [x] 使用 `--depth` 进行子项目遍历 - [x] 易受攻击 package 的文件系统路径 - [x] 报告中的系统信息(OS、芯片、架构) - [x] HTML 和 Markdown 报告导出 - [x] Ruby / gem 支持 - [x] Homebrew package 检查 - [x] Secret 和 API key 扫描 (`devscan keyscan`) - [x] `--include-keys` flag,用于在完整报告中添加 secrets 部分 - [x] 本地黑名单支持 — CSV 和 JSON 供应链攻击数据库 (`~/.devscan/resources/`) - [x] `devscan compile`,用于将黑名单合并为快速单一索引 - [x] `devscan update-db`,用于从 Aikido Intel 获取最新数据库并重新编译 - [x] 针对 npm、pip、cargo、bun、go、composer 的安装前 intercept shim (`devscan intercept`) - [x] Intercept:针对 `npm ci`、`bun install`、`composer install/update`、`go get` 的 lockfile 扫描 - [x] 用户公告 — 通过 `.devscan/advisories.yaml` 立即标记受损的 package,无需等待 OSV - [x] `devscan osv` — 按包名、版本、公告 ID 或关键字搜索 OSV;导出为 HTML/Markdown/JSON - [x] Claude Code skill — `devscan install-skill` 将 `/run-devscan` 安装到 `~/.claude/skills/` 以便在任何项目中进行 AI 辅助扫描 - [x] VS Code 扩展扫描 — 针对 OSV(`VSCode` ecosystem)和本地黑名单,审计 VS Code、Insiders、Cursor 和 Codium 中已安装的扩展 - [x] VS Code 扩展拦截 — `code --install-extension` shim 可在安装前阻止恶意扩展 - [ ] 系统 package manager — dpkg (Debian/Ubuntu)、rpm (Fedora/RHEL)、apk (Alpine) - [ ] 基线差异对比 (`--compare baseline.json`) - [ ] CI 摘要输出(GitHub Actions 批注) - [ ] `--ignore` flag,用于屏蔽已知/接受的公告 ## 许可证 MIT
标签:EVTX分析, Go, LNA, Ruby工具, SOC Prime, StruQ, 依赖管理, 域名收集, 开发工具, 文档结构分析, 日志审计, 环境健康监测, 软件成分分析(SCA)