# Pentesting Cloud Methodology
{{#include ../banners/hacktricks-training.md}}
## Basic Methodology
Cada cloud tiene sus propias peculiaridades, pero en general hay algunas **cosas comunes que un pentester debería comprobar** al probar un entorno cloud:
- **Benchmark checks**
- Esto te ayudará a **entender el tamaño** del entorno y los **servicios usados**
- También te permitirá encontrar algunas **quick misconfigurations** ya que puedes realizar la mayoría de estas pruebas con **automated tools**
- **Services Enumeration**
- Probablemente no encuentres muchas más misconfigurations aquí si realizaste correctamente las pruebas de benchmark, pero podrías encontrar algunas que no se estaban buscando en la prueba de benchmark.
- Esto te permitirá saber **qué se está usando exactamente** en el entorno cloud
- Esto ayudará mucho en los siguientes pasos
- **Check exposed assets**
- Esto se puede hacer durante la sección anterior, necesitas **averiguar todo lo que esté potencialmente expuesto** a Internet de alguna manera y cómo se puede acceder.
- Aquí me refiero a infraestructura **manualmente expuesta**, como instances con páginas web u otros ports expuestos, y también a otros **cloud managed services que pueden configurarse** para estar expuestos (como DBs o buckets)
- Luego deberías comprobar **si ese recurso puede exponerse o no** (¿información confidencial? ¿vulnerabilities? ¿misconfigurations en el servicio expuesto?)
- **Check permissions**
- Aquí deberías **averiguar todos los permisos de cada role/user** dentro del cloud y cómo se usan
- ¿Demasiadas cuentas **highly privileged** (controlan todo)? ¿keys generadas que no se usan?... La mayoría de estas comprobaciones ya deberían haberse hecho en las pruebas de benchmark
- Si el cliente está usando OpenID o SAML u otra **federation**, quizá necesites pedirle más **information** sobre **cómo se asigna cada role** (no es lo mismo que el role admin se asigne a 1 user o a 100)
- **No basta con encontrar** qué users tienen permisos de **admin** "\*:\*". Hay muchos **other permissions** que, dependiendo de los servicios usados, pueden ser muy **sensitive**.
- Además, hay **potential privesc** que se pueden seguir abusando de permissions. Todo esto debería tenerse en cuenta y deberían reportarse **as much privesc paths as possible**.
- **Check Integrations**
- Es muy probable que se estén usando **integrations con other clouds or SaaS** dentro del entorno cloud.
- Para las **integrations del cloud que estás auditando** con otra platform, deberías notificar **quién tiene acceso para (ab)usar esa integration** y deberías preguntar **cuán sensitive** es la acción que se está realizando.\
Por ejemplo, quién puede escribir en un AWS bucket del que GCP está obteniendo data (pregunta cuán sensitive es la acción en GCP tratando esos data).
- Para las **integrations dentro del cloud que estás auditando** desde external platforms, deberías preguntar **quién tiene acceso externo para (ab)usar esa integration** y comprobar cómo se está usando esos data.\
Por ejemplo, si un service está usando una Docker image alojada en GCR, deberías preguntar quién tiene acceso para modificarla y qué sensitive info y access obtendrá esa image cuando se ejecute dentro de un AWS cloud.
### Hunt autonomous data streams writing to globally-unique storage
Durante la post-exploitation, revisa exports de larga duración como log sinks, subscriptions, replication jobs, Firehose streams y diagnostic settings que escriben en buckets o storage accounts con nombre globally-unique. Si el destino puede eliminarse y el mismo nombre puede recrearse bajo control del atacante, el upstream service podría seguir entregando datos sensibles al replacement destination incluso cuando el atacante no pueda actualizar el router resource en sí.
Céntrate en esta comprobación en las páginas de servicios relevantes:
{{#ref}}
gcp-security/gcp-post-exploitation/gcp-logging-post-exploitation.md
{{#endref}}
{{#ref}}
gcp-security/gcp-post-exploitation/gcp-pub-sub-post-exploitation.md
{{#endref}}
{{#ref}}
gcp-security/gcp-post-exploitation/gcp-storage-post-exploitation.md
{{#endref}}
{{#ref}}
aws-security/aws-post-exploitation/aws-s3-post-exploitation/README.md
{{#endref}}
{{#ref}}
azure-security/az-post-exploitation/az-blob-storage-post-exploitation.md
{{#endref}}
## Multi-Cloud tools
Hay varias tools que se pueden usar para probar diferentes entornos cloud. Los pasos de instalación y los links se indicarán en esta sección.
### [PurplePanda](https://github.com/carlospolop/purplepanda)
Una tool para **identificar bad configurations y privesc path en clouds y across clouds/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)
Soporta **AWS, GCP y Azure**. Revisa cómo configurar cada proveedor en [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="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
```
{{#endtab }}
{{#endtabs }}
### [ScoutSuite](https://github.com/nccgroup/ScoutSuite)
AWS, Azure, GCP, Alibaba Cloud, Oracle Cloud Infrastructure
{{#tabs }}
{{#tab name="Instalar" }}
```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" }}
Descarga e instala Steampipe ([https://steampipe.io/downloads](https://steampipe.io/downloads)). O usa 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
```
Revisar todos los Projects
Para revisar todos los projects necesitas generar el archivo `gcp.spc` indicando todos los projects a probar. Puedes seguir las indicaciones del siguiente script
```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"
```
Para comprobar **otros insights de GCP** (útil para enumerar servicios) usa: [https://github.com/turbot/steampipe-mod-gcp-insights](https://github.com/turbot/steampipe-mod-gcp-insights)
Para comprobar código Terraform de GCP: [https://github.com/turbot/steampipe-mod-terraform-gcp-compliance](https://github.com/turbot/steampipe-mod-terraform-gcp-compliance)
Más plugins de GCP de 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
```
To check Terraform AWS code: [https://github.com/turbot/steampipe-mod-terraform-aws-compliance](https://github.com/turbot/steampipe-mod-terraform-aws-compliance)
More AWS plugins of 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.\
Requiere python2.7 y parece no mantenido.
### Nessus
Nessus tiene un escaneo _**Audit Cloud Infrastructure**_ compatible con: AWS, Azure, Office 365, Rackspace, Salesforce. Se necesitan algunas configuraciones extra en **Azure** para obtener un **Client Id**.
### [**cloudlist**](https://github.com/projectdiscovery/cloudlist)
Cloudlist es una herramienta **multi-cloud para obtener Assets** (Hostnames, IP Addresses) de Cloud Providers.
{{#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 es una herramienta de Python que consolida los activos de infraestructura y las relaciones entre ellos en una vista de grafo intuitiva impulsada por una base de datos Neo4j.
{{#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 recopila activos y relaciones de servicios y sistemas, incluyendo infraestructura cloud, aplicaciones SaaS, controles de seguridad y más, en una vista de grafo intuitiva respaldada por la base de datos Neo4j.
{{#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)
Descubre los usuarios con más privilegios en el entorno AWS o Azure analizado, incluidos los AWS Shadow Admins. Usa 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)
Una herramienta para encontrar la infraestructura, archivos y apps de una empresa (objetivo) en los principales proveedores cloud (Amazon, Google, Microsoft, DigitalOcean, Alibaba, Vultr, Linode).
### [CloudFox](https://github.com/BishopFox/cloudfox)
- CloudFox es una herramienta para encontrar rutas de ataque explotables en infraestructura cloud (actualmente solo se soporta AWS y Azure, con GCP próximamente).
- Es una herramienta de enumeración destinada a complementar el pentesting manual.
- No crea ni modifica ningún dato dentro del entorno cloud.
### Más listas de herramientas de seguridad cloud
- [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}}
## Funciones comunes de seguridad cloud
### Confidential Computing
{{#ref}}
confidential-computing/luks2-header-malleability-null-cipher-abuse.md
{{#endref}}
## Referencias
- [The Global Namespace Risk: Universal Bucket Hijacking Technique for Cloud Data Exfiltration](https://unit42.paloaltonetworks.com/cloud-bucket-hijacking-risks/)
- [Cloud Logging routing and sinks](https://docs.cloud.google.com/logging/docs/export/configure_export_v2)
- [Amazon S3 replication](https://docs.aws.amazon.com/AmazonS3/latest/userguide/replication.html)
- [Azure Monitor diagnostic settings](https://learn.microsoft.com/en-us/azure/azure-monitor/platform/diagnostic-settings)
{{#include ../banners/hacktricks-training.md}}