这个项目能做什么

# Zentra CLI Zentra 是一款开源、AI 驱动的应用安全 CLI,专为开发者设计。它通过框架分析、威胁建模、静态分析(SAST)、供应链、API 和基础设施即代码(IaC)扫描器来扫描代码库中的安全风险。它支持本地运行,提供交互式终端界面,也可在 CI 流水线中无头运行。二进制文件名为 `zentra`。 ## 功能特性 - **无头 CI 模式**,适用于 GitHub Actions 和 GitLab 合并请求流水线。 - **LLM 驱动的扫描编排**,支持 Anthropic、兼容 OpenAI 的提供商、Claude CLI 及实验性 Codex CLI 提供商。 - **动态浏览器渗透测试模式**,适用于授权目标。 - **多种输出格式**:Markdown、JSON、SARIF 和样式化 HTML,输出至 `.zentra/` 目录。 - **静态加密的凭据存储**(Windows 上使用 DPAPI,Unix 上使用 `0600` 权限文件)。 ## 安装 ### 快速安装(推荐) 无需 Rust 工具链、仓库克隆或构建步骤。 ```bash curl --proto '=https' --tlsv1.2 -LsSf https://github.com/johannus22/zentra/releases/latest/download/zentra-cli-installer.sh | sh ``` 对于 Windows PowerShell: ```powershell powershell -ExecutionPolicy Bypass -c "irm https://github.com/johannus22/zentra/releases/latest/download/zentra-cli-installer.ps1 | iex" ``` 之后打开新的终端窗口,以便 `zentra` 可用。如需手动安装,请从 [Releases 页面](https://github.com/johannus22/zentra/releases) 下载构建版本。 > **Linux 注意事项:** 该二进制在运行时链接 `libdbus` 以访问系统钥匙串。在最小化或无头镜像上,请先安装它(`sudo apt-get install -y libdbus-1-3` 或等效命令)。或者,设置 `ZENTRA_NO_OS_KEYCHAIN=1` 以使用基于加密文件的凭据存储。 ### 从源码安装 本地构建并运行: ```bash cargo build ``` 从仓库检出安装二进制: ```bash cargo install --path . ``` ## 使用方法 TUI 是本地配置提供商、启动扫描和查看结果的主要体验。主菜单分组显示静态应用安全测试(SAST)、动态应用安全测试(DAST)和杂项操作。 ### 扫描命令 仅运行一个扫描器家族: ```bash zentra scan --only sast zentra scan --only supply-chain zentra scan --only api zentra scan --only iac ``` 使用 `--pack` 为每个扫描器提供经过上下文检查的仓库打包。扫描状态存储于 `.zentra/checkpoint.json` 以支持增量运行。SAST 最多可使用 50 轮 ReAct 提供商;其他扫描器最多使用 30 轮。 本地 `zentra scan` 运行包含一个永久的只读聊天面板。聊天回答有界且经过编辑的扫描和仓库问题,使用只读配置文件(`list_files`、`read_file`、`grep_code` 和有界 Git 命令)。它可以建议类型化的聚焦/重跑或漏洞类别操作,但模型输出或工具调用均无法在本地确认前应用这些操作。确认的操作存储在检查点中,仅在下次扫描时应用。聊天在 `zentra ci` 或其他无头扫描路径中不可用。 ### CI 安全扫描 Zentra 包含专用 CI 命令: ```bash zentra ci ``` `zentra ci` 并非 `zentra scan` 的别名。它检测 GitHub Actions 或 GitLab CI,确认作业在 PR/MR 流水线中运行,运行聚焦安全扫描器(无 TUI),写入 CI 工件,并仅针对达到或超过失败阈值的发现或扫描器/系统失败而失败。 默认情况下,`zentra ci` 会在任何 **严重或高** 级别发现时阻止 PR/MR。中、低和信息级发现会被报告但不会导致作业失败。 #### 失败阈值 设置 `ZENTRA_CI_FAIL_THRESHOLD` 环境变量(取值为 `critical`、`high`、`medium`、`low`、`info` 之一),或使用 `.zentra/config.json` 中的 `fail_threshold` 字段持久化该策略。 GitHub Actions 作业示例: ```yaml - name: Run Zentra CI env: ZENTRA_API_KEY: ${{ secrets.ZENTRA_API_KEY }} ZENTRA_PROVIDER_MODEL: ${{ vars.ZENTRA_PROVIDER_MODEL }} ZENTRA_CI_FAIL_THRESHOLD: critical run: zentra ci ``` #### GitLab CI GitLab CI 工作流附带第二个作业,用于推送至 `staging` 的流水线。它运行完整仓库扫描,绝不使流水线失败,并创建或更新一个带有 `security` 和 `zentra-triage` 标签的 GitLab Issue。使用具有 `api` 范围的个人访问令牌作为遮蔽的 CI/CD 变量。 CI 工件位于 `.zentra/ci-report.md`、`.zentra/ci-report.json` 和 `.zentra/ci-report.html`。 #### CI 环境变量 | 变量 | 必需 | 说明 | |----------|----------|-------| | `ZENTRA_API_KEY` | 是 | 机密——LLM 提供商 API 密钥 | | `ZENTRA_PROVIDER_BASE_URL` | 是 | 机密或变量——例如 `https://api.anthropic.com` | | `ZENTRA_PROVIDER_MODEL` | 是 | 变量——例如 `claude-sonnet-5` | | `ZENTRA_PROVIDER_KIND` | 否 | 默认为 `openai_compat` | | `ZENTRA_PROVIDER_REASONING_EFFORT` | 否 | 传递给兼容 OpenAI 的提供商 | | `ZENTRA_PROVIDER_CONTEXT_WINDOW` | 否 | 覆盖提供商的默认上下文窗口 | | `ZENTRA_CI_FAIL_THRESHOLD` | 否 | 阻止 PR 的最低严重级别 | 如果 `ZENTRA_API_KEY`、`ZENTRA_PROVIDER_BASE_URL` 或 `ZENTRA_PROVIDER_MODEL` 均未设置,`zentra ci` 将回退到通过 `zentra config setup` 配置在 `~/.zentra/config.toml` 中的配置文件。 ### 生成 CI 工作流 ```bash zentra init --ci github # 创建 GitHub Actions 工作流 zentra init --ci gitlab # 创建 GitLab CI 作业 ``` ### 渗透测试模式 Zentra 包含针对实时 Web 目标的授权动态渗透测试模式: ```bash zentra pentest --url https://target.example --authorized \ --allow-host target.example \ --allow-host api.target.example ``` `--authorized` 标志是必需的,因此意外扫描将默认失败关闭。仅对您拥有或明确获准测试的系统运行此模式。使用 `--exclude-path` 排除路径,使用 `--scope-domain` 允许某个域及其所有子域。 渗透测试模式使用 `zentra/pentest-sandbox:0.1.0` Docker 镜像作为其隔离工具链。设置 `ZENTRA_SANDBOX_IMAGE` 和 `ZENTRA_SANDBOX_VERSION` 以使用自定义镜像。一次渗透测试运行使用三个沙盒代理(侦察、利用、验证),并生成包含 CVSS v3.1 基础向量的报告。 输出目录: - 在已初始化的项目内:`./.zentra/pentest/<host>/<run-id>/` - 在项目外:`<Documents>/Zentra/pentest/<host>/<run-id>/`(或配置的 `output_dir`) ### 其他命令 ```bash zentra init # 创建 .zentra/config.json zentra scan --only sast # 运行一个扫描器家族 zentra ci # 无头 PR/MR CI 扫描 zentra ci --refresh-architecture zentra ci --full --report-only # 完整扫描而不阻止 staging 流水线 zentra security verify-audit [session] ``` ## 安全说明 - Zentra 将提供商凭据存储在项目目录之外加密的机密存储中。DPAPI 保护 Windows 上的数据加密密钥;Unix 使用严格的文件权限和可用的钥匙串后端。 - 文件工具阻止路径遍历并限制文件读取。 - 交互式聊天使用独立的有界只读工具配置文件。 - 默认安全外壳记录防篡改的审计链,门控工具调用,并标记不受信任的工具输出。设置 `ZENTRA_SECURITY=hardened` 以强制响应绑定和注入中止;仅对受信任的本地开发使用 `ZENTRA_SECURITY=off`。 - 使用 `zentra security verify-audit [session]` 验证审计链。 - 当所需二进制或历史不可用时,Git 历史和依赖审计工具会优雅降级。 ## 项目结构 - `.zentra/config.json` — 项目配置 - `.zentra/checkpoint.json` — 增量运行的扫描状态 - `.zentra/reports/findings.html` — HTML 报告 - `.zentra/architecture.md` — 框架分析输出,用作 CI 上下文 请勿将机密或扫描状态提交到版本控制中。