l0lsec/snitch
GitHub: l0lsec/snitch
snitch 是一款本地运行的防御性 CLI 工具,用于盘点和扫描已安装的包、工具、扩展与二进制文件,并与安全公告、恶意软件包情报及静态分析规则交叉比对以发现可疑代码。
Stars: 0 | Forks: 0
# snitch
`snitch` 是一款防御性 CLI 工具,可以对您安装的每一个包、工具、扩展和二进制文件进行盘点,并将每一个项目与安全公告数据库、IOC feeds、启发式规则以及静态分析检查进行交叉比对。它在本地运行,缓存其获取的情报,并生成一份排好序的报告,以便您决定要移除哪些内容。
## 状态
Alpha 阶段。目前的 MVP 可以扫描 `pip`、`npm`、Homebrew、Go binaries、Cursor/VS Code extensions、通过 GitHub 克隆的仓库,以及位于 `$PATH` 上的任意 binaries。
## 安装
```
pipx install .
# 或者,用于开发
uv pip install -e ".[dev,ast]"
```
## 快速开始
```
snitch update # refresh advisory + malicious-package mirrors
snitch scan # scan every supported ecosystem
snitch scan --ecosystem pip,npm --deep
snitch inspect pip:requests@2.31.0
snitch report --format md --out report.md
```
## 检查内容
- **安全公告** — OSV.dev(涵盖 GHSA、PyPA、npm、Go、RubyGems、crates.io)。
- **已知恶意软件包** — [`ossf/malicious-packages`](https://github.com/ossf/malicious-packages) 的本地镜像。
- **启发式规则** — install/postinstall 脚本、近期发布、唯一维护者更迭、repo-URL 不匹配、typosquats。
- **静态分析** — 针对 `eval`、`child_process`、`subprocess`、base64+exec、动态 require/import 等的 JS (tree-sitter) 和 Python (`ast`) 规则。
- **Binaries** — SHA-256 + codesign +(可选)VirusTotal 哈希查询。不上传任何文件。
## 配置
`snitch` 将其所有数据保存在一个单一的隐藏目录中,这样多个检出的项目就不会互相污染。每次运行时,它会自动选择最佳位置:
1. **App-local(默认)** — `/.snitch/`,位于已安装的 snitch 包中 `pyproject.toml` 的旁边。当该目录可被发现且可写入时使用。`.snitch/` 目录会被自动添加到 `.gitignore` 中。
2. **XDG fallback** — macOS 上的 `~/Library/Caches/snitch/` 和
`~/Library/Application Support/snitch/`(或 Linux 上的 `$XDG_CACHE_HOME` /
`$XDG_CONFIG_HOME`)。在没有 project root 时使用 ——
通常是执行 `pipx install snitch` 安装到了 site-packages 中。
在所选目录内:
- `snitch.db` — SQLite cache(包含安全公告、恶意软件包索引、VT hashes、
扫描历史记录)。
- `malicious-packages/` —
[`ossf/malicious-packages`](https://github.com/ossf/malicious-packages) 的本地克隆。
- `ignore.toml` — 您的允许列表。
如果您之前运行过旧版本的 snitch 并且在 XDG 中存有数据,此次更改后的首次运行会自动将其迁移到 app-local 目录中,因此您无需重新下载包含 20 万条记录的镜像。
```
snitch where # print the resolved data dir and whether legacy data exists
snitch migrate # explicitly move XDG data into the app-local directory
snitch ignore path # print the allow-list path
```
可选的环境变量:
- `SNITCH_VT_API_KEY` — 用于 binary 哈希查询的 VirusTotal API key。
## 添加启发式规则
在 `src/snitch/heuristics/` 中放入一个返回 `Finding` 的新规则。在 orchestrator 中注册它。有关示例,请参见 `heuristics/npm_rules.py`。
## 许可证
MIT
标签:Blue Team, Python, 无后门, 逆向工具, 错误基检测, 静态代码分析