0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Vercel deepsec入門 — Claude×Codexで大規模コードベースの脆弱性を自動スキャンする

0
Last updated at Posted at 2026-05-07

deepsec 5ステージパイプライン概要

はじめに

セキュリティ脆弱性の発見は、コードベースが大規模になるほど困難になります。従来の静的解析(SAST)ツールは正規表現パターンマッチングに依存しているため、複雑なデータフローを経由する脆弱性や、複数ファイルにまたがる問題の検出が苦手です。

2026年5月、Vercel Labsは deepsec(Apache 2.0)を公開しました。AIコーディングエージェント(Claude Opus 4.7 および GPT-5.5)を活用し、大規模コードベースに潜む「ハードな」脆弱性を自律的に発見するオープンソースのセキュリティハーネスです。

この記事では、公式ドキュメントおよびGitHubリポジトリ(vercel-labs/deepsec)をもとに、deepsecのアーキテクチャ・セットアップ手順・活用方法を解説します。

この記事で学べること

  • deepsecの5ステージパイプラインの仕組み
  • CLI コマンドによるスキャンの実行手順
  • カスタムマッチャーを使った検出カスタマイズ
  • Vercel Sandboxesを使った大規模リポジトリへのスケールアウト
  • セキュリティ上の考慮事項(プロンプトインジェクション・認証情報の分離)

対象読者

  • セキュリティ脆弱性スキャンを自動化したいバックエンド・フルスタックエンジニア
  • AIエージェントを活用したセキュリティツールの仕組みに興味がある方
  • 大規模コードベース(モノレポ含む)のセキュリティ品質向上を目指す方

前提条件

  • Node.js 22以上、pnpm が使える環境
  • AnthropicまたはOpenAI APIキー
  • Git リポジトリ(ローカル)

TL;DR

  • deepsecはVercel Labsが公開したAIエージェント駆動のOSSセキュリティスキャナー(Apache 2.0)
  • 5ステージ: Scan → Investigate → Revalidate → Enrich → Export
  • 対応モデル: Claude Opus 4.7(max effort)または GPT-5.5(xhigh reasoning)
  • npx deepsec init で初期化、pnpm deepsec scan で即スキャン開始
  • 誤検知率は10〜20%。revalidate ステップで50%以上削減
  • Vercel Sandboxesで最大1,000以上の並列インスタンスによるスケールアウトが可能
  • ソースコードを外部クラウドにアップロード不要(自前インフラで動作)

deepsecとは

従来SASTとdeepsecの比較

deepsecは、Vercel Labsが2026年5月に公開したAIエージェント駆動のセキュリティ脆弱性スキャナーです。GitHubリポジトリ vercel-labs/deepsec で Apache 2.0 ライセンスで公開されています。

従来のSASTツールとの違い

従来の静的解析ツール(SAST)は、あらかじめ定義されたパターンに対して正規表現マッチングを行います。処理は高速ですが、以下のようなケースは苦手です。

  • 複数ファイル・複数レイヤーにまたがるデータフロー上の脆弱性
  • フレームワーク固有の複雑な認証・認可ロジックの欠陥
  • コンテキスト依存の入力検証不足

deepsecはこれらの課題に対応するため、AIエージェントにデータフローのトレース・解析を委ねるアプローチを採用しています。

Deepsec is a security harness for finding vulnerabilities in your codebase powered by coding agents.
GitHub - vercel-labs/deepsec

対応AIモデル

deepsecは以下の2モデルをコアに利用します。それぞれの設定でAPIキーを提供するだけで動作します。

モデル 設定 特徴
Claude Opus 4.7 ANTHROPIC_AUTH_TOKEN max effort モード
GPT-5.5 OpenAI APIキー xhigh reasoning モード

公式ドキュメントによると、サイバーセキュリティ特化でファインチューニングされたモデルは不要で、汎用モデルでも動作します。


アーキテクチャ:5ステージパイプライン

deepsecのスキャンは5つのステージで構成されています。

Stage 1: Scan(スキャン)

まず、正規表現ベースの高速プレスキャンを実行します。

  • リポジトリ内の全ファイルを正規表現でスキャン
  • セキュリティ感度の高いコードパターン(入力受付点・認証処理・SQL クエリ等)を洗い出す
  • この段階ではAIを使わず、軽量・高速に候補を絞り込む

このステップで検出された「エントリーポイント候補」が、次のAI調査ステージへ渡されます。

Stage 2: Process(AIエージェント調査)

AIエージェントが各候補ファイルを深く調査します。

  • データフローのトレース(入力が最終的にどこに渡るかを追跡)
  • 認証・認可チェックの欠如を検出
  • フレームワーク固有の脆弱性パターンを認識
  • 誤検知率は約10〜20%(この段階では意図的に網を広く張る)

Stage 3: Revalidate(再検証)

二次エージェントが調査結果を再評価します。

  • 各検出結果の再検証(独立した視点でのダブルチェック)
  • Gitの変更履歴も参照し、コンテキストを強化
  • 誤検知を50%以上削減(公式ブログ記載値)
  • 重要度(severity)の再分類

Stage 4: Enrich(エンリッチ)

Gitメタデータを使って、各脆弱性の担当者情報を付加します。

  • git log を解析して対象ファイルの変更コントリビューターを特定
  • チケット化時の担当者アサインに活用

Stage 5: Export(エクスポート)

