mcpField
C
cpg-analysis

cpg-analysis

github.com/alinaqiセキュリティ711166 回インストール2 週間前に更新
リポジトリ

cpg-analysis について

cpg-analysisは、セキュリティレビューや複雑なリファクタリング向けのオンデマンド分析スキルです。JoernとCodeQLで、基本的なコード検索を超えて構造やデータフロー、脆弱性を調べます。

主な機能

  1. 01Joernコードプロパティグラフのクエリ
  2. 02制御フローとデータフローの分析
  3. 03関数間の taint 分析
  4. 04脆弱性とセキュリティパターンの検出
  5. 05呼び出しグラフとメソッドの調査

活用シーン

  1. 01関数間のデータフロー追跡
  2. 02複雑な経路やデッドコードの分析
  3. 03リリース前のセキュリティ監査
  4. 04Rustコードのセキュリティ確認

MCP 対応

CodeBadger MCPとCodeQL MCPを利用し、コードグラフのクエリ、メソッドや呼び出し情報、CodeQLクエリの実行と結果取得を行います。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/alinaqi/maggy --skill cpg-analysis

インストール後、Claude Code で/cpg-analysisを入力して読み込まれたか確認します。

詳細

CPG 分析スキル

目的: AST を超える詳細なコード分析を行います。Joern を使用して完全なコードプロパティグラフ(制御フロー、データフロー、プログラム依存関係)を分析し、CodeQL を使用して関数間の汚染分析と脆弱性検出を行います。

これらはオプトインのツールです。 Docker/JVM(Joern)または CodeQL CLI が必要です。 日常的なナビゲーションには codebase-memory-mcp(Tier 1、常時利用可能)を使用してください。 Tier 1 では不十分な場合に、詳細な分析にこれらを使用してください。

┌────────────────────────────────────────────────────────────────┐
│  CODE PROPERTY GRAPH = AST + CFG + CDG + DDG + PDG             │
│  ─────────────────────────────────────────────────────────────│
│  AST  = Abstract Syntax Tree (structure)                       │
│  CFG  = Control Flow Graph (execution paths)                   │
│  CDG  = Control Dependency Graph (conditional dependencies)    │
│  DDG  = Data Dependency Graph (data flow between statements)   │
│  PDG  = Program Dependency Graph (CDG + DDG combined)          │
│                                                                │
│  Tier 2 (Joern): Full CPG with 40+ query tools                │
│  Tier 3 (CodeQL): Interprocedural taint + security queries     │
└────────────────────────────────────────────────────────────────┘

Tier 選択ガイド

Simple symbol lookup, dependency trace, blast radius?
  → Tier 1: codebase-memory-mcp (always on, sub-ms)

Control flow paths, data flow, dead code, complex refactoring?
  → Tier 2: Joern CPG (on-demand, seconds)

Security audit, taint analysis, vulnerability detection?
  → Tier 3: CodeQL (on-demand, seconds to minutes)

Full security review before release?
  → All three tiers in sequence

Tier 2:Joern CPG(CodeBadger MCP)

Joern を使用する場面
シナリオJoern を使う理由Tier 1 ではできないこと
関数間のデータフローを追跡する完全な DDG トラバーサルTier 1 にはデータフローがありません
制御フローのパスを理解する分岐条件を含む CFG 分析Tier 1 には CFG がありません
デッドコード/到達不能コードを見つけるPDG 到達可能性分析Tier 1 が検出するのは未使用のエクスポートのみです
複雑なリファクタリングの影響を調べる関数間の依存関係チェーンTier 1 は呼び出しグラフに限定されます
サードパーティライブラリの使用状況を監査する深い呼び出しチェーンのトラバーサルTier 1 はインポート境界で止まります
例外の流れを理解するCFG に throw/catch パスが含まれますTier 1 は例外を無視します
主要な MCP ツール(Joern/CodeBadger)
ツール目的クエリ例
generate_cpgプロジェクトの CPG を構築します初回セットアップ時、または大幅な変更後
get_cpg_statusCPG の構築状況を確認しますクエリ前に CPG の準備ができていることを確認します
run_cpgql_query任意の CPGQL クエリを実行しますcpg.method("login").callOut.code.l
get_cpgql_syntax_helpクエリ言語のリファレンスを取得しますクエリ構文が不明な場合
get_cfgメソッドの制御フローグラフを取得します関数内の実行パスを理解します
list_methodsプロジェクト内のすべてのメソッドを一覧表示します利用可能な関数の概要を把握します
get_method_sourceメソッドのソースコードを取得します特定の関数のソースを読みます
list_callsメソッドから/メソッドへの呼び出しを一覧表示します呼び出し元/呼び出し先を分析します
get_call_graph完全な呼び出しグラフを可視化します呼び出しチェーンを理解します
get_type_definition型/クラスの定義を取得します型階層を理解します
対応言語(Joern)

