AWS Pentesting

Support HackTricks

Basic Information

Zanim rozpoczniesz pentesting środowiska AWS, musisz znać kilka podstawowych rzeczy dotyczących działania AWS, aby pomóc sobie zrozumieć, co musisz zrobić, jak znaleźć błędne konfiguracje i jak je wykorzystać.

Koncepcje takie jak hierarchia organizacji, IAM i inne podstawowe pojęcia są wyjaśnione w:

AWS - Basic Information

Labs to learn

Tools to simulate attacks:

AWS Pentester/Red Team Methodology

Aby audytować środowisko AWS, bardzo ważne jest, aby wiedzieć: które usługi są używane, co jest eksponowane, kto ma dostęp do czego i jak są połączone wewnętrzne usługi AWS oraz usługi zewnętrzne.

Z punktu widzenia Red Team, pierwszym krokiem do kompromitacji środowiska AWS jest zdobycie jakichś poświadczeń. Oto kilka pomysłów, jak to zrobić:

  • Wycieki w githubie (lub podobnych) - OSINT

  • Inżynieria społeczna

  • Ponowne użycie haseł (wycieki haseł)

  • Luki w aplikacjach hostowanych na AWS

  • Server Side Request Forgery z dostępem do punktu końcowego metadanych

  • Odczyt lokalnych plików

  • /home/USERNAME/.aws/credentials

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

  • Naruszone strony trzecie

  • Wewnętrzny pracownik

  • Cognito poświadczenia

Lub poprzez kompromitację nieautoryzowanej usługi:

AWS - Unauthenticated Enum & Access

Lub jeśli robisz przegląd, możesz po prostu poprosić o poświadczenia z tymi rolami:

AWS - Permissions for a Pentest

Po zdobyciu poświadczeń musisz wiedzieć do kogo należą te poświadczenia oraz do czego mają dostęp, więc musisz przeprowadzić podstawową enumerację:

Basic Enumeration

SSRF

Jeśli znalazłeś SSRF na maszynie w AWS, sprawdź tę stronę po triki:

Whoami

