バックエンド

AIセキュリティハーネス入門——Vercel deepsecで自分のコードベースの脆弱性を自動検出する

OSS化されたdeepsecを使い、自社コードベースの脆弱性検出フローを構築します。Scan→Investigate→Revalidateというワークフローを、架空のSaaSを題材に解説。AI生成コード時代のセキュリティ担保を扱います。

2026年6月2日
セキュリティバックエンドVercelAI開発
AIセキュリティハーネス入門——Vercel deepsecで自分のコードベースの脆弱性を自動検出する

はじめに

AIにコードを書かせる量が増えて、こんな不安はありませんか?

  • 大量に生成されたコードを、人間が全部レビューしきれない
  • AIが書いたコードに脆弱性が混ざっていないか、確信が持てない
  • 既存の静的解析ツールは誤検知が多く、ノイズに埋もれて重要な指摘を見逃す

この課題に対してVercelがOSSとして公開したのが deepsec という「セキュリティハーネス」です。AIを使ってコードベースの脆弱性を見つけ、調査し、検証するワークフローを提供します。

本記事を読み終えると、次のことができるようになります。

  • AIセキュリティハーネスという考え方を理解する
  • deepsecの初期化とワークフローの全体像を把握する
  • 架空のSaaSを題材に、脆弱性検出フローの組み方を考える

AIセキュリティハーネスとは

従来の静的解析ツールは「パターンマッチで怪しい箇所を機械的に列挙する」アプローチでした。これに対しdeepsecのような AIセキュリティハーネス は、AIにコードの文脈を読ませて脆弱性を 調査・検証 させる点が異なります。

「とりあえず大量に警告を出す」のではなく、「本当に問題か」をAIが掘り下げてくれるのが、AI生成コード時代に適した発想です。

deepsecのワークフロー

deepsecは、脆弱性検出を複数のステップに分けて処理します。公開されている処理ステップは次の通りです。

ステップ役割
Scanコードベースをスキャンして候補を洗い出す
Investigate候補を調査し、実際に問題かを掘り下げる
Revalidate再検証して誤検知を削減する
Enrich情報を付加して指摘を充実させる
Export結果をエクスポートする

この「Scan → Investigate → Revalidate」という流れが、誤検知を減らす肝です。

ハンズオン1: deepsecを初期化する

deepsecはリポジトリのルートで初期化コマンドを実行することで導入します。

# リポジトリのルートで実行
npx deepsec init

このコマンドを実行すると、./.deepsec ディレクトリが作成されます。ここに設定やスキャナーの定義が置かれる構成です。

GitHubリポジトリは github.com/vercel-labs/deepsec で公開されています。カスタムスキャナーの作成ガイドも提供されているため、自社のコードベース特有のチェックを追加することも可能です。

注意: 本記事で扱うコマンドは公式発表に基づくものです。具体的なオプションや最新の使い方は、必ず公式リポジトリのドキュメントで確認してください。

ハンズオン2: 架空SaaSでの活用シナリオ

架空の在庫管理SaaS「ZaikoFlow」を題材に、どんな脆弱性検出フローを組むかを考えます。スタックは Next.js + Firestore + TypeScript です。

ZaikoFlowで特に検査したい観点は次のようなものです。

観点具体例
認可漏れServer Actionで本人確認をせずにデータを更新していないか
入力検証Webhookハンドラで外部入力をそのまま信用していないか
シークレット混入Firebaseの認証情報をコードにハードコードしていないか

たとえば、次のようなServer Actionは認可チェックが抜けている危険な例です。

// 危険な例: 呼び出し元の権限を確認していない
export async function deleteProduct(productId: string) {
  // 認可チェックなしで削除している(誰でも実行できてしまう)
  await db.product.delete({ where: { id: productId } });
}

AIセキュリティハーネスは、こうした「文脈的に危険」なコードを、単なるパターンではなく 意味を読んで 指摘することが期待できます。

修正後はこうあるべきです。

// 安全な例: セッションから権限を確認してから削除
export async function deleteProduct(productId: string) {
  const session = await getServerSession();

  if (!session || session.role !== "admin") {
    throw new Error("権限がありません");
  }

  await db.product.delete({ where: { id: productId } });
}

ハンズオン3: CI/CDに組み込む発想

検出を一度きりで終わらせず、継続的に回す ことが重要です。モリソンの標準であるGitHub Actionsに組み込む発想を図で示します。

PRごとにスキャンを走らせることで、「マージ前に脆弱性に気づく」体制を作れます。具体的なActionsの組み込み手順は公式ドキュメントに従ってください。

AI生成コード時代のセキュリティ姿勢

ツールを入れるだけでなく、姿勢としても押さえておきたい点があります。

  • AIが書いたコードも必ず検査対象にする: 「AIが書いたから大丈夫」は最も危険な思い込みです
  • 誤検知に慣れすぎない: ノイズが多いと重要な指摘を見逃します。再検証で精度を上げる仕組みを重視しましょう
  • シークレットは環境変数へ: コードにキーを書かない、という基本を徹底する
  • 多層で守る: ハーネスは万能ではありません。レビュー・テスト・最小権限と組み合わせて多層防御にする

Tips・注意点

  • OSSである利点を活かす: deepsecはオープンソースなので、カスタムスキャナーで自社固有のルールを足せます。汎用ツールでは拾えない「ZaikoFlow特有の危険パターン」を定義できるのが強みです。
  • AI生成の指摘も鵜呑みにしない: ハーネスの指摘自体もAIによるものです。最終判断は人間が行い、過検知・過信の両方を避けましょう。
  • 正確な情報は公式で: コマンドやオプションは更新される可能性があります。導入時は公式リポジトリを一次情報として確認してください。

まとめ

AIセキュリティハーネスの要点を整理します。

  • deepsec はAIでコードベースの脆弱性を検出するOSSのセキュリティハーネス
  • Scan → Investigate → Revalidate → Enrich → Export のワークフローで、調査と再検証により誤検知を削減する
  • 導入は npx deepsec init で、./.deepsec ディレクトリが作られる
  • 認可漏れ・入力検証・シークレット混入など、文脈依存の脆弱性検出に向く
  • ツール任せにせず、レビュー・テスト・最小権限と組み合わせた多層防御 が前提

次のアクションとして、まずは検証用のリポジトリで npx deepsec init を試し、自社のコードベースにどんな指摘が出るかを眺めてみてください。AIが書いたコードを安心して使うための、最初の一歩になります。