AWS Pentesting

Reading time: 15 minutes

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks

Grundinformationen

Bevor Sie mit dem Pentesting einer AWS-Umgebung beginnen, gibt es einige grundlegende Dinge, die Sie wissen müssen, wie AWS funktioniert, um zu verstehen, was Sie tun müssen, wie Sie Fehlkonfigurationen finden und wie Sie diese ausnutzen können.

Konzepte wie Organisationshierarchie, IAM und andere grundlegende Konzepte werden erklärt in:

AWS - Basic Information

Labs zum Lernen

Tools zur Simulation von Angriffen:

AWS Pentester/Red Team Methodologie

Um eine AWS-Umgebung zu auditieren, ist es sehr wichtig zu wissen: welche Dienste verwendet werden, was exponiert ist, wer Zugriff auf was hat und wie interne AWS-Dienste mit externen Diensten verbunden sind.

Aus der Sicht eines Red Teams ist der erste Schritt, um eine AWS-Umgebung zu kompromittieren, das Erlangen von Anmeldeinformationen. Hier sind einige Ideen, wie Sie das tun können:

  • Leaks in GitHub (oder ähnlichem) - OSINT
  • Soziale Ingenieurkunst
  • Passwort-Wiederverwendung (Passwortlecks)
  • Schwachstellen in AWS-gehosteten Anwendungen
  • Server Side Request Forgery mit Zugriff auf den Metadaten-Endpunkt
  • Lokales Datei-Lesen
  • /home/USERNAME/.aws/credentials
  • C:\Users\USERNAME\.aws\credentials
  • 3rd Party gehackt
  • Interner Mitarbeiter
  • Cognito Anmeldeinformationen

Oder durch Kompromittierung eines nicht authentifizierten Dienstes, der exponiert ist:

AWS - Unauthenticated Enum & Access

Oder wenn Sie eine Überprüfung durchführen, könnten Sie einfach nach Anmeldeinformationen mit diesen Rollen fragen:

AWS - Permissions for a Pentest

note

Nachdem Sie Anmeldeinformationen erhalten haben, müssen Sie wissen, wem diese Anmeldeinformationen gehören und auf was sie Zugriff haben, daher müssen Sie einige grundlegende Aufzählungen durchführen:

Grundlegende Aufzählung

SSRF

Wenn Sie ein SSRF auf einer Maschine innerhalb von AWS gefunden haben, überprüfen Sie diese Seite für Tricks:

Cloud SSRF - HackTricks

Whoami

Eine der ersten Dinge, die Sie wissen müssen, ist, wer Sie sind (in welchem Konto Sie sich befinden und andere Informationen über die AWS-Umgebung):

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

Beachten Sie, dass Unternehmen Canary-Tokens verwenden könnten, um zu identifizieren, wann Tokens gestohlen und verwendet werden. Es wird empfohlen, zu überprüfen, ob ein Token ein Canary-Token ist, bevor Sie es verwenden.
Für weitere Informationen prüfen Sie diese Seite.

Org Enumeration

AWS - Organizations Enum

IAM Enumeration

Wenn Sie genügend Berechtigungen haben, wird das Überprüfen der Berechtigungen jeder Entität im AWS-Konto Ihnen helfen zu verstehen, was Sie und andere Identitäten tun können und wie Sie Berechtigungen eskalieren können.

Wenn Sie nicht genügend Berechtigungen haben, um IAM zu enumerieren, können Sie sie stehlen und bruteforcen, um sie herauszufinden.
Überprüfen Sie wie man die Enumeration und das Brute-Forcing durchführt in:

AWS - IAM, Identity Center & SSO Enum

note

Jetzt, da Sie einige Informationen über Ihre Anmeldeinformationen haben (und wenn Sie ein Red Team sind, hoffen wir, dass Sie nicht entdeckt wurden). Es ist an der Zeit herauszufinden, welche Dienste in der Umgebung verwendet werden.
Im folgenden Abschnitt können Sie einige Möglichkeiten überprüfen, um einige gängige Dienste zu enumerieren.

Services Enumeration, Post-Exploitation & Persistence

AWS hat eine erstaunliche Anzahl von Diensten. Auf der folgenden Seite finden Sie grundlegende Informationen, Enumeration Cheatsheets**,** wie man Erkennung vermeidet, Persistenz erlangt und andere Post-Exploitation Tricks über einige von ihnen:

AWS - Services

Beachten Sie, dass Sie nicht die gesamte Arbeit manuell durchführen müssen. Unten in diesem Beitrag finden Sie einen Abschnitt über automatische Tools.