Java、Scala、C/C++、Python、JavaScript、TypeScript、PHP、Ruby、Go、 Kotlin、Swift、Lua

非対応: Rust(Rust には CodeQL を使用してください)

MCP の設定(Joern)
{
  "mcpServers": {
    "codebadger": {
      "url": "http://localhost:4242/mcp",
      "type": "http"
    }
  }
}
前提条件
  • Docker(Joern バックエンド用)
  • Python 3.10+(MCP サーバー用)
  • インストール:~/.claude/install-graph-tools.sh --joern
よく使う CPGQL クエリ
// Find all methods that handle user input
cpg.method.where(_.parameter.name(".*input.*|.*request.*")).name.l

// Trace data flow from parameter to return
cpg.method("processPayment").parameter.reachableBy(cpg.method("processPayment").methodReturn).l

// Find methods with high cyclomatic complexity
cpg.method.where(_.controlStructure.size > 10).name.l

// Dead code: methods with no callers
cpg.method.where(_.callIn.size == 0).filter(_.name != "main").name.l

// Exception flow: methods that can throw but callers don't catch
cpg.method.where(_.ast.isThrow.size > 0).callIn.method.filter(_.ast.isTry.size == 0).name.l

Tier 3:CodeQL

CodeQL を使用する場面
シナリオCodeQL を使う理由他の Tier ではできないこと
リリース前のセキュリティ監査関数間の汚染分析Joern の汚染分析は基本的なものですが、CodeQL はより詳細です
認証/決済コードのレビューソースからシンクへのデータフロー関数間、ファイル間の汚染分析
PR のセキュリティレビュー対象を絞った脆弱性スキャン事前構築済みの OWASP クエリパック
コンプライアンスチェックCWE/OWASP パターンマッチング厳選されたセキュリティクエリスイート
Rust のセキュリティ分析Rust を完全にサポートJoern は Rust をサポートしていません
主要な MCP ツール(CodeQL)
ツール目的
run_queryデータベースに対して CodeQL クエリを実行します
find_definitionsシンボルの定義を特定します
find_referencesシンボルへのすべての参照を検索します
get_resultsBQRS(Binary Query Result Sets)を解析します
対応言語(CodeQL)

C/C++、C#、Go、Java、Kotlin、JavaScript、TypeScript、Python、Ruby、 Swift、Rust

MCP の設定(CodeQL)
{
  "mcpServers": {
    "codeql": {
      "command": "codeql-mcp",
      "args": ["--database", ".code-graph/codeql-db"]
    }
  }
}
前提条件
  • CodeQL CLI(macOS では brew install codeql)
  • インストール:~/.claude/install-graph-tools.sh --codeql
よく使う CodeQL パターン
// SQL injection: user input flows to SQL query
import python
from DataFlow::PathNode source, DataFlow::PathNode sink
where TaintTracking::hasFlowPath(source, sink)
  and source instanceof RemoteFlowSource
  and sink instanceof SqlExecution
select sink, source, sink, "SQL injection from $@.", source, "user input"

// Unvalidated redirect
from DataFlow::PathNode source, DataFlow::PathNode sink
where source instanceof RemoteFlowSource
  and sink instanceof RedirectSink
select sink, "Unvalidated redirect from user input"

組み合わせたワークフロー:詳細分析

セキュリティレビューや複雑なリファクタリングを行う際は、すべての Tier を使用してください。

1. SCOPE       → Tier 1: detect_changes / get_architecture
                 Identify files and modules in scope

2. STRUCTURE   → Tier 1: search_graph / trace_call_path
                 Map the call graph and dependencies

3. FLOW        → Tier 2: get_cfg / run_cpgql_query
                 Analyze control flow and data flow paths

4. SECURITY    → Tier 3: run_query with taint analysis
                 Check for vulnerabilities in data paths

5. REPORT      → Combine findings from all tiers
                 Prioritize: Critical > High > Medium > Low

避けるべきパターン

避けるべきパターン代わりに行うこと
単純なシンボル検索に Joern/CodeQL を使用するTier 1 search_graph を使用します(ミリ秒未満で、数秒かかる方法より高速です)
コミットのたびに CPG をフルビルドするCPG は必要に応じてビルドし、継続的な監視には Tier 1 を使用します
get_cpg_status を確認せずに Joern にクエリを実行するクエリを実行する前に、CPG がビルド済みで最新であることを必ず確認します
具体的なセキュリティ上の問いがないまま CodeQL を実行するまず仮説を立てます。CodeQL のクエリはコストがかかります
詳細な分析の前に Tier 1 で影響範囲を確認しないまず Tier 1 で範囲を絞り、フラグが立った領域を詳しく分析します
セキュリティ以外の構造的なクエリに CodeQL を使用する構造やフローのクエリには Joern CPGQL を、セキュリティには CodeQL を使用します

コメント