AI生成コードをSQLインジェクション、安全でないリフレクション、ハードコードされたシークレットなどの脆弱性についてスキャンする静的解析CLI。SARIFエクスポートとCI/CDゲーティングを備える。
AIコーディングアシスタントによって導入された脆弱性を検出するために特別に設計された、高速でスタンドアロンな静的解析ツールです。CanoPはコードベースをローカルで解析し、AI生成コードに潜むセキュリティリスクを特定します。
fixes.jsonペイロードを自動生成します。これには、即座にコンテキストを認識した修正を行うために大規模言語モデル(LLM)にフィードバックするよう設計された具体的なプロンプトが含まれています。
CanoPはコードをローカルで解析し、AIによる修正ガイダンスを備えた実行可能なセキュリティ検出結果を生成します。
CanoPはバンドルされたルールをcanop/rules/*.ymlから読み込み、組み込みのパターンスキャナーをローカルで実行します。Semgrep CLIがインストールされている場合、CanoPは同じルールをASTベースの解析にも使用できます。Semgrepはオプションです。標準のパッケージインストールではSemgrep CLIをダウンロードしたり必要としたりしません。
CanoPはPyPIを通じて標準のPythonパッケージとして配布されています。
Windowsの場合、またはすでにアクティブな仮想環境内にいる場合は、標準のpipインストーラーを使用できます:
pip install canop
最新のmacOSおよびLinuxディストリビューションでは、システムパッケージを保護するためにグローバルなpipインストールがしばしば妨げられます(PEP 668)。分離された環境にPython CLIツールをインストールするためのコミュニティ標準はpipxです:
pipx install canop
(注: pipx install canopはWindowsでも完全に動作します!)
インストールを検証し、CLIがシステムパスで利用可能であることを確認します:
canop --version
リポジトリ内の設定ファイルを初期化します。このコマンドは.canop.ymlポリシーファイルと、node_modulesやvenvのようなノイズの多いディレクトリをスキャンから除外するための.canopignoreファイルを作成します:
canop init
現在のディレクトリに対して包括的なセキュリティスキャンを実行します。スキャナーは内部ルールエンジンに対してコードを評価し、最終的なセキュリティスコアを含む詳細なテーブルを出力します:
canop scan .
gitで変更されたファイルのみをスキャンします。これによりスキャン時間が劇的に短縮され、pre-commitフックに最適で、新しいコードがコミットされる前に安全であることを保証します:
canop scan . --changed
デフォルトでは、CanoPは表示される検出結果を50に制限することでターミナルをクリーンに保ちます。さらに深く調査する必要がある場合や、この制限を調整する場合:
# 制限なし、すべての検出結果を表示:
canop scan . --all
# カスタム制限を設定(例: 上位10件の結果のみを表示したい場合):
canop scan . --limit 10
CanoPは、自動化されたデプロイメントパイプライン(GitHub ActionsやGitLab CIなど)においてセキュリティゲートキーパーとして機能するように構築されています。特定のセキュリティ基準が満たされない場合に、非ゼロの終了コードを返すようにスキャナーを設定できます。これによりビルドが自動的に失敗します。
# CRITICALまたはHIGHの脆弱性が見つかった場合にデプロイメントパイプラインを失敗させる
canop scan . --fail-on HIGH
# 総合セキュリティスコアが85を下回った場合にデプロイメントパイプラインを失敗させる
canop scan . --min-score 85
履歴の追跡、監査、または外部システムとの統合を必要とするチームのために、CanoPは複数の出力形式をサポートしています。
# カスタム解析用に、生のネイティブPython辞書データを標準JSONファイルにエクスポート
canop scan . --json-out results.json
# SARIF(Static Analysis Results Interchange Format)にエクスポート。
# このファイルをGitHubにアップロードすると、GitHubがPull Request内で脆弱性をインライン表示できます。
canop scan . --sarif results.sarif
CanoPはルールエンジンから修正メタデータを抽出し、検出された脆弱性を修正する方法をAIコーディングアシスタントに正確に指示するプロンプトを生成します。
# LLM向けの実行可能なプロンプトを含むfixes.jsonファイルを生成
canop scan . --prescriptions fixes.json
CanoPの動作は、プロジェクトのルートに配置された.canop.ymlファイルを使用してコード化できます。このファイルは集中化されたセキュリティポリシーとして機能し、すべての開発者とCI/CDパイプラインが同じしきい値に従うことを保証します。
# .canop.yml
# パイプラインを通過するために最低限必要なセキュリティグレード
min_grade: B
# これらの特定の重大度レベルをパイプラインの失敗として扱う
fail_on:
- CRITICAL
- HIGH
# スキャン対象から特定のパスを無視する
ignore:
- "tests/**"
- "docs/**"
# 非ゼロの終了コードを返す前に許可する検出結果の数(0 = 厳密に無制限)
max_findings: 0
また、.canopignoreを使用して、スキャナーがスキップすべき特定のファイルやディレクトリを定義することもできます。これは標準のglobパターンを利用し、.gitignoreとまったく同じように機能します。
CLIに貢献したい場合や、変更をローカルでテストしたい場合は、リポジトリをクローンして編集可能モードでインストールします。編集可能モードでは、canopターミナルコマンドが実際のソースコードに直接マッピングされます。
git clone https://github.com/openbreach/CanoP.git canop
cd canop
pip install -e .
変更を提出する前に、ローカルでテストスイートを実行します:
python -m unittest discover -s tests -v
配布アーティファクトをビルドするには、リリースツールをインストールして実行します:
pip install -r requirements-dev.txt
python -m build
セキュリティルールは標準のSemgrep YAML形式で定義され、canop/rules/*.yml内に配置されています。スキャナーの検出機能を拡張するための新しいルールの構造化、テスト、提出方法に関する包括的なガイドラインについては、CONTRIBUTING.mdを参照してください。
バグを見つけた場合、機能リクエストがある場合、または一般的なヘルプが必要な場合は、GitHubでissueを開くか、[email protected]まで直接お問い合わせください。
このプロジェクトはMITライセンスの下でライセンスされています - 詳細はLICENSEファイルを参照してください。