このプロジェクトについて

# Zentra CLI Zentraは、開発者向けのオープンソースのAI搭載アプリケーションセキュリティCLIです。フレームワーク分析、脅威モデリング、静的解析(SAST)、サプライチェーン、API、インフラストラクチャ・アズ・コード(IaC)スキャナを使用して、コードベースのセキュリティリスクをスキャンします。インタラクティブなターミナルインターフェースでローカル実行するか、CIパイプラインでヘッドレス実行できます。バイナリ名は`zentra`です。 ## 機能 - **ヘッドレスCIモード**: GitHub ActionsおよびGitLabマージリクエストパイプライン用。 - **LLMバックアップスキャナオーケストレーション**: Anthropic、OpenAI互換、Claude CLI、実験的なCodex CLIプロバイダーに対応。 - **動的ブラウザペンテストモード**: 認可されたターゲット用。 - **複数の出力形式**: `.zentra/`配下にMarkdown、JSON、SARIF、スタイル付きHTML。 - **暗号化された資格情報ストレージ**: 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の注意:** バイナリはOSキーリングアクセスのために実行時に`libdbus`にリンクします。最小限またはヘッドレスイメージでは、先にインストールしてください(`sudo apt-get install -y libdbus-1-3`または同等)。あるいは、`ZENTRA_NO_OS_KEYCHAIN=1`を設定して、暗号化されたファイルベースの資格情報ストアを使用します。 ### ソースからインストール ローカルでビルドして実行: ```bash cargo build ``` リポジトリのチェックアウトからバイナリをインストール: ```bash cargo install --path . ``` ## 使用法 TUIは、プロバイダーの設定、スキャンの開始、結果の確認を行うための主要なローカルエクスペリエンスです。メインメニューは、静的アプリケーションセキュリティテスト(SAST)、動的アプリケーションセキュリティテスト(DAST)、およびその他のアクションをグループ化します。 ### スキャンコマンド 1つのスキャナファミリーのみ実行: ```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`は**CriticalまたはHigh**の検出結果でPR/MRをブロックします。Medium、Low、Infoの検出結果は報告されますが、ジョブは失敗しません。 #### 失敗しきい値 `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`へのプッシュパイプライン用の2番目のジョブが含まれています。これは完全なリポジトリスキャンを実行し、パイプラインを決して失敗させず、`security`および`zentra-triage`ラベルを持つ1つの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.toml`で`zentra config setup`を使用して設定されたプロファイルにフォールバックします。 ### 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`を設定します。ペンテスト実行では3つのサンドボックスエージェント(Recon、Exploit、Validator)を使用し、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 # 1つのスキャナファミリーを実行 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コンテキストとして使用されるフレームワーク分析出力 シークレットやスキャン状態をバージョン管理にコミットしないでください。