GSC Scanner について
GSC Scanner は、AI コーディングエージェント向けに MCP サーバーとして利用できるリポジトリセキュリティスキャナーです。コード、依存関係、シークレット、IaC を検査し、検出結果の参照や概念実証による検証を行うツールを提供します。
主な機能
- 01SAST、SCA、シークレット、IaC のスキャン
- 02YAML 検出ルール DSL
- 03悪用可能性に基づく優先順位付け
- 04検出結果の参照と差分スキャン
- 05サンドボックスでの検出結果検証
- 06stdio と HTTP のトランスポート
活用シーン
- 01AI コーディングエージェントからリポジトリをスキャン
- 02コード差分のセキュリティ問題を確認
- 03対応前に検出内容を調査
- 04検出結果が再現するか再検証
MCP 対応
MCP クライアントに scan_repo、scan_diff、list_findings、get_finding、verify_finding、list_detectors の 6 ツールを提供します。stdio と HTTP に対応し、verify_finding は概念実証コードを実行しますが、MCP サーバーからリポジトリの修正やプルリクエスト作成は行いません。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
docker run -i --rm -e GSC_ALLOWED_ROOTS ghcr.io/poliakarmai/gsc-scanner:v1GSC_ALLOWED_ROOTSPath inside the container that scan_repo/scan_diff may read.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ghcr.io/poliakarmai/gsc-scanner:v1stdioツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
🛡️ GSC — Git Security Checker
English
GSC は、エクスプロイトを実証し、修正を検証し、CI を修復する自己学習型の AppSec プラットフォームです。
detect → prove → fix → verify → heal → learn
多くのスキャナーは検出結果を報告するだけです。GSC はそれを実証します。すべての検出結果を実行可能な概念実証に変換し、サンドボックス内で検証したうえで、エクスプロイトを再実行して修正を確認できます。
GSC の特長:
- 69 種類の検出器で SAST、SCA、シークレット、IaC をカバーし、YAML ルール DSL も備えています。
- PoC の自動生成に安全なエクスプロイト実行ゲートを組み合わせています。行番号だけでなく、動作するエクスプロイトを検出結果とともに提供します。
- Proof-of-Fix — サンドボックス内でエクスプロイトが発火しなくなったことを確認した後にのみ、パッチを受け入れます。
- 自己学習 — 検出器を毎晩キャリブレーションネットワークで再評価し、TP が 30%未満のノイズの多いパターンを自動的に無効化します。連合フィードバックはプライバシーを最優先します(
{tenant_hash, rule_id, tp, fp}+ DP ノイズ)。 - CVSS ではなくエクスプロイト可能性に基づく優先順位付け — EPSS + CISA KEV + ExploitDB。
- BYO-LLM — エンジン、検出器、PoC ロジックは当社が開発しています。LLM による再検証はお客様のキーで実行されます(ローカルの Ollama を含む、OpenAI 互換のエンドポイントに対応)。キーがない場合は、高速な正規表現のみのモードで動作します。
GitHub Action(下記を参照)、CLI / Docker イメージ、または AI コーディングエージェント向けの MCP サーバーとして利用できます。MCP サーバーは stdio または HTTP 経由で 6 つのツール(scan_repo、scan_diff、list_findings、get_finding、verify_finding、list_detectors)を提供します。リポジトリに対しては読み取り専用です。パッチ適用、PR 作成、ワーキングツリーへの書き込みは行いません(verify_finding は PoC を実行します。MCP セクションの安全性に関する注意事項を参照してください)。
実際のコードで実証済みです: HALL_OF_FAME.md · 最初の公開ケーススタディ:CASE_STUDY_CYBERBRO.md
100 件の実在する GitHub プロジェクトでの測定結果
検出器の変更後、同じ固定コーパスを再スキャンしています。対象は、特定のコミットに固定した実在する 100 件のリポジトリ(クリーンなもの 90 件 + 脆弱性が判明しているもの 10 件)で、正規表現のみ、LLM キーなしです。毎回同じプロジェクトを使うため、差分はデータセットの変更ではなく、修正によるものです。
| 2026-08-21(ベースライン) | 2026-08-28(誤検知修正後) | |
|---|---|---|
| 検出結果 | 64,831 | 41,127 |
| CRITICAL | 4,302 | 414 |
| HIGH | 37,246 | 2,187 |
| 脆弱性が判明しているプロジェクトの検出数 | 8 / 10 | 10 / 10 |
| 誤検知が 1 件以上の CRITICAL として検出されたクリーンなプロジェクト | 48 / 90 | 41 / 90 |
434 件の検出結果に対するラベル付きレビューでの CRITICAL 精度:ベースラインの約 4~5% → 31.1% (TP = 135、FP = 299、2026-08-26)。依然としてノイズは多く残っています。残る誤検知の大半は GS001(シークレット)、GS005(SQLi)、GS020(XSS)、GS037(パストラバーサル)に集中しており、ルールごとに削減を進めています。望ましい数値ではなく、実際の数値を公開しています。
測定方法に関する注記: コーパス、重大度の集計、ルールごとの集計は当社によるものです。エンジンはクローズドイメージとして提供されるため、結果を再現するには、同じコミットに固定したプロジェクトに対して gsc scan --ci --json を実行し、同じ方法で集計してください。他ベンダーとのクリーンルーム比較を意図したものではありません。
ライセンス: このリポジトリ(Action、ドキュメント、マーケティング)は Apache-2.0 です。エンジンは BSL 1.1 のクローズド Docker イメージ ghcr.io/poliakarmai/gsc-scanner として提供されます(自身のリポジトリのスキャンは無料です。競合する SaaS には商用ライセンスが必要です。2030-08-06 に Apache-2.0 に移行します)。
事例:122★のOSINTプラットフォームにおけるXSS(2026-08-08時点のスター数)
初の公開実証 — stanfrbd/cyberbro(46,677 LOC、281ファイル):
| 発見内容 | CWE-79 検索ハイライト経由のXSS — static/history.js:148、p.innerHTML = p.title.replace(...) |
| 深刻度 | HIGH(CVSS 7.5) |
| 検出器 | GS020(gs020_xss_injection) |
| 修正 | 9行、1ファイル — サンドボックスでエクスプロイトを再実行し、発火しなくなったことを確認 |
詳細なレポート → CASE_STUDY_CYBERBRO.md · 本番環境のオープンソースソフトウェアでのその他の発見 → HALL_OF_FAME.md
GSC — 自己学習型のフルサイクルAppSecプラットフォーム。
detect → prove → fix → verify → heal → learn
🚀 クイックスタート — GitHub Action
30秒でリポジトリをチェックできます。.github/workflows/gsc.ymlファイルを追加してください。
name: GSC Audit
on:
pull_request:
branches: [main, master]
jobs:
audit:
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
steps:
- uses: actions/checkout@v4
- uses: poliakarmai/gsc@v1 # для воспроизводимости — pin на commit SHA
with:
fail_on_critical: false # true = блокировать merge при CRITICAL
プルリクエストを開くと、GSCがコードをスキャンし、発見内容
(CRITICAL / HIGH)をコメントで通知して、セキュリティ評価を付けます。コアは
クローズドなDockerイメージghcr.io/poliakarmai/gsc-scannerとして提供されます — エンジンのソースコードは
公開されていません。
再現性。
@v1とイメージタグは可変リンクです。workflowを変更しなくても結果が 変わる可能性があります。監査/CIでは、poliakarmai/gsc@<commit-sha>とdigestによるイメージ指定 (ghcr.io/poliakarmai/gsc-scanner@sha256:<digest>)を使用してください。
入力パラメーター:
| 入力 | デフォルト | 機能 |
|---|---|---|
path | . | スキャン対象(リポジトリのルート) |
deep_scan | true | 詳細スキャン(Echelon 4、低速) |
fail_on_critical | false | true — CRITICAL検出時に失敗 |
fail_on_score | 0 | scoreがしきい値未満の場合に失敗。0 = 無効、範囲は1–100 |
max_findings_to_comment | 10 | 各セクションのコメントに表示する行数 |
llm_api_key | '' | 再検証用のBYO-LLMキー(未指定の場合はregex-only) |
llm_base_url | '' | 独自のOpenAI互換エンドポイント(DeepSeek/OpenRouter/Ollama) |
llm_model | '' | 再検証に使用するモデル名 |
sarif | false | GitHub Code Scanning用のSARIFを追加出力 |
reachability | false | 到達不能なファイルでの発見内容の重要度を下げる(import-graph) |
出力: score(0–100)とgrade(A+ … F)。
PRコメントでは、検出器の発火回数ではなく、発見内容をロケーション(
file:line)ごとに 集計します。4つのルールで検出された1つのシークレットは、4行ではなく、 ルールを列挙した1行になります。表のTotalは常に カテゴリの合計と一致します。
LLMによる再検証 — 自分のキーを使用(BYO-LLM):
- uses: poliakarmai/gsc@v1
with:
llm_api_key: ${{ secrets.DEEPSEEK_API_KEY }} # DeepSeek / OpenRouter / GMI / Ollama
キーなしの場合は高速なregex-onlyスキャンになります(脆弱性は検出できます。confirmed判定にはキーが必要です)。
できること
| レイヤー | 機能 |
|---|---|
| SAST | 69 個の検出器(SAST・SCA・Secrets・IaC)、YAML ルール DSL、信頼度スコアリング付き LLM トリアージ |
| 証拠 | PoC 自動生成 — 検出結果に対する実際に動作するエクスプロイト (エンジン機能。CLI/engine で利用可能で、MCP ではありません) |
| 修正 | Proof-of-Fix — sandbox 内でエクスプロイトを再実行してパッチを検証します。セルフヒーリング CI(自動 PR)(CLI で利用可能。明示的なフラグが必要です) |
| 優先順位付け | EPSS + CISA KEV + ExploitDB(生の CVSS ではなく)、БДУ ФСТЭК |
| Recon | パッシブ偵察:サブドメイン/技術情報/DNS/HTTP |
| サプライチェーン | SBOM(CycloneDX/SPDX)+ VEX |
| コンプライアンス | 検出結果を ГОСТ Р 56939-2024、PCI DSS 4.0、SOC2、ISO 27001、CWE、OWASP にマッピング — ФСТЭК/КИИ/監査向けレポート |
| インテリジェンス | セキュリティアーキオロジー、予測予測、自然言語ポリシー、連合型セルフラーニング |
各機能の利用可否。 エンジンの機能が Action/MCP の機能と同じとは限りません。
機能 Action MCP CLI/engine image スキャン(SAST/SCA/Secrets/IaC) ✅ ✅ ✅ PoC 自動生成 — — ✅ ( --with-poc)Proof-of-Fix — — ✅ ( pof generate)セルフヒーリング CI(自動 PR) — — ✅ ( --create-pr, human-approval)MCP には破壊的な操作(自動パッチ/PR)はありません。意図的な設計であり、これらの操作は CLI/人間の承認ループ内にとどめています。
verify_findingは sandbox 内で PoC を再実行するため、 副作用の観点では「完全な読み取り専用」ではありません。
すでに実装済みの機能(計画ではなくコード)
| 仕組み | 場所 | 動作 |
|---|---|---|
| 変異型再攻撃 PoF | gsc_cli/gsc_poc_mutator.py → gsc_proofoffix.py | 修正後、PoC を変異させた形式(URL エンコード、二重エンコード、HTML エンティティ、大小文字の入れ替え、タブ/スペース)で再実行し、「症状だけを修正し、原因を修正していない」ケースを検出します。決定論的に動作し、LLM は不要です |
| ポジティブコントロール + taint 再チェック | gsc_pof_sandbox.py、tests/test_taint_recheck.py | PoC は脆弱なバリアントでは動作し、修正済みのバリアントでは動作しない必要があります |
| 悪意ある PoC のコンテナー分離 | gsc_pof_sandbox.py::_isolation_backend() | docker/podman(--network none、読み取り専用、cap-drop、非 root)+ rlimit フォールバック。分離レベルは各結果に含まれます。公開イメージには docker/podman がありません → エンジンは fail-closed で動作し、PoC は一切実行されず、判定は unavailable になります(「再現しない」という意味ではありません)。実際に PoC を実行するには、docker/podman を備えたホスト上で CLI を使用してください。docker.sock のマウントは分離ではなく、PoC にホストのデーモンを渡すことになります |
| LLM なしのクイックモード | gsc external-scan --scan-mode quick | 正規表現のみで検出します。LLM による判定はなく、トークン消費は 0 です |
🎯 私たちの特長:BYO-LLM — エンジンは私たちが用意し、判定役はあなたが選ぶ
GSC はエンジン + 検出器 + PoCであり、LLM の上に重ねた単なるラッパーではありません。
- GSC が提供するもの: 69 個の検出器、V3 スコアリング、FP フィルター、PoC/PoF、セルフラーニング — クローズド IP を Docker イメージに収録しています。
- お客様が用意するもの: LLM キー(OpenAI 互換であれば何でも利用できます — DeepSeek/OpenRouter/GMI/ローカル Ollama)。
お客様にとってのメリット:
- 他社のトークン費用はゼロ — お客様のキーで再検証できます。
- プロバイダーに縛られません — 無料のローカル Ollama も利用できます。
- お支払いいただくのは検出器とロジックに対してであり、LLM の呼び出しに対してではありません。
🧠 Второй столп: Self-Learning — детекторы обновляются сами, каждую ночь
Помимо BYO-LLM у GSC есть замкнутый контур обучения без LLM (0 токенов, детерминированный):
скан → авто-разметка findings по calibration-сети (16 проектов: 9 clean + 7 vuln)
→ авто-деактивация шумных паттернов (<30% TP)
→ пополнение эталонов из security-фидов
→ federated feedback (приватно: только {tenant_hash, rule_id, tp, fp} + DP-шум)
Детекторы учатся на реальных находках клиентов через federated-контур — то, чего мейнстрим сознательно избегает (риск дрейфа). GSC обходит это консервативным self-learning: разметка по фиксированной сети + дискретные деактивации, без переписывания весов — скорость ежедневного апдейта без катастрофического дрейфа.
| Вендор | Как обновляет правила | Self-learning |
|---|---|---|
| Semgrep | вручную (semgrep-rules) | ❌ |
| GitHub CodeQL | вручную (Security Lab) | ❌ |
| Snyk Code | офлайн-ML, «never customer data» | ❌ |
| SonarQube | вручную (SonarSource) | ❌ |
| GSC | ежедневно · 0-LLM · federated | ✅ |
Никто не замыкает петлю обучения в проде — GSC закрывает этот зазор. Подробно, с пруф-базой (доки вендоров + research-статьи) → SELF_LEARNING.md.
Честная рамка. GSC не заменяет Semgrep/CodeQL: у них шире покрытие языков и зрелее правила. GSC закрывает то, чего они не делают — доказывает находку PoC, верифицирует фикс перезапуском эксплойта, учится на TP/FP. Рабочая схема — вместе: зрелый сканер на массовый охват + GSC на закрытие конкретных находок.
🔌 Интеграции
MCP — подключи GSC к Claude Code / Cursor / Codex
Движок отдаёт 6 инструментов по MCP (read-only по отношению к репозиторию — не патчит
и не делает PR; verify_finding исполняет PoC там, где есть docker/podman — см. границы ниже): scan_repo, scan_diff,
list_findings, get_finding, verify_finding, list_detectors.
Сервер уже внутри образа — .mcp.json в корне проекта (Claude Code):
{
"mcpServers": {
"gsc": {
"command": "docker",
"args": ["run", "--rm", "-i",
"-v", "${PWD}:/repo:ro",
"-v", "gsc-state:/app/.hermes/state",
"ghcr.io/poliakarmai/gsc-scanner:v1", "mcp"],
"env": { "GSC_ALLOWED_ROOTS": "/repo" }
}
}
}
Cursor и любой другой MCP-клиент — та же форма (command + args).
По умолчанию транспорт stdio; всё не-протокольное идёт в stderr.
HTTP (общий сервер, токен обязателен — fail-closed):
docker run --rm -p 8001:8001 -e GSC_MCP_TOKEN=your-secret \
ghcr.io/poliakarmai/gsc-scanner:v1 mcp --transport http --host 0.0.0.0 --port 8001
⚠️ На том конце — агент, и честно о границах:
- Деструктивных действий нет: ни auto-patch, ни PR — они в CLI/human-лупе.
verify_findingне исполняет PoC в этом образе. Гейты в коде реальные (DESTRUCTIVE-PoC и недетерминированный PoC отклоняются), а без OS-изоляции движок fail-closed: docker/podman внутри нет → PoC не запускается вовсе, тул отвечаетstatus: "unavailable"+ hint. Это не «не воспроизводится»: о самой находке такой ответ не говорит ничего. Реальный прогон — CLI на хосте с docker/podman. Пробросdocker.sock— не изоляция, а выдача PoC хостового демона (эквивалент root): не делать.scan_repoограничен бюджетом:GSC_SCAN_TIMEOUT(default 300 с) на свип детекторов,GSC_MAX_FILES(default 50 000) на инвентарь. Упёрлись в лимит — в ответеstatus: "partial",truncated: trueи список детекторов, которые не запускались. Мало находок там не значит «чисто»; такой скан в БД не сохраняется.GSC_ALLOWED_ROOTSограничиваетscan_repo/scan_diffсмонтированными путями.scan_repoсохраняет находки в БД (persisted: trueв ответе), поэтомуlist_findingsиget_findingих видят сразу.get_findingотвечает из БД (source: "database"), без пересканирования; ~30–60 с — только если ключа в БД нет и он пересобирает скан.- Нужен writable volume на
/app/.hermes/state— там SQLite. Docker создаёт volume от root, а процесс идёт под uid 999, поэтому сначала отдайте права:docker run --rm -v gsc-state:/s --user 0 <image> chown -R 999:999 /s. Без этогоscan_repoвернётpersisted: false(скан работает, БД — нет), а--read-onlyвообще не годится.- Без
llm_api_key/DEEPSEEK_API_KEYработают только regex-детекторы.
Paperclip — «найми GSC как сотрудника по безопасности»
Paperclip (79K★, open-source оркестратор AI-агентов) подключает GSC через MCP Tool Gateway — любой нанятый агент (Claude Code / Codex / Hermes) получает GSC-инструменты и роль «Security Engineer».
📦 Интеграция идёт через MCP-сервер образа (см. раздел MCP выше). Гайд и skill
gsc-security-reviewпоставляются с коммерческим доступом (репозиторийgsc-core,docs/integrations/paperclip/) — в публичном репо их нет.
- Транспорт:
local_stdio(subprocess) илиmcp_remote(HTTP)
Подключение за минуты: зарегистрируй ToolStdioCommandTemplate, создай gateway — и GSC сканирует репозитории твоей Paperclip-компании.
Лицензия и доступ
Этот репозиторий (GitHub Action, документация, маркетинг) — Apache License 2.0. Свободно используйте Action в своих репозиториях.
Движок GSC (детекторы, PoC/PoF, калибровочная сеть, LLM-слой) поставляется отдельно как закрытый Docker-образ ghcr.io/poliakarmai/gsc-scanner под Business Source License 1.1 (BSL 1.1):
- Свободное использование — включая сканирование собственных репозиториев в production — разрешено всегда.
- Коммерческий SaaS/SAST-сервис для третьих лиц, конкурирующий с GSC, — требует коммерческой лицензии (после NDA).
- Change Date 2030-08-06 → движок автоматически переходит на Apache 2.0.
Для демо, пилота или приобретения — свяжитесь с автором.
© 2026 Алексей Поляков.
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。