mgalgs/aur-sleuth

GitHub: mgalgs/aur-sleuth

一个利用 LLM 对 AUR 软件包在构建前进行安全审计的工具,支持与 yay 和 makepkg 集成实现自动化检查。

Stars: 33 | Forks: 2

# aur-sleuth 一个由 LLM 驱动的 Arch 用户仓库(AUR)软件包安全审计工具。 `aur-sleuth` 会对 AUR 软件包进行深入的安全分析。它可以独立运行,也可以通过一个单独的 shell 包装脚本(`makepkg-with-sleuthing`)将其与 `makepkg` 集成: ``` # 在不构建或安装的情况下审计来自 AUR 的 package aur-sleuth package-name # 审计一个 package,如果通过审计,则使用 yay 构建并安装 yay --makepkg makepkg-with-sleuthing package-name # 审计,然后构建并安装本地 package(位于包含 PKGBUILD 的目录中) makepkg-with-sleuthing -si # 使用 `yay --save` 将 aur-sleuth 设置为 yay 的默认 makepkg。 # 在此之后,你可以像平时一样运行 `yay` # (无需 `--makepkg makepkg-with-sleuthing`),它会自动审计 # 已安装/更新的 package。 yay --makepkg makepkg-with-sleuthing --save ``` 如果你只想查看审计结果,但*不想*阻止实际的安装过程(以防出现高误报率——这在很大程度上取决于所使用的模型),请设置 `AUDIT_FAILURE_FATAL=false`(请参阅下文的“配置”部分)。 ## 演示 以下是它在实际操作中,捕捉臭名昭著的[恶意 `google-chrome-stable` 软件包](https://www.reddit.com/r/archlinux/comments/1me632m/is_this_another_aur_infect_package/) 中恶劣行径的过程: ![屏幕录制](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/11650b3a84054331.gif) ## 动机 最近,AUR 中被上传了一些隐蔽的恶意软件包。该工具通过使用 LLM 在构建前分析 AUR 软件包的潜在安全问题,从而帮助检测此类问题。 `aur-sleuth` 会对 `PKGBUILD` 中 `source` 数组里的所有文件,以及安全审计 LLM 认为值得关注的、来自实际软件包源码的任何其他文件执行安全审计。 这有助于兑现开源软件最伟大的承诺之一:通过审计你在机器上运行的应用程序的源代码来保障安全。在过去,这其实并不太现实,因为需要审查的代码实在太多了。但在如今这个拥有快速、廉价且高效的 LLM 的世界里,这项增强安全性的承诺变得极具吸引力。随着 LLM 变得更快、更便宜,我们完全有理由不去审计你在机器上运行的每一行代码。而这只有在开源的世界里才可能实现! ## 安全注意事项 - 本工具旨在*辅助*安全审计,而不能取代人工的准确判断 - 在安装来自 AUR 的软件包之前,请务必审查代码 - LLM 的分析并非万无一失,可能会产生误报或漏报 - 请确保你的 API 密钥安全,并监控其使用情况 ## 安装 *(AUR 软件包即将推出...)* 1. 安装依赖项: sudo pacman -S uv 2. 克隆本仓库: git clone https://github.com/mgalgs/aur-sleuth.git cd aur-sleuth 3. 安装脚本。 **系统级安装(需要 sudo):** sudo make install 这会将 `aur-sleuth` 和 shell 包装脚本 `makepkg-with-sleuthing` 安装到 `/usr/local/bin`。 **用户本地安装(无需 sudo):** make install PREFIX=$HOME/.local 这会将脚本安装到 `$HOME/.local/bin`。请确保此目录在你的 `PATH` 中。 或者,你也可以直接下载 [`aur-sleuth`](https://raw.githubusercontent.com/mgalgs/aur-sleuth/refs/heads/master/aur-sleuth) 和 [`makepkg-with-sleuthing`](https://raw.githubusercontent.com/mgalgs/aur-sleuth/refs/heads/master/makepkg-with-sleuthing),并将它们放入你的 PATH 中。 ## 配置 该工具可以通过环境变量进行配置: - `OPENAI_API_KEY`:你的 API 密钥。这是必填项。 - `OPENAI_BASE_URL`:API endpoint。如果未设置,默认为 OpenRouter。 - `OPENAI_MODEL`:要使用的模型。默认为 `qwen/qwen3-235b-a22b-2507`。 - `MAX_LLM_JOBS`:最大并发 LLM 调用数。默认为 `3`。 - `NUM_FILES_TO_REVIEW`:除了 `source` 数组中列出的文件外,还需要审查的文件数量。默认为 `10`。 - `LLM_TEMPERATURE`:LLM 的 temperature 参数 (0.0-2.0)。如果未设置,则使用模型默认值。 - `LLM_TOP_P`:LLM 的 top-p 参数 (0.0-1.0)。如果未设置,则使用模型默认值。 - `LLM_REASONING_EFFORT`:受支持的推理模型的 reasoning effort 参数 (`low`, `medium`, `high`)。默认为 `high`。 - `AUDIT_FAILURE_FATAL`:审计失败是否应为致命错误(报错退出)。设置为 `false` 可使审计失败变为非致命错误。默认为 `true`。 你可以直接在 shell 中设置这些环境变量,或者将它们添加到配置文件中。该工具会自动从 `/etc/aur-sleuth.conf`(系统级)或 `~/.config/aur-sleuth.conf`(用户级)加载配置,并且用户级配置具有更高的优先级。 配置文件应采用 INI 格式: ``` [default] OPENAI_API_KEY = your-api-key OPENAI_BASE_URL = your-base-url OPENAI_MODEL = your-model MAX_LLM_JOBS = desired-concurrency LLM_TEMPERATURE = 0.7 # Omit to use the model default LLM_TOP_P = 0.9 # ditto LLM_REASONING_EFFORT = high # low | medium | high AUDIT_FAILURE_FATAL = false # Set to false to make audit failures non-fatal ``` ### 使用 OpenRouter 的示例 ``` [default] OPENAI_API_KEY = sk-or-v1-7f8...194 OPENAI_BASE_URL = https://openrouter.ai/api/v1 OPENAI_MODEL = qwen/qwen3-30b-a3b-instruct-2507 MAX_LLM_JOBS = 10 ``` ### 使用 OpenAI 的示例 ``` [default] OPENAI_API_KEY = sk-proj-EW...KA OPENAI_BASE_URL = https://api.openai.com/v1 OPENAI_MODEL = gpt-5-mini MAX_LLM_JOBS = 5 ``` ### 使用本地 ollama 实例的示例 ``` [default] OPENAI_API_KEY = ollama OPENAI_BASE_URL = http://localhost:11434/v1 OPENAI_MODEL = llama3.1:8b MAX_LLM_JOBS = 1 AUDIT_FAILURE_FATAL = false ``` ### 审计结果的含义 `aur-sleuth` 会报告每个文件的状态以及总体结果: - `SAFE`:审计成功;未发现问题。 - `UNSAFE`:发现问题;请勿安装。 - `INCONCLUSIVE`:审计无法完成(LLM/API 错误、模型输出格式错误等)。默认情况下,这会被视为审计失败(非零退出码)。 - `SKIPPED`:该文件被有意跳过未进行审计(例如,检测到为二进制文件)。这本身**不会**导致审计失败,但会降低审计覆盖率。 ## 用法 ### 1. `aur-sleuth`(独立审计) 对软件包内容执行智能体(agentic)安全审计。它不会构建软件包。 **用法:** ``` usage: aur-sleuth [-h] package_name [--clone-url CLONE_URL] [--output OUTPUT] [--model MODEL] [--base-url BASE_URL] [--reasoning-effort {low,medium,high}] [--max-llm-jobs MAX_LLM_JOBS] [--num-files-to-review NUM_FILES_TO_REVIEW] Run a security audit on an AUR package. positional arguments: package_name Name of the AUR package. options: -h, --help show this help message and exit --clone-url CLONE_URL Optional custom clone URL for the AUR package. Defaults to https://aur.archlinux.org/{package_name}.git. --output OUTPUT Output format. Supported formats: rich, plain. Defaults to rich. --model MODEL LLM to use (overrides environment and config file settings) --base-url BASE_URL Base API URL (OpenAI API compatible) to use (overrides environment and config file settings) --reasoning-effort {low,medium,high} Reasoning effort to request from the LLM (default: high) --max-llm-jobs MAX_LLM_JOBS, -j MAX_LLM_JOBS Maximum number of concurrent LLM audit jobs (default: 3) --num-files-to-review NUM_FILES_TO_REVIEW, -n NUM_FILES_TO_REVIEW Target number of files to audit jobs (default: 10) ``` 审计过程受会话 token 限制(默认:100,000 个 token),以管理 API 使用量。 **示例:** - **按名称审计软件包(从 AUR 克隆):** aur-sleuth google-chrome-stable - **审计现有的本地 pkgdir:** aur-sleuth --pkgdir /path/to/pkgdir - **使用自定义克隆 URL 进行审计:** aur-sleuth --clone-url https://example.com/repo.git package-name - **使用纯文本输出:** aur-sleuth --output plain package-name 审计完成后,如果认定其安全,工具将在克隆时打印出临时目录的路径,或者保持你现有的 `--pkgdir` 原封不动。然后你可以检查这些文件,如果你选择继续,可以从该目录中手动运行 `makepkg`。 ### 2. `makepkg-with-sleuthing`(包装模式) 此模式用于将审计集成到你现有的 `makepkg` 工作流中,例如与 `yay` 等 AUR 助手配合使用。 **结合 `yay` 使用:** 审计软件包,如果通过则进行安装: ``` yay --makepkg makepkg-with-sleuthing package-name ``` 你可以像这样持久化保存 `--makepkg` 设置: ``` yay --makepkg makepkg-with-sleuthing --save ``` 这样你就不必在每次调用 `yay` 时都传递 `--makepkg` 参数了。只需像往常一样使用它,审计就会自动执行: ``` yay -S package-name ``` **直接使用:** 你也可以直接调用该包装脚本来代替 `makepkg`。只需将 `makepkg` 的参数传递给它即可: ``` # 在包含 PKGBUILD 的目录中 makepkg-with-sleuthing -si ``` 对于某些 makepkg 操作,如 `--verifysource`、`--nobuild`、`--geninteg`、`-o` 和 `-g`,该包装脚本会自动跳过审计。 ## 工作原理 - `aur-sleuth` 是一个 Python 脚本,它通过按名称从 AUR 克隆来审计软件包,或者使用 `--pkgdir /path/to/pkgdir` 审计现有目录。 - `makepkg-with-sleuthing` 是一个小型 shell 脚本,它首先运行 `aur-sleuth --pkgdir .` 来审计当前的 PKGBUILD 和源码,如果审计通过,接着会执行 `/usr/bin/makepkg`。 ## 支持的 LLM 提供商 任何兼容 OpenAI 的 API 服务器 ## 贡献 欢迎提交贡献!请随时提交 issue 或 pull request。 ## 许可证 MIT
标签:Arch Linux, AUR, Cutter, DLL 劫持, Petitpotam, 代码分析, 凭证管理, 大语言模型, 逆向工具