conducting-cloud-incident-response について
AWS、Azure、GCP にまたがる不審な活動を調査するセキュリティチーム向けのクラウドインシデント対応ガイドです。ID の封じ込め、証拠保全、クラウド特有の攻撃分析、復旧を扱います。
主な機能
- 01クラウド監査ログの調査
- 02ID を中心とした封じ込め
- 03各クラウドの証拠保全
- 04クラウド攻撃パターンの分析
- 05認証情報のローテーションと復旧
活用シーン
- 01不審なクラウド API 活動の調査
- 02クラウド認証情報の侵害への対応
- 03一時的なリソース消失前の証拠保全
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill conducting-cloud-incident-responseインストール後、Claude Code で/conducting-cloud-incident-responseを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
LICENSEreferences/api-reference.mdscripts/agent.py詳細
クラウドインシデント対応の実施
使用するタイミング
- クラウドセキュリティ態勢管理(CSPM)が、許可されていないリソース変更についてアラートを発したとき
- CloudTrail、Azure Activity Logs、または GCP Audit Logs に不審な API 呼び出しが記録されたとき
- クラウドアクセスキーまたはサービスプリンシパルの認証情報が侵害された疑いがあるとき
- 許可されていないコンピューティングインスタンス、ストレージバケット、または IAM の変更が検出されたとき
- クラウドでホストされているアプリケーションが侵害され、攻撃者の活動が複数のクラウドサービスにまたがっているとき
使用しないでください。オンプレミスのみでクラウド要素がないインシデントには、標準的なエンタープライズ IR 手順を使用してください。
前提条件
- クラウドネイティブのログ記録が有効化され、一元管理されていること:AWS CloudTrail(すべてのリージョン)、Azure Activity/Sign-in Logs、GCP Cloud Audit Logs
- IR 専用のクラウド IAM ロールが、読み取り専用のフォレンジックアクセス権を持つ状態で事前にプロビジョニングされていること
- 証拠保全用に分離されたフォレンジックアカウント/サブスクリプション/プロジェクトがあること
- 各クラウドプロバイダーに固有のクラウドインシデント対応ランブックがあること
- クラウドネイティブのセキュリティツールがあること:AWS GuardDuty、Azure Defender for Cloud、GCP Security Command Center
- ネットワークトラフィックのログ記録があること:VPC Flow Logs(AWS/GCP)、NSG Flow Logs(Azure)
ワークフロー
ステップ 1:クラウドインシデントを検出して確認する
侵害の範囲と性質を特定します。
AWS の兆候:
CloudTrail suspicious events to investigate:
- ConsoleLogin from unexpected geolocation or IP
- CreateAccessKey for existing IAM user (persistence)
- RunInstances for crypto-mining (large instance types)
- PutBucketPolicy making S3 bucket public
- AssumeRole to cross-account roles
- DeleteTrail or StopLogging (defense evasion)
- CreateUser or AttachUserPolicy (privilege escalation)
Azure の兆候:
Azure Activity Log events to investigate:
- Sign-in from anonymous IP or TOR exit node
- Service principal credential added
- Role assignment changes (Owner, Contributor added)
- VM created in unusual region
- Storage account access key regenerated
- Conditional Access policy modified or deleted
- MFA disabled for user account
GCP の兆候:
GCP Audit Log events to investigate:
- SetIamPolicy changes granting broad access
- CreateServiceAccountKey for existing SA
- InsertInstance in unexpected zone
- SetBucketIamPolicy with allUsers
- DeleteLog or UpdateSink (log tampering)
ステップ 2:クラウド ID の侵害を封じ込める
クラウドでの封じ込めは、主に ID に関する操作です。
AWS での封じ込め:
# Disable compromised IAM access keys
aws iam update-access-key --user-name compromised-user \
--access-key-id AKIA... --status Inactive
# Attach deny-all policy to compromised user
aws iam attach-user-policy --user-name compromised-user \
--policy-arn arn:aws:iam::aws:policy/AWSDenyAll
# Revoke all active sessions for compromised IAM role
aws iam put-role-policy --role-name compromised-role \
--policy-name RevokeOlderSessions --policy-document '{
"Version":"2012-10-17",
"Statement":[{
"Effect":"Deny",
"Action":"*",
"Resource":"*",
"Condition":{"DateLessThan":
{"aws:TokenIssueTime":"2025-11-15T15:00:00Z"}}
}]
}'
# Isolate compromised EC2 instance
aws ec2 modify-instance-attribute --instance-id i-0abc123 \
--groups sg-isolate-forensic
Azure での封じ込め:
# Disable compromised user
Set-AzureADUser -ObjectId "[email protected]" -AccountEnabled $false
# Revoke all sessions
Revoke-AzureADUserAllRefreshToken -ObjectId "user-object-id"
# Remove role assignments
Remove-AzRoleAssignment -ObjectId "sp-object-id" -RoleDefinitionName "Contributor"
# Isolate VM with NSG deny-all rule
$nsg = New-AzNetworkSecurityGroup -Name "isolate-nsg" -ResourceGroupName "rg" -Location "eastus"
$nsg | Add-AzNetworkSecurityRuleConfig -Name "DenyAll" -Priority 100 -Direction Inbound `
-Access Deny -Protocol * -SourceAddressPrefix * -SourcePortRange * `
-DestinationAddressPrefix * -DestinationPortRange *
ステップ 3:クラウドの証拠を保全する
一時的なリソースが終了されたり、ログがローテーションされたりする前に証拠を収集します。
AWS の証拠収集:
- CloudTrail イベントをフォレンジックアカウントの S3 にエクスポートする
- 侵害された EC2 インスタンスの EBS ボリュームのスナップショットを作成する
- S3 アクセスログとオブジェクトのバージョンをコピーする
- 影響を受けた VPC の VPC Flow Logs をエクスポートする
- IAM 認証情報レポートとアクセスアドバイザーのデータを取得する
Azure の証拠収集:
- Azure Activity Logs と Sign-in Logs をエクスポートする(既定の保持期間は 90 日間)
- 侵害された VM のマネージドディスクのスナップショットを作成する
- Azure AD 監査ログをエクスポートする
- NSG フローログを取得する
- Conditional Access のサインイン詳細をエクスポートする
GCP の証拠収集:
- Cloud Audit Logs をフォレンジック用ストレージバケットにエクスポートする
- 侵害された VM の永続ディスクのスナップショットを作成する
- VPC Flow Logs をエクスポートする
- IAM ポリシーのスナップショットを取得する
ステップ 4:クラウド固有の攻撃パターンを調査する
一般的なクラウド攻撃手法についてログを分析します。
Common Cloud Attack Patterns:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1. Credential Compromise → IAM Privilege Escalation → Resource Abuse
2. Public S3/Blob → Data Exfiltration
3. SSRF from Web App → IMDS Token Theft → Lateral Movement
4. Compromised CI/CD Pipeline → Malicious Deployment
5. Cross-Account Role Abuse → Multi-Account Pivot
6. Lambda/Function Abuse → Crypto-mining or Data Processing
IMDS トークン窃取の調査(AWS):
# Search CloudTrail for API calls using instance role credentials from external IP
aws cloudtrail lookup-events --lookup-attributes \
AttributeKey=EventSource,AttributeValue=ec2.amazonaws.com \
--start-time 2025-11-14 --end-time 2025-11-16 \
| jq '.Events[] | select(.CloudTrailEvent | fromjson | .sourceIPAddress != "internal")'
ステップ 5:根絶して復旧する
攻撃者のアクセスを排除し、安全な状態に復元します。
- 侵害されたすべての認証情報(アクセスキー、パスワード、サービスプリンシパルのシークレット)をローテーションする
- 攻撃者が作成した不正な IAM ユーザー、ロール、ポリシー、アクセスキーを削除する
- 不正なコンピューティングインスタンス(暗号資産マイナー、C2 サーバー)を終了する
- 変更された S3 バケットポリシーとストレージアクセスポリシーをインシデント発生前の状態に復元する
- 無効化されたセキュリティ制御(CloudTrail、GuardDuty、Defender for Cloud)を再度有効化する
- Conditional Access ポリシーと MFA 設定を確認し、復元する
ステップ 6:インシデント後のクラウドセキュリティ強化
再発防止のための制御を実装します。
- すべての IAM ユーザーに MFA を有効化し、機密性の高い API 呼び出しでは MFA を必須にする
- ログ記録の無効化を防ぐため、SCP(AWS)または Azure Policy を実装する
- GuardDuty/Defender for Cloud/Security Command Center を自動修復付きで有効化する
- アクセスアナライザーのデータを使用して、最小権限の IAM ポリシーを実装する
- SSRF を利用したトークン窃取を防ぐため、すべての EC2 インスタンスで IMDS v2(トークン必須)を有効化する
- 暗号資産マイニングによるコスト急増を検出できるよう、予算アラートを設定する
主要な概念
| 用語 | 定義 |
|---|---|
| IMDS(インスタンスメタデータサービス) | VM 内からアクセスできるインスタンス認証情報を提供するクラウドサービスです。SSRF 攻撃では IMDS を標的にしてトークンを窃取します |
| CloudTrail | AWS アカウント全体のすべての API 呼び出しを記録する AWS サービスです。AWS のインシデント対応における主要な証拠ソースです |
| サービスプリンシパル | Azure AD でアプリケーションやサービスが使用する、人間以外の ID です。侵害されると、永続的な API アクセスが可能になります |
| SCP(サービスコントロールポリシー) | アカウントで使用可能な最大権限を制限する AWS Organizations のポリシーです。ガードレールとして役立ちます |
| エフェメラルインフラストラクチャ | 証拠を収集する前に終了する可能性があるクラウドリソース(コンテナ、関数、自動スケーリングされたインスタンス)です |
| クロスアカウントのロール引き受け | あるアカウントが別のアカウントのリソースに一時的にアクセスできる AWS の仕組みです。攻撃者は引き受けたロールを経由してピボットします |
ツールとシステム
- AWS CloudTrail / Azure Activity Logs / GCP Audit Logs:主要な監査証跡を提供する、クラウドネイティブな API ロギングサービスです
- Cado Response:AWS、Azure、GCP から証拠を自動的に収集するクラウドネイティブなフォレンジックプラットフォームです
- Prowler (AWS) / ScoutSuite (multi-cloud):インシデント後のセキュリティ態勢レビューに使用する、オープンソースのクラウドセキュリティ評価ツールです
- Steampipe:IAM 設定やリソースの状態を調査するために、クラウド API をクエリするオープンソースの SQL ベースツールです
- Cartography (Lyft):クラウドインフラストラクチャの関係をマッピングし、攻撃経路を特定するオープンソースツールです
一般的なシナリオ
シナリオ:公開 GitHub リポジトリ経由での AWS アクセスキーの侵害
状況:AWS GuardDuty が、IAM ユーザーのアクセスキーを使用した予期しない IP アドレスからの API 呼び出しについてアラートを発しています。このキーは 4 時間前に誤って公開 GitHub リポジトリにコミットされました。
対応方法:
- AWS IAM を使用して、侵害されたアクセスキーを直ちに無効化します
- 影響を受けた IAM ユーザーに AWSDenyAll ポリシーをアタッチします
- 露出後に侵害されたキーで行われたすべての API 呼び出しについて、CloudTrail をクエリします
- 攻撃者が作成または変更したリソースを特定します(暗号資産マイニング用の EC2 インスタンス、永続化用の新しい IAM ユーザーなど)
- 不正なリソースを終了し、バックドアとなる IAM エンティティを削除します
- 侵害されたユーザーがアクセスできたすべての認証情報をローテーションします
- 今後の認証情報漏えいを防ぐため、GitHub のシークレットスキャンを有効にします
注意点:
- 新しいアクセスキーや、永続化のために作成された IAM ユーザーがないか確認せず、アクセスキーを無効化するだけにする
- 攻撃者が作成したリソースがないか、すべての AWS リージョンを確認しない(暗号資産マイナーがすべてのリージョンにデプロイされている場合があります)
- 引き受けたロールから発行された一時的な認証情報を失効させ忘れる(STS トークンは有効期限まで有効です)
- 保険請求に備え、不正なリソース使用による金銭的影響を算出しない
出力形式
CLOUD INCIDENT RESPONSE REPORT
================================
Incident: INC-2025-1705
Cloud Provider: AWS (Account: 123456789012)
Date Detected: 2025-11-15T14:00:00Z
Detection Source: GuardDuty - UnauthorizedAccess:IAMUser/InstanceCredentialExfiltration
COMPROMISE SUMMARY
Initial Access: IAM access key exposed in public GitHub repo
Affected Identity: iam-user: deploy-bot (AKIA...)
Attacker IP: 203.0.113.42 (VPN exit node, Netherlands)
Duration: 4 hours (10:00 UTC - 14:00 UTC)
ATTACKER ACTIVITY (from CloudTrail)
10:15 UTC - DescribeInstances (reconnaissance)
10:18 UTC - RunInstances x 12 (c5.4xlarge, all regions - crypto-mining)
10:22 UTC - CreateUser "backup-admin" (persistence)
10:23 UTC - CreateAccessKey for "backup-admin"
10:25 UTC - AttachUserPolicy - AdministratorAccess to "backup-admin"
10:30 UTC - PutBucketPolicy - s3://data-bucket made public (exfiltration)
CONTAINMENT ACTIONS
[x] Original access key disabled
[x] User policy set to AWSDenyAll
[x] Backdoor IAM user "backup-admin" deleted
[x] 12 crypto-mining instances terminated (all regions)
[x] S3 bucket policy restored to private
FINANCIAL IMPACT
Unauthorized EC2: $2,847 (4 hours x 12 x c5.4xlarge)
Data Transfer: $127 (S3 public access data egress)
Total: $2,974
POST-INCIDENT HARDENING
1. GitHub secret scanning enabled
2. Access key rotation policy implemented
3. SCP preventing CloudTrail disablement deployed
4. GuardDuty auto-remediation Lambda configured
コメント
Markdown 対応