AWS Pentesting

Reading time: 23 minutes

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

基本情報

AWS 環境の ペンテスト を開始する前に、AWS の仕組みについて知っておくべき 基本的なこと がいくつかあります。これにより、何をすべきか、誤設定をどのように見つけるか、そしてそれをどのように悪用するかを理解するのに役立ちます。

組織の階層、IAM、その他の基本的な概念については、以下で説明されています:

AWS - Basic Information

学習用ラボ

攻撃をシミュレートするためのツール:

AWS ペンテスター/レッドチームの方法論

AWS 環境を監査するためには、どの サービスが使用されているか、何が 公開されているか、誰が 何にアクセスできるか、そして内部の AWS サービスと 外部サービス がどのように接続されているかを知ることが非常に重要です。

レッドチームの観点から、AWS 環境を侵害するための 最初のステップ は、いくつかの 資格情報 を取得することです。以下はその方法のいくつかです:

  • github(または類似のもの)での 漏洩 - OSINT
  • ソーシャル エンジニアリング
  • パスワード の再利用(パスワード漏洩)
  • AWS ホスティングアプリケーションの脆弱性
  • サーバーサイドリクエストフォージェリ メタデータエンドポイントへのアクセス
  • ローカルファイル読み取り
  • /home/USERNAME/.aws/credentials
  • C:\Users\USERNAME\.aws\credentials
  • 第三者の 侵害
  • 内部 従業員
  • Cognito 資格情報

または 認証されていないサービス を侵害することによって:

AWS - Unauthenticated Enum & Access

または レビュー を行っている場合は、これらの役割で 資格情報を要求する ことができます:

AWS - Permissions for a Pentest

note

資格情報を取得した後は、それらの資格情報が 誰に属しているか、および 何にアクセスできるか を知る必要があります。そのため、いくつかの基本的な列挙を実行する必要があります:

基本的な列挙

SSRF

AWS 内のマシンで SSRF を見つけた場合は、トリックについてはこのページを確認してください:

Cloud SSRF - HackTricks

Whoami

最初に知っておくべきことの一つは、あなたが誰であるか(どのアカウントにいるか、AWS 環境に関する他の情報)です:

bash
# Easiest way, but might be monitored?
aws sts get-caller-identity
aws iam get-user # This will get your own user

# If you have a Key ID
aws sts get-access-key-info --access-key-id=ASIA1234567890123456

# Get inside error message
aws sns publish --topic-arn arn:aws:sns:us-east-1:*account id*:aaa --message aaa

# From metadata
TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"`
curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/dynamic/instance-identity/document

caution

企業はカナリアトークンを使用してトークンが盗まれ使用されているかどうかを特定する場合があります。使用する前にトークンがカナリアトークンであるかどうかを確認することをお勧めします。
詳細についてはこのページを確認してください

組織の列挙

AWS - Organizations Enum

IAMの列挙

十分な権限がある場合、AWSアカウント内の各エンティティの権限を確認することは、あなたや他のアイデンティティが何をできるか、また権限を昇格させる方法を理解するのに役立ちます。

IAMを列挙するための十分な権限がない場合、ブルートフォースで盗むことでそれらを特定できます。
列挙とブルートフォースの方法については以下を確認してください:

AWS - IAM, Identity Center & SSO Enum

note

現在、あなたの資格情報に関する情報を持っている(そして、もしあなたがレッドチームであれば、検出されていないことを願っています)。環境で使用されているサービスを特定する時が来ました。
次のセクションでは、一般的なサービスを列挙する方法をいくつか確認できます。

サービスの列挙、ポストエクスプロイト & 永続性

AWSには驚くべき数のサービスがあり、以下のページでは基本情報、列挙のチートシート**、**検出を回避する方法永続性を取得する方法、その他のポストエクスプロイトのトリックについての情報が見つかります:

AWS - Services

手動ですべての作業を行う必要はありません。以下の投稿では、自動ツールに関するセクションを見つけることができます。