Jedną z pierwszych rzeczy, które musisz wiedzieć, jest to, kim jesteś (w jakim koncie jesteś i inne informacje o środowisku 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

Zauważ, że firmy mogą używać canary tokens, aby zidentyfikować, kiedy tokeny są kradzione i używane. Zaleca się sprawdzenie, czy token jest tokenem canary, zanim go użyjesz. Aby uzyskać więcej informacji, sprawdź tę stronę.

Enumeracja organizacji

AWS - Organizations Enum

Enumeracja IAM

Jeśli masz wystarczające uprawnienia, sprawdzenie uprawnień każdej jednostki w koncie AWS pomoże Ci zrozumieć, co Ty i inne tożsamości możecie zrobić oraz jak eskalować uprawnienia.

Jeśli nie masz wystarczających uprawnień do enumeracji IAM, możesz ukraść je za pomocą brute force, aby je ustalić. Sprawdź jak przeprowadzić enumerację i brute-forcing w:

AWS - IAM, Identity Center & SSO Enum

Teraz, gdy masz pewne informacje o swoich poświadczeniach (a jeśli jesteś w red team, miejmy nadzieję, że nie zostałeś wykryty). Czas ustalić, które usługi są używane w środowisku. W następnej sekcji możesz sprawdzić kilka sposobów na enumerację niektórych powszechnych usług.

Enumeracja usług, post-eksploatacja i utrzymanie

AWS ma zdumiewającą ilość usług, na następnej stronie znajdziesz podstawowe informacje, enumerację cheatsheets**,** jak unikać wykrycia, uzyskać utrzymanie i inne sztuczki post-eksploatacyjne dotyczące niektórych z nich:

AWS - Services

Zauważ, że nie musisz wykonywać całej pracy ręcznie, poniżej w tym poście znajdziesz sekcję o automatycznych narzędziach.

Co więcej, na tym etapie możesz odkryć więcej usług wystawionych dla użytkowników nieautoryzowanych, które możesz wykorzystać:

AWS - Unauthenticated Enum & Access

Eskalacja uprawnień

Jeśli możesz sprawdzić przynajmniej swoje własne uprawnienia do różnych zasobów, możesz sprawdzić, czy możesz uzyskać dalsze uprawnienia. Powinieneś skupić się przynajmniej na uprawnieniach wskazanych w:

AWS - Privilege Escalation

Publicznie wystawione usługi

Podczas enumeracji usług AWS mogłeś znaleźć niektóre z nich wystawiające elementy do Internetu (porty VM/Kontenerów, bazy danych lub usługi kolejkowe, migawki lub koszyki...). Jako pentester/red teamer zawsze powinieneś sprawdzić, czy możesz znaleźć wrażliwe informacje / luki w nich, ponieważ mogą one zapewnić Ci dalszy dostęp do konta AWS.

W tej książce powinieneś znaleźć informacje o tym, jak znaleźć wystawione usługi AWS i jak je sprawdzić. Jeśli chodzi o to, jak znaleźć luki w wystawionych usługach sieciowych, zalecałbym szukać konkretnej usługi w:

Kompromitacja organizacji

Z konta głównego/zarządzającego

Kiedy konto zarządzające tworzy nowe konta w organizacji, w nowym koncie tworzona jest nowa rola, domyślnie nazwana OrganizationAccountAccessRole i nadająca politykę AdministratorAccess dla konta zarządzającego, aby uzyskać dostęp do nowego konta.

Aby uzyskać dostęp jako administrator do konta podrzędnego, musisz:

  • Skompromitować konto zarządzające i znaleźć ID konta podrzędnego oraz nazwy ról (domyślnie OrganizationAccountAccessRole), które pozwalają kontu zarządzającemu uzyskać dostęp jako administrator.

  • Aby znaleźć konta podrzędne, przejdź do sekcji organizacji w konsoli AWS lub uruchom aws organizations list-accounts

  • Nie możesz znaleźć nazw ról bezpośrednio, więc sprawdź wszystkie niestandardowe polityki IAM i poszukaj jakichkolwiek, które pozwalają na sts:AssumeRole nad wcześniej odkrytymi kontami podrzędnymi.

  • Skompromituj podmiot w koncie zarządzającym z uprawnieniem sts:AssumeRole nad rolą w kontach podrzędnych (nawet jeśli konto pozwala każdemu z konta zarządzającego na podszywanie się, ponieważ jest to konto zewnętrzne, konkretne uprawnienia sts:AssumeRole są konieczne).

Automatyczne narzędzia

Recon

  • aws-recon: Narzędzie do zbierania inwentarza skoncentrowane na bezpieczeństwie AWS, napisane w 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 to narzędzie wielochmurowe do pozyskiwania zasobów (nazwy hostów, adresy IP) od dostawców chmury.

  • cloudmapper: CloudMapper pomaga w analizie twoich środowisk Amazon Web Services (AWS). Teraz zawiera znacznie więcej funkcji, w tym audyt problemów z bezpieczeństwem.

# 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 to narzędzie w Pythonie, które konsoliduje zasoby infrastruktury oraz relacje między nimi w intuicyjnym widoku graficznym zasilanym przez bazę danych 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 zbiera zasoby i relacje z usług i systemów, w tym infrastruktury chmurowej, aplikacji SaaS, kontroli bezpieczeństwa i innych, w intuicyjny widok graficzny oparty na bazie danych Neo4j.

  • aws-inventory: (Używa python2) To narzędzie, które próbuje odkryć wszystkie zasoby AWS utworzone w koncie.

  • aws_public_ips: To narzędzie do pobierania wszystkich publicznych adresów IP (zarówno IPv4/IPv6) związanych z kontem AWS.

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) to skrypt i biblioteka do identyfikacji ryzyk w konfiguracji AWS Identity and Access Management (IAM) dla konta AWS lub organizacji AWS. Modeluje różne użytkowników IAM i role w koncie jako graf skierowany, co umożliwia sprawdzanie eskalacji uprawnień oraz alternatywnych ścieżek, które atakujący mógłby wykorzystać, aby uzyskać dostęp do zasobu lub akcji w AWS. Możesz sprawdzić uprawnienia używane do znajdowania ścieżek privesc w plikach kończących się na _edges.py w https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing

