# Pentesting Cloud Methodology
{{#include ../banners/hacktricks-training.md}}
## Basic Methodology
Elke wolk het sy eie eienaardighede, maar oor die algemeen is daar 'n paar **gemeenskaplike dinge wat 'n pentester moet nagaan** wanneer 'n wolkomgewing getoets word:
- **Benchmark kontroles**
- Dit sal jou help om **die grootte** van die omgewing en **dienste wat gebruik word** te **begryp**.
- Dit sal jou ook toelaat om 'n paar **vinnige miskonfigurasies** te vind, aangesien jy die meeste van hierdie toetse met **geoutomatiseerde gereedskap** kan uitvoer.
- **Dienste Enumerasie**
- Jy sal waarskynlik nie veel meer miskonfigurasies hier vind as jy die benchmark toetse korrek uitgevoer het nie, maar jy mag dalk sommige vind wat nie in die benchmark toets gesoek is nie.
- Dit sal jou toelaat om te weet **wat presies gebruik word** in die wolkomgewing.
- Dit sal baie help in die volgende stappe.
- **Kontroleer blootgestelde bates**
- Dit kan gedoen word tydens die vorige afdeling, jy moet **uitvind alles wat potensieel blootgestel is** aan die Internet op een of ander manier en hoe dit toegang kan verkry.
- Hier neem ek **handmatig blootgestelde infrastruktuur** soos instansies met webbladsye of ander poorte wat blootgestel word, en ook oor ander **wolkkontroleerde dienste wat geconfigureer kan word** om blootgestel te word (soos DB's of emmers).
- Dan moet jy nagaan **of daardie hulpbron blootgestel kan word of nie** (vertroulike inligting? kwesbaarhede? miskonfigurasies in die blootgestelde diens?).
- **Kontroleer toestemmings**
- Hier moet jy **alle toestemmings van elke rol/gebruiker** binne die wolk uitvind en hoe dit gebruik word.
- Te **veel hoogs bevoorregte** (beheer alles) rekeninge? Gekreëerde sleutels wat nie gebruik word?... Die meeste van hierdie kontroles moes reeds in die benchmark toetse gedoen gewees het.
- As die kliënt OpenID of SAML of ander **federasie** gebruik, mag jy hulle moet vra vir verdere **inligting** oor **hoe elke rol toegeken word** (dit is nie dieselfde as om die admin rol aan 1 gebruiker of aan 100 toe te ken nie).
- Dit is **nie genoeg om te vind** watter gebruikers **admin** toestemmings het "\*:\*". Daar is baie **ander toestemmings** wat, afhangende van die dienste wat gebruik word, baie **sensitief** kan wees.
- Boonop is daar **potensiële privesc** maniere om te volg deur toestemmings te misbruik. Al hierdie dinge moet in ag geneem word en **so veel privesc paaie as moontlik** moet gerapporteer word.
- **Kontroleer Integrasies**
- Dit is hoogs waarskynlik dat **integrasies met ander wolke of SaaS** binne die wolkomgewing gebruik word.
- Vir **integrasies van die wolk wat jy oudit** met ander platforms moet jy **ken wie toegang het tot (mis)bruik daardie integrasie** en jy moet vra **hoe sensitief** die aksie wat uitgevoer word is.\
Byvoorbeeld, wie kan skryf in 'n AWS-emmer waar GCP data van ontvang (vra hoe sensitief die aksie in GCP is wat daardie data hanteer).
- Vir **integrasies binne die wolk wat jy oudit** van eksterne platforms, moet jy vra **wie toegang het van buite om (mis)bruik te maak van daardie integrasie** en nagaan hoe daardie data gebruik word.\
Byvoorbeeld, as 'n diens 'n Docker-beeld gebruik wat in GCR gehos is, moet jy vra wie toegang het om dit te wysig en watter sensitiewe inligting en toegang daardie beeld sal kry wanneer dit binne 'n AWS-wolk uitgevoer word.
## Multi-Cloud tools
Daar is verskeie gereedskap wat gebruik kan word om verskillende wolkomgewings te toets. Die installasietappe en skakels sal in hierdie afdeling aangedui word.
### [PurplePanda](https://github.com/carlospolop/purplepanda)
'n Gereedskap om **slegte konfigurasies en privesc paaie in wolke en oor wolke/SaaS te identifiseer.**
{{#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)
Dit ondersteun **AWS, GCP & Azure**. Kyk hoe om elke verskaffer te konfigureer in [https://docs.prowler.cloud/en/latest/#aws](https://docs.prowler.cloud/en/latest/#aws)
```bash
# Install
pip install prowler
prowler -v
# Run
prowler
# Example
prowler aws --profile custom-profile [-M csv json json-asff html]
# Get info about checks & services
prowler --list-checks
prowler --list-services
```
### [CloudSploit](https://github.com/aquasecurity/cloudsploit)
AWS, Azure, Github, Google, Oracle, Alibaba
{{#tabs }}
{{#tab name="Installeer" }}
```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
```
{{#endtab }}
{{#endtabs }}
### [ScoutSuite](https://github.com/nccgroup/ScoutSuite)
AWS, Azure, GCP, Alibaba Cloud, Oracle Cloud Infrastructure
{{#tabs }}
{{#tab name="Installeer" }}
```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="Installeer" }}
Laai Steampipe af en installeer dit ([https://steampipe.io/downloads](https://steampipe.io/downloads)). Of gebruik 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
```
Kontroleer alle Projekte
Om al die projekte te kontroleer, moet jy die `gcp.spc` lêer genereer wat al die projekte aandui wat getoets moet word. Jy kan net die aanduidings van die volgende skrif volg.
```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"
```
Om **ander GCP insigte** te kontroleer (nuttig vir die opspoor van dienste) gebruik: [https://github.com/turbot/steampipe-mod-gcp-insights](https://github.com/turbot/steampipe-mod-gcp-insights)
Om Terraform GCP kode te kontroleer: [https://github.com/turbot/steampipe-mod-terraform-gcp-compliance](https://github.com/turbot/steampipe-mod-terraform-gcp-compliance)
Meer GCP plugins van 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
```
Om Terraform AWS kode te kontroleer: [https://github.com/turbot/steampipe-mod-terraform-aws-compliance](https://github.com/turbot/steampipe-mod-terraform-aws-compliance)
Meer AWS-inproppe van 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.\
Dit vereis python2.7 en lyk ononderhou.
### Nessus
Nessus het 'n _**Audit Cloud Infrastructure**_ skandering wat ondersteun: AWS, Azure, Office 365, Rackspace, Salesforce. Sommige ekstra konfigurasies in **Azure** is nodig om 'n **Client Id** te verkry.
### [**cloudlist**](https://github.com/projectdiscovery/cloudlist)
Cloudlist is 'n **multi-cloud hulpmiddel om Bate** (Gasname, IP Adresse) van Cloud Verskaffers te verkry.
{{#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
```
{{#endtab }}
{{#endtabs }}
### [**cartography**](https://github.com/lyft/cartography)
Cartography is 'n Python-gereedskap wat infrastruktuur bates en die verhoudings tussen hulle in 'n intuïtiewe grafiekweergave saamvoeg, aangedryf deur 'n Neo4j-databasis.
{{#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 versamel bates en verhoudings van dienste en stelsels, insluitend wolkinfrastruktuur, SaaS-toepassings, sekuriteitsbeheer, en meer in 'n intuïtiewe grafiekweergave wat deur die Neo4j-databasis ondersteun word.
{{#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)
Ontdek die mees bevoorregte gebruikers in die gescande AWS of Azure omgewing, insluitend die AWS Shadow Admins. Dit gebruik 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)
'n Gereedskap om 'n maatskappy (teiken) infrastruktuur, lêers en toepassings op die top wolkverskaffers (Amazon, Google, Microsoft, DigitalOcean, Alibaba, Vultr, Linode) te vind.
### [CloudFox](https://github.com/BishopFox/cloudfox)
- CloudFox is 'n gereedskap om uitbuitbare aanvalspaaie in wolkinfrastruktuur te vind (huidiglik slegs AWS & Azure ondersteun met GCP wat kom).
- Dit is 'n enumerasie-gereedskap wat bedoel is om handmatige pentesting aan te vul.
- Dit skep of wysig nie enige data binne die wolkomgewing nie.
### Meer lyste van wolk sekuriteitsgereedskap
- [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}}
### Aanval Grafiek
[**Stormspotter** ](https://github.com/Azure/Stormspotter) skep 'n “aanval grafiek” van die hulpbronne in 'n Azure intekening. Dit stel rooi span en pentesters in staat om die aanvaloppervlak en draaipunte binne 'n huurder te visualiseer, en versterk jou verdedigers om vinnig te oriënteer en prioriteit te gee aan insidentresponswerk.
### Office365
Jy het **Global Admin** of ten minste **Global Admin Reader** nodig (maar let daarop dat Global Admin Reader 'n bietjie beperk is). Hierdie beperkings verskyn egter in sommige PS-modules en kan omseil word deur toegang te verkry tot die funksies **via die webtoepassing**.
{{#include ../banners/hacktricks-training.md}}