)
基于 MITRE ATTCK T1195.002 与 NIST CSF 2.0 的 Typosquatting 包检测标准与实战指南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-SkillsTyposquatting包名仿冒是软件供应链攻击中最典型的一类初始访问向量攻击者注册一个与热门合法包仅差一个字符的恶意包诱使开发者安装。本文以 Anthropic-Cybersecurity-Skills 仓库中detecting-typosquatting-packages技能所定义的框架映射MITRE ATTCK T1195.002、NIST CSF 2.0 ID.RA-09为骨架结合该技能的完整检测工作流、参考资源与源码实现讲清楚「如何在安装前系统化地筛查仿冒包名、如何用框架语言描述与评估这类风险」。读完你将掌握攻击面建模、标准工具链typomania / OSSGadget / pypi-scan的使用方式、变异原语集合、风险打分规则以及如何在 CI/CD 中落地为阻塞性门禁。为什么 Typosquatting 是一个供应链初始访问问题包名仿冒的攻击成立依赖三个条件名称近似reqeusts之于requests、python-sqlite之于sqlite3、crossenv之于cross-env、安装即执行npm 的postinstall、PyPI 的setup.py/构建钩子会在安装时以开发者权限运行、以及人类与 AI 的误用——手误拼错、照抄被投毒的教程或是信任 AI 生成的依赖清单即 slopsquatting 变体模型幻觉出并不存在的包名攻击者随后抢先注册。一旦恶意包被安装载荷立即以开发者权限执行攻击者在目标环境中获得初始立足点。从标准框架视角看这一攻击模式有非常明确的归属框架编号名称战术阶段映射理由MITRE ATTCKT1195.002Supply Chain Compromise: Compromise Software Supply ChainInitial Access初始访问仿冒包正是攻击者用来替换合法依赖的恶意工件在安装时点即完成了对受害者软件供应链的入侵NIST CSF 2.0ID.RA-09The authenticity and integrity of hardware and software is assessed prior to acquisition and use识别Govern/Identify 风险安装前对包名的仿冒筛查正是「在使用前评估软件真实性与完整性」这一控制活动的具体落地映射表的完整原始出处见 skills/detecting-typosquatting-packages/references/standards.md该技能的 frontmatter 亦声明了mitre_attack: T1195.002与nist_csf: ID.RA-09见 SKILL.md。T1195.002 强调「不是攻破真实包而是让外观相似的替身被安装」其后续下游行为通常还包括经由安装钩子触发的 T1059命令与脚本解释器以及对令牌与环境变量的 T1041/T1567外渗。防御侧因此需要把检测点前置到安装动作之前——这正是本技能的核心主张。标准工具链与权威参考资源standards.md 列出了该领域公认的检测工具与语料资源。这些工具共同构成了「先建语料、再算变异、后查注册表」的检测范式typomaniaRust FoundationRust 实现的 typosquatting 检测库是学术工具 typogardUniversity of Kansas 的论文 Defending Against Package Typosquatting的 Rust 移植版目前支撑着 crates.io 的实时拼写检查。typogard原始研究工具定义了标准的名称变异检测方法。OSSGadgetMicrosoft跨生态系统的仿冒包查找器其oss-find-squats子命令支持 npm / PyPI / crates.io。pypi-scanIQTLabsPyPI 专用仿冒包枚举工具。ecosyste-ms typosquatting-dataset经人工整理的「已知仿冒包 → 合法目标」ground-truth 数据集用于交叉验证检测结果。top-pypi-packagesPyPI 热门包语料作为「合法名称参考集」。OWASP CI/CD Security Top 10供应链控制的权威参考。在关键研究方面standards.md 记录了两条方向一是 Rust Foundation 的 typomania 驱动 crates.io 的仿冒检测二是 JFrog / Sonatype 每年发布注册表仿冒与 slopsquatting 趋势报告说明该威胁仍在持续演化。检测工作流安装前的七步筛查第 1 步构建热门包名语料检测器需要一个「合法名称参考集」来对比。按生态拉取下载量靠前的包列表# PyPItop-pypi-packages 数据集 curl -s https://hugovk.github.io/top-pypi-packages/top-pypi-packages.min.json \ -o top-pypi-packages.json # npm查询注册表「被依赖最多」的搜索结果 curl -s https://registry.npmjs.org/-/v1/search?textnot:unstablepopularity1.0size250 \ -o npm-top.json # crates.io按下载量排序注意 crates.io API 强制要求 User-Agent curl -s https://crates.io/api/v1/crates?sortdownloadsper_page100 \ -H User-Agent: typosquat-screen (securityexample.com) -o crates-top.json第 2 步用标准变异原语生成候选仿冒名typomania/typogard 应用一组固定的名称变换来模拟真实攻击者行为1. 字符重复 requests - reqquests 2. 字符遗漏 requests - requsts 3. 相邻换位 requests - reqeusts 4. 词序交换 python-dateutil - dateutil-python 5. 常见打字错误 requests - rewuests (键盘相邻键) 6. 谐音/元音替换 requests - requeasts 7. 版本/后缀技巧 lodash - lodashs, lodash-js 8. 分隔符互换 cross-env - crossenv, cross_env 9. 作用域混淆 types/node - types-nodetypomania 将这些原语封装为可复用的Corpus与Harnesstrait其Harness::check方法借助 rayon 并行化把候选名与语料中的每条记录逐一比对# 在 typomania 检出目录中喂入热门语料然后检查一个名称 cargo run --example registry -- --corpus top-pypi-packages.json --name reqeuststypomania 的核心 API 结构见 references/api-reference.md组件说明Harness主结构体Harness::check(name)将候选名与语料比对Corpustrait实现以提供任意注册表的「热门名参考集」Packagetrait实现以向 harness 暴露包的名称/元数据rayonfeature默认启用跨多包并行化Harness::checkcargo run --example registry运行内置示例针对假注册表第 3 步用 OSSGadget 跨生态筛查oss-find-squats直接查询在线注册表生成给定包的变异名并报告其中哪些已被发布为真实包。参数使用 purl 语法pkg:type/namespace/nameversion# 正向查找仿冒合法包的名称检查哪些已存在于注册表 oss-find-squats pkg:npm/lodash oss-find-squats pkg:pypi/requests # 反向给定可疑名称找出它模仿的合法包 oss-find-squats --quiet pkg:npm/loadsh # 也支持 crates.io oss-find-squats pkg:cargo/name第 4 步用 pypi-scan 枚举 PyPI 仿冒包cd pypi-scan # 查找某特定包的候选仿冒名 python pypi_scan.py -p requests # 扫描下载量 Top-N 的 PyPI 包中已存在的仿冒包 python pypi_scan.py -n 50第 5 步用注册表元数据富化可疑包名称近似只是怀疑的起点。一个近似的名称只有在「年轻、低下载量、或带有安装脚本」时才是高风险的。用官方元数据端点做分诊# npm 包元数据创建时间、维护者、脚本 curl -s https://registry.npmjs.org/loadsh | \ python -c import sys,json;djson.load(sys.stdin);vd[dist-tags][latest];print(created:,d[time][created]);print(scripts:,d[versions][v].get(scripts,{})) # npm 周下载量 curl -s https://api.npmjs.org/downloads/point/last-week/loadsh # PyPI JSON API发布历史与作者 curl -s https://pypi.org/pypi/reqeusts/json | \ python -c import sys,json;djson.load(sys.stdin);id[info];print(i[name],i[author],i[home_page]);print(releases:,list(d[releases].keys()))完整端点清单见 references/api-reference.mdhttps://registry.npmjs.org/pkg完整包文档时间、维护者、版本、脚本、https://api.npmjs.org/downloads/point/last-week/pkg周下载量、https://pypi.org/pypi/pkg/json信息、发布、作者、URL、https://crates.io/api/v1/crates/pkg需要 User-Agent、https://registry.npmjs.org/-/v1/search?...popularity1.0热度搜索。第 6 步打分、分诊与确认将信号组合成风险分高编辑距离 ≤ 2 命中热门包 包龄 90 天 或 周下载 1000 或 存在postinstall/preinstall/setup.py中的安装期网络调用。随后用 ecosyste-ms 已知仿冒数据集交叉验证# 这个名称是否是被记录过的仿冒包 grep -i loadsh typosquatting-dataset/data/*.csv风险打分信号表来自 references/api-reference.md信号高风险取值与热门名的编辑距离1–2包龄 90 天周下载量 1000安装脚本preinstall/postinstall/setup.py中出现网络调用维护者重合与合法包的维护者不同仓库 URL缺失或指向合法项目伪装确认恶意性只能在沙箱/虚拟机中检查安装脚本与源码 tarball——绝不能在个人工作机上npm install或pip install可疑包。第 7 步在 CI/CD 中强制门禁在 PR 引入的每个新依赖名上做阻塞性筛查# .github/workflows/typosquat-gate.yml name: typosquat-gate on: [pull_request] jobs: screen: runs-on: ubuntu-latest steps: - uses: actions/checkoutv4 - name: Screen new dependencies run: | git diff origin/${{ github.base_ref }}...HEAD -- package.json requirements.txt \ | grep ^ | python scripts/agent.py screen --ecosystem npm --corpus top.json --stdin仓库实现agent.py 中的变异原语与筛查逻辑技能目录下的 scripts/agent.py 是上述工作流的标准库实现零第三方依赖可作为快速起步或离线演示。它完整复刻了 typogard/typomania 的变异原语并补齐了「语料加载」「注册表富化」与「命令行入口」。变异生成mutations()对名称依次施加遗漏omission、重复repetition、相邻换位transposition、键盘相邻键替换基于内置QWERTY_ADJ映射表如q→wa、e→wrsd、分隔符互换-/_/./空、复合名词的词序交换以及常见后缀js、py、lib、cli、2、-ng。这直接对应 SKILL.md 中的「Mutation Primitives Reference」表原语合法名仿冒名生效原因换位requestsreqeusts常见打字失误遗漏requestsrequsts漏打字符重复requestsreqquests按键卡住分隔符互换cross-envcrossenv连字符 vs 无分隔歧义词序python-dateutildateutil-python复合名重排同形/元音requestsrequeasts视觉/语音近似后缀/作用域lodashlodash-js, loadsh看似「官方」变体语料加载load_corpus()兼容多种常见语料形态——top-pypi-packages 的rows结构、npm search 的objects结构、纯列表或键值 dict统一归一化为小写名称集合。相似度与筛查screen_name()levenshtein()先精确匹配排除合法名再对语料中每个合法名计算 Levenshtein 距离仅当0 d threshold默认 2且长度差也在阈值内时判为命中按距离升序输出前三个最相似目标。注册表富化enrich()对 npm 拉取创建时间、维护者、scripts、仓库地址对 PyPI 拉取作者、主页、发布版本列表。HTTP 404 等错误会被捕获并标注「该名称可能不存在」直接支撑第 5 步的分诊。CLI 入口mutate打印变异集、screen语料筛查支持--stdin读取 diff 与--threshold调参、enrich元数据富化。screen以退出码 1 表示命中天然适配 CI 门禁。变异原语攻击者到底怎么改名字SKILL.md 的「Mutation Primitives Reference」是理解检测边界的关键。检测能力的天花板取决于变异原语集合的完备性原语集覆盖的变换模式越多越能命中真实攻击但也必然引入误报合法的 fork、scoped 包、同名词因此第 5、6 步的元数据富化与打分分诊不可或缺。技能明确要求「风险打分抑制明显误报合法的 scoped/fork 包」这正是「名称近似只是线索、不是结论」的工程化体现。使用时机与适用边界按 SKILL.md 的定义该技能应在以下场景启用向package.json、requirements.txt、pyproject.toml或Cargo.toml添加新依赖之前作为 CI/CD 门禁筛查 PR 中每一个新引入的依赖名审查 AI 生成或教程来源的依赖清单slopsquatting 复查安全审查 lockfile diff捕捉被替换或新增固定的仿冒包构建注册表侧或代理侧护栏阻止疑似仿冒包的安装。前置条件包括Rust 工具链构建 typomania或预编译 OSSGadget 二进制、Python 3.8pypi-scan 与本技能辅助脚本、对目标注册表公共 APInpmjs.org / pypi.org / crates.io的网络访问以及一份生态热门包语料。验证清单技能以可勾选清单收尾既可作为落地验收标准也可作为本文实战部分的「完成定义」为每个涉及的生态下载热门包名语料复现变异原语且能正确标记已知仿冒包如loadshtypomania / OSSGadget / pypi-scan 至少对一个真实包运行成功用包龄、下载量、安装脚本元数据富化疑似仿冒包用 ecosyste-ms 已知仿冒数据集交叉验证发现风险打分抑制明显误报合法 scoped/fork 包CI/CD 门禁在每次 PR 上筛查新依赖名没有任何可疑包在一次性沙箱之外被安装总结Typosquatting 检测的本质是把「供应链初始访问风险T1195.002」转化为可重复执行的预安装控制NIST CSF 2.0 的 ID.RA-09。Anthropic-Cybersecurity-Skills 的detecting-typosquatting-packages技能给出了一条从框架映射到工具链、再到 CI/CD 落地的完整路径以 typomania/OSSGadget/pypi-scan 为检测引擎以九类变异原语为攻击模型以注册表元数据富化和风险打分压制误报最终以阻塞性门禁把风险挡在依赖树之外。配合 scripts/agent.py 的零依赖实现任何团队都可以在数小时内搭起第一道针对包名仿冒的防线。【免费下载链接】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),仅供参考