AWS Pentesting

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Podstawowe informacje

Przed rozpoczęciem testowania penetracyjnego środowiska AWS istnieje kilka podstawowych rzeczy, które musisz wiedzieć na temat działania AWS, aby pomóc Ci zrozumieć, co musisz zrobić, jak znaleźć błędy konfiguracji i jak je wykorzystać.

Pojęcia takie jak hierarchia organizacyjna, IAM i inne podstawowe koncepcje są wyjaśnione w:

Laboratoria do nauki

Narzędzia do symulowania ataków:

Metodologia testera penetracyjnego/Red Team AWS

Aby przetestować środowisko AWS, bardzo ważne jest poznanie: jakie usługi są używane, co jest eksponowane, kto ma dostęp do czego, oraz jak są połączone wewnętrzne usługi AWS z usługami zewnętrznymi.

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

  • Wycieki w githubie (lub podobne) - OSINT

  • Inżynieria społeczna

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

  • Luki w aplikacjach hostowanych w AWS

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

  • Odczyt lokalnego pliku

  • /home/USERNAME/.aws/credentials

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

    1. strony naruszone

  • Wewnętrzny pracownik

  • Cognito poświadczenia

Lub poprzez skompromitowanie nieskanowanego serwisu wystawionego:

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

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

Podstawowa Enumeracja

SSRF

Jeśli znalazłeś SSRF na maszynie wewnątrz AWS, sprawdź tę stronę z trikami:

Whoami

Jedną z pierwszych rzeczy, które musisz wiedzieć, jest 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ć tokenów kanarkowych do identyfikacji, kiedy tokeny są kradzione i używane. Zaleca się sprawdzenie, czy token jest tokenem kanarkowym, zanim go użyjesz. Więcej informacji znajdziesz na tej stronie.

Wyliczenie Organizacji

Wyliczenie 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 wyliczenia IAM, możesz je ukraść metodą bruteforce, aby je ustalić. Sprawdź, jak wyliczyć i przeprowadzić atak bruteforce w:

Teraz, gdy masz pewne informacje o swoich poświadczeniach (i jeśli jesteś czerwoną drużyną, miejmy nadzieję, że nie zostałeś wykryty). Czas dowiedzieć się, które usługi są używane w środowisku. W następnym rozdziale możesz sprawdzić kilka sposobów na wyliczenie niektórych powszechnych usług.

Wyliczenie Usług, Po-Eksploatacja i Trwałość

AWS oferuje ogromną liczbę usług, na następnej stronie znajdziesz podstawowe informacje, ściągi do wyliczenia, jak uniknąć wykrycia, uzyskać trwałość oraz inne sztuczki po-eksploatacyjne dotyczące niektórych z nich:

Zauważ, że nie musisz wykonywać wszystkich prac ręcznie, poniżej w tym poście znajdziesz sekcję dotyczącą narzędzi automatycznych.

Ponadto, na tym etapie możesz odkryć więcej usług wystawionych na użytkowników bez uwierzytelnienia, możesz być w stanie je wykorzystać:

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:

Usługi Publicznie Wystawione

Podczas wyliczania usług AWS możesz natknąć się na niektóre z nich, które wystawiają elementy do Internetu (porty VM/Kontenerów, bazy danych lub usługi kolejek, migawki lub kubełki...). Jako pentester/czerwona drużyna zawsze powinieneś sprawdzić, czy możesz znaleźć czułe informacje / podatności na nich, ponieważ mogą one zapewnić Ci dalszy dostęp do konta AWS.

W tej książce znajdziesz informacje na temat tego, jak znaleźć usługi AWS wystawione i jak je sprawdzić. Jeśli chodzi o znalezienie podatności w wystawionych usługach sieciowych, polecam 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 kontu zarządzającego, aby uzyskać dostęp do nowego konta.

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

  • Skompromitować konto zarządzające i znaleźć ID kont dzieci oraz nazwy roli (domyślnie OrganizationAccountAccessRole), pozwalającej kontu zarządzającemu uzyskać dostęp jako administrator.

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

  • Nie można bezpośrednio znaleźć nazwy ról, więc sprawdź wszystkie niestandardowe polityki IAM i wyszukaj te, które pozwalają na sts:AssumeRole w odniesieniu do wcześniej odkrytych kont dzieci.

  • Skompromituj podmiot w koncie zarządzającym z uprawnieniami sts:AssumeRole w odniesieniu do roli w kontach dzieci (nawet jeśli konto zezwala na udawanie kogokolwiek z konta zarządzającego, konieczne są konkretne uprawnienia sts:AssumeRole).

