performing-cloud-incident-containment-procedures について
クラウドインシデントに対応する担当者向けのセキュリティスキルです。AWS、Azure、GCPの封じ込め手順と、フォレンジック証拠の保全方法を説明します。
主な機能
- 01AWS、Azure、GCPの封じ込め手順
- 02認証情報の失効とリソース隔離
- 03フォレンジックスナップショットの作成
- 04ログと証拠の保全
- 05MITRE ATT&CKクラウド技術との対応
活用シーン
- 01クラウドアカウントや認証情報の侵害対応
- 02侵害されたクラウドリソースの隔離
- 03封じ込め前のフォレンジック証拠保存
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill performing-cloud-incident-containment-proceduresインストール後、Claude Code で/performing-cloud-incident-containment-proceduresを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
LICENSEassets/template.mdreferences/api-reference.mdstandards.mdworkflows.mdscripts/agent.pyprocess.py詳細
クラウドインシデント封じ込め手順の実施
概要
クラウドインシデントの封じ込めには、従来のオンプレミス環境への対応とは大きく異なる、クラウドネイティブなアプローチが必要です。封じ込め手順では、セキュリティグループ、IAM ポリシー、ネットワーク ACL、サービスレベルの隔離など、プラットフォーム固有の制御を活用し、フォレンジック証拠を保全しながら侵害されたリソースを制限する必要があります。2025 Unit 42 Global Incident Response Report によると、クラウドインシデントへの対応には、共有責任モデル、一時的なインフラストラクチャ、API 駆動の運用を理解する必要があります。効果的な封じ込めには、認証情報の無効化、リソースの隔離、証拠のスナップショット作成、自動化された対応プレイブックの実行が含まれます。
使用するタイミング
- クラウドインシデントの封じ込め手順を実施するセキュリティ評価を行う場合
- 関連するセキュリティイベントへのインシデント対応手順に従う場合
- 定期的なセキュリティテストや監査活動を実施する場合
- 実践的なテストを通じてセキュリティ制御を検証する場合
前提条件
- インシデント対応の概念とツールに精通していること
- 安全に実施できるテスト環境またはラボ環境へのアクセス権があること
- 必要な依存関係をインストールした Python 3.8 以降
- テスト活動に必要な適切な許可を得ていること
AWS の封じ込め手順
1. 認証情報の侵害への封じ込め
# Disable compromised IAM user access keys
aws iam update-access-key --user-name compromised-user \
--access-key-id AKIA... --status Inactive
# List and disable all access keys for user
aws iam list-access-keys --user-name compromised-user
aws iam delete-access-key --user-name compromised-user --access-key-id AKIA...
# Attach deny-all policy to compromised user
aws iam put-user-policy --user-name compromised-user \
--policy-name DenyAll \
--policy-document '{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Deny",
"Action": "*",
"Resource": "*"
}]
}'
# Revoke all active sessions for IAM role
aws iam put-role-policy --role-name compromised-role \
--policy-name RevokeOldSessions \
--policy-document '{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Deny",
"Action": "*",
"Resource": "*",
"Condition": {
"DateLessThan": {"aws:TokenIssueTime": "'$(date -u +%Y-%m-%dT%H:%M:%SZ)'"}
}
}]
}'
# Invalidate temporary credentials by updating role trust policy
aws iam update-assume-role-policy --role-name compromised-role \
--policy-document '{"Version":"2012-10-17","Statement":[]}'
2. EC2 インスタンスの隔離
# Create quarantine security group (no inbound, no outbound)
aws ec2 create-security-group --group-name quarantine-sg \
--description "Quarantine - No traffic allowed" --vpc-id vpc-xxxxx
# Remove all rules from quarantine SG (default allows outbound)
aws ec2 revoke-security-group-egress --group-id sg-quarantine \
--ip-permissions '[{"IpProtocol":"-1","FromPort":-1,"ToPort":-1,"IpRanges":[{"CidrIp":"0.0.0.0/0"}]}]'
# Take forensic snapshot BEFORE containment
aws ec2 create-snapshot --volume-id vol-xxxxx \
--description "Forensic snapshot - IR Case 2025-001" \
--tag-specifications 'ResourceType=snapshot,Tags=[{Key=IR-Case,Value=2025-001}]'
# Apply quarantine security group to compromised instance
aws ec2 modify-instance-attribute --instance-id i-xxxxx \
--groups sg-quarantine
# Tag instance as compromised
aws ec2 create-tags --resources i-xxxxx \
--tags Key=IR-Status,Value=Contained Key=IR-Case,Value=2025-001
# Capture memory (if SSM agent available)
aws ssm send-command --instance-ids i-xxxxx \
--document-name "AWS-RunShellScript" \
--parameters 'commands=["dd if=/dev/mem of=/tmp/memory.dump bs=1M"]'
3. S3 バケットの封じ込め
# Block all public access
aws s3api put-public-access-block --bucket compromised-bucket \
--public-access-block-configuration \
BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true
# Apply deny policy to bucket
aws s3api put-bucket-policy --bucket compromised-bucket \
--policy '{
"Version": "2012-10-17",
"Statement": [{
"Sid": "DenyAllExceptForensics",
"Effect": "Deny",
"NotPrincipal": {"AWS": "arn:aws:iam::ACCOUNT:role/IR-Forensics"},
"Action": "s3:*",
"Resource": ["arn:aws:s3:::compromised-bucket","arn:aws:s3:::compromised-bucket/*"]
}]
}'
# Enable versioning to preserve evidence
aws s3api put-bucket-versioning --bucket compromised-bucket \
--versioning-configuration Status=Enabled
# Enable Object Lock for evidence preservation
aws s3api put-object-lock-configuration --bucket evidence-bucket \
--object-lock-configuration '{
"ObjectLockEnabled": "Enabled",
"Rule": {"DefaultRetention": {"Mode": "COMPLIANCE", "Days": 365}}
}'
4. Lambda 関数の封じ込め
# Set reserved concurrency to 0 (stops all invocations)
aws lambda put-function-concurrency --function-name compromised-function \
--reserved-concurrent-executions 0
# Remove all event source mappings
aws lambda list-event-source-mappings --function-name compromised-function
aws lambda delete-event-source-mapping --uuid mapping-uuid
Azure の封じ込め手順
1. ID の封じ込め
# Revoke all user sessions
Revoke-AzureADUserAllRefreshToken -ObjectId "user-object-id"
# Disable user account
Set-AzureADUser -ObjectId "user-object-id" -AccountEnabled $false
# Reset user password
Set-AzureADUserPassword -ObjectId "user-object-id" -Password (
ConvertTo-SecureString "TempP@ss!" -AsPlainText -Force
) -ForceChangePasswordNextLogin $true
# Block sign-in via Conditional Access (emergency policy)
# Create policy blocking user from all cloud apps
# Revoke Azure AD application consent
Remove-AzureADServiceAppRoleAssignment -ObjectId "sp-object-id" \
-AppRoleAssignmentId "assignment-id"
2. VM の隔離
# Create Network Security Group with deny-all rules
$nsg = New-AzNetworkSecurityGroup -ResourceGroupName "rg" -Location "eastus" `
-Name "quarantine-nsg" `
-SecurityRules @(
New-AzNetworkSecurityRuleConfig -Name "DenyAllInbound" -Protocol * `
-Direction Inbound -Priority 100 -SourceAddressPrefix * `
-SourcePortRange * -DestinationAddressPrefix * `
-DestinationPortRange * -Access Deny,
New-AzNetworkSecurityRuleConfig -Name "DenyAllOutbound" -Protocol * `
-Direction Outbound -Priority 100 -SourceAddressPrefix * `
-SourcePortRange * -DestinationAddressPrefix * `
-DestinationPortRange * -Access Deny
)
# Take disk snapshot for forensics
$vm = Get-AzVM -ResourceGroupName "rg" -Name "compromised-vm"
$snapshotConfig = New-AzSnapshotConfig -SourceUri $vm.StorageProfile.OsDisk.ManagedDisk.Id `
-Location "eastus" -CreateOption Copy
New-AzSnapshot -ResourceGroupName "rg" -SnapshotName "forensic-snap" -Snapshot $snapshotConfig
# Apply quarantine NSG to VM NIC
$nic = Get-AzNetworkInterface -ResourceGroupName "rg" -Name "compromised-nic"
$nic.NetworkSecurityGroup = $nsg
Set-AzNetworkInterface -NetworkInterface $nic
3. ストレージアカウントの封じ込め
# Remove network access
Update-AzStorageAccountNetworkRuleSet -ResourceGroupName "rg" `
-Name "storageaccount" -DefaultAction Deny
# Regenerate access keys
New-AzStorageAccountKey -ResourceGroupName "rg" -Name "storageaccount" -KeyName key1
New-AzStorageAccountKey -ResourceGroupName "rg" -Name "storageaccount" -KeyName key2
# Revoke all SAS tokens (by rotating keys)
# Enable immutability for evidence preservation
GCP の封じ込め手順
1. IAM の封じ込め
# Remove all IAM bindings for compromised service account
gcloud projects get-iam-policy PROJECT_ID --format=json > policy.json
# Edit policy.json to remove compromised account bindings
gcloud projects set-iam-policy PROJECT_ID policy.json
# Disable service account
gcloud iam service-accounts disable SA_EMAIL
# Delete service account keys
gcloud iam service-accounts keys list --iam-account SA_EMAIL
gcloud iam service-accounts keys delete KEY_ID --iam-account SA_EMAIL
2. コンピューティングインスタンスの隔離
# Create forensic snapshot
gcloud compute disks snapshot compromised-disk \
--snapshot-names forensic-snap-$(date +%Y%m%d) \
--zone us-central1-a
# Apply firewall rule to deny all traffic
gcloud compute firewall-rules create quarantine-deny-all \
--network default --action DENY --rules all \
--target-tags quarantine --priority 0
# Tag compromised instance
gcloud compute instances add-tags compromised-instance \
--tags quarantine --zone us-central1-a
# Remove external IP
gcloud compute instances delete-access-config compromised-instance \
--access-config-name "External NAT" --zone us-central1-a
証拠保全のベストプラクティス
- 封じ込めの前に必ずスナップショットを作成する - ネットワークを隔離する前に、ディスク/ボリュームのスナップショットを作成します
- CloudTrail/アクティビティログを保全する - ログを書き込み保護されたストレージにコピーします
- すべての操作を記録する - 実施した封じ込め手順すべてにタイムスタンプを記録します
- 緊急時アクセス手順を使用する - インシデント対応チーム向けの緊急アクセスを事前に確立します
- フォレンジックにおける証拠保全の連鎖を維持する - すべての証拠アーティファクトのハッシュを取得します
MITRE ATT&CK のクラウド技術
| 技術 | 封じ込めアクション |
|---|---|
| T1078 - 有効なアカウント | アカウントを無効化し、トークンを失効させる |
| T1530 - クラウドストレージからのデータ | バケット/ストレージのポリシーを制限する |
| T1537 - クラウドアカウントへの転送 | クロスアカウントアクセスをブロックする |
| T1578 - クラウドコンピューティングの変更 | インスタンスを隔離し、ディスクのスナップショットを作成する |
| T1552 - セキュリティ保護されていない認証情報 | すべてのアクセスキーとシークレットをローテーションする |
参考資料
コメント
Markdown 対応