# 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 to narzędzie oceny bezpieczeństwa AWS IAM, które identyfikuje naruszenia zasady najmniejszych uprawnień i generuje raport HTML z priorytetem ryzyka. Pokaże ci potencjalnie nadmiernie uprzywilejowanego klienta, polityki inline i aws polityki oraz które podmioty mają do nich dostęp. (Sprawdza nie tylko privesc, ale także inne interesujące uprawnienia, zaleca się użycie).

# 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 ocenia konta AWS pod kątem wrażliwości na przejęcie subdomen w wyniku rozdzielonych konfiguracji Route53 i CloudFront.

  • ccat: Lista repozytoriów ECR -> Pobierz repozytorium ECR -> Wprowadź backdoora -> Wypchnij obraz z backdoorem

  • Dufflebag: Dufflebag to narzędzie, które przeszukuje publiczne migawki Elastic Block Storage (EBS) w poszukiwaniu sekretów, które mogły zostać przypadkowo pozostawione.

Audyt

  • cloudsploit: CloudSploit od Aqua to projekt open-source zaprojektowany w celu wykrywania ryzyk bezpieczeństwa w kontach infrastruktury chmurowej, w tym: Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP), Oracle Cloud Infrastructure (OCI) oraz GitHub (nie szuka 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 to narzędzie zabezpieczeń typu Open Source do przeprowadzania ocen najlepszych praktyk zabezpieczeń AWS, audytów, reakcji na incydenty, ciągłego monitorowania, wzmacniania i gotowości do analizy kryminalistycznej.

# 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 pomaga uzyskać świadomość sytuacyjną w nieznanych środowiskach chmurowych. To narzędzie wiersza poleceń typu open source, stworzone, aby pomóc testerom penetracyjnym i innym profesjonalistom w dziedzinie bezpieczeństwa ofensywnego znaleźć wykorzystywalne ścieżki ataku w infrastrukturze chmurowej.

cloudfox aws --profile [profile-name] all-checks
  • ScoutSuite: Scout Suite to narzędzie do audytu bezpieczeństwa w chmurze o otwartym kodzie źródłowym, które umożliwia ocenę stanu bezpieczeństwa środowisk chmurowych.

# 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 (używa python2.7 i wygląda na nieutrzymywaną)

  • Zeus: Zeus to potężne narzędzie do najlepszych praktyk zabezpieczania AWS EC2 / S3 / CloudTrail / CloudWatch / KMS (wygląda na nieutrzymywane). Sprawdza tylko domyślnie skonfigurowane poświadczenia w systemie.

Stały Audyt

  • cloud-custodian: Cloud Custodian to silnik reguł do zarządzania publicznymi kontami i zasobami w chmurze. Umożliwia użytkownikom definiowanie polityk w celu umożliwienia dobrze zarządzanej infrastruktury chmurowej, która jest zarówno bezpieczna, jak i zoptymalizowana kosztowo. Konsoliduje wiele ad-hoc skryptów, które organizacje mają, w lekkie i elastyczne narzędzie, z jednolitymi metrykami i raportowaniem.

  • pacbot: Policy as Code Bot (PacBot) to platforma do ciągłego monitorowania zgodności, raportowania zgodności i automatyzacji bezpieczeństwa dla chmury. W PacBot polityki bezpieczeństwa i zgodności są wdrażane jako kod. Wszystkie zasoby odkryte przez PacBot są oceniane pod kątem zgodności z tymi politykami. Ramy auto-fix PacBot zapewniają możliwość automatycznego reagowania na naruszenia polityki poprzez podejmowanie zdefiniowanych działań.

  • streamalert: StreamAlert to bezserwerowe, w czasie rzeczywistym ramy analizy danych, które umożliwiają przyjmowanie, analizowanie i powiadamianie o danych z dowolnego środowiska, używając źródeł danych i logiki powiadamiania, które definiujesz. Zespoły bezpieczeństwa komputerowego używają StreamAlert do skanowania terabajtów danych dzienników każdego dnia w celu wykrywania incydentów i reakcji.

DEBUG: Przechwytywanie żądań 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 ...

References

Wsparcie HackTricks

Last updated