entropyvortex/repoguard

GitHub: entropyvortex/repoguard

一个基于 LLM 的实验性仓库风险筛查工具,在克隆前识别恶意仓库与供应链威胁。

Stars: 2 | Forks: 0

# RepoGuard **再多一道防线(或尝试)在 `git clone` 之前。** 2026 年,星标是假的,README 是精心打磨的,恶意软件隐藏在 `postinstall` 脚本中。RepoGuard 在你克隆仓库 **之前** 使用一个 OpenAI 兼容的 LLM(默认是 xAI Grok)分析仓库—— 在几秒钟内给出风险评分、红旗标记和通俗易懂的解释。 **这是一个实验性的“衔尾蛇”。** 它能捕捉恶意仓库……但聪明的攻击者也可以尝试提示注入。 **尚未准备好用于生产。仅作实验。** 不喜欢什么?Fork 它并提交 PR。空洞的批评只是噪音。 ## 哲学 - **一个文件。没有魔法。** 整个工具是一个约 900 行的 Bash 脚本, 你可以在一次阅读中从头到尾看完,再决定是否信任它。 - **没有不寻常的依赖。** 唯一非系统自带的安装是 `curl` 和 `jq`;其余(`awk`、`sed`、`tr`、`mktemp`、`stat`、`grep`、 `getconf`)都是标准 POSIX 工具,任何开发者机器都已具备。 - **透明的信任边界。** 离开你机器的每一字节都在下方有文档说明。 没有遥测,没有分析。 - **CI 友好。** 退出码是一个稳定的约定,因此 `repoguard check ... || exit $?` 会如你所期望地工作。 ## 它实际做什么 给定一个 GitHub 仓库 URL,`repoguard check`: 1. 通过 GitHub API 获取仓库的公开元数据和安全设置、开放 Dependabot PR 以及公开的安全公告。 2. 从 `raw.githubusercontent.com` 获取 `README.md`、`SECURITY.md` 以及常见清单/安装文件 (`package.json`、`setup.py`、`pyproject.toml`、`requirements.txt`、 `install.sh`、`postinstall.js` 以及一些工作流文件)。 3. 将这些文件与一个系统提示一起发送到 OpenAI 兼容的聊天补全端点。 4. 解析模型的 JSON 判决,输出风险评分(0–100)、判定结果(`Safe` / `Warning` / `Danger`)、 红旗标记以及推荐操作。 5. 根据评分退出相应代码,以便 CI 管道和可选的 Git 包装器可以据此拦截克隆。 ### 提供商支持 **目前仅支持 GitHub**。GitLab 和 Bitbucket URL 会被明确拒绝, 而不是静默地生成仅作噪声的分析。提供商兼容性是一个小而受欢迎的 PR。 ## 需求 - `bash` 4+(macOS 自带 3.2 —— 如需要请 `brew install bash`) - `curl` 和 `jq` - 任意 OpenAI 兼容聊天补全端点的 API 密钥。 默认基础 URL 是 xAI 的 `https://api.x.ai/v1`,但你可以在 `repoguard setup` 时指向任何兼容的端点。 - 可选:一个 `GITHUB_TOKEN` 环境变量,用于解除 GitHub 的匿名速率限制(从 60 次/小时到 5000 次/小时)。 一次 `check` 大约会消耗十几个请求,因此未认证使用会迅速达到上限。 ## 安装 ### 推荐:先审计 ``` curl -fsSL https://raw.githubusercontent.com/entropyvortex/repoguard/HEAD/install.sh -o install.sh less install.sh # read it bash install.sh # then run it ``` ### 单行命令(如果你信任来源) ``` curl -fsSL https://raw.githubusercontent.com/entropyvortex/repoguard/HEAD/install.sh | bash ``` 两种方式都会将主脚本 `repoguard` 下载到 `~/.local/bin/repoguard` (权限 `0755`),创建 `~/.config/repoguard`(权限 `0700`),并将 `~/.local/bin` 添加到 PATH(在 `~/.bashrc` 或 `~/.zshrc` 中, 如果尚未存在)。对于 fish,安装器会打印一条手动 `set -gx PATH` 命令, 将其添加到 `~/.config/fish/config.fish`。 安装后,打开一个新 Shell(或运行 `hash -r` / `rehash`),以便命令哈希缓存识别新二进制文件。 ### 配置 ``` repoguard setup ``` 系统会提示你输入基础 URL、模型、API 密钥以及警告/中止的风险阈值。 配置文件将以 `600` 权限写入,这样同一台机器上的其他用户无法读取你的 API 密钥。 ## 用法 ``` repoguard check https://github.com/suspicious/repo ``` 标志: | 标志 | 效果 | |------|------| | `--verbose`, `-v` | 将每一步输出到标准错误 | | `--non-interactive` | 无颜色、无提示 —— 适合 CI | | `--json` | 在标准输出上输出原始模型判决,便于通过 `jq` 管道处理 | ### CI / 流水线 退出码是稳定的约定: | 码值 | 含义 | |------|------| | 0 | 安全(评分低于警告阈值) | | 1 | 警告(评分 ≥ 警告阈值) | | 2 | 中止(评分 ≥ 中止阈值 或 严重错误) | | 64 | 用法错误 | | 78 | 配置错误 | 典型流水线用法: ``` repoguard check --non-interactive --json "$TARGET" || exit $? ``` ### Git 包装器(可选) ``` repoguard enable-git-wrapper ``` 这会在 `~/.local/bin/git` 安装一个约 30 行的 shim,拦截 `git clone `,先运行 `repoguard check`,如果评分超过中止阈值则拒绝克隆。 其他 Git 命令(`git status`、`git commit`、`git push`、……)直接透传给真实的 Git 二进制文件。 在安装时确定真实 Git 的绝对路径并硬编码在包装器中,因此该包装器在 macOS(Apple Silicon / Intel Homebrew)、Linux 和 Nix 上行为一致—— 没有运行时 PATH 戏法,也没有自递归风险。 要移除它: ``` repoguard disable-git-wrapper ``` 检查状态并查看当前使用的是哪个 `git`: ``` repoguard status ``` ## 隐私与信任边界 RepoGuard 是一个安全工具,因此数据流必须明确。 **当运行 `repoguard check` 时离开你机器的内容:** 1. 目标的公开元数据、README、SECURITY.md 以及少量清单/安装文件, 从 GitHub 的公开端点(或设置了 `GITHUB_TOKEN` 时的认证端点)获取。 2. 上述内容加上系统提示,一起发送到你配置在 `setup` 时的 LLM 基础 URL。 **因此你正在检查的仓库 URL 会披露给该 LLM 端点。** 如果启用了 Git 包装器, 你 `git clone` 的每个仓库都会以这种方式披露。 3. 你的 API 密钥,通过 `Authorization: Bearer` 头发送到 LLM 端点。 它不会传输到其他地方。 **保留在你机器上的内容:** - 你的 API 密钥和配置(`~/.config/repoguard/config.json`,权限 `600`)。 - 任何私有仓库的内容——RepoGuard 仅获取 *公开* 的 GitHub 端点。 - LLM 的响应,仅在本地打印,永不持久化或转发。 如果你不想让第三方 LLM 提供商看到你克隆的仓库名称,请 **不要** 启用 Git 包装器—— 而是显式地对选择提交的 URL 使用 `repoguard check`。 ## 已知限制 RepoGuard 的判决是一个 **信号,而非证明**。该工具将攻击者可控的 README 和清单文件 发送给 LLM,并信任其 JSON 响应。一个足够有说服力的恶意 README 可能提示注入模型, 使其返回低风险评分。将该判决作为你决策的一个输入——不要仅凭绿色结果就跳过人工审查。 详见 [SECURITY.md](SECURITY.md) 获取完整威胁模型。 ## 安全报告 若发现破坏上述信任边界或让 RepoGuard 执行攻击者可控内容的漏洞, 请打开一个 [GitHub 安全公告](https://github.com/entropyvortex/repoguard/security/advisories/new) 而非公开问题。详见 [SECURITY.md](SECURITY.md) 了解披露范围、时间线和已知限制列表。 ## 许可证 MIT —— 参见 [LICENSE](LICENSE)。 欢迎贡献:提供程序兼容性(GitLab、Bitbucket、Gitea更好的提示工程、CI 流水线与测试, 这些 PR 都有很高价值。
标签:AI安全分析, CI集成, Dependabot, DLL 劫持, GitHub API, Grok, POSIX, README审计, SEO: AI代码审计, SEO: 仓库安全检查, SEO: 开源供应链安全, 二进制发布, 仓库风险检测, 依赖项扫描, 单文件工具, 后安装脚本, 大语言模型, 安全实验, 安全策略检测, 安全评分, 应用安全, 开源工具, 退出码, 防克隆, 风险判定