高速なユニバーサルコードセキュリティスキャナー、Rustで記述。バッテリー同梱:14言語対応、トリアージ用TUI、シークレット、ポスト量子監査、diff対応スキャンなど 𓃥
コード、シークレット、依存関係、暗号リスクに対する高速なローカルセキュリティスキャン。
オープンサイバーセキュリティハーネス 0sec に統合されています。
npx foxguard .
npx foxguard . # インストール不要
pipx install foxguard # PyPI からのビルド済み CLI
curl -fsSL https://foxguard.dev/install.sh | sh # ビルド済みバイナリ (macOS/Linux)
cargo install foxguard # ソースから
スタンドアロンバイナリインストーラーは GitHub リリースバイナリを checksums.txt と照合して検証します。リリースバイナリは GitHub アーティファクトアテステーションも公開しています。手動検証には gh attestation verify を使用するか、リリースの来歴を参照してください。
PyPI ホイールは Linux glibc 2.28+ (x86_64/ARM64)、macOS (Intel/Apple Silicon)、Windows x86_64 上の Python 3.9+ をサポートします。既存の Python 仮想環境では、代わりに python -m pip install foxguard を使用してください。これらは Rust コンパイラや実行時バイナリのダウンロードなしでネイティブ CLI をインストールします。Python API は提供されません。Alpine/musl ユーザーはスタンドアロンの Linux リリースバイナリを使用してください。
GitHub Action:
- uses: 0sec-labs/foxguard/[email protected]
with:
path: .
severity: medium
fail-on-findings: "true"
upload-sarif: "true"
pre-commit:
repos:
- repo: https://github.com/0sec-labs/foxguard
rev: v0.14.0
hooks:
- id: foxguard
統合: GitHub App、VS Code、Claude Code プラグイン、MCP サーバー。
foxguard-github-app は改行区切りの JSON ログを書き込みます。完了したスキャンと失敗したスキャンはそれぞれ event=foxguard.scan.completed と event=foxguard.scan.failed を使用し、相関用に delivery、installation、repository、PR、commit、duration、usage_scope フィールドを含みます。識別子はメトリクスラベルではなくログフィールドとして保持してください。
FOXGUARD_INTERNAL_ACCOUNTS に、自組織の GitHub アカウントと組織のカンマ区切りリストを設定します。マッチングは大文字小文字を区別しません。それ以外のオーナーは external に分類されます。リストが未設定またはオーナーが欠落している場合は unknown になります。外部アクティビティは有料顧客の証明ではなく、スキャンは人ではありません。
インストールレジストリは、起動時と毎時、GitHub の App インストール API の全ページと照合されます。更新に失敗した場合は既存の状態が保持され、同時実行の webhook が優先されます。疎な webhook メタデータは既知のアカウント詳細と観測されたリポジトリ名を保持します。これらの名前は、インストールがアクセス可能なリポジトリの完全なインベントリではありません。
FOXGUARD_INSTALLATIONS_PATH と FOXGUARD_PULL_REQUEST_JOBS_PATH は永続ストレージに保存してください。スキャン失敗と併せて foxguard.installations.reconcile_failed を監視してください。foxguard.installations.reconciled は、更新成功後の合計および internal/external/unknown のインストール数を報告します。FOXGUARD_PR_WORKERS は、測定されたスキャナーのピークメモリとコンテナのメモリ制限に基づいてサイズ設定してください。子プロセスの OOM kill は、ホスト型アプリケーションを再起動せずに発生する可能性があります。
foxguard . # すべてをスキャン
foxguard diff main . # main に対する新規検出のみ
foxguard tui . # 対話型ターミナルレビュー
foxguard secrets . # 漏洩した認証情報と鍵
foxguard sca . # OSV からの依存関係脆弱性
foxguard pqc . # 耐量子暗号監査
foxguard --format sarif . > results.sarif
foxguard --format semgrep-json . # Semgrep CLI 互換 JSON
foxguard --fix src/ または foxguard --fix src/app.py を使用して、サポートされているテイント修正をその場で適用します。ターゲットは正規のスキャンディレクトリまたは選択したファイルと照合され、その範囲外の検出はスキップされます。Python のコマンドインジェクション修正は、必要に応じて import subprocess を追加し、モジュールの docstring と future import を保持します。コミットする前に生成された変更を確認してください。
ネイティブコードスキャナーでのファイル読み取り、メタデータ、ディレクトリトラバーサルの失敗は、成功レポートを生成したりベースラインを上書きしたりする代わりに 2 で終了します。意図的な除外、および未サポート、バイナリ、またはサイズ超過のファイルはスキップのままです。スキャンカバレッジを確認する際は、スキップされたファイルの通知を検査してください。
foxguard tui . を実行し、矢印キーまたは Tab で Scan、Diff、Secrets、PQC を選択します。Diff モードでは、Enter を押す前に対象ブランチを入力します。ワイドなターミナルでは検出がその詳細の横に表示され、より小さなターミナルでは展開可能な詳細ビュー付きのリストを使用します。ソースコンテキスト、データフロー、修正は、検出がそれらを提供する限りスクロール可能です。
ヘッダーはスキャン統計とベースラインカテゴリを分離します。選択されたソース範囲は、余分な注釈行なしでインラインでハイライトされます。開いたコントロールは、コンテンツがスクロールする間、ライブ詳細ペインの下に留まり、短縮されたファイル位置は行と列のサフィックスを保持します。検索とダイアログは、アクティブな間は独自のショートカットを所有します。
ソースコンテキストを読み込めない場合、保存された検出スニペットが引き続き利用可能です。シークレットは、生のソースを詳細ペインに読み込むのではなく、マスクされたスニペットを使用します。
ローディングカードは、パーセンテージ推定ではなく、不確定なアクティビティと実際の経過時間を表示します。スキャン中は Ctrl+C で終了します。
| キー | アクション |
|---|---|
j / k、矢印、Home / End | 検出間を移動 |
v | 詳細を展開、またはリスト/分割ビューに戻る |
| PageUp / PageDown | リストをページング、または表示中の詳細をスクロール |
/、Enter | 検索を編集して適用 |
| Ctrl+U | 編集中の検索をクリア |
| Esc | モーダルを閉じる、検索編集をキャンセル、展開された詳細を離れる、または適用されたフィルターをクリア |
0–4、c、Shift+C | 最小重大度、信頼度しきい値、並び順 |
f | All → Unreviewed → Todo → Reviewed → Ignore を循環 |
i | トリアージアクションをプレビューして適用 |
Space、a、x | 1 つの検出をチェック、表示中の選択をトグル、バッチアクションをプレビュー |
| Shift+F | 名前付きフィルターの保存、読み込み、置換、削除、レビューストレージの復旧 |
b | 比較が利用可能な場合にベースラインカテゴリを循環 |
Tab、Enter / o | finding/source/sink を選択し、エディタで開く |
w、[ / ] | 通知を表示し、その履歴をスクロール、最新の通知が最初に表示される |
e | CBOM、JSON、または SARIF をエクスポート |
?、q / Ctrl+C | ヘルプと終了、Ctrl+C はすべてのモーダル内でも機能 |
Enter と o は、空白でない $VISUAL、次に $EDITOR を使用します。どちらも設定されていない場合、foxguard は利用可能なデスクトップオープナーを検討する前に、PATH 上の nvim、vim、nano、または vi を探します。ヘッドレスターミナルは xdg-open を必要としません。たとえば、VISUAL="nvim" foxguard tui . を実行するか、EDITOR='code --wait' を設定します。壊れた明示的なエディタ設定は、黙って置き換えられるのではなく報告されます。エディタが利用できない場合、TUI はセットアップガイダンスとともに開いたままになります。サポートされているエディタは、選択された finding/source/sink の行にジャンプします。