Darüber hinaus könnten Sie in diesem Stadium weitere Dienste entdeckt haben, die für nicht authentifizierte Benutzer exponiert sind, die Sie möglicherweise ausnutzen können:

AWS - Unauthenticated Enum & Access

Privilege Escalation

Wenn Sie mindestens Ihre eigenen Berechtigungen über verschiedene Ressourcen überprüfen können, könnten Sie überprüfen, ob Sie weitere Berechtigungen erhalten können. Sie sollten sich mindestens auf die in folgenden Links angegebenen Berechtigungen konzentrieren:

AWS - Privilege Escalation

Publicly Exposed Services

Während Sie AWS-Dienste enumerieren, haben Sie möglicherweise einige gefunden, die Elemente ins Internet exponieren (VM/Container-Ports, Datenbanken oder Warteschlangendienste, Snapshots oder Buckets...).
Als Pentester/Red Teamer sollten Sie immer überprüfen, ob Sie sensible Informationen / Schwachstellen auf ihnen finden können, da sie Ihnen weiteren Zugang zum AWS-Konto verschaffen könnten.

In diesem Buch sollten Sie Informationen darüber finden, wie man exponierte AWS-Dienste findet und wie man sie überprüft. Über das Finden von Schwachstellen in exponierten Netzwerkdiensten würde ich Ihnen empfehlen, nach dem spezifischen Dienst zu suchen in:

HackTricks - HackTricks

Compromising the Organization

From the root/management account

Wenn das Management-Konto neue Konten in der Organisation erstellt, wird eine neue Rolle im neuen Konto erstellt, standardmäßig benannt OrganizationAccountAccessRole und gibt der Management-Konto die AdministratorAccess-Richtlinie, um auf das neue Konto zuzugreifen.

Um also als Administrator auf ein Kindkonto zuzugreifen, benötigen Sie:

  • Kompromittieren Sie das Management-Konto und finden Sie die ID der Kindkonten und die Namen der Rolle (OrganizationAccountAccessRole standardmäßig), die dem Management-Konto den Zugriff als Administrator ermöglicht.
  • Um Kindkonten zu finden, gehen Sie zum Abschnitt Organisationen in der AWS-Konsole oder führen Sie aws organizations list-accounts aus.
  • Sie können die Namen der Rollen nicht direkt finden, also überprüfen Sie alle benutzerdefinierten IAM-Richtlinien und suchen Sie nach solchen, die sts:AssumeRole über die zuvor entdeckten Kindkonten erlauben.
  • Kompromittieren Sie einen Principal im Management-Konto mit sts:AssumeRole-Berechtigung über die Rolle in den Kindkonten (auch wenn das Konto jedem im Management-Konto erlaubt, sich auszugeben, sind spezifische sts:AssumeRole-Berechtigungen erforderlich, da es sich um ein externes Konto handelt).

Automated Tools

Recon

  • aws-recon: Ein multithreaded, auf AWS-Sicherheit fokussiertes Inventarsammlungstool, geschrieben in Ruby.
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 ist ein Multi-Cloud-Tool zum Abrufen von Assets (Hostnamen, IP-Adressen) von Cloud-Anbietern.
  • cloudmapper: CloudMapper hilft Ihnen, Ihre Amazon Web Services (AWS) Umgebungen zu analysieren. Es enthält jetzt viel mehr Funktionen, einschließlich der Überprüfung auf Sicherheitsprobleme.
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 ist ein Python-Tool, das Infrastrukturressourcen und die Beziehungen zwischen ihnen in einer intuitiven grafischen Ansicht konsolidiert, die von einer Neo4j-Datenbank unterstützt wird.
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 sammelt Assets und Beziehungen von Diensten und Systemen, einschließlich Cloud-Infrastruktur, SaaS-Anwendungen, Sicherheitskontrollen und mehr, in einer intuitiven grafischen Ansicht, die von der Neo4j-Datenbank unterstützt wird.
  • aws-inventory: (Verwendet python2) Dies ist ein Tool, das versucht, alle AWS-Ressourcen zu entdecken, die in einem Konto erstellt wurden.
  • aws_public_ips: Es ist ein Tool, um alle öffentlichen IP-Adressen (sowohl IPv4/IPv6) abzurufen, die mit einem AWS-Konto verbunden sind.

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) ist ein Skript und eine Bibliothek zur Identifizierung von Risiken in der Konfiguration von AWS Identity and Access Management (IAM) für ein AWS-Konto oder eine AWS-Organisation. Es modelliert die verschiedenen IAM-Benutzer und -Rollen in einem Konto als gerichteten Graphen, was Überprüfungen auf Privilegieneskalation und auf alternative Wege ermöglicht, die ein Angreifer nutzen könnte, um Zugriff auf eine Ressource oder Aktion in AWS zu erhalten. Sie können die Berechtigungen, die verwendet werden, um privesc-Pfad zu finden, in den Dateinamen, die mit _edges.py enden, überprüfen in https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing
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 ist ein AWS IAM-Sicherheitsbewertungstool, das Verstöße gegen das Prinzip der minimalen Berechtigung identifiziert und einen risikopriorisierten HTML-Bericht erstellt.
    Es zeigt Ihnen potenziell überprivilegierte Kunden, Inline- und AWS-Richtlinien und welche Prinzipien Zugriff darauf haben. (Es überprüft nicht nur auf Privesc, sondern auch auf andere interessante Berechtigungen, die empfohlen werden zu verwenden).
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 bewertet AWS-Konten auf Verwundbarkeiten durch Subdomain-Hijacking aufgrund von entkoppelten Route53- und CloudFront-Konfigurationen.
  • ccat: Liste ECR-Repos -> Ziehe ECR-Repo -> Hintertür -> Push hintertüriges Image
  • Dufflebag: Dufflebag ist ein Tool, das **in öffentlichen Elastic Block Storage (EBS) Snapshots nach Geheimnissen sucht, die möglicherweise versehentlich hinterlassen wurden.

