LamentXU123/secpipw
GitHub: LamentXU123/secpipw
LamentXU123/sec_pip 是一款用于防止 Python 供应链攻击的 pip 封装工具。
Stars: 14 | Forks: 4
# secpipw
` 可以完全忽略该严重级别及以下的警告。
例如,`--spip-ignore LOW` 会屏蔽 `LOW` 警告,而 `--spip-ignore MEDIUM`
会同时屏蔽 `LOW` 和 `MEDIUM` 警告。被忽略的警告不会被打印,
并且只能产生被忽略严重级别的检查将被跳过。
## 缓存
secpipw 默认将 PyPI 名称、发布时间和维护者电子邮件历史缓存存储在
用户的缓存目录中,因此相同的缓存可以在不同项目中重复使用。
设置 `SPIP_CACHE_DIR` 可覆盖缓存目录。
## 基准测试
使用以下命令运行本地基准测试:
```
python scripts/benchmark_install.py --runs 5 --warmups 0
```
添加 `--viztracer --viztracer-dir .tmp-perf/install-benchmark` 以生成
所测量的安装命令的每次运行的火焰图。
使用以下命令运行本地 VizTracer 热点路径基准测试:
```
python scripts/benchmark_viztracer.py --runs 3
```
默认基准测试比较 `pip install ruff` 和 `spip install ruff`,
同时对包下载和安装进行计时。它使用 `--no-cache-dir`、
`--no-deps`,并为每次测量的运行提供全新的 `--target` 目录,因此
结果侧重于重复安装一个众所周知的包主体,而不是
依赖树。Benchmark GitHub Actions 工作流会在相关的 `main` 分支更改时、按每周计划或通过手动触发运行。它将最新的
`benchmark.json` 发布到远程的 `benchmark-data` 分支,网站会根据该数据渲染出
`x1.0742` 样式的中位数比率。基准测试的更新不会推进
`main` 分支。
当 `secpipw` 检测到潜在风险时,会发出警告,警告级别取决于风险的严重程度。
目前,该项目包含几个主要检查点:
- [x] 伪装拼写错误检查:黑客经常使用“伪装的拼写错误”将恶意依赖包注入被投毒的源文件中。`secpipw` 会首先解析 `pip install` 将要下载的所有包,然后将非热门的已解析包名与本地热门包列表进行比较来检测这种情况。警告级别:
- 中等严重程度:`requsets` vs `requests`
- 中等严重程度:`panda` vs `pandas`
- 低严重程度:`sixth` vs `six`
- [x] 直接 URL 依赖检查:如果安装目标或已解析的依赖项使用了直接 URL、VCS URL 或 PEP 508 直接引用,`secpipw` 将发出 `MEDIUM` 警告。
- [x] 全新发布检查:如果选定的 PyPI 版本发布时间不到 8 小时,`secpipw` 将发出 `MEDIUM` 警告;如果发布时间不到 48 小时,`secpipw` 将发出 `LOW` 警告。
- [x] Yanked 版本检查:如果 pip 解析出的版本被标记为 yanked,`secpipw` 将使用 pip 的安装报告发出 `MEDIUM` 警告。
- [x] 归档哈希检查:如果 PyPI 发布元数据已可用,且选定的 wheel/sdist 摘要与已解析的归档哈希不匹配,`secpipw` 将发出 `HIGH` 警告。
- [x] 空描述检查:如果选定的 PyPI 发布元数据没有摘要并且没有长描述,`secpipw` 将发出 `LOW` 警告。
- [x] 可疑元数据 URL 检查:如果 PyPI 元数据指向短链接、原始 IP、嵌入式凭据或类似的可疑 URL,`secpipw` 将发出 `LOW` 警告。
- [x] 代码库不匹配检查:如果 PyPI 元数据指向的 GitHub/GitLab 代码库名称似乎与包名无关,`secpipw` 将发出 `LOW` 警告。
- [x] 维护者电子邮件域名漂移检查:如果包的维护者电子邮件域名与本地 `secpipw` 历史缓存相比发生了变化,`secpipw` 将发出 `LOW` 警告。
- [x] 零版本检查:如果选定的包版本是 `0.0` 或 `0.0.0`,`secpipw` 将发出 `LOW` 警告。
- [x] `.pth` 文件检测:如今的黑客不再直接在包内部注入恶意代码,而是将他们的恶意内容放在 `.pth` 文件中,并以 `import` 开头。`secpipw` 仅在安装后检查已安装的文件系统差异。警告级别始终为 `MEDIUM`,并且 `secpipw` 会询问是否删除可疑的已安装 `.pth` 文件。
- [ ] TODO ...