ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

检测恶意 npm 包:GuardDog 与 OSV-Scanner 的命令级操作手册(Anthropic-Cybersecurity-Skills 实战指南)

检测恶意 npm 包:GuardDog 与 OSV-Scanner 的命令级操作手册(Anthropic-Cybersecurity-Skills 实战指南) 检测恶意 npm 包GuardDog 与 OSV-Scanner 的命令级操作手册Anthropic-Cybersecurity-Skills 实战指南【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATTCK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI 20 platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-Skills本文是开源仓库 Anthropic-Cybersecurity-Skills 中detecting-malicious-npm-packages技能包的配套参考文章主体内容对应 references/api-reference.md 中的完整命令与 API 清单并融合 SKILL.md 定义的十步排查工作流以及 scripts/agent.py 的自动化判读实现。读完本文你将掌握用 GuardDog 对 npm 包做静态启发式扫描、用 OSV-Scanner 对照已知恶意MAL-公告核对锁文件、在不执行代码的前提下安全获取 tarball并在此基础上完成良性 / 可疑 / 恶意的可辩护判定。为什么 npm 是供应链攻击的主战场npm 是全球最大的软件包生态也是供应链攻击者最密集的目标。恶意包通过 typosquatting如expresss、crossenv、依赖混淆、账号/维护者接管2025 年 Shai-Hulud 蠕虫与event-stream事件是典型代表、starjacking 等途径混入开发者环境。detecting-malicious-npm-packages技能的核心动机非常明确npm install会在任何应用代码运行之前以开发者完整权限自动执行preinstall、install、postinstall生命周期脚本——仅安装一个包就足以被攻陷。据统计约 2% 的 npm 包使用了 install 脚本这使它们既是常见机制又成为恶意软件的强力投递载体。典型恶意行为包括窃取环境变量、~/.npmrc令牌、SSH 密钥与云凭证并外传至攻击者控制的 URL反弹 shell投放挖矿程序读取并回传process.env用 base64/eval 混淆载荷以及通过窃取维护者 npm 令牌、重发布被投毒的其它包来实现自我传播蠕虫行为。本技能的技术栈组合是GuardDogDatadog 开源、基于 Semgrep 元数据规则构建的启发式扫描器为主辅以手动 tarball 检查、锁文件已知坏版本比对、以及带网络与文件系统监控的动态引爆。GuardDog核心扫描工具的命令体系安装与运行方式pip install guarddog # 或通过 Docker 运行避免污染本机环境 docker pull ghcr.io/datadog/guarddog alias guarddogdocker run --rm ghcr.io/datadog/guarddog无论采用哪种方式GuardDog 均提供针对 npm、PyPI、Go、RubyGems 生态的一致命令模型下面是 api-reference.md 中记载的完整子命令表子命令速查表命令说明guarddog npm scan pkg扫描注册表中的最新版本guarddog npm scan pkg --version X.Y.Z扫描指定版本guarddog npm scan path.tgz \| dir扫描本地 tarball 或解压后的目录guarddog npm verify package.json扫描清单manifest中的每一个依赖guarddog pypi scan pkg对 PyPI 执行同样操作guarddog go scan module/guarddog go verify go.mod扫描 Go 模块guarddog rubygems scan gem扫描 RubyGems 包这里最关键的能力分界是scan与verifyscan针对单个目标一个包名、一个 tarball 或一个解压目录verify则把整个package.json声明的依赖树全部过一遍非常适合代码评审和第三方库准入场景。通用 Flags 速查表Flag说明--output-formatjson输出机器可读的 JSON--output-formatsarif输出 SARIF 格式可直接接入 GitHub code scanning--rules rule可重复只运行指定的某条或某几条规则--exclude-rules rule排除指定的规则--log-level debug输出冗长诊断信息便于排查规则误报值得强调两点--rules可以多次传参叠加这使其天然适配只关注最高信号规则的降噪场景见下文聚焦高信号启发式而--output-formatsarif让 GuardDog 的扫描结果可以无缝汇入 CI/CD 的代码扫描流程无需二次转换。关键 npm 启发式规则api-reference.md 给出了一张与恶意行为直接对应的规则清单这是整个技能判定恶意倾向的证据核心规则名检测目标npm-install-scriptpreinstall/install/postinstall生命周期脚本npm-serialize-environment环境变量的外传exfiltrationnpm-exec-base64eval 经过 base64 解码的载荷npm-silent-process-execution静默的子进程执行npm-obfuscation常见混淆模式shady-links代码中的可疑 URLtyposquatting与热门包相似的名字potentially_compromised_email_domain维护者邮箱位于已过期的域名上从 SKILL.md 的取证逻辑看这些规则可以归纳为三条攻击意图主线执行原语npm-install-script、npm-exec-base64、npm-silent-process-execution、窃密外传npm-serialize-environment、shady-links、伪装规避npm-obfuscation、typosquatting、potentially_compromised_email_domain。其中potentially_compromised_email_domain属于元数据规则Semgrep 源码规则之外的第二类检测它捕捉的是维护者身份层面的妥协信号与源码启发式形成互补。OSV-Scanner把锁文件对照到已知恶意公告GuardDog 回答的是代码像不像恶意OSV-Scanner 回答的是锁文件钉住的版本是不是已被官方标记为恶意。二者结合才能覆盖未知启发式与已知公告两个维度。# 安装 go install github.com/google/osv-scanner/cmd/osv-scannerv1api-reference.md 记载的核心命令命令说明osv-scanner --lockfilepackage-lock.json将锁文件中钉住的版本与 OSV 公告匹配包含MAL-恶意包条目osv-scanner -r dir递归扫描一个目录osv-scanner --format jsonJSON 格式输出在活跃攻击活动如蠕虫传播期间这一步尤其关键即使包名不在 typosquatting 名单里、代码也没有明显混淆只要它出现在官方恶意公告的已知坏版本列表中就能一锤定音。SKILL.md 中还给出了从 npm v3 锁文件提取nameversion对、再交给人工或脚本比对的命令# 从 v3 lockfile 提取 resolved 的 nameversion 对 jq -r .packages | to_entries[] | select(.key|startswith(node_modules/)) | \(.key|ltrimstr(node_modules/))\(.value.version) package-lock.json # OSV-Scanner 会同时标记已知漏洞与已知恶意MAL-公告 osv-scanner --lockfilepackage-lock.jsonnpm 安全获取不执行任何代码拿到源码分析的前提是包到手但什么都没运行。api-reference.md 将这套无执行获取命令单独成表命令说明npm pack pkgver下载 tarball但不安装npm view pkgver dist.tarball打印 tarball 的下载 URLnpm install --ignore-scripts安装时跳过所有生命周期脚本jq .scripts package/package.json列出生命周期钩子对应 SKILL.md 工作流的第一步完整落地是mkdir triage cd triage npm pack express4.18.2 # 产出 express-4.18.2.tgz # 或任意版本先取 URL 再用 curl 下载全程不触发脚本 npm view some-pkg1.2.3 dist.tarball curl -sL $(npm view some-pkg1.2.3 dist.tarball) -o some-pkg.tgz tar -xzf some-pkg.tgz # 解压到 ./package完整排查工作流从下载到定案SKILL.md 定义了十个可重复的排查步骤把上面三张命令表串联成完整闭环。① 无执行下载见上节始终在无生产凭证的隔离环境进行。② 单包扫描guarddog npm scan express # 扫描注册表最新版 guarddog npm scan some-pkg --version 1.2.3 # 扫描指定版本 guarddog npm scan ./some-pkg.tgz # 扫描本地 tarball guarddog npm scan ./package/ # 扫描解压目录③ 全依赖树校验guarddog npm verify /path/to/repo/package.json。④ 聚焦高信号规则降噪guarddog npm scan some-pkg \ --rules npm-install-script \ --rules npm-serialize-environment \ --rules npm-exec-base64 \ --rules npm-silent-process-execution \ --rules npm-obfuscation \ --rules shady-links \ --rules typosquatting⑤ 机器可读输出guarddog npm scan some-pkg --output-formatjson guarddog.json guarddog npm verify package.json --output-formatsarif guarddog.sarif⑥ 手动检查生命周期脚本与源码——生命周期脚本是第一阅读对象混淆与外传 URL 是红旗jq .scripts package/package.json grep -rEn child_process|exec\(|spawn|eval\(|Buffer\.from\(.*base64|process\.env|https?:// package/ \ --include*.js --include*.ts | head -50⑦ 锁文件对照已知恶意版本见 OSV-Scanner 节。⑧ 安全引爆仅当静态分析无法定论时在一次性容器/虚拟机中执行npm install ./some-pkg.tgz此时脚本会运行必须处于沙箱配合tcpdump -w capture.pcap抓取出口流量安装后对文件系统做基线比对检查 node_modules 之外的新写入并在 pcap 中寻找异常 DNS / HTTP beacon。⑨ 提取 IOCsgrep -rhoE https?://[a-zA-Z0-9./?_%:-] package/ | sort -u urls.txt sha256sum some-pkg.tgz package/*.js hashes.txt⑩ 运行仓库自带的 triage 助手python scripts/agent.py --package some-pkg --version 1.2.3 --output verdict.json # 或直接分析本地 tarball python scripts/agent.py --tarball ./some-pkg.tgz --output verdict.json源码级剖析agent.py 如何自动给出判读api-reference.md 聚焦命令本身而 scripts/agent.py 把这套命令编排进了约 170 行的 Python 实现是理解命令如何协同的最佳切片。其核心链路如下。1下载解析download_tarball()先执行npm view spec dist.tarball解析出下载地址scripts/agent.py#L64-L77再用urllib.request.urlretrieve拉取到临时目录——全程不触碰npm install天然满足无执行获取要求。2GuardDog 编排guarddog_scan()构造的命令正是文档中的聚焦高信号规则组合——它把源码中定义的高信号规则常量逐一追加为--rulesscripts/agent.py#L28-L36并固定使用--output-formatjson若环境缺少guarddog二进制会返回错误提示而非崩溃scripts/agent.py#L49-L61。3tarball 静态检查inspect_tarball()在解压时过滤掉绝对路径与..穿越成员以防御路径穿越scripts/agent.py#L84-L86随后只提取preinstall/install/postinstall三个生命周期钩子并用正则SUSPECT_RE覆盖child_process、exec(、spawn、eval(、Buffer.from(...base64)、process.env对全部.js文件做静态命中采集同时用URL_RE汇总去重源码中的外连 URLscripts/agent.py#L102-L112。4打分定案verdict()给出一个可解释的加权模型scripts/agent.py#L115-L129GuardDog 每命中一组规则计 2 分存在生命周期脚本计 2 分可疑代码行每行计 1 分最多计 5 行。总分 ≥ 6 判为MALICIOUS (high confidence)≥ 2 判为SUSPICIOUS (manual review required)否则为benign (no strong indicators)。这个分数不是某个黑盒模型而是对上面命令输出的显式加权判定结果天然可复核、可辩护。5报告落盘最终把 GuardDog 结果、静态检查发现、判定结论合并写入--output指定的 JSON 文件scripts/agent.py#L164-L166并在终端摘要打印 verdict、install 脚本与 URL 数量。与威胁框架的对应关系本技能在仓库中同时映射了攻击方与防御方两套框架见 references/standards.mdMITRE ATTCKT1195.002供应链投毒核心技术、T1059.007JavaScript 命令与脚本解释器、T1552.001文件中的未受保护凭证如.npmrc/.env/SSH 密钥、T1041经 C2 通道外传、T1027base64/eval/hex 混淆。NIST CSF 2.0DE.CM-09对计算软硬件、运行时环境及其数据进行监控以发现潜在不利事件——静态 动态的包与锁文件排查正是这一监控控制项的实现。支撑性标准OWASP CI/CD 十大风险的CICD-SEC-03: Dependency Chain AbuseNIST SP 800-218SSDF的PW.4/PS.3复用并验证所获取软件组件的完整性SLSA 构建来源验证降低消费被篡改/重发布包的风险。判定与收尾让结论经得起检验SKILL.md 给出了可勾选的验证标准作为排查是否合格的收尾清单包已在禁用脚本的隔离环境中获取已对目标版本运行 GuardDogscan并保存结果适用时已将整个依赖树跑过 GuardDogverify已阅读并评估preinstall/install/postinstall生命周期脚本已将锁文件版本与 OSV / 已知坏版本列表比对若静态分析无法定论已在沙箱内完成动态引爆已提取并记录 IOCURL、IP、哈希已形成附有证据的书面判定良性 / 可疑 / 恶意恶意发现已上报注册表并作为威胁情报共享把 api-reference.md 的命令表、SKILL.md 的工作流与 agent.py 的编排逻辑三者合并使用即可在 CI 准入门槛、代码评审、漏洞应急三条场景中稳定复现静态启发式 已知公告比对 可控动态验证的纵深排查能力。【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATTCK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI 20 platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-Skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表