AI搭載のSASTスキャナーで、認証バイパス、IDOR、およびSemgrep/CodeQLが見逃すロジックバグを見つけます。無料のGitHub Action。Python、JS/TS、Go、PHP、Rubyをサポート。
AI を活用したコードセキュリティスキャナー。Semgrep や CodeQL が見逃す脆弱性を発見します。
クイックスタート • GitHub Action • 比較 • 対応言語 • FAQ
従来の SAST ツールはパターンマッチングと AST ルールに依存しています。既知の脆弱性パターンの検出には優れていますが、意図を推論することは基本的にできません。
API に 20 のエンドポイントがあり、そのうち 19 がリソース操作前に認可を確認している場合、Semgrep はその確認を行っていない 1 つを通知する方法がありません。マッチさせるパターンがないからです。脆弱性はパターンの 不在 なのです。
VulnHawk は AI でコードを分析し、検査するコードの断片ごとに、コードベースの他の場所にある関連コードをコンテキストとして含めます。この拡張ステップにより、AI は類似のコンポーネントがセキュリティをどのように処理するかを比較し、そうでないものを特定できます。
pip install vulnhawk
バックエンドを選択します:
# Claude Code CLI - サブスクライバーは無料 (推奨)
vulnhawk scan ./src -b claude-code
# Codex CLI - ChatGPT Pro/Plus サブスクライバーは無料
vulnhawk scan ./src -b codex
# Claude API
export ANTHROPIC_API_KEY=sk-ant-...
vulnhawk scan ./src
# OpenAI API
vulnhawk scan ./src -b openai -m gpt-4o
# Ollama - 無料、ローカル、完全プライベート
vulnhawk scan ./src -b ollama -m llama3.1
設定ファイルは不要。ルールを書く必要もなし。データベースの構築も不要。
Claude Code および Codex バックエンドは無料です(既存のサブスクリプションをお持ちの方)。VulnHawk はプロンプトをローカル CLI 経由でパイプするため、追加の API コストは発生しません。
| 機能 | VulnHawk | Semgrep | CodeQL | Snyk Code | Checkmarx | SonarQube |
|---|---|---|---|---|---|---|
| 検出方法 | AI 推論 | AST パターン | QL データフロー | ML + ルール | パターン + フロー | パターン |
| ビジネスロジックの欠陥 | はい | いいえ | 制限あり | 制限あり | 制限あり | いいえ |
| ファイルをまたぐコンテキスト | 自動 | カスタムルール | カスタムクエリ | 一部 | 有料 tier | 制限あり |
| セットアップの複雑さ | ゼロ設定 | ルール設定 | DB 構築 + QL | 設定ファイル | 複雑 | サーバー設定 |
| カスタムルールの必要性 | 不要 | 必要 (YAML) | 必要 (QL) | 一部 | 必要 | 必要 |
| コンテキストを考慮した修正 | はい | 汎用的 | 汎用的 | 汎用的 | 汎用的 | 汎用的 |
| ローカル/プライベートモード | Ollama | はい | はい | いいえ | いいえ | セルフホスト |
| CI/CD 統合 | 1行の Action | Action | Action | Action | プラグイン | プラグイン |
| SARIF 入力 (ツール連鎖) | はい | いいえ | いいえ | いいえ | いいえ | いいえ |
| 価格 | 無料* | 無料 / 有料 | 無料 / 有料 | 無料 / $$$ | $$$$$ | 無料 / $$$ |
*Claude Code、Codex CLI、または Ollama で無料。API バックエンドはスキャンあたり約 $0.50~$2.00 です。
| 脆弱性クラス | ルールベースのツールが見逃す理由 |
|---|---|
| N エンドポイント中1つの認可欠落 | マッチするパターンがない – バグはチェックの不在である |
| IDOR / BOLA | JWT 内のユーザー ID が URL 内の ID と一致すべきであることを理解する必要がある |
| 支払い金額の改ざん | ビジネスロジック – amount フィールドはクライアントから信頼されるべきではない |
| 入力検証の不整合 | 5つのハンドラはサニタイズするが、6つ目はしない – ファイル間の比較が必要 |
| 保存された入力の悪用 | 入力は安全に保存されるが、3ファイル離れた場所で eval() または生 SQL で使用される |
| 状態更新の競合状態 | ロックなしでの同時残高変更 |
VulnHawk は補完的なレイヤーとして設計されており、置き換えではありません:
| レイヤー | ツール | 目的 |
|---|---|---|
| 1 | Semgrep | 既知の悪質パターンに対する高速で決定的なゲートキーピング |
| 2 | CodeQL | 複雑なコールチェーンを横断する深い汚染追跡 |
| 3 | VulnHawk | ビジネスロジック、認可の隙間、IDOR、およびルールでは表現できない不整合 |
vulnhawk scan ./src # フルスキャン (デフォルト)
vulnhawk scan ./src --mode auth # 認証バイパス、チェックの欠落、セッションの欠陥
vulnhawk scan ./src --mode injection # SQLi、コマンドインジェクション、SSTI、XSS
vulnhawk scan ./src --mode secrets # ハードコードされたキー、トークン、パスワード
vulnhawk scan ./src --mode config # デバッグモード、緩いCORS、安全でないクッキー
vulnhawk scan ./src --mode crypto # 弱いハッシュ、ハードコードされたキー、悪い乱数生成
vulnhawk scan ./src -o json -f results.json # JSON
vulnhawk scan ./src -o sarif -f results.sarif # SARIF (GitHub Code Scanning)
vulnhawk scan ./src -o markdown -f report.md # Markdown レポート
vulnhawk scan ./src --severity high # Critical + High のみ
vulnhawk scan ./src --severity info # すべて
Semgrep、CodeQL、または SARIF を生成するツールの出力を VulnHawk に渡します。VulnHawk はそれらの発見を追加コンテキストとして使用し、検証、拡張、連鎖させてより深い脆弱性にします。
# 最初に Semgrep を実行し、次に VulnHawk で拡張
semgrep --config auto ./src -o semgrep.sarif --sarif
vulnhawk scan ./src --sarif-input semgrep.sarif
これにより可能になること:
vulnhawk info ./src # ファイル、チャンク、言語の内訳をプレビュー
VulnHawk はデフォルトブランチではベースラインスキャンとして、プルリクエストではインクリメンタルに実行されます。
name: VulnHawk Security Scan
on:
push:
branches: [main, master]
pull_request:
permissions:
security-events: write
contents: read
jobs:
vulnhawk:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: momenbasel/vulnhawk@main
with:
target: '.'
backend: 'claude-code'
claude-code-oauth-token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
severity: 'medium'
fail-on-findings: 'true'
発見結果は SARIF を介して GitHub の Security > Code Scanning タブに自動的にアップロードされます。
| バックエンド | 設定 |
|---|---|
| Claude Code (無料) |
トークンを取得: |
| Codex (無料) |
ランナー上で |
| Claude API |
|
| OpenAI API |
|
steps:
- uses: actions/checkout@v4
- name: Semgrep (高速パターンスキャン)
uses: returntocorp/semgrep-action@v1
with:
config: auto
generateSarif: true
- name: VulnHawk (深い AI 分析)
uses: momenbasel/vulnhawk@main
with:
target: '.'
backend: 'claude-code'
claude-code-oauth-token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
sarif-input: 'semgrep.sarif'
| 言語 | 拡張子 | フレームワーク検出 |
|---|---|---|
| Python | .py | Django, Flask, FastAPI |
| JavaScript | .js .jsx | Express, Fastify, Next.js |
| TypeScript | .ts .tsx | Express, NestJS, Fastify |
| Go | .go | net/http handlers |
| Java | .java | クラス/メソッド分割 |
| PHP | .php | Laravel ルート、クラス、トレイト、インターフェース |
| Ruby | .rb .erb | Rails ルート、クラス、モジュール |
コードベース ──> 探索 ──> チャンク化 ──> 拡張 ──> 分析 ──> 検証 ──> レポート
│ │ │ │ │
.gitignore を 関数 関連コード セキュリティ 重複除去 +
尊重 クラス (同じディレ プロンプト 信頼度
.vulnhawk- ルート クトリ + 認 を持つ LLM スコアリング
ignore モジュール 可パターン)
拡張ステップが主要な差別化要因です。各コードチャンクに対して、VulnHawk は以下を含めます:
これにより、AI は不整合を特定するために必要なコンテキストを得られます。
スキャンからパスを除外します(gitignore 構文):