AWS Pentesting
{{#include ../../banners/hacktricks-training.md}}
基本情報
AWS 環境の ペンテスト を開始する前に、AWS の仕組みについて知っておくべき 基本的なこと がいくつかあります。これにより、何をすべきか、誤設定を見つける方法、そしてそれをどのように悪用するかを理解するのに役立ちます。
組織の階層、IAM、その他の基本的な概念については、以下で説明されています:
{{#ref}} aws-basic-information/ {{#endref}}
学習用ラボ
- https://github.com/RhinoSecurityLabs/cloudgoat
- https://github.com/BishopFox/iam-vulnerable
- https://github.com/nccgroup/sadcloud
- https://github.com/bridgecrewio/terragoat
- https://github.com/ine-labs/AWSGoat
- http://flaws.cloud/
- http://flaws2.cloud/
攻撃をシミュレートするためのツール:
- https://github.com/Datadog/stratus-red-team/
- https://github.com/sbasu7241/AWS-Threat-Simulation-and-Detection/tree/main
AWS ペンテスター/レッドチームの方法論
AWS 環境を監査するためには、どの サービスが使用されているか、何が 公開されているか、誰が 何にアクセスできるか、そして内部の AWS サービスと 外部サービス がどのように接続されているかを知ることが非常に重要です。
レッドチームの観点から、AWS 環境を侵害するための 最初のステップ は、いくつかの 資格情報 を取得することです。以下はその方法のいくつかです:
- github(または類似のもの)での 漏洩 - OSINT
- ソーシャル エンジニアリング
- パスワード の再利用(パスワード漏洩)
- AWS ホストアプリケーションの脆弱性
- サーバーサイドリクエストフォージェリ メタデータエンドポイントへのアクセス
- ローカルファイル読み取り
/home/USERNAME/.aws/credentialsC:\Users\USERNAME\.aws\credentials- 第三者の 侵害
- 内部 従業員
- Cognito 資格情報
または、認証されていないサービス を侵害することによって:
{{#ref}} aws-unauthenticated-enum-access/ {{#endref}}
または、レビュー を行っている場合は、これらの役割で 資格情報を要求する ことができます:
{{#ref}} aws-permissions-for-a-pentest.md {{#endref}}
Note
資格情報を取得した後は、それらの資格情報が 誰に属しているか、および 何にアクセスできるか を知る必要があります。そのため、いくつかの基本的な列挙を実行する必要があります:
基本的な列挙
SSRF
AWS 内のマシンで SSRF を見つけた場合は、トリックについてはこのページを確認してください:
{{#ref}} https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf {{#endref}}
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
Caution
企業はカナリアトークンを使用してトークンが盗まれ使用されているかどうかを特定する場合があります。使用する前にトークンがカナリアトークンであるかどうかを確認することをお勧めします。
詳細についてはこのページを確認してください。
組織の列挙
{{#ref}} aws-services/aws-organizations-enum.md {{#endref}}
IAMの列挙
十分な権限がある場合は、AWSアカウント内の各エンティティの権限を確認することが、あなたや他のアイデンティティが何をできるか、また権限を昇格させる方法を理解するのに役立ちます。
IAMを列挙するための十分な権限がない場合は、ブルートフォースで盗むことでそれらを特定できます。
列挙とブルートフォースの方法については以下を確認してください:
{{#ref}} aws-services/aws-iam-enum.md {{#endref}}
Note
現在、あなたの資格情報に関する情報を持っている(そして、もしあなたがレッドチームであれば、幸運にも検出されていないことを願っています)。環境で使用されているサービスを特定する時が来ました。
次のセクションでは、一般的なサービスを列挙する方法をいくつか確認できます。
サービスの列挙、ポストエクスプロイト & 永続性
AWSには驚くべき数のサービスがあり、以下のページでは基本情報、列挙のチートシート**、**検出を回避する方法、永続性を取得する方法、その他のポストエクスプロイトのトリックについての情報が見つかります:
{{#ref}} aws-services/ {{#endref}}
すべての作業を手動で行う必要はないことに注意してください。この投稿の下部には、自動ツールに関するセクションがあります。
さらに、この段階で認証されていないユーザーに公開されているサービスが見つかるかもしれません。これらを悪用できるかもしれません:
{{#ref}} aws-unauthenticated-enum-access/ {{#endref}}
権限昇格
異なるリソースに対して少なくとも自分の権限を確認できる場合、さらに権限を取得できるかどうかを確認できます。少なくとも以下に示す権限に焦点を当てるべきです:
{{#ref}} aws-privilege-escalation/ {{#endref}}
公開されたサービス
AWSサービスを列挙しているときに、いくつかのサービスがインターネットに要素を公開しているのを見つけたかもしれません(VM/コンテナのポート、データベースやキューサービス、スナップショットやバケットなど)。
ペンテスター/レッドチームとして、これらに機密情報や脆弱性がないか常に確認するべきです。これにより、AWSアカウントへのさらなるアクセスが得られるかもしれません。
この本では、公開されたAWSサービスを見つける方法とそれを確認する方法に関する情報が見つかるはずです。公開されたネットワークサービスの脆弱性を見つける方法については、特定のサービスを以下で検索することをお勧めします:
{{#ref}} https://book.hacktricks.xyz/ {{#endref}}
組織の侵害
ルート/管理アカウントから
管理アカウントが組織内に新しいアカウントを作成すると、新しいアカウントに新しいロールが作成され、デフォルトで**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は、インフラストラクチャ資産とそれらの関係を直感的なグラフビューで統合するPythonツールで、Neo4jデータベースによって支えられています。
# 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
- SkyArk: スキャンされたAWS環境で最も特権のあるユーザーを発見します。AWS Shadow Adminsを含みます。powershellを使用します。特権ポリシーの定義は、https://github.com/cyberark/SkyArk/blob/master/AWStealth/AWStealth.ps1の**
Check-PrivilegedPolicy**関数内にあります。 - pacu: Pacuは、クラウド環境に対する攻撃的セキュリティテストのために設計されたオープンソースのAWSエクスプロイトフレームワークです。列挙、ミスコンフィギュレーションの発見、そしてそれらをエクスプロイトすることができます。特権の定義は、**
user_escalation_methods**辞書内のhttps://github.com/RhinoSecurityLabs/pacu/blob/866376cd711666c775bbfcde0524c817f2c5b181/pacu/modules/iam__privesc_scan/main.py#L134で見つけることができます。 - pacuは自分のプライベートパスのみをチェックします(アカウント全体ではありません)。
# 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で終わるファイル名にあります。
# 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: クラウドセキュリティスイート(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 ...
参考文献
{{#include ../../banners/hacktricks-training.md}}