# Pentesting Cloud Methodology

{{#include ../banners/hacktricks-training.md}}

<figure><img src="../images/CLOUD-logo-letters.svg" alt=""><figcaption></figcaption></figure>

## 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 testove 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, morate **otkriti 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 **usluge u cloudu 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 drugom platformom, trebate obavestiti **ko ima pristup da (zloupotrebi) tu integraciju** 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 obrađuje te podatke).
- Za **integracije unutar clouda koji audirate** sa eksternih platformi, trebate pitati **ko ima eksterni pristup da (zloupotrebi) tu integraciju** i proveriti kako se ti podaci koriste.\
Na primer, ako usluga koristi Docker sliku hostovanu u GCR-u, 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 će biti navedeni u ovoj sekciji.

### [PurplePanda](https://github.com/carlospolop/purplepanda)

Alat za **identifikaciju loših konfiguracija i puteva za eskalaciju privilegija u cloud-ovima i između cloud/SaaS.**

{{#tabs }}
{{#tab name="Install" }}
```bash
# 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" }}
```bash
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](https://github.com/prowler-cloud/prowler)

Podržava **AWS, GCP i Azure**. Proverite kako da konfigurišete svakog provajdera na [https://docs.prowler.cloud/en/latest/#aws](https://docs.prowler.cloud/en/latest/#aws)
```bash
# 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](https://github.com/aquasecurity/cloudsploit)

AWS, Azure, Github, Google, Oracle, Alibaba

{{#tabs }}
{{#tab name="Install" }}
```bash
# Install
git clone https://github.com/aquasecurity/cloudsploit.git
cd cloudsploit
npm install
./index.js -h
## Docker instructions in github
```
{{#endtab }}

{{#tab name="GCP" }}
```bash
## 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](https://github.com/nccgroup/ScoutSuite)

AWS, Azure, GCP, Alibaba Cloud, Oracle Cloud Infrastructure

{{#tabs }}
{{#tab name="Instalacija" }}
```bash
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" }}
```bash
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](https://github.com/turbot)

{{#tabs }}
{{#tab name="Install" }}
Preuzmite i instalirajte Steampipe ([https://steampipe.io/downloads](https://steampipe.io/downloads)). Ili koristite Brew:
```
brew tap turbot/tap
brew install steampipe
```
{{#endtab }}

{{#tab name="GCP" }}
```bash
# 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
```
<details>

<summary>Proveri sve projekte</summary>

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.
```bash
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"
```
</details>

Da biste proverili **druge GCP uvide** (korisno za enumeraciju usluga) koristite: [https://github.com/turbot/steampipe-mod-gcp-insights](https://github.com/turbot/steampipe-mod-gcp-insights)

Da biste proverili Terraform GCP kod: [https://github.com/turbot/steampipe-mod-terraform-gcp-compliance](https://github.com/turbot/steampipe-mod-terraform-gcp-compliance)

Više GCP dodataka za Steampipe: [https://github.com/turbot?q=gcp](https://github.com/turbot?q=gcp)
{{#endtab }}

{{#tab name="AWS" }}
```bash
# 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](https://github.com/turbot/steampipe-mod-terraform-aws-compliance)

Više AWS dodataka za Steampipe: [https://github.com/orgs/turbot/repositories?q=aws](https://github.com/orgs/turbot/repositories?q=aws)
{{#endtab }}
{{#endtabs }}

### [~~cs-suite~~](https://github.com/SecurityFTW/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**](https://github.com/projectdiscovery/cloudlist)

Cloudlist je **multi-cloud alat za dobijanje resursa** (Hostnames, IP adrese) od Cloud provajdera.

{{#tabs }}
{{#tab name="Cloudlist" }}
```bash
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="Second Tab" }}
```bash
## For GCP it requires service account JSON credentials
cloudlist -config </path/to/config>
```
{{#endtab }}
{{#endtabs }}

### [**cartography**](https://github.com/lyft/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" }}
```bash
# 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" }}
```bash
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**](https://github.com/JupiterOne/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" }}
```bash
# 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" }}
```yaml
## 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**](https://github.com/cyberark/SkyArk)

Otkrivanje najprivilegovanijih korisnika u skeniranom AWS ili Azure okruženju, uključujući AWS Shadow Admins. Koristi powershell.
```bash
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](https://github.com/0xsha/CloudBrute)

Alat za pronalaženje infrastrukture, fajlova i aplikacija kompanije (meta) na vodećim cloud provajderima (Amazon, Google, Microsoft, DigitalOcean, Alibaba, Vultr, Linode).

### [CloudFox](https://github.com/BishopFox/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 modifikuje bilo kakve podatke unutar cloud okruženja.

### Više lista alata za cloud bezbednost

- [https://github.com/RyanJarv/awesome-cloud-sec](https://github.com/RyanJarv/awesome-cloud-sec)

## Google

### GCP

{{#ref}}
gcp-security/
{{#endref}}

### Workspace

{{#ref}}
workspace-security/
{{#endref}}

## AWS

{{#ref}}
aws-security/
{{#endref}}

## Azure

{{#ref}}
azure-security/
{{#endref}}

### Attack Graph

[**Stormspotter** ](https://github.com/Azure/Stormspotter) kreira “graf napada” resursa u Azure pretplati. Omogućava red timovima i pentesterima da vizualizuju površinu napada i mogućnosti pivotiranja unutar tenanta, i pojačava vaše odbrambene timove da brzo orijentišu i prioritizuju rad na incidentima.

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