AWS Pentesting

htARTE(HackTricks AWS Red Team Expert) でAWSハッキングをゼロからヒーローまで学びましょう

HackTricks をサポートする他の方法:

基本情報

AWS 環境の ペンテストを開始する前に、AWSの動作について理解し、ミス構成を見つけて悪用する方法を理解するのに役立つ 基本事項 がいくつかあります。

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

pageAWS - Basic Information

学習用ラボ

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

AWS ペンテスター/Red Team 方法論

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

Red Teamの観点から、AWS環境を 侵害する最初のステップ はいくつかの 資格情報を取得すること です。以下に、それを行うためのいくつかのアイデアがあります:

  • github(または類似の)での 情報漏洩 - OSINT

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

  • パスワードの再利用(パスワードの漏洩)

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

  • サーバーサイドリクエストフォージェリ メタデータエンドポイントへのアクセス

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

  • /home/USERNAME/.aws/credentials

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

  • 3rd parties 侵害

  • 内部 従業員

  • Cognito 資格情報

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

pageAWS - Unauthenticated Enum & Access

または レビュー を行っている場合は、次の役割で 資格情報を要求 するだけです:

pageAWS - Permissions for a Pentest

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

基本列挙

SSRF

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

Whoami

最初に知る必要があることの1つは、自分が誰であるか(どのアカウントにいるか、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かどうかを確認することをお勧めします。 詳細についてはこのページをご覧ください。

組織の列挙

pageAWS - Organizations Enum

IAMの列挙

十分な権限がある場合、AWSアカウント内の各エンティティの特権を確認することで、自分や他のエンティティが何ができるか、どのように特権を昇格できるかを理解するのに役立ちます。

IAMを列挙する権限がない場合、ブルートフォース攻撃を行って特権を特定できます。 列挙とブルートフォース攻撃の方法については、以下を確認してください:

pageAWS - IAM, Identity Center & SSO Enum

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

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

AWSには驚くほど多くのサービスがあり、以下のページでは、基本情報、列挙のチートシート、検出を回避する方法、永続性を確保する方法、および他のポストエクスプロイテーショントリックについて、いくつかのサービスについて説明しています:

pageAWS - Services

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

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

pageAWS - Unauthenticated Enum & Access

特権昇格

少なくとも自分の権限をさまざまなリソース上で確認できる場合、さらなる権限を取得できるかどうかを確認できます。少なくとも以下で指定された権限に焦点を当てる必要があります:

pageAWS - Privilege Escalation

インターネットに公開されたサービス

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

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

組織の侵害

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

組織内で管理アカウントが新しいアカウントを作成すると、新しいアカウントにはデフォルトでOrganizationAccountAccessRoleという名前の新しいロールが作成され、管理アカウントにAdministratorAccessポリシーが与えられて、新しいアカウントにアクセスできるようになります。

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

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

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

  • ロールの名前を直接見つけることはできませんので、すべてのカスタムIAMポリシーを確認し、以前に発見した子アカウントに対して**sts:AssumeRoleを許可する**ものを検索します。

  • 管理アカウント内の主体侵害し、子アカウントのロールに対する**sts:AssumeRole権限**を持つ(管理アカウントからの誰でもなりすますことを許可している場合でも、外部アカウントであるため、特定のsts:AssumeRole権限が必要です)。

自動ツール

レコン

  • 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はクラウドプロバイダーからアセット(ホスト名、IPアドレス)を取得するためのマルチクラウドツールです。

  • 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の両方)を取得するツールです。

特権昇格と悪用

# 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のリソースやアクションにアクセスするために取る可能性のある代替経路をチェックできます。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ポリシー、およびそれらにアクセス権を持つ主体を示します。

# 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(Python2.7を使用し、メンテナンスされていないようです)

  • Zeus: ZeusはAWS EC2 / S3 / CloudTrail / CloudWatch / KMSの最適なハードニングプラクティスのための強力なツールです(メンテナンスされていないようです)。システム内でデフォルトで構成された認証情報のみをチェックします。

定期的な監査

  • cloud-custodian: Cloud Custodianはパブリッククラウドアカウントとリソースを管理するためのルールエンジンです。ユーザーは適切に管理されたセキュアでコスト最適化されたクラウドインフラストラクチャを有効にするポリシーを定義できます。これにより、組織が持つ多くのアドホックスクリプトが統合され、統一されたメトリクスとレポーティングを備えた軽量かつ柔軟なツールにまとめられます。

  • pacbot: ポリシーアズコードボット(PacBot)はクラウドの連続的なコンプライアンス監視、コンプライアンスレポーティング、セキュリティオートメーションのためのプラットフォームです。PacBotでは、セキュリティとコンプライアンスポリシーがコードとして実装されます。PacBotによって発見されたすべてのリソースは、これらのポリシーに対して評価され、ポリシーの遵守度を評価します。PacBotの自動修正フレームワークは、事前に定義されたアクションを取ることでポリシー違反に自動的に対応する機能を提供します。

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

DEBUG: AWS CLIリクエストのキャプチャ

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

参考文献

htARTE(HackTricks AWS Red Team Expert) を通じて、ゼロからヒーローまでAWSハッキングを学ぶ

HackTricks をサポートする他の方法:

最終更新