claude-skills/

Anthropic公式スキル・プラグインの日本語ディレクトリ

last sync 22h ago
スキルOfficialdevelopment

🔒pentesting-with-aws-security-agent

説明

ライブWebアプリケーションに対してAWS Security Agentのペネトレーションテストを実行します。 対象ドメインの登録と検証を行い、マネージドSecurity Agentサービスを使用して指定されたエンドポイントを検査し、検証済みのランタイム診断結果を返します。 次のような場合に使用: ユーザーがペンテスト(pentest)の実施、ペネトレーションテストの実行、アプリの攻撃対象領域のテスト、ランタイム脆弱性の検出、対象ドメインの登録または検証、あるいはペンテストのステータスや診断結果の確認を求めている場合。

原文を表示

Run an AWS Security Agent penetration test against a live web application — registers and verifies the target domain, exercises the supplied endpoints with the managed Security Agent service, and returns verified runtime findings. Use when the user asks to pentest, run a penetration test, test their app's attack surface, find runtime vulnerabilities, register or verify a target domain, or check pentest status / findings.

ユースケース

  • ライブWebアプリケーションのペネトレーションテストを実行するとき
  • ランタイム脆弱性を検出したいとき
  • 対象ドメインの登録と検証を行うとき
  • アプリの攻撃対象領域をテストするとき
  • ペンテストのステータスや診断結果を確認するとき

本文(日本語訳)

AWSセキュリティエージェント — ペネトレーションテスト

このスキルは、ペネトレーションテスト(pentest)のセットアップ・実行・結果確認を担当します。 セキュリティエージェントの初期セットアップ(agentスペース、ロール、バケット)は setup-security-agent スキルが担当します。 .security-agent/config.json が存在しない場合、pentestワークフローはセットアップを自動的にインラインで先に実行します。

Pentestは時間がかかり(1〜24時間)、実際に稼働中のアプリに対してアクティブに探査を行います。 開始前に、必ずユーザーがテスト対象を検査する権限を持っていることを確認してください。


必要な値の解決方法

以下のCLI例ではプレースホルダーを使用しています。 各pentestの開始時に次の方法で解決してください:

プレースホルダー 解決方法
<id>(agentスペース) config.agent_space_id
<region> config.region(デフォルト: us-east-1
<account> aws sts get-caller-identity --query Account --output text(ターン中はキャッシュする)
<role-arn> arn:aws:iam::<account>:role/SecurityAgentScanRole
<td-id> create-target-domain が返す targetDomainIdconfig.target_domains[<domain>] にキャッシュする)
<pentest-id> create-pentest が返す pentestId
<pj-id> start-pentest-job が返す pentestJobId

Pentest実行前チェック

  1. .security-agent/config.json を読み込む。 ファイルが存在しない場合 → ユーザーに一行で伝える — "このワークスペースでの初回pentest — 先にセットアップを実行します。" — その後、setup-security-agent ワークフローをインラインで実行してから続行する。

  2. Agentスペースがまだ存在するか確認する:

    aws securityagent batch-get-agent-spaces --agent-space-ids <id>
    

    存在しない場合は config.json から agent_space_id を削除し、setup-security-agent を再実行する。

  3. アカウントとロールARNを上記の表から解決する。

  4. 認可チェック: コンテキストから明らかでない場合は、ユーザーに「<target> に対してペネトレーションテストを行う権限(所有権または明示的な許可)はありますか?」と確認する。 確認が取れない限り、処理を進めない。


ワークフロー

1. ターゲットドメインの登録(ドメインごとに一度のみ)

aws securityagent create-target-domain --agent-space-id <id> \
  --target-domain-name <domain> --verification-method HTTP_ROUTE

レスポンスに検証トークン・ルートが含まれます。 ユーザーのサーバーに配置すべき内容(通常は .well-known/... ファイル、またはトークンを返すHTTPルート)をユーザーに伝え、次を実行します:

aws securityagent verify-target-domain --agent-space-id <id> --target-domain-id <td-id>

検証済みの target_domain_id.security-agent/config.jsontarget_domains: { "<domain>": "<td-id>" } に保存し、将来のpentestで再利用できるようにします。

2. Pentestの作成

