cheese-cakee/overtrust
GitHub: cheese-cakee/overtrust
一款纯离线、确定性的工作站安全扫描器,用于发现开发环境中已拥有密钥访问权限的实体并量化信任风险。
Stars: 1 | Forks: 0
Overtrust is an AI-era workstation security scanner. Deterministic. No LLMs.
```
OVERTRUST │ Trust Score: 34/100 [████████░░░░░░░░░░░░░░░░] CRITICAL
───────────┼───────────────────────────────────────────────────────────────────
Scan Log │ Overview │ Findings (8)
───────────┤ ● 3 critical │ [CRIT] AWS credentials file [9.0]
.env │ ● 2 high │ [CRIT] Anthropic key in .env [9.0]
creds │ ● 1 medium │ [CRIT] Auth provider extension [9.5]
pkg.json │ ● 1 low │ [HIGH] Extension terminal access [8.0]
Dockerf.. │ │ [HIGH] SSH private key exposed [7.5]
✓ done │ Press v for graph │ [HIGH] Debug adapter [8.0]
───────────┴───────────────────────┴───────────────────────────────────────────
Detail
Rule: EXT-003 │ File: .vscode/extensions/ai-code-helper/package.json
Severity: CRITICAL │ Score: 9.5
Extension 'ai-code-helper' is an authentication provider
contributes.authentication — can intercept auth tokens
```
### 安装
**Linux / macOS**
```
git clone https://github.com/cheese-cakee/overtrust.git
cd overtrust
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j$(nproc)
./build/overtrust
```
**Windows**
```
git clone https://github.com/cheese-cakee/overtrust.git
cd overtrust
cmake -B build -DCMAKE_BUILD_TYPE=Release -G "Visual Studio 17 2022"
cmake --build build --config Release -j
.\build\Release\overtrust.exe
```
### 用法
```
./build/overtrust # scan $HOME (TUI mode)
./build/overtrust /path/to/project # scan a specific directory
./build/overtrust demo/ # try the included demo fixtures
./build/overtrust --no-tui # headless JSON output to stdout
./build/overtrust --report out.json # write full JSON report to file
./build/overtrust --exit-code # exit 1 if any findings found (CI use)
```
| 标志 | 描述 |
|------|-------------|
| `
` | 要扫描的目录(默认:`$HOME`) |
| `--no-tui` | 无头模式 — 将发现结果以 JSON 格式打印到标准输出 |
| `--report ` | 扫描后将完整的 JSON 报告写入文件 |
| `--exit-code` | 如果存在任何发现,则以代码 `1` 退出(在 CI 中很有用) |
| `--version` | 打印版本并退出 |
| `-h`, `--help` | 显示用法 |
### 检测内容
| 类别 | Overtrust 发现的内容 |
|----------|----------------------|
| **IDE 扩展** | 终端访问、身份验证提供程序、调试适配器、始终开启的激活 |
| **npm 包** | Preinstall/postinstall 脚本,`curl\|bash` 模式 |
| **Dockerfiles** | Root 容器,`curl\|bash` RUN 指令 |
| **机密信息** | AWS 密钥、GitHub token、Anthropic/OpenAI 密钥、Stripe、PEM 证书 |
| **凭证文件** | `~/.aws/credentials`、`.env` 文件、SSH 私钥 |
| **Kubernetes** | `~/.kube/config` — 可能包含集群凭证和 bearer token |
| **Shell 历史记录** | `.bash_history`、`.zsh_history` — 可能包含以明文形式输入的机密信息 |
| **进程** | `CAP_SYS_PTRACE`、`CAP_SYS_ADMIN`、打开的敏感文件描述符 |
| **进程** | `SeDebugPrivilege`、`SeTcbPrivilege`、提升的 token、危险权限 |
| **AI 工具** | Cursor、Copilot、Codeium 以及其他能够访问您的机密信息的正在运行的工具 |
### 快捷键
| 按键 | 操作 |
|-----|--------|
| `↑` / `k` | 上一个发现 |
| `↓` / `j` | 下一个发现 |
| `v` | 切换图形视图(概览 ↔ 信任图画布) |
| `r` | 重新扫描 |
| `e` | 导出 JSON 报告并退出 |
| `?` | 切换帮助覆盖层 |
| `q` | 退出 |
### 信任分数
```
100 → 80 TRUSTED Green System looks clean
79 → 50 MODERATE Yellow Some risks, review findings
49 → 25 HIGH RISK Orange Significant exposure
24 → 0 CRITICAL Red Immediate action needed
```
分数 = `100 - clamp(Σ(finding.score) × 2, 0, 100)`
### 忽略路径
在扫描目录中创建 `.overtrustignore` 或 `.trustignore` 文件以跳过路径:
```
# 忽略本地开发目录
.dev-secrets/
vendor/
my-test-env/
```
以 `#` 开头的行是注释。文件/目录名和路径子字符串均可匹配。
### 演示
`demo/` 目录附带了一些故意设置的糟糕配置 — 这是一个现成的测试目标:
```
./build/overtrust demo/
# 预期 trust score:~0–15(Critical)
```
| 固件/测试用例 | 触发的内容 |
|---------|-----------------|
| `demo/.vscode/extensions/ai-code-helper/` | Terminal、身份验证提供程序、调试适配器、webview |
| `demo/.aws/credentials` | AWS 凭证文件 |
| `demo/.env` | OpenAI、Anthropic、Stripe、GitHub 密钥 |
| `demo/packages/evil-npm/` | preinstall 脚本中的 `curl \| bash` |
| `demo/Dockerfile` | `curl \| bash` + 没有 USER 指令 |
| `demo/scripts/deploy.sh` | 硬编码的机密信息 |
### CI 集成
```
# .github/workflows/overtrust.yml
- name: Run overtrust
run: |
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j$(nproc)
./build/overtrust ${{ github.workspace }} --exit-code --report overtrust.json
- name: Upload report
uses: actions/upload-artifact@v4
with:
name: overtrust-report
path: overtrust.json
```
`--exit-code` 会在发现任何结果时使该步骤失败。将 JSON 输出通过管道传递到您的安全仪表板或 SIEM。
### 架构
```
src/
├── main.cpp Entry point, CLI args, signal handling, TUI/headless dispatch
├── scanner/
│ ├── walker.cpp Recursive filesystem walker, skips noise dirs, respects ignore files
│ ├── classifier.cpp File type detection (path heuristics + magic bytes)
│ ├── manifest.cpp VS Code / npm / Dockerfile parsers → Findings
│ ├── secrets.cpp Keyword filter → regex → entropy → FP guard
│ ├── procscanner_linux.cpp /proc caps, namespace inodes, sensitive FD scan
│ ├── procscanner_win.cpp Win32 process enumeration, token privileges, elevation check
│ └── engine.cpp ScanEngine: orchestrates all phases in a background thread
├── graph/
│ └── graph.cpp TrustGraph: DFS reachability, permission closure, Tarjan SCC
├── tui/
│ ├── app.hpp FTXUI App: 5-panel layout, live updates, keybindings
│ ├── splash.hpp Splash screen with ASCII banner
│ ├── widgets.hpp Reusable FTXUI elements (trust bar, finding rows, detail panel)
│ ├── colors.hpp Severity + score color palette
│ └── graph_view.hpp Compact tree + visual canvas graph renderers
└── report.cpp JSON report export
include/overtrust/
├── version.hpp Version constants (APP_NAME, VERSION)
├── types.hpp Finding, ScanState, ScanSummary, Severity, next_finding_id()
├── scanner.hpp ScanCallbacks, walk_directory, ignore file loading
├── classifier.hpp FileKind enum, classify_file()
├── manifest.hpp VsCodeExtManifest, NpmManifest, DockerfileManifest
├── secrets.hpp SecretMatch, scan_for_secrets(), shannon_entropy()
├── procscanner.hpp ProcessInfo, CapEntry, scan_processes(), is_ai_tool()
├── graph.hpp TrustGraph, GraphNode, GraphEdge, compute_trust_score()
├── engine.hpp ScanEngine
└── report.hpp write_json_report()
```
### 技术栈
| 组件 | 库 | 原因 |
|-----------|---------|-----|
| TUI | [FTXUI v5](https://github.com/ArthurSonzogni/FTXUI) | 声明式、界面美观、积极维护 |
| JSON | [nlohmann/json v3.11](https://github.com/nlohmann/json) | 单头文件,零烦恼 |
| 规则 | 硬编码 C++ | 零依赖,确定性,无 YAML 解析攻击面 |
| 文件系统 | `std::filesystem` (C++17) | 无依赖,跳过权限进行递归遍历 |
| 进程 | `/proc` 伪文件系统 | 零内核模块,只读 |
| 进程 | Win32 `CreateToolhelp32Snapshot` + `Advapi32` | 纯 Win32,无需管理员权限 |
| 构建 | CMake 3.16+ 及 `FetchContent` | 自动拉取 FTXUI 和 nlohmann/json |
### 常见问题解答
#### 它需要 root / 管理员权限吗?
不需要。Overtrust 仅读取它已有权访问的文件和 `/proc` 条目。任何它无法读取的内容都会被静默跳过。在 Windows 上,进程枚举无需提权即可工作 — 受保护进程的权限详情将被直接省略。
#### 有数据被发送到任何地方吗?
绝对不会。所有分析均在本地完成。没有遥测,没有崩溃报告,没有任何形式的网络调用。
#### 它与其他扫描工具有何不同?
- **离线优先** — 无需 API 密钥,无需云服务,不消耗 token
- **确定性** — 相同的输入始终产生相同的输出
- **AI 感知** — 专为具有广泛文件系统访问权限的 AI 编码工具所产生的新型攻击面而构建
- **单一二进制文件** — 一个静态链接的可执行文件,无运行时依赖
#### 为什么不直接使用 linter 或机密信息扫描器?
这些工具用于在代码中查找机密信息。而 Overtrust 用于查找当前已经*拥有*您的机密信息访问权限的实体 — 正在运行的进程、具有提升权限的 IDE 扩展、配置不当的容器,以及位于可读目录中的凭证文件。
### 许可证
MIT — 请参阅 [LICENSE](LICENSE)标签:AI安全, API密钥检测, AWS凭证, Bash脚本, C++17, Chat Copilot, DevSecOps, DNS 解析, HTTP头分析, JSONLines, SSH密钥, StruQ, TUI界面, 上游代理, 云安全监控, 安全助手, 安全扫描, 密钥泄露, 开源, 无LLM, 无云依赖, 时序注入, 本地安全, 环境变量扫描, 确定性规则, 终端安全, 输入验证, 零信任, 静态分析, 香农熵