Narzędzia Automatyzujące

Recon

  • aws-recon: Narzędzie do zbierania inwentarza zorientowane na bezpieczeństwo AWS napisane w Ruby, obsługujące wiele wątków.

# 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 analizować środowiska Amazon Web Services (AWS). Teraz zawiera znacznie więcej funkcji, w tym audytowanie problemów związanych 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 napisane w języku Python, 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 wiele więcej do intuicyjnego widoku graficznego wspieranego przez bazę danych Neo4j.

  • aws-inventory: (Używa python2) Jest to narzędzie, które próbuje odkryć wszystkie zasoby AWS utworzone w 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 służąca do identyfikowania ryzyka w konfiguracji AWS Identity and Access Management (IAM) dla konta AWS lub organizacji AWS. Modeluje różnych użytkowników IAM i role w koncie jako graf skierowany, co umożliwia sprawdzanie eskalacji uprawnień oraz alternatywnych ścieżek, jakie atakujący mógłby podjąć, aby uzyskać dostęp do zasobu lub działania w AWS. Możesz sprawdzić uprawnienia używane do znalezienia ścieżek eskalacji uprawnień w plikach zakończonych 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 potencjalnie nadmiernie uprzywilejowanych klientów, polityki inline i aws oraz które podmioty mają do nich dostęp. (Nie sprawdza tylko podniesienia uprawnień, ale także inne rodzaje interesujących uprawnień, 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 subdomeny wynikające z rozdzielonych konfiguracji Route53 i CloudFront.

  • ccat: Wylistuj repozytoria ECR -> Pobierz repozytorium ECR -> Wstaw backdoor -> Wgraj zainfekowany obraz

  • Dufflebag: Dufflebag to narzędzie, które przeszukuje publiczne migawki Elastic Block Storage (EBS) w poszukiwaniu pozostawionych przypadkowo sekretów.

Audyt

  • cloudsploit: CloudSploit stworzony przez Aquę to projekt open-source zaprojektowany do wykrywania ryzyka bezpieczeństwa 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 do oceny najlepszych praktyk bezpieczeństwa w AWS, audytów, reagowania na incydenty, ciągłego monitorowania, usztywniania i gotowości do prowadzenia śledztw.

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

cloudfox aws --profile [profile-name] all-checks
  • ScoutSuite: Scout Suite to otwarte narzędzie do audytu bezpieczeństwa wielu chmur, które umożliwia ocenę postawy 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 pythona 2.7 i wydaje się nieaktualizowany)

  • Zeus: Zeus to potężne narzędzie do wdrażania najlepszych praktyk zabezpieczeń dla AWS EC2 / S3 / CloudTrail / CloudWatch / KMS (wydaje się nieaktualizowany). Sprawdza tylko domyślnie skonfigurowane poświadczenia w systemie.

Stała audyt

  • cloud-custodian: Cloud Custodian to silnik reguł do zarządzania kontami i zasobami w chmurze publicznej. Umożliwia użytkownikom definiowanie polityk umożliwiających dobrze zarządzaną infrastrukturę chmurową, która jest zarówno bezpieczna, jak i zoptymalizowana pod względem kosztów. Konsoliduje wiele skryptów ad hoc organizacji 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 zabezpieczeń w chmurze. W PacBot, polityki bezpieczeństwa i zgodności są implementowane jako kod. Wszystkie zasoby odkryte przez PacBota są oceniane pod kątem tych polityk, aby ocenić zgodność z nimi. Ramka auto-fix PacBota umożliwia automatyczne reagowanie na naruszenia polityk poprzez podejmowanie predefiniowanych działań.

  • streamalert: StreamAlert to bezserwerowa, analiza danych w czasie rzeczywistym, która umożliwia przyjmowanie, analizowanie i alarmowanie na danych z dowolnego środowiska, korzystając z źródeł danych i logiki alarmowania, które definiujesz. Zespoły bezpieczeństwa komputerowego używają StreamAlert do przeszukiwania terabajtów danych dziennika codziennie w poszukiwaniu 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 ...

Odnośniki

Zacznij od zera i zostań ekspertem AWS Red Team dzięki htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Last updated