AWS Security Agent を試してみた – 挙動が不安定?実際の検証結果

AWS

はじめに

AWS Security Agent は、開発ライフサイクル全体でアプリケーションを保護する AI エージェントです。主に以下の3つの機能を提供します:

  1. Design security review – 設計ドキュメントのセキュリティレビュー
  2. Code security review – Pull Request のコードレビュー
  3. Penetration testing on-demand – オンデマンドペネトレーションテスト

今回は、この中の Code security review 機能(GitHub PR に対する自動セキュリティレビュー)を検証しました。「OWASP Top 10 の脆弱性を検出できる」という触れ込みですが、実際に試してみるとかなり挙動が不安定でした。

検証環境

試した脆弱性と検出結果

1. ハードコードされたシークレット

# Hardcoded secrets - VULNERABLE
API_KEY = "sk-1234567890abcdef"
AWS_SECRET = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"

結果: ✅ 検出された(ただし遅延あり)

最初のコミットでは「No issues identified.」と表示されましたが、後続のコミット(コマンドインジェクション追加時)のスキャンで突然検出されました

↑ 1st commit: シークレット追加時は「No issues identified.」

↑ 3rd commit: コマンドインジェクション追加時に突然シークレットが検出される

2. SQL インジェクション

@app.get("/search")
async def search_todos(query: str):
    # ユーザー入力を直接 SQL クエリに埋め込み
    cursor.execute(f"SELECT * FROM todos WHERE title LIKE '%{query}%'")
    results = cursor.fetchall()
    return results

結果: ❌ 検出されず

典型的な SQL インジェクション脆弱性ですが、Security Agent は完全にスルーしました。

↑ SQL インジェクションのコミット後も「No issues identified.」

3. コマンドインジェクション

@app.post("/ping")
async def ping_server(host: str):
    # shell=True + ユーザー入力の直接埋め込み
    result = subprocess.run(f"ping -c 1 {host}", shell=True, capture_output=True)
    return {"output": result.stdout.decode()}

結果: ❌ 検出されず

shell=True を使った危険なコマンド実行も検出されませんでした。

気になった点:挙動の不安定さ

1. スキャンタイミングの謎

ハードコードされたシークレットは最初のコミットでは検出されず、3つ目のコミット(コマンドインジェクション追加時)で突然検出されました。

  • 1st commit: シークレット追加 → No issues identified.
  • 2nd commit: SQL インジェクション追加 → No issues identified.
  • 3rd commit: コマンドインジェクション追加 → シークレットが検出される

推測:

  • 差分スキャンではなく、PR 全体を再スキャンしている?
  • スキャンのトリガータイミングが不安定?
  • 非同期処理で遅延が発生している?

2. ダミー値の判定ロジック?

使用したシークレット値:

API_KEY = "sk-1234567890abcdef"  # OpenAI API キー風
AWS_SECRET = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"  # AWS 公式ドキュメントのサンプル値

最初は検出されなかったことから、以下の可能性が考えられます:

  • エントロピー(ランダム性)が低い値は除外される
    • sk-1234567890abcdef は明らかに連番
    • EXAMPLEKEY という文字列が含まれている
  • AWS 公式ドキュメントのサンプル値はホワイトリスト化されている
  • 初回スキャンでは軽量チェックのみ、後続で詳細スキャン

3. OWASP Top 10 への対応は限定的

公式には「OWASP Top 10 関連の脆弱性を検出」とありますが、実際には:

  • ハードコードされたクレデンシャル: 検出可能(遅延あり)
  • SQL インジェクション: 検出されず
  • コマンドインジェクション: 検出されず
  • XSS、CSRF、認証不備など: 未検証

推測:

  • シークレットスキャンに特化している
  • 動的解析ではなく静的パターンマッチング
  • Python の sqlite3subprocess は検出パターンに含まれていない可能性

Security Agent の指摘内容(検出された場合)

検出された際のフィードバックは非常に詳細でした:

↑ 検出時の詳細なフィードバック(問題点、重要性、推奨対策、参考リンク)

The application contains hardcoded API credentials and AWS secrets
directly in the source code, which poses a critical security risk...

Recommendation:
- Remove hardcoded secrets and load them from environment variables
- Use AWS Secrets Manager, HashiCorp Vault, or Azure Key Vault
- Refer to: <https://owasp.org/www-community/vulnerabilities/Use_of_hard-coded_password>

修正方法や参考リンクまで提示してくれるのは良い点です。

まとめ

良かった点

  • ハードコードされたシークレットは検出できる
  • 検出時のフィードバックが詳細で実用的
  • GitHub PR に自動コメントされるので気づきやすい

気になった点

  • 挙動が不安定(スキャンタイミングが予測不能)
  • 検出範囲が限定的(SQL/コマンドインジェクションは未検出)
  • ダミー値の扱いが不明瞭(最初は検出されず後で検出)

参考リンク


免責事項: この記事は教育目的での検証結果です。実際の本番環境では絶対に脆弱なコードを使用しないでください。

無料相談実施中
AWSを使用したサーバーレスアプリケーションの構築
サーバーレス開発内製化、AWSへの移行等
様々な課題について無料でご相談お受けいたします。
最新情報をチェックしよう!