AvixoSec/sarix

GitHub: AvixoSec/sarix

基于大语言模型的代码安全分析 CLI,专注于验证和降噪传统 SAST 扫描器的 SARIF 告警,通过上下文证据追踪减少误报并提供结构化可利用性评定。

Stars: 3 | Forks: 1

# Sarix 用于扫描器警报、代码审查和 CI 报告的安全 CLI。 Sarix 最初是一个直接的代码扫描器。现在其主要工作流变得更加强大: 接收来自 Semgrep、CodeQL 或其他 SARIF 工具的警报,打开匹配的 源文件,收集证据,并决定哪些值得关注。 它仍然可以直接扫描文件和文件夹。更大的价值在于验证: 更少的噪音、更清晰的证明,以及可以反馈回 CI 的报告。 [![PyPI](https://img.shields.io/pypi/v/sarix?color=8b5cf6)](https://pypi.org/project/sarix/) [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/34c359529f022443.svg)](https://github.com/AvixoSec/sarix/actions) ![Python 3.10+](https://img.shields.io/badge/python-3.10%2B-blue) [![License: MIT](https://img.shields.io/badge/license-MIT-green)](LICENSE) [![Docs](https://img.shields.io/badge/docs-sarix.avixosec.xyz-c084fc)](https://sarix.avixosec.xyz) ## 现在它是什么 Sarix 有三条实用的路径: - 面向不想记住命令的用户的引导式终端 UI - 针对单个文件、文件夹或 git diff 的直接扫描 - 用于需要真实源代码上下文的扫描器警报的 SARIF 验证 验证路径是最重要的一个。 扫描器擅长广度。它们能快速发现可疑的代码行。Sarix 会检查 警报背后的内容: - 输入来自哪里 - 它到达了哪个 sink 或信任边界 - 缺少了什么防护措施 - 为什么结论是 exploitable(可利用)、likely exploitable(可能可利用)、uncertain(不确定)或 dismissed(已驳回) - 什么修复才能真正降低风险 没有证据,就没有确切的结论。 ## 快速开始 引导式 UI: ``` pip install sarix sarix ``` 从代码库安装: ``` python -m sarix ``` 在菜单中选择一个路径: - 扫描文件 - 扫描文件夹 - 审查 git diff - 验证 SARIF 文件 - 构建证明包 - 运行 judge(审判)和 skeptic(怀疑)模式 直接命令依然有效: ``` sarix security src/app.py sarix scan src --task security --output sarif > sarix.sarif sarix diff --task security ``` 本地模型: ``` ollama serve sarix security src/app.py --provider ollama ``` ## 套餐计划 Sarix 采用免费增值模式: | 功能 | 免费 (15 次调用/天) | Pro ($5/月) | |---------|---------------------|----------------| | `scan`、`review`、`security`、`diff` | 15 次调用/天 | 50 次调用/天 | | 不带 `--judge` 的 `verify` | 无限制 | 无限制 | | `verify --judge` | — | 按警报数量折扣计费 | | `verify --skeptic` | — | 包含在 judge 模式中 | | `--artifact-dir` | — | 完整的 artifact 包 | | `sarix full` | — | Review + bugs + security | 激活 Pro: ``` sarix config # → 添加/更改 license key ``` ## 验证扫描器警报 首先运行你的扫描器: ``` semgrep scan --config auto --sarif > semgrep.sarif ``` 然后让 Sarix 导入警报并附加本地源代码上下文: ``` sarix verify semgrep.sarif --source . --output markdown ``` 实用的验证模式: ``` sarix verify semgrep.sarif --source . --preview-context sarix verify semgrep.sarif --source . --fail-on likely_exploitable sarix verify semgrep.sarif --source . --judge --skeptic --profile auto --provider openai sarix verify semgrep.sarif --source . --artifact-dir .sarix-proof ``` 纯导入模式是保守的。它将扫描器警报保持为 `uncertain`(不确定)。 Judge(审判)模式可以升级、降级或驳回警报。Skeptic(怀疑)模式会在 CI 必须信任严重结论之前,再次检查它们。 典型摘要: ``` Blocked: 0 exploitable issue(s) Likely exploitable: 0 Needs review: 42 Dismissed: 0 ``` 尝试本地固件: ``` sarix verify examples/semgrep-verify/semgrep.sarif \ --source examples/semgrep-verify/project \ --output markdown ``` 框架 fixtures 位于 `examples/framework-profiles` 中。 ## 证据格式 Sarix 使用结构化结论: - `exploitable` - `likely_exploitable` - `uncertain` - `probably_false_positive` - `not_exploitable` 示例: ``` ### CS-AUTH-001: Tenant isolation bypass - Verdict: `exploitable` - Severity: `high` - Confidence: `high` - Exploitability: `91/100` - Location: `api/projects.py:88` - CWE: `CWE-862` #### Evidence - Source: `request.path_params["org_id"]` - Sink: `Project.query.filter_by(org_id=org_id)` - Missing guard: no membership check before project lookup #### Evidence path 1. `api/projects.py:82` - route accepts org_id from the request path 2. `api/projects.py:88` - query trusts org_id before checking membership ``` ## Web3 与智能合约安全 Sarix 支持 EVM 安全上下文,并验证由 Slither、Aderyn 或 Semgrep 发现的漏洞。它会检查 Solidity/Vyper 警报的执行上下文以过滤误报。 覆盖范围示例: - 重入攻击 (SWC-107):检查外部调用后状态是否发生改变。如果目标是受信任的或已锁定的,则予以驳回。 - 访问控制 (SWC-106):追踪调用者来源和修饰符验证。如果上游路由强制执行角色检查,则予以驳回。 - 预言机操纵:检测原始现货价格的使用。区分价值交换和信息读取。 - 未检查返回值 (SWC-104):验证是否检查了低级调用的返回值。 - 抢跑交易 (SWC-114):评估交易排序依赖性(AMM 滑点边界)。 智能合约扫描的验证示例: ``` slither . --sarif slither.sarif sarix verify slither.sarif --source contracts/ --output markdown --fail-on exploitable ``` ## 命令 核心: - `sarix` - `sarix ui` - `sarix security ` - `sarix scan --task security` - `sarix diff --task security` - `sarix verify --source .` - `sarix benchmark` 次要: - `sarix review ` - `sarix bugs ` - `sarix docs ` - `sarix explain ` - `sarix refactor ` ## 提供商 - OpenAI: `OPENAI_API_KEY` - Anthropic: `ANTHROPIC_API_KEY` - Google Vertex AI: `GOOGLE_CLOUD_PROJECT` 和 ADC - Ollama: 本地 `ollama serve` - OpenAI 兼容:来自 `sarix config` 的自定义标签 OpenAI 兼容的预设包括 OpenRouter、Groq、Together AI、Mistral、xAI、 Fireworks、DeepSeek、Perplexity、Cerebras、Cohere 和 Azure AI Foundry。 ## 输出 ``` sarix security app.py --output markdown sarix security app.py --output json sarix security app.py --output sarif > sarix.sarif sarix verify semgrep.sarif --source . --output sarif > verified.sarif ``` SARIF 可以上传到 GitHub 代码扫描。 ## 隐私 Sarix 不需要托管账户或仓库连接。 - Ollama 将分析保留在本地。 - BYOK 提供商使用你自己的密钥。 - 项目配置无法设置 `api_key`、`base_url` 或 `default_provider`。 - 项目配置发现仅限于 `$HOME`。 - 大文件可以在 prompting 之前压缩为代码映射。 云提供商仍然会接收到选定的代码上下文。当代码必须保留在本机时,请使用 Ollama。 ## 基准测试 内置的基准测试是一项冒烟测试:10 个有漏洞的 Python 案例和 2 个干净的 误报陷阱。它对于检查提供商行为和 prompt 漂移很有用。它并非公开声称 Sarix 比其他扫描器更好。 ``` sarix benchmark --models gpt-5.4 llama3 sarix benchmark --json > benchmark-results.json ``` 公开的基准测试声明需要确切的案例、命令、预期结论、原始 结果、模型、提供商和运行日期。 ## GitHub Action 验证扫描器 SARIF: ``` - run: | python -m pip install semgrep semgrep scan --config auto --sarif --output semgrep.sarif - uses: AvixoSec/sarix@v0.4.0 with: mode: verify path: . sarif-input: semgrep.sarif output: sarif fail-on: exploitable judge: "true" skeptic: "true" profile: auto ``` 直接扫描: ``` - uses: AvixoSec/sarix@v0.4.0 with: provider: openai api-key: ${{ secrets.OPENAI_API_KEY }} task: security path: . output: sarif ``` ## 开发 ``` git clone https://github.com/AvixoSec/sarix.git cd sarix pip install -e ".[dev]" pytest tests -v ruff check . ``` ## 许可证 MIT。详见 [LICENSE](LICENSE)。
标签:AI风险缓解, Bug Detection, CISA项目, CLI, CodeQL, DevSecOps, DLL 劫持, Git Diff, LLM, Python, Refactoring, SARIF, Semgrep, TUI, Unmanaged PE, WiFi技术, WordPress安全扫描, 上游代理, 人工智能, 代码审查, 大语言模型, 安全扫描, 安全报告, 安全评估工具, 提示注入防御, 无后门, 时序注入, 源代码安全, 用户模式Hook绕过, 终端UI, 逆向工具, 错误基检测, 防御框架, 静态代码分析