Audit

  • cloudsploit: CloudSploit von Aqua ist ein Open-Source-Projekt, das entwickelt wurde, um Sicherheitsrisiken in Cloud-Infrastruktur-Konten zu erkennen, einschließlich: Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP), Oracle Cloud Infrastructure (OCI) und GitHub (Es sucht nicht nach 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 ist ein Open-Source-Sicherheitswerkzeug zur Durchführung von Bewertungen, Audits, Incident-Response, kontinuierlicher Überwachung, Härtung und forensischer Bereitschaft in Bezug auf AWS-Sicherheitsbest Practices.
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 hilft Ihnen, situative Wahrnehmung in unbekannten Cloud-Umgebungen zu erlangen. Es ist ein Open-Source-Befehlszeilenwerkzeug, das entwickelt wurde, um Penetrationstestern und anderen Fachleuten für offensive Sicherheit zu helfen, ausnutzbare Angriffswege in Cloud-Infrastrukturen zu finden.
bash
cloudfox aws --profile [profile-name] all-checks
  • ScoutSuite: Scout Suite ist ein Open-Source-Tool zur Sicherheitsprüfung für mehrere Clouds, das die Bewertung der Sicherheitslage von Cloud-Umgebungen ermöglicht.
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 (verwendet python2.7 und sieht unwartbar aus)
  • Zeus: Zeus ist ein leistungsstarkes Tool für AWS EC2 / S3 / CloudTrail / CloudWatch / KMS beste Härtungspraktiken (sieht unwartbar aus). Es überprüft nur standardmäßig konfigurierte Anmeldeinformationen im System.

Ständige Prüfung

  • cloud-custodian: Cloud Custodian ist eine Regel-Engine zur Verwaltung öffentlicher Cloud-Konten und -Ressourcen. Es ermöglicht Benutzern, Richtlinien zu definieren, um eine gut verwaltete Cloud-Infrastruktur zu ermöglichen, die sowohl sicher als auch kosteneffizient ist. Es konsolidiert viele der Ad-hoc-Skripte, die Organisationen haben, in ein leichtgewichtiges und flexibles Tool mit einheitlichen Metriken und Berichterstattung.
  • pacbot: Policy as Code Bot (PacBot) ist eine Plattform für kontinuierliche Compliance-Überwachung, Compliance-Berichterstattung und Sicherheitsautomatisierung für die Cloud. In PacBot werden Sicherheits- und Compliance-Richtlinien als Code implementiert. Alle von PacBot entdeckten Ressourcen werden anhand dieser Richtlinien bewertet, um die Konformität mit den Richtlinien zu überprüfen. Das PacBot Auto-Fix-Framework bietet die Möglichkeit, automatisch auf Richtlinienverletzungen zu reagieren, indem vordefinierte Maßnahmen ergriffen werden.
  • streamalert: StreamAlert ist ein serverloses, Echtzeit-Datenanalyse-Framework, das es Ihnen ermöglicht, Daten aus jeder Umgebung zu erfassen, zu analysieren und zu alarmieren, unter Verwendung von Datenquellen und Alarmierungslogik, die Sie definieren. Computer-Sicherheitsteams verwenden StreamAlert, um täglich Terabytes von Protokolldaten auf Vorfallserkennung und -reaktion zu scannen.

DEBUG: AWS CLI-Anfragen erfassen

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

Referenzen

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks