15 KiB
Pentesting Cloud Methodology
{{#include ../banners/hacktricks-training.md}}
Basic Methodology
Svaka cloud platforma ima svoje specifičnosti, ali generalno postoji nekoliko zajedničkih stvari koje pentester treba da proveri prilikom testiranja cloud okruženja:
- Provere standarda
- Ovo će vam pomoći da razumete veličinu okruženja i usluge koje se koriste
- Takođe će vam omogućiti da pronađete neke brze greške u konfiguraciji jer većinu ovih testova možete izvršiti pomoću automatskih alata
- Enumeracija usluga
- Verovatno nećete pronaći mnogo više grešaka u konfiguraciji ovde ako ste pravilno izvršili provere standarda, ali mogli biste pronaći neke koje nisu bile tražene u testu standarda.
- Ovo će vam omogućiti da znate šta se tačno koristi u cloud okruženju
- Ovo će mnogo pomoći u sledećim koracima
- Proverite izložene resurse
- Ovo se može uraditi tokom prethodne sekcije, potrebno je da otkrijete sve što je potencijalno izloženo internetu i kako se može pristupiti.
- Ovde mislim na ručno izloženu infrastrukturu kao što su instance sa web stranicama ili drugi portovi koji su izloženi, kao i na druge cloud upravljane usluge koje se mogu konfigurisati da budu izložene (kao što su DB-ovi ili bucket-i)
- Zatim treba da proverite da li taj resurs može biti izložen ili ne (povjerljive informacije? ranjivosti? greške u konfiguraciji izložene usluge?)
- Proverite dozvole
- Ovde treba da otkrijete sve dozvole svake uloge/korisnika unutar clouda i kako se koriste
- Previše visoko privilegovanih (kontrolišu sve) naloga? Generisani ključevi koji se ne koriste?... Većina ovih provera bi već trebala biti izvršena u testovima standarda
- Ako klijent koristi OpenID ili SAML ili neku drugu federaciju, možda ćete morati da ih pitate za dodatne informacije o tome kako se dodeljuju svake uloge (nije isto da je admin uloga dodeljena 1 korisniku ili 100)
- Nije dovoljno pronaći koji korisnici imaju admin dozvole "*:*". Postoji mnogo drugih dozvola koje, u zavisnosti od korišćenih usluga, mogu biti veoma osetljive.
- Štaviše, postoje potencijalni putevi za eskalaciju privilegija koji se mogu iskoristiti zloupotrebom dozvola. Sve ove stvari treba uzeti u obzir i prijaviti što više puteva za eskalaciju privilegija.
- Proverite integracije
- Veoma je verovatno da se integracije sa drugim cloud-ovima ili SaaS koriste unutar cloud okruženja.
- Za integracije clouda koji audirate sa drugim platformama, trebate obavestiti ko ima pristup (zloupotrebu) toj integraciji i trebate pitati kako je osetljiva akcija koja se izvršava.
Na primer, ko može da piše u AWS bucket gde GCP dobija podatke (pitajte koliko je osetljiva akcija u GCP-u koja se bavi tim podacima). - Za integracije unutar clouda koji audirate sa eksternih platformi, trebate pitati ko ima eksterni pristup (zloupotrebu) toj integraciji i proveriti kako se ti podaci koriste.
Na primer, ako usluga koristi Docker sliku hostovanu u GCR, trebate pitati ko ima pristup da to izmeni i koje osetljive informacije i pristup će ta slika dobiti kada se izvrši unutar AWS clouda.
Multi-Cloud tools
Postoji nekoliko alata koji se mogu koristiti za testiranje različitih cloud okruženja. Koraci instalacije i linkovi biće navedeni u ovoj sekciji.
PurplePanda
Alat za identifikaciju loših konfiguracija i puteva za eskalaciju privilegija u cloud-ovima i između cloud/SaaS.
{{#tabs }} {{#tab name="Install" }}
# You need to install and run neo4j also
git clone https://github.com/carlospolop/PurplePanda
cd PurplePanda
python3 -m venv .
source bin/activate
python3 -m pip install -r requirements.txt
export PURPLEPANDA_NEO4J_URL="bolt://neo4j@localhost:7687"
export PURPLEPANDA_PWD="neo4j_pwd_4_purplepanda"
python3 main.py -h # Get help
{{#endtab }}
{{#tab name="GCP" }}
export GOOGLE_DISCOVERY=$(echo 'google:
- file_path: ""
- file_path: ""
service_account_id: "some-sa-email@sidentifier.iam.gserviceaccount.com"' | base64)
python3 main.py -a -p google #Get basic info of the account to check it's correctly configured
python3 main.py -e -p google #Enumerate the env
{{#endtab }} {{#endtabs }}
Prowler
Podržava AWS, GCP i Azure. Proverite kako da konfigurišete svakog provajdera na https://docs.prowler.cloud/en/latest/#aws
# Install
pip install prowler
prowler -v
# Run
prowler <provider>
# Example
prowler aws --profile custom-profile [-M csv json json-asff html]
# Get info about checks & services
prowler <provider> --list-checks
prowler <provider> --list-services
CloudSploit
AWS, Azure, Github, Google, Oracle, Alibaba
{{#tabs }} {{#tab name="Instalacija" }}
# Install
git clone https://github.com/aquasecurity/cloudsploit.git
cd cloudsploit
npm install
./index.js -h
## Docker instructions in github
{{#endtab }}
{{#tab name="GCP" }}
## You need to have creds for a service account and set them in config.js file
./index.js --cloud google --config </abs/path/to/config.js>
{{#endtab }} {{#endtabs }}
ScoutSuite
AWS, Azure, GCP, Alibaba Cloud, Oracle Cloud Infrastructure
{{#tabs }} {{#tab name="Instalacija" }}
mkdir scout; cd scout
virtualenv -p python3 venv
source venv/bin/activate
pip install scoutsuite
scout --help
## Using Docker: https://github.com/nccgroup/ScoutSuite/wiki/Docker-Image
{{#endtab }}
{{#tab name="GCP" }}
scout gcp --report-dir /tmp/gcp --user-account --all-projects
## use "--service-account KEY_FILE" instead of "--user-account" to use a service account
SCOUT_FOLDER_REPORT="/tmp"
for pid in $(gcloud projects list --format="value(projectId)"); do
echo "================================================"
echo "Checking $pid"
mkdir "$SCOUT_FOLDER_REPORT/$pid"
scout gcp --report-dir "$SCOUT_FOLDER_REPORT/$pid" --no-browser --user-account --project-id "$pid"
done
{{#endtab }} {{#endtabs }}
Steampipe
{{#tabs }} {{#tab name="Install" }} Preuzmite i instalirajte Steampipe (https://steampipe.io/downloads). Ili koristite Brew:
brew tap turbot/tap
brew install steampipe
{{#endtab }}
{{#tab name="GCP" }}
# Install gcp plugin
steampipe plugin install gcp
# Use https://github.com/turbot/steampipe-mod-gcp-compliance.git
git clone https://github.com/turbot/steampipe-mod-gcp-compliance.git
cd steampipe-mod-gcp-compliance
# To run all the checks from the dashboard
steampipe dashboard
# To run all the checks from rhe cli
steampipe check all
Proveri sve projekte
Da biste proverili sve projekte, potrebno je da generišete gcp.spc datoteku koja označava sve projekte koje treba testirati. Možete jednostavno pratiti uputstva iz sledećeg skripta.
FILEPATH="/tmp/gcp.spc"
rm -rf "$FILEPATH" 2>/dev/null
# Generate a json like object for each project
for pid in $(gcloud projects list --format="value(projectId)"); do
echo "connection \"gcp_$(echo -n $pid | tr "-" "_" )\" {
plugin = \"gcp\"
project = \"$pid\"
}" >> "$FILEPATH"
done
# Generate the aggragator to call
echo 'connection "gcp_all" {
plugin = "gcp"
type = "aggregator"
connections = ["gcp_*"]
}' >> "$FILEPATH"
echo "Copy $FILEPATH in ~/.steampipe/config/gcp.spc if it was correctly generated"
Da biste proverili druge GCP uvide (korisno za enumeraciju usluga) koristite: https://github.com/turbot/steampipe-mod-gcp-insights
Da biste proverili Terraform GCP kod: https://github.com/turbot/steampipe-mod-terraform-gcp-compliance
Više GCP dodataka za Steampipe: https://github.com/turbot?q=gcp {{#endtab }}
{{#tab name="AWS" }}
# Install aws plugin
steampipe plugin install aws
# Modify the spec indicating in "profile" the profile name to use
nano ~/.steampipe/config/aws.spc
# Get some info on how the AWS account is being used
git clone https://github.com/turbot/steampipe-mod-aws-insights.git
cd steampipe-mod-aws-insights
steampipe dashboard
# Get the services exposed to the internet
git clone https://github.com/turbot/steampipe-mod-aws-perimeter.git
cd steampipe-mod-aws-perimeter
steampipe dashboard
# Run the benchmarks
git clone https://github.com/turbot/steampipe-mod-aws-compliance
cd steampipe-mod-aws-compliance
steampipe dashboard # To see results in browser
steampipe check all --export=/tmp/output4.json
Da biste proverili Terraform AWS kod: https://github.com/turbot/steampipe-mod-terraform-aws-compliance
Više AWS dodataka za Steampipe: https://github.com/orgs/turbot/repositories?q=aws {{#endtab }} {{#endtabs }}
cs-suite
AWS, GCP, Azure, DigitalOcean.
Zahteva python2.7 i izgleda da nije održavan.
Nessus
Nessus ima Audit Cloud Infrastructure skeniranje koje podržava: AWS, Azure, Office 365, Rackspace, Salesforce. Neka dodatna podešavanja u Azure su potrebna da bi se dobio Client Id.
cloudlist
Cloudlist je multi-cloud alat za dobijanje resursa (Hostname, IP adrese) od Cloud provajdera.
{{#tabs }} {{#tab name="Cloudlist" }}
cd /tmp
wget https://github.com/projectdiscovery/cloudlist/releases/latest/download/cloudlist_1.0.1_macOS_arm64.zip
unzip cloudlist_1.0.1_macOS_arm64.zip
chmod +x cloudlist
sudo mv cloudlist /usr/local/bin
{{#endtab }}
{{#tab name="Drugi Tab" }}
## For GCP it requires service account JSON credentials
cloudlist -config </path/to/config>
{{#endtab }} {{#endtabs }}
cartography
Cartography je Python alat koji konsoliduje infrastrukturne resurse i odnose između njih u intuitivnom grafičkom prikazu koji pokreće Neo4j baza podataka.
{{#tabs }} {{#tab name="Install" }}
# Installation
docker image pull ghcr.io/lyft/cartography
docker run --platform linux/amd64 ghcr.io/lyft/cartography cartography --help
## Install a Neo4j DB version 3.5.*
{{#endtab }}
{{#tab name="GCP" }}
docker run --platform linux/amd64 \
--volume "$HOME/.config/gcloud/application_default_credentials.json:/application_default_credentials.json" \
-e GOOGLE_APPLICATION_CREDENTIALS="/application_default_credentials.json" \
-e NEO4j_PASSWORD="s3cr3t" \
ghcr.io/lyft/cartography \
--neo4j-uri bolt://host.docker.internal:7687 \
--neo4j-password-env-var NEO4j_PASSWORD \
--neo4j-user neo4j
# It only checks for a few services inside GCP (https://lyft.github.io/cartography/modules/gcp/index.html)
## Cloud Resource Manager
## Compute
## DNS
## Storage
## Google Kubernetes Engine
### If you can run starbase or purplepanda you will get more info
{{#endtab }} {{#endtabs }}
starbase
Starbase prikuplja resurse i odnose iz usluga i sistema uključujući cloud infrastrukturu, SaaS aplikacije, bezbednosne kontrole i još mnogo toga u intuitivnom grafičkom prikazu podržanom Neo4j bazom podataka.
{{#tabs }} {{#tab name="Install" }}
# You are going to need Node version 14, so install nvm following https://tecadmin.net/install-nvm-macos-with-homebrew/
npm install --global yarn
nvm install 14
git clone https://github.com/JupiterOne/starbase.git
cd starbase
nvm use 14
yarn install
yarn starbase --help
# Configure manually config.yaml depending on the env to analyze
yarn starbase setup
yarn starbase run
# Docker
git clone https://github.com/JupiterOne/starbase.git
cd starbase
cp config.yaml.example config.yaml
# Configure manually config.yaml depending on the env to analyze
docker build --no-cache -t starbase:latest .
docker-compose run starbase setup
docker-compose run starbase run
{{#endtab }}
{{#tab name="GCP" }}
## Config for GCP
### Check out: https://github.com/JupiterOne/graph-google-cloud/blob/main/docs/development.md
### It requires service account credentials
integrations:
- name: graph-google-cloud
instanceId: testInstanceId
directory: ./.integrations/graph-google-cloud
gitRemoteUrl: https://github.com/JupiterOne/graph-google-cloud.git
config:
SERVICE_ACCOUNT_KEY_FILE: "{Check https://github.com/JupiterOne/graph-google-cloud/blob/main/docs/development.md#service_account_key_file-string}"
PROJECT_ID: ""
FOLDER_ID: ""
ORGANIZATION_ID: ""
CONFIGURE_ORGANIZATION_PROJECTS: false
storage:
engine: neo4j
config:
username: neo4j
password: s3cr3t
uri: bolt://localhost:7687
#Consider using host.docker.internal if from docker
{{#endtab }} {{#endtabs }}
SkyArk
Otkrivanje najprivilegovanijih korisnika u skeniranoj AWS ili Azure sredini, uključujući AWS Shadow Admins. Koristi powershell.
Import-Module .\SkyArk.ps1 -force
Start-AzureStealth
# in the Cloud Console
IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/cyberark/SkyArk/master/AzureStealth/AzureStealth.ps1')
Scan-AzureAdmins
Cloud Brute
Alat za pronalaženje infrastrukture, fajlova i aplikacija kompanije (meta) na vodećim cloud provajderima (Amazon, Google, Microsoft, DigitalOcean, Alibaba, Vultr, Linode).
CloudFox
- CloudFox je alat za pronalaženje iskoristivih puteva napada u cloud infrastrukturi (trenutno podržani samo AWS i Azure, GCP dolazi uskoro).
- To je alat za enumeraciju koji je namenjen da dopuni manuelni pentesting.
- Ne kreira niti menja bilo kakve podatke unutar cloud okruženja.
Više lista alata za cloud bezbednost
GCP
{{#ref}} gcp-security/ {{#endref}}
Workspace
{{#ref}} workspace-security/ {{#endref}}
AWS
{{#ref}} aws-security/ {{#endref}}
Azure
{{#ref}} azure-security/ {{#endref}}
Attack Graph
Stormspotter kreira “graf napada” resursa u Azure pretplati. Omogućava red timovima i pentesterima da vizualizuju površinu napada i mogućnosti prebacivanja unutar zakupca, i pojačava vaše branioca da brzo orijentišu i prioritizuju rad na odgovoru na incidente.
Office365
Potrebni su vam Global Admin ili barem Global Admin Reader (ali imajte na umu da je Global Admin Reader malo ograničen). Međutim, ta ograničenja se pojavljuju u nekim PS modulima i mogu se zaobići pristupanjem funkcijama putem web aplikacije.
{{#include ../banners/hacktricks-training.md}}