Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AIのミスはAIに拾わせる。静的解析とAgentで固める「多層防御」開発術

 AIのミスはAIに拾わせる。静的解析とAgentで固める「多層防御」開発術

2026年2月 五社合同 生成AI LT大会 登壇資料

生成AIを用いた開発が加速する中で、どのようにコードのセキュリティを担保するか?
静的解析(Ruff/Gitleaks)とAIエージェント(Claude Code/Kiro)を組み合わせた4層の多層防御アプローチを提案します。

Layer 0: プロンプト + Hook(AIエージェント制御)
Layer 1: pre-commit ゲート(ローカル静的解析)
Layer 2: GitHub の免疫システム(SCA/SAST/AI Review)
Layer 3: 人間による最終承認

Avatar for Ryoichiro Teshima

Ryoichiro Teshima

March 26, 2026

Other Decks in Technology

Transcript

  1. 45%

  2. それぞれの弱点を、別の層が補う 検出 修正 判断 静的解析 ◦ 確実 △ × AIエージェント

    △ 見落とす ◦ 文脈理解 △ ハルシネーション 人間 △ 量に負ける △ 量に負ける ◦ ただし量に負ける
  3. それぞれの弱点を、別の層が補う 検出 修正 判断 静的解析 ◦ 確実 △ × AIエージェント

    △ 見落とす ◦ 文脈理解 △ ハルシネーション 人間 △ 量に負ける △ 量に負ける ◦ ただし量に負ける お互いの長所を組み合わせる どの要素も単独では信頼しない
  4. 多層防御の全体像 Layer 0 — プロンプト + Hook Layer 1 —

    pre-commit ゲート + Layer 2 — GitHub の免疫システム Layer 3 — 人間が変更を承認
  5. 多層防御の全体像 Layer 0 — プロンプト + Hook Layer 1 —

    pre-commit ゲート + Layer 2 — GitHub の免疫システム Layer 3 — 人間が変更を承認 1つの層を突破されても、次の層で止める 人間が見るべき量を、仕組みで減らす
  6. 多層防御の全体像 Layer 0 — プロンプト + Hook Layer 1 —

    pre-commit ゲート + Layer 2 — GitHub の免疫システム Layer 3 — 人間が変更を承認
  7. Layer 0 — プロンプト + Hook AIエージェント + Hook +

    静的解析 プロンプトと Hook の設定 セキュリティルール • ハードコード禁止、入力バリデーション必須、静的解析チェックの導入 等 • 静的解析 ⇄ AI Agent の自動ループがここで回る Hook(エージェントツール制御) • 危険な操作(環境変数の読み込みなど)を自動ブロック • ツール実行前にチェックが入る
  8. Layer 0 詳細 — セキュリティポリシー AIエージェント セキュリティポリシー プロンプト例 # セキュリティポリシー

    ## NEVER ← NEVER , ALWAYS などの語句はかなり強い信号として認識されます - パスワード、APIキー、トークンをハードコードしない - .env ファイルを git commit しない - エラーメッセージにスタックトレースを含めない - pickle, eval, exec は使用禁止 - subprocess で shell=True を使用しない ## ALWAYS - ユーザー入力は必ずバリデーション - SQL は必ずパラメータ化クエリ - シークレットは環境変数 or Secrets Manager - 暗号化は hashlib.sha256 以上(md5/sha1 禁止) - HTTP通信は必ず HTTPS
  9. Layer 0 詳細 — 静的解析セルフチェック指示 AIエージェント + 静的解析 静的解析セルフチェック指示 プロンプト例

    # 静的解析セルフチェック ## ALWAYS - コード生成後 ruff check --select S {file} を実行する - 指摘があれば修正し、再度 ruff check でクリーンを確認する - 指摘ゼロになるまでループを繰り返す - 修正できない指摘は理由をコメントで明示する ## NEVER - ruff 未実行のコードをユーザーに提示しない - # noqa で警告を握りつぶさない
  10. Layer 0 詳細 — Hook(エージェント制御) Hook Agent を縛る Hook Hookとは

    • AIエージェントがツールを実行する前に割り込むチェックポイント • ツール呼び出し時に操作対象をチェックし、問題があれば拒否 ブロック対象の例 • 環境変数の直接読み込み(シークレット漏洩リスク) • 任意のシェルコマンド実行(コマンドインジェクション) → AIの危険なアクションを事前に止める
  11. 多層防御の全体像 Layer 0 — プロンプト + Hook Layer 1 —

    pre-commit ゲート + Layer 2 — GitHub の免疫システム Layer 3 — 人間が変更を承認
  12. Layer 1 — pre-commit ゲート 静的解析 git commit のタイミングでチェックが入る Ruff(Bandit互換ルール)

    Python の静的解析ツール — Rust製のため超高速 Layer 0でAIが見逃した問題をここで捕捉 Gitleaks シークレット検出 — APIキー・トークンの漏洩防止 → 脆弱なコードやシークレットはコミットさせない → ローカルの最終防衛ライン
  13. 多層防御の全体像 Layer 0 — プロンプト + Hook Layer 1 —

    pre-commit ゲート + Layer 2 — GitHub の免疫システム Layer 3 — 人間が変更を承認
  14. Layer 2 — GitHub の免疫システム Push / PR 作成で起動 Push

    で起動 SCA(Dependabot) • 依存パッケージの既知脆弱性を検出 → 自動で修正PR作成 シークレットスキャン(Push Protection) • Push 時にシークレット等を検知しブロック PR 作成で起動 SAST(Ruff) • コードの脆弱性パターンを静的解析で検出 • ローカルと同じBandit互換ルール AIレビュー(Copilot) • 変更対象コードに対するレビュー • セキュリティに限らず、パフォーマンスなども含めた総合的なレビューを提供 AIエージェント + 静的解析
  15. 多層防御の全体像 Layer 0 — プロンプト + Hook Layer 1 —

    pre-commit ゲート + Layer 2 — GitHub の免疫システム Layer 3 — 人間が変更を承認
  16. Layer 3 — 人間が変更を承認 人間 マージ承認の最終判断は人間が下す なぜ人間が最後に必要か • AIの出力は 100%

    正しいとは限らない • ビジネスロジックの妥当性はAIに判断できない PRレビュー + マージ承認 • Layer 0-2 を通過したコードだけが人間に届く • 静的解析・AIレビュー済 → 人間は本質に集中できる → 人間は多層防御の最終ゲート 責任の所在は常に人間にあるべき
  17. 多層防御の全体像(詳細版) Layer 0 — プロンプト + Hook Layer 1 —

    pre-commit ゲート + Layer 2 — GitHub の免疫システム Layer 3 — 人間が変更を承認 Git Leaks Steering Hook Ruff Copilot Ruff Git Leaks
  18. 多層防御の全体像(詳細版) Layer 0 — プロンプト + Hook Layer 1 —

    pre-commit ゲート + Layer 2 — GitHub の免疫システム Layer 3 — 人間が変更を承認 Git Leaks Steering Hook Ruff Copilot Ruff Git Leaks 1つの層を突破されても、次の層で止める 人間が見るべき量を、仕組みで減らす
  19. 今日から始める3ステップ ステップ 所要時間 1. プロンプトの整備 5分 2. Hookの整備 10分 3.

    リモートリポジトリの設定 15分 30分で、防御層は0から3に増やせる
  20. Appendix — 出典一覧 [1] Apiiro, "AI Code Assistants Report", 2025

    "AI-assisted developers were able to write 3-4x more code than their peers, however their code introduced 10x more security issues." https://apiiro.com/blog/4x-velocity-10x-vulnerabilities-ai-coding-assistants-are-shipping-more-risks/ [2] Veracode, "2025 GenAI Code Security Report" "In 45% of the cases these models introduce a detectable OWASP Top 10 security vulnerability into the code." https://www.veracode.com/resources/analyst-reports/2025-genai-code-security-report/ [3] Sonar, "2026 State of Code Developer Survey" " 96% of developers don’t fully trust that AI-generated code is functionally correct ” " only 48% of developers always check their Al-assisted code before committing. ” https://www.sonarsource.com/state-of-code-developer-survey-report.pdf [4] Symbiotic Security, IEEE-ISTAS 2025 "Our findings show a 37.6% increase in critical vulnerabilities after just five iterations." https://arxiv.org/html/2506.11022v2
  21. Appendix — 参考情報 • Puliczek/awesome-mcp-security: Awesome MCP (Model Context Protocol)

    Security • https://github.com/Puliczek/awesome-mcp-security • TheDecipherist/claude-code-mastery — block-secrets.py の出典 • https://github.com/TheDecipherist/claude-code-mastery • Claude Code Hooks 公式ドキュメント • https://docs.anthropic.com/en/docs/claude-code/hooks • Kiro CLI Hooks 公式ドキュメント • https://kiro.dev/docs/cli/hooks/ • arxiv:2409.07054 — LLM instruction following in non-English languages • https://arxiv.org/abs/2409.07054 • Ruff 公式 • https://docs.astral.sh/ruff/ • Gitleaks 公式 • https://github.com/gitleaks/gitleaks • pre-commit 公式 • https://pre-commit.com/ • Ruff — Bandit互換セキュリティルール(S ルール) • https://docs.astral.sh/ruff/rules/#flake8-bandit-s • GitHub Dependabot alerts 公式ドキュメント • https://docs.github.com/en/code-security/dependabot/dependabot-alerts/about-dependabot-alerts • GitHub Secret Scanning / Push Protection 公式ドキュメント • https://docs.github.com/en/code-security/secret-scanning/introduction/about-secret-scanning • Slopsquatting — AI幻覚パッケージによるサプライチェーンリスク • https://fossa.com/blog/slopsquatting-ai-hallucinations-new-software-supply-chain-risk/ • OWASP Top 10 for LLM Applications • https://owasp.org/www-project-top-10-for-large-language-model-applications/ • GitHub Copilot Code Review 公式発表 • https://github.blog/news-insights/product-news/found-means-fixed-introducing-code-scanning-autofix-powered-by-github-copilot-and-codeql/