さらに、この段階で認証されていないユーザーに公開されているサービスを発見したかもしれません。それらを悪用できるかもしれません:

AWS - Unauthenticated Enum & Access

権限昇格

異なるリソースに対して少なくとも自分の権限を確認できる場合、さらに権限を取得できるかどうかを確認できます。少なくとも以下の権限に焦点を当てるべきです:

AWS - Privilege Escalation

公開されたサービス

AWSサービスを列挙しているときに、いくつかのサービスがインターネットに要素を公開しているのを見つけたかもしれません(VM/コンテナのポート、データベースやキューサービス、スナップショットやバケットなど)。
ペンテスター/レッドチームとして、機密情報や脆弱性を見つけられるかどうかを常に確認すべきです。これにより、AWSアカウントへのさらなるアクセスが得られるかもしれません。

この本では、公開されたAWSサービスを見つける方法とそれを確認する方法に関する情報を見つけることができるはずです。公開されたネットワークサービスの脆弱性を見つける方法については、特定のサービスを以下で検索することをお勧めします:

HackTricks - HackTricks

組織の侵害

ルート/管理アカウントから

管理アカウントが組織内に新しいアカウントを作成すると、新しいアカウントに新しいロールが作成され、デフォルトで**OrganizationAccountAccessRoleと名付けられ、管理アカウントに新しいアカウントにアクセスするためのAdministratorAccess**ポリシーが付与されます。

したがって、子アカウントに管理者としてアクセスするには、次のことが必要です:

  • 管理アカウントを侵害し、子アカウントのIDロールの名前(デフォルトでOrganizationAccountAccessRole)を見つけて、管理アカウントが管理者としてアクセスできるようにします。
  • 子アカウントを見つけるには、AWSコンソールの組織セクションに移動するか、aws organizations list-accountsを実行します。
  • ロールの名前を直接見つけることはできないため、すべてのカスタムIAMポリシーを確認し、以前に発見した子アカウントに対するsts:AssumeRoleを許可するものを検索します。
  • 管理アカウント内のsts:AssumeRole権限を持つプリンシパル侵害し、子アカウントのロールに対して**sts:AssumeRole権限を持つ**(管理アカウントから誰でもなりすますことを許可している場合でも、外部アカウントであるため、特定のsts:AssumeRole権限が必要です)。

自動ツール

リコン

  • aws-recon: Rubyで書かれたマルチスレッドのAWSセキュリティに特化したインベントリ収集ツール
bash
# Install
gem install aws_recon

# Recon and get json
AWS_PROFILE=<profile> aws_recon \
--services S3,EC2 \
--regions global,us-east-1,us-east-2 \
--verbose
  • cloudlist: Cloudlistは、クラウドプロバイダーからアセット(ホスト名、IPアドレス)を取得するためのマルチクラウドツールです。
  • cloudmapper: CloudMapperは、Amazon Web Services (AWS) 環境を分析するのに役立ちます。現在、セキュリティ問題の監査を含む、はるかに多くの機能が含まれています。
bash
# Installation steps in github
# Create a config.json file with the aws info, like:
{
"accounts": [
{
"default": true,
"id": "<account id>",
"name": "dev"
}
],
"cidrs":
{
"2.2.2.2/28": {"name": "NY Office"}
}
}

# Enumerate
python3 cloudmapper.py collect --profile dev
## Number of resources discovered
python3 cloudmapper.py stats --accounts dev

# Create HTML report
## In the report you will find all the info already
python3 cloudmapper.py report --accounts dev

# Identify potential issues
python3 cloudmapper.py audit --accounts dev --json > audit.json
python3 cloudmapper.py audit --accounts dev --markdow > audit.md
python3 cloudmapper.py iam_report --accounts dev

# Identify admins
## The permissions search for are in https://github.com/duo-labs/cloudmapper/blob/4df9fd7303e0337ff16a08f5e58f1d46047c4a87/shared/iam_audit.py#L163-L175
python3 cloudmapper.py find_admins --accounts dev

