AWS Pentesting

Support HackTricks

Grundlegende Informationen

Bevor du mit dem Pentesting einer AWS-Umgebung beginnst, gibt es einige grundlegende Dinge, die du wissen musst, wie AWS funktioniert, um zu verstehen, was du tun musst, wie du Fehlkonfigurationen findest und wie du sie ausnutzen kannst.

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

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 wird, 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, die Erlangung von Anmeldeinformationen. Hier sind einige Ideen, wie du das tun kannst:

  • Leaks in GitHub (oder ähnlichem) - OSINT

  • Soziale Ingenieurkunst

  • Passwort-Wiederverwendung (Passwort-Leaks)

  • 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:

Oder wenn du eine Überprüfung machst, könntest du einfach nach Anmeldeinformationen mit diesen Rollen fragen:

Nachdem du es geschafft hast, Anmeldeinformationen zu erhalten, musst du wissen, zu wem diese Anmeldeinformationen gehören, und auf was sie Zugriff haben, also musst du einige grundlegende Aufzählungen durchführen:

Grundlegende Aufzählung

SSRF

Wenn du ein SSRF auf einer Maschine innerhalb von AWS gefunden hast, überprüfe diese Seite für Tricks:

Whoami

Eine der ersten Dinge, die du wissen musst, ist, wer du bist (in welchem Konto du bist und andere Informationen über die AWS-Umgebung):

# 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

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 diese Seite überprüfen.

Org Enumeration

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 bruteforcen, um sie herauszufinden. Überprüfen Sie wie man die Enumeration und das Brute-Forcing durchführt in:

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

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. Möglicherweise können Sie diese ausnutzen:

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:

Publicly Exposed Services

Während Sie AWS-Dienste enumerieren, haben Sie möglicherweise einige von ihnen 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 bieten könnten.

In diesem Buch sollten Sie Informationen darüber finden, wie man exponierte AWS-Dienste findet und wie man sie überprüft. Um Schwachstellen in exponierten Netzwerkdiensten zu finden, empfehle ich Ihnen, nach dem spezifischen Dienst in:

Compromising the Organization

Vom Root-/Management-Konto

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.

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

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

# 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

# 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 Privilegienausweitung und 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, in https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing überprüfen.

# 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 Prinzipale Zugriff darauf haben. (Es überprüft nicht nur auf privesc, sondern auch auf andere interessante Berechtigungen, die empfohlen werden zu verwenden).

# 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 Subdomain-Hijacking-Schwachstellen aufgrund von entkoppelten Route53- und CloudFront-Konfigurationen.

  • ccat: Liste ECR-Repos -> Ziehe ECR-Repo -> Hintertür -> Pushe 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).

./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 der besten Sicherheitspraktiken für AWS, Audits, Incident Response, kontinuierliche Überwachung, Härtung und forensische Bereitschaft.

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

cloudfox aws --profile [profile-name] all-checks
  • ScoutSuite: Scout Suite ist ein Open-Source-Multi-Cloud-Sicherheitsaudit-Tool, das die Bewertung der Sicherheitslage von Cloud-Umgebungen ermöglicht.

# 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

# 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

Unterstütze HackTricks

Last updated