boredchilada/pkgsentry-oss

GitHub: boredchilada/pkgsentry-oss

多生态系统软件包恶意软件扫描器,保护供应链安全。

Stars: 4 | Forks: 0

# pkgsentry 多生态系统软件包注册表恶意软件扫描器。监视 PyPI、crates.io、Go 模块代理和 npm,针对流行软件包的供应链妥协以及针对全新名称的诱饵/社会工程学攻击。 当有人将这些注册表中之一发布恶意软件包时——一个流行的库的错别字仿冒、被劫持的发布,或者新的 `wallet-checker` 风格的诱饵——pkgsentry 旨在在它上线后不久捕捉到它。对于每个新版本,它都会下载软件包,对代码运行一系列静态检查,可选地在隔离沙箱中执行它以查看它实际上做什么,并标记出任何看起来像凭证盗窃、后门或传播器的行为。 ## 捕获的内容 两种威胁模型,都在范围内: - **针对流行软件包的供应链攻击**——顶级 N 个软件包的劫持或恶意发布(例如 `requests` 的错别字仿冒、在真实维护者账户上劫持发布凭证、内部名称的依赖混淆)。通过每个生态系统的顶级 10K 个软件包的监视列表扫描来覆盖。 - **针对全新名称的诱饵/社会工程学**——带有 `wallet-security-checker` 或 `crypto-credential-scanner` 等名称的新上传,旨在诱捕特定的受害者配置文件。通过扫描每个注册表的第一次发布来覆盖。 故意跳过现有非监视列表版本更新——这是假阳性成本最高而真实攻击信号最低的地方。 ## 工作原理 ``` RSS / XML-RPC / NDJSON feeds watchlist | | +---------- ingest ---------+----+ | cross-ecosystem queue | async workers | download archive -> SHA-256 verify extract -> per-file SHA-256 / entropy / ssdeep code-diff vs prev -> only analyze changed files static analyzers -> findings detonate -> isolated sandbox (optional), trace behaviour score -> rule + chain + watchlist verdict LLM triage -> second opinion, only on suspicious / malicious alert -> Discord webhook ``` 十二层静态分析层(AST 导入分析、IOC 提取、安装时恶意软件模式、sdist/wheel 差分、特定于生态系统的安装脚本,包括 npm `package.json` 生命周期脚本、YARA 签名、opengrep 污染规则——默认以阴影/非评分模式运行,版本差异和威胁情报模糊哈希匹配)以及可选的 **引爆** 沙箱,覆盖所有四个生态系统。 *引爆* 意味着在锁定、无根 Docker 容器内安装或导入软件包,并记录它做出的系统调用(通过 Tetragon eBPF 跟踪)——因此,仅在运行时才暴露自身的有效负载仍然会被捕捉。它默认关闭,需要在 Linux 主机上单独部署的服务(请参阅 [引爆](docs/detonation.md))。有关完整规则目录,请参阅 `docs/detection-rules.md`。 **聚焦模式**——将扫描器指向您自己的依赖项而不是(或除)实时源:`pkgsentry focus load `,或 `pkgsentry run -f ` 以扫描 *仅* 您的依赖项列表。请参阅 `docs/operations.md`。 ## 引擎 + 情报包 引擎是开源的(此存储库,**AGPL-3.0**)。检测内容——YARA 规则、哈希指纹、评分阈值、LLM 提示文本、行为链定义——在运行时从 **情报包** 中加载。一个最小的 **基线包** 在树内提供,以 **Apache-2.0** 许可证许可,以便其签名可以自由重用(第三方 YARA 规则保留其自己的许可证——请参阅 `NOTICE`),并且足以演示引擎可以针对明显恶意的测试输入工作。拥有自己调整好的威胁情报的操作员可以通过 `PKGSENTRY_INTEL_PATH` 环境变量插入 **私有叠加包**。 叠加语义: - 添加内容(YARA 规则、哈希种子、IOC 白名单、行为链 ID、关键字列表)→ 与基线 **UNION**。您的叠加添加到基线;基线规则继续运行。 - 标量调整(评分阈值、严重程度权重、提示文本)→ 如果叠加提供,则 **REPLACE**,否则继承基线。 这意味着私有操作员的部署持续锻炼公共基线,这防止了基线退化。该模型借鉴了 ClamAV:引擎是开放的,签名是可配置的。 ## 快速入门 需要 Docker + Docker Compose。 ``` git clone https://github.com/boredchilada/pkgsentry-oss cd pkgsentry-oss cp .env.example .env # .env 默认不启用 Discord 提醒;首次运行无需编辑 # 独立版(包含 PostgreSQL — 无需其他软件) docker compose -f docker-compose.standalone.yml up -d # 或者,如果您有自己的 Postgres:编辑 .env,然后 # docker compose up -d # 观察扫描器捕获实时 PyPI / crates.io / Go 模块流量 docker logs pkgsentry -f ``` 对于动态分析(无根 Docker + Tetragon 沙箱,所有生态系统),您需要一个具有 5.8+ BTF 支持的 Linux 主机。请参阅 `docs/detonation.md`。 ## 文档 | 指南 | 内容 | |-------|---------| | [操作](docs/operations.md) | 在生产中运行、日志、队列统计、调试 | | [情报包](docs/intel-pack.md) | 构建和加载私有检测叠加 | | [引爆](docs/detonation.md) | 部署无根 Docker + Tetragon 沙箱 | | [检测规则](docs/detection-rules.md) | 13 个检测层的完整规则目录 | | [回归测试](docs/regression-testing.md) | 已知坏/已知好语料库套件,用于捕获检测回归 | | [生态系统](docs/ecosystems-reference.md) | API 参考、每个生态系统的攻击面 | ## 生态系统覆盖范围 | 生态系统 | 监视列表 | 新软件包覆盖 | 增量摄取 | 引爆 | |---|---|---|---|---| | PyPI | 顶级 10K(hugovk/top-pypi-packages)+ 每个全新软件包 | RSS `packages.xml` + XML-RPC 变更日志 | XML-RPC 序列游标 | 是(无根 Docker + Tetragon) | | crates.io | 下载量排名前 10K | RSS `crates.xml` | RSS `updates.xml` | 是 | | Go 模块 | ~9K(GitHub stars + awesome-go + critical infra) | NDJSON 索引,通过数据库进行全新检测 | NDJSON 游标 | 是 | | npm | 顶级 N(注册表搜索流行度 + awesome-nodejs + critical infra) | CouchDB `_changes` 源,通过数据库进行全新检测 | `_changes` 序列游标 | 是 | ## 比较 几个已建立的工具解决了相邻问题,而 pkgsentry 并不是所有这些工具的替代品: - **Socket、Phylum、Endor Labs**——具有大型专有检测语料库、IDE 和 CI 集成的商业平台,以及依赖关系图分析。最适合希望获得托管、支持产品的团队。 - **Bumblebee**(Phylum,开源)——一个成熟的命令行扫描器,专注于 PyPI 和 npm。 - **OSV-Scanner**——将依赖项与已知漏洞数据库(CVE)进行匹配,这是一个与分类先前未知恶意软件包的问题截然不同的问题。 pkgsentry 是自托管的,并且故意专注于:一个引擎覆盖四个生态系统(PyPI、crates.io、Go 和 npm),对全新软件包进行首次发布扫描,所有四个生态系统的无根 Docker + Tetragon 引爆沙箱,聚焦模式监控您自己的依赖项,以及插件加载的情报,以便您保留对检测内容的控制。它旨在为更喜欢运行自己的扫描器而不是依赖托管服务的操作员。 ## 已知限制 - **没有 Alembic 迁移。** 模式由 SQLAlchemy `create_all()` 管理(新表自动创建,幂等);已填充数据库上的新 *列* 需要手动 `ALTER TABLE`。 - **没有可重复构建验证**——引擎不会将您的扫描输出与另一个扫描器进行比较。一级对等测试脚本包含在 `tools/` 中;二级(重新获取 + 重新分析)需要网络访问 PyPI。 - **crates.io / Go 引爆构建是尽力而为**——观察所有生态系统的安装/导入行为,但某些 crates/modules 在沙箱内无法构建(恶意安装时代码仍然执行并被跟踪)。 - **基线情报包故意最小化**。它捕获明显恶意的输入(任何体面的静态扫描器都会捕获的输入)。维护者的私有叠加是产生操作上有用检测率的产物。 ## 安全性 披露:请参阅 `SECURITY.md`。请不要为活动漏洞提交公开问题。 ## 致谢 - **[t0asts](https://github.com/t0asts)**——关于 opengrep 静态分析集成的信息和指导。 ## 许可证 引擎(此存储库)是 **AGPL-3.0**——请参阅 `LICENSE`。基线情报包(`pkgsentry/intel/baseline/`)以 **Apache-2.0** 许可证许可,以便其检测签名可以自由重用;请参阅 `NOTICE`。
标签:AGPL许可证, Apache许可证, crates.io, Go, npm, PyPI, Ruby工具, URL发现, 威胁情报, 安全响应, 安全检测, 安全漏洞, 安全社区, 安全防护, 开发者工具, 开发者评论分析, 日志审计, 沙箱测试, 社交工程, 签名检测, 红队平台, 请求拦截, 软件供应链攻击, 软件包扫描, 逆向工具, 错误基检测, 静态代码分析