AWS Pentesting

HackTricksをサポートする

基本情報

AWS環境のペンテストを開始する前に、AWSの動作についていくつかの基本的なことを知っておく必要があります。これにより、何をすべきか、どのようにミスコンフィギュレーションを見つけ、それをどのように悪用するかを理解するのに役立ちます。

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

AWS - Basic Information

学習用ラボ

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

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

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

レッドチームの観点から、AWS環境を侵害する最初のステップは、いくつかのクレデンシャルを取得することです。以下にその方法のいくつかを示します:

  • github(または類似のもの)でのリーク - OSINT

  • ソーシャルエンジニアリング

  • パスワードの再利用(パスワードリーク)

  • AWSホストアプリケーションの脆弱性

  • メタデータエンドポイントへのアクセスを持つServer Side Request Forgery

  • ローカルファイル読み取り

  • /home/USERNAME/.aws/credentials

  • C:\Users\USERNAME\.aws\credentials

  • サードパーティの侵害

  • 内部従業員

  • Cognito クレデンシャル

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

AWS - Unauthenticated Enum & Access

または、レビューを行っている場合は、これらのロールでクレデンシャルを要求することができます:

AWS - Permissions for a Pentest

クレデンシャルを取得した後、それらのクレデンシャルが誰に属しているか、および何にアクセスできるかを知る必要があるため、基本的な列挙を行う必要があります:

基本的な列挙

SSRF

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

Whoami

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

# 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

企業はcanary tokensを使用してトークンが盗まれて使用されていることを識別する場合があります。使用する前にトークンがcanary tokenかどうかを確認することをお勧めします。 詳細はこのページを参照してください。

Org Enumeration

AWS - Organizations Enum

IAM Enumeration

十分な権限がある場合、AWSアカウント内の各エンティティの特権を確認することで、自分や他のアイデンティティが何をできるか、そして特権をエスカレートする方法を理解するのに役立ちます。

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

AWS - IAM, Identity Center & SSO Enum

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

Services Enumeration, Post-Exploitation & Persistence

AWSには驚くほど多くのサービスがあります。以下のページでは、基本情報、列挙チートシート、検出を回避する方法持続性を得る方法、その他のポストエクスプロイトトリックについていくつか紹介しています:

AWS - Services

すべての作業を手動で行う必要はないことに注意してください。この投稿の下部に自動化ツールについてのセクションがあります:automatic tools

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

AWS - Unauthenticated Enum & Access

Privilege Escalation

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

AWS - Privilege Escalation

Publicly Exposed Services

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

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

Compromising the Organization

From the root/management account

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

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

  • 管理アカウントを侵害し、子アカウントのIDロールの名前(デフォルトではOrganizationAccountAccessRole)を見つけ、管理アカウントが管理者としてアクセスできるようにします。

  • 子アカウントを見つけるには、awsコンソールの組織セクションに移動するか、aws organizations list-accountsを実行します。

  • ロールの名前を直接見つけることはできないため、すべてのカスタムIAMポリシーを確認し、sts:AssumeRoleが前述の子アカウントに対して許可されているものを探します。

  • 管理アカウント内の**sts:AssumeRole権限を持つプリンシパルを侵害**し、子アカウント内のロールに対して(管理アカウントからの誰でも偽装を許可している場合でも、外部アカウントとして特定のsts:AssumeRole権限が必要です)。

Automated Tools

Recon

  • aws-recon: Rubyで書かれたマルチスレッドのAWSセキュリティフォーカスのインベントリ収集ツール

# 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は、Cloud ProvidersからAssets(Hostnames、IP Addresses)を取得するためのマルチクラウドツールです。

  • cloudmapper: CloudMapperは、Amazon Web Services (AWS) 環境を分析するのに役立ちます。現在では、セキュリティ問題の監査を含む、さらに多くの機能が含まれています。

# 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は、Neo4jデータベースによって強化された直感的なグラフビューでインフラストラクチャ資産とそれらの関係を統合するPythonツールです。

# 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

# 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 ユーザーとロールを有向グラフとしてモデル化し、privilege escalation や攻撃者が AWS 内のリソースやアクションにアクセスするために取る可能性のある代替経路をチェックすることができます。permissions used to find privesc パスを確認するには、https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing_edges.py で終わるファイル名を確認してください。

# 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のポリシー、およびそれらにアクセスできるプリンシパルを示します。(privescだけでなく、他の興味深い権限もチェックするため、使用を推奨します)。

# 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は検出しません)。

./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セキュリティのベストプラクティス評価、監査、インシデント対応、継続的な監視、ハードニング、およびフォレンジック準備を行うためのオープンソースのセキュリティツールです。

# 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は、慣れないクラウド環境での状況認識を支援します。これは、ペネトレーションテスターやその他の攻撃的セキュリティ専門家がクラウドインフラストラクチャ内の攻撃可能な経路を見つけるのを支援するために作成されたオープンソースのコマンドラインツールです。

cloudfox aws --profile [profile-name] all-checks
  • ScoutSuite: Scout Suiteは、クラウド環境のセキュリティ姿勢評価を可能にするオープンソースのマルチクラウドセキュリティ監査ツールです。

# 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 (uses python2.7 and looks unmaintained)

  • Zeus: Zeus is a powerful tool for AWS EC2 / S3 / CloudTrail / CloudWatch / KMS best hardening practices (looks unmaintained). It checks only default configured creds inside the system.

Constant Audit

  • cloud-custodian: Cloud Custodianは、パブリッククラウドアカウントとリソースを管理するためのルールエンジンです。ユーザーがセキュアでコスト最適化されたクラウドインフラストラクチャを実現するためのポリシーを定義することを可能にします。多くのアドホックスクリプトを軽量で柔軟なツールに統合し、統一されたメトリクスとレポートを提供します。

  • pacbot: Policy as Code Bot (PacBot)は、クラウドの継続的なコンプライアンス監視、コンプライアンスレポート、およびセキュリティ自動化のためのプラットフォームです。PacBotでは、セキュリティおよびコンプライアンスのポリシーがコードとして実装されています。PacBotによって発見されたすべてのリソースは、これらのポリシーに対して評価され、ポリシーの準拠度が測定されます。PacBotの自動修正フレームワークは、事前定義されたアクションを実行することでポリシー違反に自動的に対応する機能を提供します。

  • streamalert: StreamAlertはサーバーレスのリアルタイムデータ分析フレームワークであり、定義したデータソースとアラートロジックを使用して、任意の環境からデータを取り込み、分析し、アラートを発することができます。コンピュータセキュリティチームは、StreamAlertを使用して毎日テラバイトのログデータをスキャンし、インシデントの検出と対応を行います。

DEBUG: Capture AWS cli requests

# 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 ...

参考文献

HackTricksをサポートする

Last updated