Files
hacktricks-cloud/src/pentesting-cloud/pentesting-cloud-methodology.md
T

16 KiB

Pentesting Cloud Methodology

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

Metodologia Básica

Cada cloud tem suas próprias peculiaridades, mas em geral há algumas coisas comuns que um pentester deve verificar ao testar um ambiente de cloud:

  • Benchmark checks
  • Isso ajudará você a entender o tamanho do ambiente e os services usados
  • Também permitirá encontrar algumas quick misconfigurations, pois você pode realizar a maioria desses testes com automated tools
  • Services Enumeration
  • Provavelmente você não encontrará muitas mais misconfigurations aqui se tiver executado corretamente os benchmark tests, mas pode encontrar algumas que não foram procuradas no benchmark test.
  • Isso permitirá que você saiba o que exatamente está sendo usado no cloud env
  • Isso ajudará bastante nas próximas etapas
  • Check exposed assets
  • Isso pode ser feito durante a seção anterior; você precisa descobrir tudo o que está potencialmente exposed para a Internet de alguma forma e como isso pode ser acessado.
  • Aqui estou considerando manually exposed infrastructure como instances com páginas web ou outras ports exposed, e também outros cloud managed services que can be configured to be exposed (como DBs ou buckets)
  • Então você deve verificar se esse resource pode ser exposed ou not (informação confidencial? vulnerabilities? misconfigurations no serviço exposed?)
  • Check permissions
  • Aqui você deve descobrir todas as permissions de cada role/user dentro da cloud e como elas são usadas
  • Contas com muitos privilégios elevados (control everything)? keys geradas não usadas?... A maioria dessas checks já deveria ter sido feita nos benchmark tests
  • Se o client estiver usando OpenID ou SAML ou outra federation, talvez você precise pedir mais information sobre como cada role é atribuída (não é o mesmo que a admin role seja atribuída a 1 user ou a 100)
  • Não basta encontrar quais users têm permissions de admin "*:*". Há muitas outras permissions que, dependendo dos services usados, podem ser muito sensitive.
  • Além disso, há potential privesc paths a seguir abusando permissions. Todas essas coisas devem ser levadas em conta e o máximo possível de privesc paths deve ser reportado.
  • Check Integrations
  • É altamente provável que integrations com outras clouds ou SaaS estejam sendo usadas dentro do cloud env.
  • Para integrations da cloud que você está auditando com outra platform, você deve notificar quem tem acesso para (ab)usar essa integration e deve perguntar quão sensitive é a action being performed.
    Por exemplo, quem pode escrever em um AWS bucket de onde GCP está obtendo data (pergunte quão sensitive é a action no GCP tratando essa data).
  • Para integrations dentro da cloud que você está auditando a partir de external platforms, você deve perguntar quem tem access externamente para (ab)usar essa integration e verificar como esses data estão sendo usados.
    Por exemplo, se um service está usando uma Docker image hospedada em GCR, você deve perguntar quem tem access para modificá-la e quais sensitive info e access essa image obterá quando executada dentro de um AWS cloud.

Hunt autonomous data streams writing to globally-unique storage

During post-exploitation, review long-lived exports such as log sinks, subscriptions, replication jobs, Firehose streams, and diagnostic settings that write to buckets or storage accounts by globally-unique name. If the destination can be deleted and the same name can be recreated under attacker control, the upstream service might keep delivering sensitive data to the replacement destination even when the attacker cannot update the router resource itself.

Focus this check in the relevant service pages:

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

Existem várias ferramentas que podem ser usadas para testar diferentes cloud environments. Os passos de instalação e links serão indicados nesta seção.

PurplePanda

Uma ferramenta para identificar bad configurations e caminhos de privesc em clouds e across clouds/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

Ele suporta AWS, GCP & Azure. Veja como configurar cada provedor em 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="Install" }}

# 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="Install" }}

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" }} Baixe e instale o Steampipe (https://steampipe.io/downloads). Ou use 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
Verifique todos os Projects

Para verificar todos os projects, você precisa gerar o arquivo gcp.spc indicando todos os projects a testar. Você pode simplesmente seguir as indicações do seguinte script

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 verificar other GCP insights (útil para enumerar serviços) use: https://github.com/turbot/steampipe-mod-gcp-insights

Para verificar código Terraform GCP: https://github.com/turbot/steampipe-mod-terraform-gcp-compliance

Mais plugins GCP do 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

Para verificar código Terraform AWS: https://github.com/turbot/steampipe-mod-terraform-aws-compliance

Mais plugins AWS do Steampipe: https://github.com/orgs/turbot/repositories?q=aws {{#endtab }} {{#endtabs }}

cs-suite

AWS, GCP, Azure, DigitalOcean.
Requer python2.7 e parece não mantido.

Nessus

Nessus tem um scan Audit Cloud Infrastructure com suporte a: AWS, Azure, Office 365, Rackspace, Salesforce. Algumas configurações extras no Azure são necessárias para obter um Client Id.

cloudlist

Cloudlist é uma ferramenta multi-cloud para obter Assets (Hostnames, Endereços IP) de Cloud Providers.

{{#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="Second Tab" }}

## For GCP it requires service account JSON credentials
cloudlist -config </path/to/config>

{{#endtab }} {{#endtabs }}

cartography

Cartography é uma ferramenta em Python que consolida ativos de infraestrutura e as relações entre eles em uma visualização de grafo intuitiva, alimentada por um banco de dados Neo4j.

{{#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 coleta assets e relationships de serviços e systems, incluindo cloud infrastructure, aplicações SaaS, security controls e mais, em uma visualização de graph intuitiva apoiada pelo banco de dados Neo4j.

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

Descubra os usuários mais privilegiados no ambiente AWS ou Azure escaneado, incluindo os AWS Shadow Admins. Ele usa 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

Uma ferramenta para encontrar a infraestrutura, arquivos e apps de uma empresa (target) nos principais provedores de cloud (Amazon, Google, Microsoft, DigitalOcean, Alibaba, Vultr, Linode).

CloudFox

  • CloudFox é uma ferramenta para encontrar attack paths exploráveis em cloud infrastructure (atualmente apenas AWS & Azure suportados, com GCP em breve).
  • É uma ferramenta de enumeração destinada a complementar pentesting manual.
  • Ela não cria nem modifica nenhum dado dentro do ambiente cloud.

Mais listas de ferramentas de segurança cloud

Google

GCP

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

Workspace

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

AWS

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

Azure

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

Common Cloud Security Features

Confidential Computing

{{#ref}} confidential-computing/luks2-header-malleability-null-cipher-abuse.md {{#endref}}

References

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