調査結果をアクション可能な形式に変換して出力します。

  • Markdown形式: レビューしやすいレポート
  • JSON形式: CI/CDパイプラインとの連携・自動チケット生成に対応

セットアップと使い方

deepsecセットアップと使い方フロー

インストールと初期化

# deepsec を初期化(.deepsec/ ディレクトリを作成)
npx deepsec init

# .deepsec/ ディレクトリに移動して依存関係をインストール
cd .deepsec
pnpm install

初期化後、.deepsec/ ディレクトリに以下のファイルが作成されます。

ファイル 役割
SKILL.md エージェントへの調査手順指示書
SETUP.md セットアップガイド
INFO.md プロジェクト固有のコンテキスト(50〜100行を目安に記述)
deepsec.config.ts スキャン設定ファイル

INFO.md の記述が重要です。AIエージェントに対してリポジトリの構造・使用フレームワーク・認証モデルなどのコンテキストを提供するため、50〜100行程度で記述します。

環境変数の設定

# Claude を使う場合
export ANTHROPIC_AUTH_TOKEN="sk-ant-..."

# OpenAI を使う場合(AI Gateway 経由も可)
export AI_GATEWAY_API_KEY="..."

スキャンの実行

deepsecの各ステージは個別のコマンドで実行できます。

# Stage 1: 正規表現スキャン(候補ファイルの洗い出し)
pnpm deepsec scan

# Stage 2: AIエージェントによる詳細調査
pnpm deepsec process

# (オプション)重要度の事前分類(コスト削減目的の補助コマンド)
pnpm deepsec triage

# Stage 3: 再検証 & Gitメタデータ付加
pnpm deepsec revalidate

# Stage 5: 結果のエクスポート(Markdown または JSON)
pnpm deepsec export

ステージを順番に実行するため、各コマンドの出力が次のコマンドの入力になります。


カスタムマッチャーで検出を拡張する

deepsecはカスタムマッチャー(regex matchers)を記述することで、デフォルトでカバーされないフレームワーク固有の認証モデルやチーム独自の規約に対応できます。

マッチャーは docs/writing-matchers.md のガイドに従って記述します。設定は deepsec.config.ts で管理します。

// deepsec.config.ts(公式 writing-matchers.md をもとにした構造概要)
import { defineConfig, DeepsecPlugin } from "deepsec";

const myPlugin: DeepsecPlugin = {
  name: "my-app",
  matchers: [
    // regexMatcher ヘルパーで定義(slug, noiseTier, filePatterns 等のフィールド)
    // 詳細は docs/writing-matchers.md を参照
  ],
};

export default defineConfig({
  projects: [{ id: "my-app", root: ".." }],
  plugins: [myPlugin],
});

カスタムマッチャーの活用例:

  • 自社フレームワーク固有のセッション管理ロジック
  • 独自ORM経由のSQLクエリ生成パターン
  • 社内認可ライブラリの誤った使い方の検出

大規模リポジトリへのスケールアウト

大規模モノレポや数百万行規模のリポジトリに対しては、Vercel Sandboxesを使った分散実行が有効です。

# Vercel Sandboxes で分散実行
# --sandboxes: 並列VM数, --concurrency: VM内同時処理数
pnpm deepsec sandbox process --sandboxes 10 --concurrency 4

Vercelのコードベースでは、1,000以上の並列インスタンスでルーティンスキャンを実行していると公式ブログに記載されています(Vercel Blog)。

単一マシンでの大規模リポジトリスキャンは、数日かかる場合があります。スピードを優先する場合はSandbox分散実行が推奨されます。


セキュリティ上の考慮事項

AIエージェントを活用するツールならではの留意点があります。

ソースコードの外部送信なし

deepsecは自前のインフラで動作し、プロプライエタリなソースコードを外部クラウドサービスにアップロードしません。セキュリティポリシー上、ソースコードの外部送信が制限されている環境でも利用できます。

プロンプトインジェクションリスク

deepsecはエージェントがシェルへのフルアクセスを持って動作します。公式ドキュメントでは、外部依存関係からのプロンプトインジェクションリスクが言及されています。対策として以下を推奨しています。

  • Sandboxモードを利用する(APIキーをワーカーVM外に分離)
  • スキャン対象をレビュー済みの信頼できるコードに限定する

Sandboxモードの多層防御

# Sandbox モードでは認証情報をワーカーVM外に保持
pnpm deepsec sandbox process --sandboxes 5

Vercel Sandboxes(microVM)を使うと、各ワーカーVMは認証情報(APIキー・GitHubトークン等)を持たない状態で実行されます。情報漏洩リスクを低減できます。


まとめ

deepsecは、AIエージェント(Claude Opus 4.7 / GPT-5.5)を活用して大規模コードベースの脆弱性を自律的に発見するオープンソースのセキュリティハーネスです。

主なポイント

  • 5ステージパイプライン: Scan → Investigate → Revalidate → Enrich → Export
  • 誤検知率: 10〜20%(revalidateで50%以上削減)
  • スケールアウト: Vercel Sandboxesで1,000以上の並列インスタンスに対応
  • プライバシー: ソースコードを外部送信せず自前インフラで動作
  • カスタマイズ: カスタムマッチャーでチーム固有のパターン検出に対応
  • ライセンス: Apache 2.0

従来のSASTツールでは検出が難しい、複雑なデータフロー上の脆弱性を発見できる点が最大の強みです。大規模コードベースを抱えるチームのセキュリティ底上げに活用できます。

参考リンク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?