agent-security-scanning について
Agent Security Scanning は、AI 生成コードやエージェントアプリを検査するセキュリティスキルです。静的解析、依存関係チェック、エージェント向け脅威分析を行い、重大度や CWE 分類、修正例を示します。
主な機能
- 01コード脆弱性の静的解析
- 02既知 CVE の依存関係スキャン
- 03エージェント向け脅威分析
- 04重大度と CWE による分類
- 05コード付き修正例
活用シーン
- 01デプロイ前の生成コード確認
- 02インストール後の依存関係確認
- 03エージェントのツール呼び出し監査
- 04CI/CD へのセキュリティゲート追加
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ itallstartedwithaidea/ agent-skills --skill agent-security-scanningインストール後、Claude Code で/agent-security-scanningを入力して読み込まれたか確認します。
詳細
エージェントのセキュリティスキャン
googleadsagent.ai™ による Agent Skills™ の一部です
説明
エージェントのセキュリティスキャンは、AI が生成したコードが本番環境に到達する前に脆弱性を検出します。エージェントは、LLM アプリケーション向け OWASP Top 10 を適用し、依存関係に既知の CVE がないかスキャンし、プロンプトインジェクションのベクトルを特定します。また、サニタイズされていない動的 SQL、eval() の使用、検証されていないデシリアライゼーションなど、エージェントが生成したコードに特有の安全でないパターンを検出します。
AI コード生成ツールが生成するコードは「動作する」ものの、機能テストでは見つけられないセキュリティ脆弱性を含むことがよくあります。調査によると、AI が生成したコードは、人間が作成したコードよりも悪用可能な脆弱性を含む割合が高く、特に入力検証、認証、暗号処理でその傾向が顕著です。このスキルは、AI エージェントが生成するパターンに特化して調整されたセキュリティ分析を適用します。
スキャンパイプラインは、生成されたコードの静的解析(インジェクション、XSS、SSRF)、依存関係の脆弱性スキャン(CVE データベースとの照合)、エージェント固有の脅威モデリング(プロンプトインジェクション、ツールの誤用、ツール呼び出しを介したデータの窃取)の 3 つのレイヤーを対象とします。各検出結果には、重大度、CWE 分類、コード例を含む具体的な修正方法が記載されます。
使用する場面
- コミットまたはデプロイの前に、AI が生成したコードをレビューする場合
npm installまたはpip installの後に、依存関係に既知の CVE がないかスキャンする場合- エージェントのツール呼び出しパターンを監査し、悪用の可能性を調べる場合
- CI/CD パイプラインにセキュリティゲートを導入する場合
- ユーザーがセキュリティレビュー、脆弱性スキャン、または侵入テストを依頼した場合
- ユーザー入力、認証、または決済を扱うアプリケーションを構築する場合
動作の仕組み
graph TD
A[AI-Generated Code] --> B[Layer 1: Static Analysis]
B --> C[Injection: SQL, XSS, SSRF, Command]
B --> D[Auth: Hardcoded Secrets, Weak Crypto]
B --> E[Data: PII Exposure, Logging Secrets]
A --> F[Layer 2: Dependency Scan]
F --> G[CVE Database Match]
F --> H[License Compliance]
A --> I[Layer 3: Agent Threat Model]
I --> J[Prompt Injection Vectors]
I --> K[Tool Call Audit]
I --> L[Data Exfiltration Paths]
C --> M[Severity Classification + CWE]
D --> M
E --> M
G --> M
J --> M
K --> M
L --> M
M --> N[Remediation Report]
3 つのレイヤーによるスキャンは並行して実行されます。静的解析はコードレベルの脆弱性を検出し、依存関係のスキャンは既知の CVE を検出し、エージェントの脅威モデリングは AI 搭載アプリケーションに固有のリスクを検出します。
実装
import re
from dataclasses import dataclass
@dataclass
class SecurityFinding:
severity: str # CRITICAL, HIGH, MEDIUM, LOW
cwe: str
title: str
file: str
line: int
description: str
remediation: str
class AgentSecurityScanner:
PATTERNS = [
{
"name": "SQL Injection",
"pattern": r'f["\'].*(?:SELECT|INSERT|UPDATE|DELETE).*\{.*\}',
"severity": "CRITICAL",
"cwe": "CWE-89",
"remediation": "Use parameterized queries instead of string interpolation",
},
{
"name": "Command Injection",
"pattern": r'(?:os\.system|subprocess\.call|exec)\s*\(.*(?:f["\']|\+\s*\w)',
"severity": "CRITICAL",
"cwe": "CWE-78",
"remediation": "Use subprocess with list args, never shell=True with user input",
},
{
"name": "Hardcoded Secret",
"pattern": r'(?:password|secret|api_key|token)\s*=\s*["\'][^"\']{8,}["\']',
"severity": "HIGH",
"cwe": "CWE-798",
"remediation": "Use environment variables or a secrets manager",
},
{
"name": "Eval Usage",
"pattern": r'\beval\s*\(',
"severity": "HIGH",
"cwe": "CWE-95",
"remediation": "Use ast.literal_eval for data, or a sandboxed interpreter",
},
{
"name": "Insecure Deserialization",
"pattern": r'pickle\.loads?\s*\(',
"severity": "HIGH",
"cwe": "CWE-502",
"remediation": "Use JSON or msgpack instead of pickle for untrusted data",
},
]
def scan_file(self, filepath: str, content: str) -> list[SecurityFinding]:
findings = []
for i, line in enumerate(content.splitlines(), 1):
for pattern in self.PATTERNS:
if re.search(pattern["pattern"], line, re.IGNORECASE):
findings.append(SecurityFinding(
severity=pattern["severity"],
cwe=pattern["cwe"],
title=pattern["name"],
file=filepath,
line=i,
description=f"Detected {pattern['name']} pattern",
remediation=pattern["remediation"],
))
return findings
def scan_dependencies(self, lockfile: str) -> list[SecurityFinding]:
"""Scan package lockfile against CVE databases."""
# Delegates to `npm audit` or `pip-audit`
pass
def scan_agent_threats(self, tool_calls: list[dict]) -> list[SecurityFinding]:
findings = []
for call in tool_calls:
if call["tool"] == "Shell" and any(
dangerous in call.get("command", "")
for dangerous in ["rm -rf", "curl | sh", "wget | bash", "> /dev/"]
):
findings.append(SecurityFinding(
severity="CRITICAL", cwe="CWE-78",
title="Dangerous Shell Command",
file="agent_session", line=0,
description=f"Agent issued dangerous command: {call['command'][:100]}",
remediation="Restrict agent shell access to an allowlist of safe commands",
))
return findings
ベストプラクティス
- 人間が作成したコードだけでなく、AI が生成したコードの変更ごとにセキュリティスキャンを実行します
- 検出結果を CWE で分類し、標準化された追跡と報告を行います
- CRITICAL および HIGH の検出結果がある場合はマージをブロックし、MEDIUM はフォローアップチケットで追跡します
- 新しい CVE は毎日公開されるため、インストール時だけでなく毎週依存関係をスキャンします
- ファイル削除、ネットワークアクセス、eval など、危険なパターンがないかエージェントのツール呼び出しを監査します
- 有効期限を設定した、確認済みの誤検出の抑制リストを管理します
プラットフォーム互換性
| プラットフォーム | サポート | 備考 |
|---|---|---|
| Cursor | 完全 | コミット前および CI との統合 |
| VS Code | 完全 | セキュリティ拡張機能のエコシステム |
| Windsurf | 完全 | セキュリティスキャンをサポート |
| Claude Code | 完全 | コードレビューとスキャン |
| Cline | 完全 | セキュリティを考慮したレビュー |
| aider | 部分的 | コードレベルのスキャン |
関連スキル
- CodeQL & Semgrep - データフロートラッキングによる詳細な静的解析で、正規表現ベースのスキャンでは見逃される脆弱性を検出します
- Secret Protection - コミット前、CI/CD、実行時の各レイヤーで認証情報の漏えいを防止します
- Sandbox Hardening - 実行環境を分離し、スキャンをすり抜けた脆弱性の影響範囲を限定します
- Code Review - 中核となる評価項目の 1 つとしてセキュリティレビューを適用する、体系的な品質ゲートです
キーワード
security-scanning owasp cve vulnerability-detection prompt-injection agent-security static-analysis dependency-audit
© 2026 googleadsagent.ai™ | Agent Skills™ | MIT License