ユーザーに以下を確認します:

  • タイトル(スペース不可 — ハイフン使用; デフォルト: pentest-<タイムスタンプ>
  • テスト対象のエンドポイント(検証済みドメイン配下の1つ以上のURI)
aws securityagent create-pentest --agent-space-id <id> --title <title> \
  --service-role <role-arn> \
  --assets endpoints=[{uri=https://example.com/api/login},{uri=https://example.com/api/upload}]

pentestId を取得・保持します。

3. Pentestジョブの開始

aws securityagent start-pentest-job --agent-space-id <id> --pentest-id <pentest-id>

pentestJobId を取得・保持します。 .security-agent/pentests.json に追記します(存在しない場合は [] として新規作成 — ディレクトリ自体はセットアップ時に作成済み):

{
  "pentest_id": "p-...",
  "pentest_job_id": "pj-...",
  "agent_space_id": "as-...",
  "title": "pentest-...",
  "endpoints": ["https://..."],
  "started_at": "2026-06-01T20:00:00Z",
  "status": "IN_PROGRESS"
}

ユーザーへの通知:「Pentestを開始しました({pentest_job_id})。 Pentestはスコープによって通常1〜24時間かかります。 15分ごとに状況を確認します — 「ポーリング停止」と言えばオプトアウトできます。」

4. ポーリングループ

  1. チェックの間は sleep 900(15分)待機する。それより速くポーリングしない。

  2. ステータス確認:

    aws securityagent batch-get-pentest-jobs --agent-space-id <id> --pentest-job-ids <pj-id>
    
  3. status が変化したとき、または終了状態(COMPLETEDFAILEDSTOPPED)になったときのみ応答する。

  4. COMPLETED になった場合 → Findingsワークフローを実行する。

5. Findings(検出結果)

aws securityagent list-findings --agent-space-id <id> --pentest-job-id <pj-id>

nextToken が返された場合は、空になるまで --next-token <token> を付けて繰り返し呼び出します。

aws securityagent batch-get-findings --agent-space-id <id> --finding-ids <id1> <id2> ...

チャットでは重要度ごとにグループ化して表示します(コードスキャンと同じアイコン・フォーマット):

🟣 CRITICAL: {name}
   Endpoint: {endpoint}
   {description}

.security-agent/pentest-{pentest_job_id}.md に、返されたすべてのフィールド(findingId、name、description、riskLevel、riskType、confidence、status、endpoint、request/responseサンプル(存在する場合)、remediationCode(存在する場合))を含む完全なレポートを書き出します。

ユーザーへの通知:「詳細を .security-agent/pentest-{pentest_job_id}.md に書き出しました。」

6. Pentestの停止

aws securityagent stop-pentest-job --agent-space-id <id> --pentest-job-id <pj-id>

ルール

  • 開始前に必ず、テスト対象への認可を確認する
  • Pentestを作成する前にターゲットドメインを検証する — 未検証では create-pentest が失敗する
  • config.json に保存された検証済みの target_domain_id を再利用し、再検証を避ける
  • Pentestタイトルにスペースを含めない — ハイフンを使用する
  • ポーリングは最大15分間隔 — Pentestは長時間実行される処理である
  • 失敗したPentestを自動で再起動しない — まずユーザーに失敗内容を提示する

トラブルシューティング

  • verify-target-domain での ValidationException → 検証ルートがまだ正しく応答していません。ユーザーにルートが稼働しており、期待されるトークンを返しているか確認するよう促してください。

  • target domain not verifiedverify-target-domain(ステップ1)を再実行してください。

  • Pentestが IN_PROGRESS のまま24時間以上経過 → バックエンドの問題か、ターゲットに到達できない可能性があります。停止して状況を確認してください。

  • サービスロールで AccessDenied → サービスロールに、pentestが必要とするネットワーク・ランタイム権限がありません。 デフォルトの SecurityAgentScanRole はコードスキャン専用です — AWSリソースへのpentestではより広い権限が必要になる場合があります。 AWSセキュリティエージェントコンソールでpentest専用ロールを設定するようユーザーを案内してください。

原文(English)を表示

AWS Security Agent — Penetration Test

This skill handles pentest setup, execution, and findings. Initial Security Agent setup (agent space, role, bucket) is handled by the setup-security-agent skill — if .security-agent/config.json is missing, the pentest workflow auto-runs setup inline first.

Pentests are slow (1-24 hours) and active — they probe a real running app. Always confirm the user is authorized to test the target before starting.


Resolving the values you need

The CLI examples below use placeholders. Resolve them at the start of every pentest:

Placeholder How to resolve
<id> (agent space) config.agent_space_id
<region> config.region (default us-east-1)
<account> aws sts get-caller-identity --query Account --output text (cache for the rest of the turn)
<role-arn> arn:aws:iam::<account>:role/SecurityAgentScanRole
<td-id> targetDomainId returned by create-target-domain (cache under config.target_domains[<domain>])
<pentest-id> pentestId returned by create-pentest
<pj-id> pentestJobId returned by start-pentest-job

Pre-pentest checks

  1. Read .security-agent/config.json. If missing → tell the user one line — "First pentest in this workspace — running setup first." — and run the setup-security-agent workflow inline before continuing.

  2. Verify agent space still exists:

    aws securityagent batch-get-agent-spaces --agent-space-ids <id>
    

    If missing, clear agent_space_id from config.json and run setup-security-agent again.

  3. Resolve account and role ARN from the table above.

  4. Authorization check: ask the user "Do you own or have explicit permission to pentest <target>?" if it's not obvious from context. Do not proceed without confirmation.


Workflow

1. Register target domain (one-time per domain)

aws securityagent create-target-domain --agent-space-id <id> \
  --target-domain-name <domain> --verification-method HTTP_ROUTE

The response includes a verification token / route. Tell the user what to put on their server (typically a .well-known/... file or HTTP route returning a token), then:

aws securityagent verify-target-domain --agent-space-id <id> --target-domain-id <td-id>

Persist the verified target_domain_id in .security-agent/config.json under target_domains: { "<domain>": "<td-id>" } so future pentests can reuse it.

2. Create a pentest

Ask the user for:

  • Title (no spaces — use hyphens; default pentest-<timestamp>)
  • Endpoints to test (one or more URIs under the verified domain)
aws securityagent create-pentest --agent-space-id <id> --title <title> \
  --service-role <role-arn> \
  --assets endpoints=[{uri=https://example.com/api/login},{uri=https://example.com/api/upload}]

Capture pentestId.

3. Start the pentest job

aws securityagent start-pentest-job --agent-space-id <id> --pentest-id <pentest-id>

Capture pentestJobId. Append to .security-agent/pentests.json (create as [] if it doesn't exist yet — the directory itself is already created by setup):

{
  "pentest_id": "p-...",
  "pentest_job_id": "pj-...",
  "agent_space_id": "as-...",
  "title": "pentest-...",
  "endpoints": ["https://..."],
  "started_at": "2026-06-01T20:00:00Z",
  "status": "IN_PROGRESS"
}

Tell user: "Pentest started ({pentest_job_id}). Pentests typically run 1-24 hours depending on scope. I'll check every 15 minutes — say 'stop polling' to opt out."

4. Polling loop

  1. sleep 900 (15 minutes) between checks. Do not poll faster.

  2. Status:

    aws securityagent batch-get-pentest-jobs --agent-space-id <id> --pentest-job-ids <pj-id>
    
  3. Only respond when status changes or on terminal state (COMPLETED, FAILED, STOPPED).

  4. On COMPLETED → run the Findings workflow.

5. Findings

aws securityagent list-findings --agent-space-id <id> --pentest-job-id <pj-id>

If nextToken is returned, call again with --next-token <token> until empty.

aws securityagent batch-get-findings --agent-space-id <id> --finding-ids <id1> <id2> ...

Present in chat grouped by severity (same icons + format as code scans):

🟣 CRITICAL: {name}
   Endpoint: {endpoint}
   {description}

Write a full report to .security-agent/pentest-{pentest_job_id}.md with every field returned (findingId, name, description, riskLevel, riskType, confidence, status, endpoint, request/response samples if present, and remediationCode if present).

Tell user: "Full details written to .security-agent/pentest-{pentest_job_id}.md"

6. Stop a pentest

aws securityagent stop-pentest-job --agent-space-id <id> --pentest-job-id <pj-id>

Rules

  • Always confirm authorization to test the target before starting
  • Verify the target domain before creating a pentest — create-pentest will fail otherwise
  • Reuse a verified target_domain_id from config.json instead of re-verifying
  • Pentest titles must not contain spaces — use hyphens
  • Poll every 15 minutes max — pentests are long-running
  • Don't auto-restart a failed pentest — show the failure to the user first

Troubleshooting

  • ValidationException on verify-target-domain → the verification route isn't responding correctly yet. Ask user to confirm the route is live and serving the expected token.
  • target domain not verified → run verify-target-domain (step 1) again.
  • Pentest stuck in IN_PROGRESS for >24 hours → likely a backend issue or the target is unreachable. Stop and inspect.
  • AccessDenied on the service role → the service role doesn't have the network/runtime permissions a pentest needs. The default SecurityAgentScanRole is for code scans only — pentests against AWS resources may need broader permissions. Direct user to the AWS Security Agent console to configure a pentest-specific role.

原文・著作権は Anthropic および各プラグイン作者に帰属します。日本語訳は Claude API による自動翻訳です。