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/) 中恶劣行径的过程:

## 动机
最近,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, 代码分析, 凭证管理, 大语言模型, 逆向工具