AWS Pentesting

Wspieraj HackTricks

Podstawowe Informacje

Zanim zaczniesz pentesting środowiska AWS, musisz znać kilka podstawowych rzeczy o tym, jak działa AWS, aby 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

Laboratoria do nauki

Narzędzia do symulacji ataków:

Metodologia AWS Pentester/Red Team

Aby przeprowadzić audyt środowiska 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 uzyskanie poświadczeń. Oto kilka pomysłów, jak to zrobić:

  • Leaks w github (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 endpointu metadata

  • Lokalne odczytywanie plików

  • /home/USERNAME/.aws/credentials

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

  • Naruszenia stron trzecich

  • Wewnętrzny pracownik

  • Cognito poświadczenia

Lub przez kompromitację niezautoryzowanej usługi eksponowanej:

AWS - Unauthenticated Enum & Access

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

AWS - Permissions for a Pentest

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

Podstawowa Enumeracja

SSRF

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

Whoami

Jedną z pierwszych rzeczy, które musisz wiedzieć, jest to, kim jesteś (w jakim koncie się znajdujesz 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

Zwróć uwagę, że firmy mogą używać canary tokens do identyfikacji, kiedy tokeny są kradzione i używane. Zaleca się sprawdzenie, czy token jest canary tokenem, zanim go użyjesz. Więcej informacji znajdziesz na tej stronie.

Org Enumeration

AWS - Organizations Enum

IAM Enumeration

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 mogą robić i jak eskalować uprawnienia.

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

AWS - IAM, Identity Center & SSO Enum

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

Services Enumeration, Post-Exploitation & Persistence

AWS ma zdumiewającą ilość usług, na poniższej stronie znajdziesz podstawowe informacje, enumerację cheatsheets**,** jak uniknąć wykrycia, uzyskać trwałość i inne post-exploitation triki dotyczące niektórych z nich:

AWS - Services

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

Ponadto, na tym etapie możesz odkryć więcej usług dostępnych dla nieautoryzowanych użytkowników, które możesz być w stanie wykorzystać:

AWS - Unauthenticated Enum & Access

Privilege Escalation

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

AWS - Privilege Escalation

Publicly Exposed Services

Podczas enumeracji usług AWS możesz znaleźć niektóre z nich udostępniające elementy do Internetu (porty VM/Kontenerów, bazy danych lub usługi kolejkowania, snapshoty lub bucket...). 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 znajdziesz informacje o tym, jak znaleźć udostępnione usługi AWS i jak je sprawdzić. Aby znaleźć luki w udostępnionych usługach sieciowych, polecam wyszukać konkretną usługę w:

Compromising the Organization

From the root/management account

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

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

  • Przejąć konto zarządzające i znaleźć ID kont podrzędnych oraz nazwy ról (domyślnie OrganizationAccountAccessRole), które pozwalają kontu zarządzającemu na 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 bezpośrednio znaleźć nazw ról, więc sprawdź wszystkie niestandardowe polityki IAM i wyszukaj jakiekolwiek pozwalające na sts:AssumeRole nad wcześniej odkrytymi kontami podrzędnymi.

  • Przejąć 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 impersonację, jako że jest to konto zewnętrzne, specyficzne uprawnienia sts:AssumeRole są konieczne).

Automated Tools

Recon

  • aws-recon: Wielowątkowe 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 multi-cloud do pozyskiwania zasobów (nazwy hostów, adresy IP) od dostawców chmury.

  • cloudmapper: CloudMapper pomaga analizować środowiska Amazon Web Services (AWS). Obecnie zawiera znacznie więcej funkcji, w tym audytowanie pod kątem 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 Python, które konsoliduje zasoby infrastruktury i relacje między nimi w intuicyjnym widoku grafu 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 cloud, aplikacji SaaS, kontroli bezpieczeństwa i innych, w intuicyjnym widoku grafu wspieranym przez bazę danych Neo4j.

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

  • aws_public_ips: Jest to narzędzie do pobierania wszystkich publicznych adresów IP (zarówno IPv4/IPv6) powią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óżnych IAM Users i Roles w koncie jako graf skierowany, co umożliwia sprawdzenie 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 znalezienia ś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 do oceny bezpieczeństwa AWS IAM, które identyfikuje naruszenia zasady najmniejszych uprawnień i generuje raport HTML z priorytetami ryzyka. Pokaże potencjalnie nadmiernie uprzywilejowanych klientów, wbudowane i aws policies oraz które principals mają do nich dostęp. (Nie tylko sprawdza privesc, ale także inne interesujące uprawnienia, zalecane do użycia).

# 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 podatności na przejęcie subdomen w wyniku rozdzielonych konfiguracji Route53 i CloudFront.

  • ccat: List ECR repos -> Pull ECR repo -> Backdoor it -> Push backdoored image

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

Audit

  • cloudsploit: CloudSploit by Aqua to projekt open-source zaprojektowany do wykrywania ryzyk związanych z bezpieczeństwem w kontach infrastruktury chmurowej, w tym: Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP), Oracle Cloud Infrastructure (OCI) i 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 Open Source do przeprowadzania ocen najlepszych praktyk bezpieczeństwa AWS, audytów, reagowania na incydenty, ciągłego monitorowania, utwardzania 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. Jest to narzędzie wiersza poleceń open source stworzone, aby pomóc testerom penetracyjnym i innym specjalistom ds. bezpieczeństwa ofensywnego znaleźć podatne ścieżki ataku w infrastrukturze chmurowej.

cloudfox aws --profile [profile-name] all-checks
  • ScoutSuite: Scout Suite to open source'owe narzędzie do audytu bezpieczeństwa multi-cloud, 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 nieutrzymywane)

  • Zeus: Zeus to potężne narzędzie do AWS EC2 / S3 / CloudTrail / CloudWatch / KMS najlepszych praktyk utwardzania (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 kontami i zasobami w publicznej chmurze. Pozwala użytkownikom definiować polityki umożliwiające dobrze zarządzaną infrastrukturę chmurową, która jest zarówno bezpieczna, jak i zoptymalizowana kosztowo. Konsoliduje wiele ad-hoc skryptów organizacji w lekkie i elastyczne narzędzie, z ujednoliconymi 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 w chmurze. W PacBot polityki bezpieczeństwa i zgodności są implementowane jako kod. Wszystkie zasoby odkryte przez PacBot są oceniane pod kątem zgodności z tymi politykami. Ramy auto-fix PacBot umożliwiają automatyczne reagowanie 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 alarmowanie na podstawie danych z dowolnego środowiska, używając zdefiniowanych źródeł danych i logiki alarmowania. Zespoły ds. bezpieczeństwa komputerowego używają StreamAlert do skanowania terabajtów danych logów każdego dnia w celu wykrywania i reagowania na incydenty.

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

Referencje

Wspieraj HackTricks

Last updated