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, 无后门, 逆向工具, 错误基检测, 静态代码分析