cheese-cakee/overtrust

GitHub: cheese-cakee/overtrust

一款纯离线、确定性的工作站安全扫描器,用于发现开发环境中已拥有密钥访问权限的实体并量化信任风险。

Stars: 1 | Forks: 0

Overtrust demo

Overtrust is an AI-era workstation security scanner. Deterministic. No LLMs.

License Version C++17 Platform

``` 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, 无云依赖, 时序注入, 本地安全, 环境变量扫描, 确定性规则, 终端安全, 输入验证, 零信任, 静态分析, 香农熵