# Identify unused elements
python3 cloudmapper.py find_unused --accounts dev

# Identify publivly exposed resources
python3 cloudmapper.py public --accounts dev

python cloudmapper.py prepare #Prepare webserver
python cloudmapper.py webserver #Show webserver
  • cartography: Cartographyは、インフラストラクチャ資産とそれらの関係を直感的なグラフビューで統合するPythonツールで、Neo4jデータベースによって支えられています。
bash
# Install
pip install cartography
## At the time of this writting you need neo4j version 3.5.*

# Get AWS info
AWS_PROFILE=dev cartography --neo4j-uri bolt://127.0.0.1:7687 --neo4j-password-prompt  --neo4j-user neo4j
  • starbase: Starbaseは、クラウドインフラストラクチャ、SaaSアプリケーション、セキュリティコントロールなどのサービスやシステムから資産と関係を収集し、Neo4jデータベースに基づいた直感的なグラフビューに表示します。
  • aws-inventory: (python2を使用) これは、アカウント内で作成されたすべてのAWSリソース発見しようとするツールです。
  • aws_public_ips: これは、AWSアカウントに関連付けられたすべてのパブリックIPアドレス(IPv4/IPv6の両方)を取得するツールです。

Privesc & Exploiting

bash
# Install
## Feel free to use venvs
pip3 install pacu

# Use pacu CLI
pacu
> import_keys <profile_name> # import 1 profile from .aws/credentials
> import_keys --all # import all profiles
> list # list modules
> exec iam__enum_permissions # Get permissions
> exec iam__privesc_scan # List privileged permissions
  • PMapper: Principal Mapper (PMapper)は、AWSアカウントまたはAWS組織のAWS Identity and Access Management (IAM)の設定におけるリスクを特定するためのスクリプトとライブラリです。これは、アカウント内の異なるIAMユーザーとロールを有向グラフとしてモデル化し、特権昇格のチェックや、攻撃者がAWS内のリソースやアクションにアクセスするために取る可能性のある代替パスを確認できるようにします。privescパスを見つけるために使用される権限は、https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing_edges.pyで終わるファイル名にあります。
bash
# Install
pip install principalmapper

# Get data
pmapper --profile dev graph create
pmapper --profile dev graph display # Show basic info
# Generate graph
pmapper --profile dev visualize # Generate svg graph file (can also be png, dot and graphml)
pmapper --profile dev visualize --only-privesc # Only privesc permissions

# Generate analysis
pmapper --profile dev analysis
## Run queries
pmapper --profile dev query 'who can do iam:CreateUser'
pmapper --profile dev query 'preset privesc *' # Get privescs with admins

# Get organization hierarchy data
pmapper --profile dev orgs create
pmapper --profile dev orgs display
  • cloudsplaining: Cloudsplainingは、最小特権の違反を特定し、リスク優先のHTMLレポートを生成するAWS IAMセキュリティ評価ツールです。
    それは、潜在的に過剰な権限を持つ顧客、インラインおよびAWSのポリシー、およびそれらにアクセスできるプリンシパルを示します。(それは特権昇格だけでなく、他の興味深い権限もチェックするため、使用を推奨します)。
bash
# Install
pip install cloudsplaining

# Download IAM policies to check
## Only the ones attached with the versions used
cloudsplaining download --profile dev

# Analyze the IAM policies
cloudsplaining scan --input-file /private/tmp/cloudsplaining/dev.json --output /tmp/files/
  • cloudjack: CloudJackは、分離されたRoute53とCloudFrontの構成の結果として、AWSアカウントのサブドメインハイジャック脆弱性を評価します。
  • ccat: ECRリポジトリのリスト -> ECRリポジトリをプル -> バックドアを仕掛ける -> バックドアを仕掛けたイメージをプッシュ
  • Dufflebag: Dufflebagは、公開されたElastic Block Storage (EBS)スナップショットを検索して、誤って残された可能性のある秘密を探すツールです。

