詳細な研究背景やVulnhallaの動機については、公式CyberArk脅威研究ブログ記事をご覧ください:
Vulnhalla: Picking the True Vulnerabilities from the CodeQL Haystack
開始する前に、以下を用意してください:
Python 3.10 – 3.13(Python 3.11 または 3.12 推奨)
CodeQL CLI
codeql がPATHに含まれていることを確認するか、後述のステップ2で .env にパスを設定します(オプション)GitHub APIトークン
LLM APIキー
すべての設定は単一のファイル .env にまとめられています。
git clone https://github.com/cyberark/Vulnhalla
cd Vulnhalla
.env.example を .env にコピー:cp .env.example .env # macOS / Linux
Copy-Item .env.example .env # Windows (PowerShell)
.env を編集し、値を入力:OpenAIの例:
CODEQL_PATH=codeql
GITHUB_TOKEN=ghp_your_token_here
PROVIDER=openai
MODEL=gpt-4o
OPENAI_API_KEY=your-api-key-here
LLM_TEMPERATURE=0.2
LLM_TOP_P=0.2
# オプション:ログ設定
LOG_LEVEL=INFO # DEBUG, INFO, WARNING, ERROR
LOG_FILE= # オプション:ログファイルのパス(例:logs/vulnhalla.log)
LOG_FORMAT=default # default または json
# LOG_VERBOSE_CONSOLE=false # trueの場合、WARNING/ERRORが完全な形式(タイムスタンプ - ロガー - レベル - メッセージ)
📖 完全な設定リファレンスについては:下記の設定リファレンスを参照してください。サポートされているすべてのプロバイダ(OpenAI、Azure、Gemini、Bedrock)、必須/オプション変数、詳細な例が含まれています。
Windows (PowerShell):
# 利用可能なPythonバージョンを表示
py -0p
# サポートされているPython: 3.10 / 3.11 / 3.12 / 3.13 から選択
py -3.12 -m pip install --user -U pipx
py -3.12 -m pipx ensurepath
# ターミナルを閉じて再起動(必須)
pipx install poetry
poetry --version
macOS / Linux:
# Pythonバージョンを確認
python3 --version
# サポートされているPython: 3.10 / 3.11 / 3.12 / 3.13 から選択
python3 -m pip install --user -U pipx
python3 -m pipx ensurepath
# ターミナルを再起動(必須)
pipx install poetry
poetry --version
Windows (PowerShell):
# インストール済みのサポートバージョンから1つ選択: 3.10 / 3.11 / 3.12 / 3.13
poetry env use 3.12 # 複数バージョンがインストールされている場合、Poetryにサポート対象のPythonバージョンを強制指定
poetry install
poetry run vulnhalla-setup
macOS / Linux:
# インストール済みのサポートバージョンから1つ選択: 3.10 / 3.11 / 3.12 / 3.13
poetry env use 3.12 # 複数バージョンがインストールされている場合、Poetryにサポート対象のPythonバージョンを強制指定
poetry install
poetry run vulnhalla-setup
# 特定のリポジトリを分析(例)
poetry run vulnhalla redis/redis
# データベースが既に存在しても再ダウンロード
poetry run vulnhalla redis/redis --force
# ヘルプを表示
poetry run vulnhalla --help
これにより自動的に:
output/results/ に保存すでにディスク上にCodeQLデータベースがある場合(手動で作成した、または以前の実行からのものなど)、--local / -l フラグを使用してGitHub取得ステップをスキップできます:
Windows (PowerShell):
poetry run vulnhalla --local C:\path\to\my-codeql-db
macOS / Linux:
poetry run vulnhalla --local /path/to/my-codeql-db
注:
--localフラグはソースコードフォルダではなく、CodeQL データベースディレクトリを期待します。フォルダにcodeql-database.ymlファイルが含まれているか確認してください。
# 既存の結果を表示するUIを開く(分析は実行しない)
poetry run vulnhalla-ui
# 設定を検証:CodeQL、LLM、ログ設定(分析は実行しない)
poetry run vulnhalla-validate
# 分析済みリポジトリとその問題数を一覧表示
poetry run vulnhalla-list
# サンプルパイプラインを実行(videolan/vlc と redis/redis を分析)
poetry run vulnhalla-example
Vulnhallaには分析結果を閲覧・探索するための本格的なユーザーインターフェースが含まれています。
poetry run vulnhalla-ui
UIは上下2ペインのトップエリアと、下部のコントロールバーで構成されています:
トップエリア(左右並列、リサイズ可能):
左パネル(問題一覧)
右パネル(詳細)
下部コントロールバー:
↑/↓ - 問題一覧を移動(1行ずつ)Tab / Shift+Tab - パネル間でフォーカスを切り替えEnter - 選択した問題の詳細を表示/ - 検索入力ボックスにフォーカス(左パネル)Esc - 検索をクリアし、問題テーブルにフォーカスを戻すr - 結果をディスクから再読み込み[ / ] - 左右パネルのサイズを調整(分割位置の変更)q - アプリケーションを終了[ で仕切りを左へ、] で右へ移動パイプライン実行後、結果は output/results/<LANG>/<ISSUE_TYPE>/ に整理されます:
output/results/c/Copy_function_using_source_size/
├── 1_raw.json # 元のCodeQL問題データ
├── 1_final.json # LLM会話と分類
├── 2_raw.json
├── 2_final.json
└── ...
各 *_final.json には以下が含まれます:
各 *_raw.json には以下が含まれます:
output/databases/<LANG>/<ORG>/<REPO>)CodeQL CLIが見つからない場合:
.env ファイルの CODEQL_PATH にCodeQL実行ファイルのフルパスを設定してください。
Windowsの場合:パスは .cmd で終わる必要があります(例:C:\path\to\codeql\codeql.cmd)。
GitHubのレート制限に引っかかる場合:
.env ファイルに GITHUB_TOKEN を設定してください(トークンは https://github.com/settings/tokens から取得)。
LLMの問題が発生する場合:
.env ファイルのAPIキーが選択したプロバイダと一致しているか確認してください。
UIでインポートエラーが発生する場合:
プロジェクトルートディレクトリから実行していることを確認するか、パス設定を自動処理する python examples/ui_example.py を使用してください。
すべての設定は .env ファイルの環境変数で管理されます。以下が完全なリファレンスです:
OpenAI:
| 変数 | 説明 |
|---|---|
OPENAI_API_KEY | OpenAI APIキー(platform.openai.comから取得) |
Azure OpenAI:
Gemini (Google):
| 変数 | 説明 |
|---|---|
GOOGLE_API_KEY | Google APIキー(Google AI Studioから取得) |
AWS Bedrock:
* 認証方法:AWS_PROFILE または AWS_ACCESS_KEY_ID + AWS_SECRET_ACCESS_KEY(+必要に応じて AWS_SESSION_TOKEN)を使用します。
Bedrock .env の例(SSO):
PROVIDER=bedrock
MODEL=anthropic.claude-3-5-sonnet-20241022-v2:0
AWS_REGION_NAME=us-east-1
AWS_PROFILE=your-profile
⚠️ 前提条件:
- Bedrockモデルの呼び出し権限を持つAWS認証情報(SSO、IAMプロファイル、アクセスキー)が設定されている必要があります
- SSOユーザー向け: Vulnhalla使用前に
aws sso login --profile your-profileを実行してください🔧 重要 - モデル選択: Bedrockモデルを選択する際は、ツール呼び出し/関数呼び出しに対応していることを確認してください(すべてのBedrockモデルが対応しているわけではありません)。ツール呼び出しはVulnhallaの分析フローの重要な部分であり、互換性のあるモデルを選択することで機能性と結果に大きな違いが生じます。対応モデル:Claude 3.x、Mistral、Cohere Command R など。
⚠️ 重要:
LLM_TEMPERATUREやLLM_TOP_Pは、影響を完全に理解している場合を除き、値を上げないでください。低い値はモデルを安定・決定論的に保ち、セキュリティ分析には重要です。高い値はモデルの一貫性を損ない、創造的になったり結果を幻覚する可能性があります。
📝 注: 追加設定例については、プロジェクトルートの
.env.exampleファイルを参照してください。
Vulnhallaは起動時に設定を検証します。必須変数が欠けていたり無効な場合、何を修正すべきか明確なエラーメッセージが表示されます。
よくある検証エラー:
PROVIDER でサポートされている値を確認)CODEQL_PATH が設定されているがファイルが存在しない場合)LLMは以下のステータスコードを使用します:
UIではこれらを次のように表示します:
1337 → "True Positive"1007 → "False Positive"7331 または 3713 → "Needs More Data"このプロジェクトにはpytestを使用した基本的なテスト基盤が含まれています:
# すべてのテストを実行
poetry run pytest
# 詳細出力で実行
poetry run pytest -v
テストスイートには、テスト基盤が正しくセットアップされていることを確認するスモークテストが含まれています。
プロジェクトはmypyを使用した静的型チェックを行っています:
poetry run mypy src
型チェックの設定は pyproject.toml の [tool.mypy] にあります。
設定は保守的なベースラインを使用し、モジュールごとのオーバーライドにより段階的な導入を可能にしています。
依存関係は pyproject.toml でPoetryにより管理されています:
requests - GitHub APIへのHTTPリクエストpySmartDL - CodeQLデータベースのスマートダウンロードマネージャーlitellm - 複数プロバイダをサポートする統合LLMインターフェースpython-dotenv - 環境変数管理PyYAML - CodeQLパックファイルのYAML解析textual - ターミナルUIフレームワークpytest - テストフレームワーク(開発依存)mypy - 静的型チェッカー(開発依存)CodeQLクエリは data/queries/<LANG>/ に整理されています:
issues/ - セキュリティ問題検出クエリtools/ - ヘルパークエリ(関数ツリー、クラス、グローバル変数、マクロ)各ディレクトリにはCodeQLパックを定義する qlpack.yml ファイルが含まれています。
Copyright (c) 2025 CyberArk Software Ltd. All rights reserved.
このリポジトリはApache License, Version 2.0の下でライセンスされています。詳細は LICENSE.txt をご覧ください。
このリポジトリへのあらゆる種類の貢献を歓迎します。開始方法と開発ワークフローの説明については、貢献ガイドをご覧ください。
行動規範を読み、従ってください。すべての貢献者にとって歓迎的で包括的な環境を提供することに取り組んでいます。
機能リクエストやプロジェクトに関する問題がある場合は、GitHub Issuesからお気軽にお問い合わせください。
| 変数 | 必須対象 | 説明 |
|---|
CODEQL_PATH | すべて | CodeQL実行ファイルへのパス。CodeQLがPATHにあればデフォルトは codeql。PATHにない場合はフルパスを使用(Windowsの場合は例:C:\path\to\codeql\codeql.cmd) |
PROVIDER | すべて | LLMプロバイダ:openai、azure、gemini、bedrock、anthropic、mistral、groq、openrouter、ollama など |
MODEL | すべて | モデル名(例:gpt-4o、gpt-4-turbo、gemini-2.5-flash) |
| 変数 | 説明 |
|---|
AZURE_OPENAI_API_KEY または AZURE_API_KEY | Azure OpenAI APIキー |
AZURE_OPENAI_ENDPOINT または AZURE_API_BASE | Azure OpenAIエンドポイントURL(例:https://your-resource.openai.azure.com) |
AZURE_OPENAI_API_VERSION または AZURE_API_VERSION | APIバージョン(デフォルト:2024-08-01-preview) |
| 変数 | 必須 | 説明 |
|---|
AWS_REGION_NAME | はい | AWSリージョン(例:us-east-1、us-west-2) |
AWS_PROFILE | いいえ* | SSO/認証情報ファイル認証用のAWSプロファイル名 |
AWS_ACCESS_KEY_ID | いいえ* | AWSアクセスキー(プロファイル未使用時) |
AWS_SECRET_ACCESS_KEY | いいえ* | AWSシークレットキー(プロファイル未使用時) |
AWS_SESSION_TOKEN | いいえ | 一時的なSTS認証情報用セッショントークン |
| 変数 | デフォルト | 説明 |
|---|
GITHUB_TOKEN | - | GitHub APIトークン(レート制限緩和用)。GitHub Settings > Tokensから取得 |
GITHUB_API_URL | https://api.github.com | GitHub API URL。GitHub Enterpriseの場合はサーバーのAPI URLに設定(例:https://github.your-company.com/api/v3) |
GITHUB_SSL_VERIFY | true | SSL証明書の検証。自己署名証明書や内部CAを使用するGitHub Enterpriseでは false に設定 |
LLM_TEMPERATURE | 0.2 | LLM temperature(0.0~2.0)。低いほど決定論的。推奨:0.2のままに |
LLM_TOP_P | 0.2 | LLM top-pサンプリング(0.0~1.0)。低いほど焦点が絞られる。推奨:0.2のままに |
LOG_LEVEL | INFO | ログレベル:DEBUG、INFO、WARNING、ERROR。コンソール出力の詳細度を制御 |
LOG_FILE | - | ログファイルのパス(オプション、例:logs/vulnhalla.log)。設定するとコンソールとファイルの両方にログ出力。ファイルログはDEBUGレベルで詳細出力 |
LOG_FORMAT | default | ログ形式:default(人間可読)、または json(構造化JSON形式) |
LOG_VERBOSE_CONSOLE | false | true の場合、WARNING/ERROR/CRITICALは完全な形式(タイムスタンプ - ロガー - レベル - メッセージ)を使用。デフォルト:WARNING/ERRORは簡易形式(レベル - メッセージ)、INFOは常に最小限(メッセージのみ) |
THIRD_PARTY_LOG_LEVEL | ERROR | サードパーティライブラリ(LiteLLM、urllib3、requests)のログレベル。DEBUG、INFO、WARNING、ERROR。デフォルトでほとんどのサードパーティノイズを抑制 |