監査

  • cloudsploit: AquaのCloudSploitは、Amazon Web Services (AWS)、Microsoft Azure、Google Cloud Platform (GCP)、Oracle Cloud Infrastructure (OCI)、およびGitHubを含むクラウドインフラストラクチャアカウントのセキュリティリスクを検出するために設計されたオープンソースプロジェクトです(ShadowAdminsは探しません)。
bash
./index.js --csv=file.csv --console=table --config ./config.js

# Compiance options: --compliance {hipaa,cis,cis1,cis2,pci}
## use "cis" for cis level 1 and 2
  • Prowler: Prowlerは、AWSのセキュリティベストプラクティスの評価、監査、インシデントレスポンス、継続的な監視、ハードニング、およびフォレンジック準備を行うためのオープンソースのセキュリティツールです。
bash
# Install python3, jq and git
# Install
pip install prowler
prowler -v

# Run
prowler <provider>
prowler aws --profile custom-profile [-M csv json json-asff html]
  • CloudFox: CloudFoxは、未知のクラウド環境での状況認識を得るのに役立ちます。これは、ペネトレーションテスターや他の攻撃的セキュリティ専門家がクラウドインフラストラクチャ内の悪用可能な攻撃経路を見つけるために作成されたオープンソースのコマンドラインツールです。
bash
cloudfox aws --profile [profile-name] all-checks
  • ScoutSuite: Scout Suiteは、クラウド環境のセキュリティポスチャー評価を可能にするオープンソースのマルチクラウドセキュリティ監査ツールです。
bash
# Install
virtualenv -p python3 venv
source venv/bin/activate
pip install scoutsuite
scout --help

# Get info
scout aws -p dev
  • cs-suite: Cloud Security Suite (python2.7を使用し、メンテナンスされていないようです)
  • Zeus: ZeusはAWS EC2 / S3 / CloudTrail / CloudWatch / KMSのベストハードニングプラクティスのための強力なツールです(メンテナンスされていないようです)。システム内のデフォルト設定されたクレデンシャルのみをチェックします。

Constant Audit

  • cloud-custodian: Cloud Custodianは、パブリッククラウドアカウントとリソースを管理するためのルールエンジンです。ユーザーは適切に管理されたクラウドインフラストラクチャを有効にするポリシーを定義することができます。これは、組織が持つ多くのアドホックスクリプトを軽量で柔軟なツールに統合し、統一されたメトリクスとレポートを提供します。
  • pacbot: Policy as Code Bot (PacBot)は、クラウドのための継続的なコンプライアンス監視、コンプライアンス報告、およびセキュリティ自動化のプラットフォームです。PacBotでは、セキュリティおよびコンプライアンスポリシーがコードとして実装されます。PacBotによって発見されたすべてのリソースは、これらのポリシーに対して評価され、ポリシーの適合性が測定されます。PacBotの自動修正フレームワークは、事前定義されたアクションを実行することによってポリシー違反に自動的に対応する能力を提供します。
  • streamalert: StreamAlertは、サーバーレスのリアルタイムデータ分析フレームワークであり、定義したデータソースとアラートロジックを使用して、任意の環境からデータを取り込み、分析し、アラートを出すことを可能にします。コンピュータセキュリティチームは、StreamAlertを使用して、インシデント検出と対応のために毎日テラバイトのログデータをスキャンします。

DEBUG: Capture AWS cli requests

bash
# Set proxy
export HTTP_PROXY=http://localhost:8080
export HTTPS_PROXY=http://localhost:8080

# Capture with burp nor verifying ssl
aws --no-verify-ssl ...

# Dowload brup cert and transform it to pem
curl http://127.0.0.1:8080/cert --output Downloads/certificate.cer
openssl x509 -inform der -in Downloads/certificate.cer -out Downloads/certificate.pem

# Indicate the ca cert to trust
export AWS_CA_BUNDLE=~/Downloads/certificate.pem

# Run aws cli normally trusting burp cert
aws ...

参考文献

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする