Compartilhe suas técnicas de hacking enviando PRs para os repositórios githubHackTricks e HackTricks Cloud.
Metodologia Básica
Cada nuvem tem suas peculiaridades, mas em geral existem algumas coisas comuns que um pentester deve verificar ao testar um ambiente em nuvem:
Verificações de Benchmark
Isso ajudará você a entender o tamanho do ambiente e serviços utilizados
Também permitirá encontrar algumas más configurações rapidamente, pois a maioria desses testes pode ser feita com ferramentas automatizadas
Enumeração de Serviços
Provavelmente você não encontrará muitas outras más configurações aqui se realizou corretamente os testes de benchmark, mas pode encontrar algumas que não estavam sendo procuradas no teste de benchmark.
Isso permitirá saber o que exatamente está sendo usado no ambiente em nuvem
Isso ajudará muito nas próximas etapas
Verificar ativos expostos
Isso pode ser feito durante a seção anterior, você precisa descobrir tudo que está potencialmente exposto à Internet de alguma forma e como pode ser acessado.
Aqui estou falando sobre infraestrutura exposta manualmente como instâncias com páginas web ou outros portos expostos, e também sobre outros serviços gerenciados pela nuvem que podem ser configurados para serem expostos (como DBs ou buckets)
Então você deve verificar se esse recurso pode ser exposto ou não (informações confidenciais? vulnerabilidades? más configurações no serviço exposto?)
Verificar permissões
Aqui você deve descobrir todas as permissões de cada papel/usuário dentro da nuvem e como são usadas
Contas com muitos privilégios altos (controlam tudo)? Chaves geradas não utilizadas?... A maioria dessas verificações já deveria ter sido feita nos testes de benchmark
Se o cliente está usando OpenID ou SAML ou outra federação, você pode precisar pedir mais informações sobre como cada papel é atribuído (não é o mesmo que o papel de administrador ser atribuído a 1 usuário ou a 100)
Não é suficiente encontrar quais usuários têm permissões de admin "*:*". Existem outras permissões que, dependendo dos serviços utilizados, podem ser muito sensíveis.
Além disso, existem potenciais caminhos de privesc a serem seguidos abusando de permissões. Todas essas coisas devem ser levadas em conta e tantos caminhos de privesc quanto possível devem ser relatados.
Verificar Integrações
É muito provável que integrações com outras nuvens ou SaaS estejam sendo usadas dentro do ambiente em nuvem.
Para integrações da nuvem que você está auditando com outras plataformas, você deve notificar quem tem acesso para (ab)usar essa integração e você deve perguntar quão sensível é a ação sendo realizada.
Por exemplo, quem pode escrever em um bucket AWS de onde o GCP está obtendo dados (pergunte quão sensível é a ação no GCP tratando esses dados).
Para integrações dentro da nuvem que você está auditando de plataformas externas, você deve perguntar quem tem acesso externamente para (ab)usar essa integração e verificar como esses dados estão sendo usados.
Por exemplo, se um serviço está usando uma imagem Docker hospedada no GCR, você deve perguntar quem tem acesso para modificar isso e quais informações sensíveis e acesso essa imagem terá quando executada dentro de uma nuvem AWS.
Ferramentas Multi-Cloud
Existem várias ferramentas que podem ser usadas para testar diferentes ambientes em nuvem. Os passos de instalação e links serão indicados nesta seção.
Uma ferramenta para identificar más configurações e caminhos de privesc em nuvens e entre nuvens/SaaS.
# You need to install and run neo4j alsogitclonehttps://github.com/carlospolop/PurplePandacdPurplePandapython3-mvenv.sourcebin/activatepython3-mpipinstall-rrequirements.txtexport PURPLEPANDA_NEO4J_URL="bolt://neo4j@localhost:7687"export PURPLEPANDA_PWD="neo4j_pwd_4_purplepanda"python3main.py-h# Get help
export GOOGLE_DISCOVERY=$(echo 'google:- file_path: ""- file_path: ""service_account_id: "some-sa-email@sidentifier.iam.gserviceaccount.com"' |base64)python3main.py-a-pgoogle#Get basic info of the account to check it's correctly configuredpython3main.py-e-pgoogle#Enumerate the env
# Installpipinstallprowlerprowler-v# Runprowler<provider># Exampleprowleraws--profilecustom-profile [-M csvjsonjson-asffhtml]# Get info about checks & servicesprowler<provider>--list-checksprowler<provider>--list-services
mkdirscout; cdscoutvirtualenv-ppython3venvsourcevenv/bin/activatepipinstallscoutsuitescout--help## Using Docker: https://github.com/nccgroup/ScoutSuite/wiki/Docker-Image
scoutgcp--report-dir/tmp/gcp--user-account--all-projects## use "--service-account KEY_FILE" instead of "--user-account" to use a service accountSCOUT_FOLDER_REPORT="/tmp"for pid in$(gcloudprojectslist--format="value(projectId)"); doecho"================================================"echo"Checking $pid"mkdir"$SCOUT_FOLDER_REPORT/$pid"scoutgcp--report-dir"$SCOUT_FOLDER_REPORT/$pid"--no-browser--user-account--project-id"$pid"done
# Install gcp pluginsteampipeplugininstallgcp# Use https://github.com/turbot/steampipe-mod-gcp-compliance.gitgitclonehttps://github.com/turbot/steampipe-mod-gcp-compliance.gitcdsteampipe-mod-gcp-compliance# To run all the checks from the dashboardsteampipedashboard# To run all the checks from rhe clisteampipecheckall
Verificar todos os Projetos
Para verificar todos os projetos, você precisa gerar o arquivo gcp.spc indicando todos os projetos a serem testados. 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 projectfor pid in$(gcloudprojectslist--format="value(projectId)"); doecho"connection \"gcp_$(echo-n $pid |tr "-" "_" )\" {plugin = \"gcp\"project = \"$pid\"}">>"$FILEPATH"done# Generate the aggragator to callecho'connection "gcp_all" {plugin = "gcp"type = "aggregator"connections = ["gcp_*"]}'>>"$FILEPATH"echo"Copy $FILEPATH in ~/.steampipe/config/gcp.spc if it was correctly generated"
# Install aws pluginsteampipeplugininstallaws# Modify the spec indicating in "profile" the profile name to usenano~/.steampipe/config/aws.spc# Get some info on how the AWS account is being usedgitclonehttps://github.com/turbot/steampipe-mod-aws-insights.gitcdsteampipe-mod-aws-insightssteampipedashboard# Get the services exposed to the internetgitclonehttps://github.com/turbot/steampipe-mod-aws-perimeter.gitcdsteampipe-mod-aws-perimetersteampipedashboard# Run the benchmarksgitclonehttps://github.com/turbot/steampipe-mod-aws-compliancecdsteampipe-mod-aws-compliancesteampipedashboard# To see results in browsersteampipecheckall--export=/tmp/output4.json
AWS, GCP, Azure, DigitalOcean.
Requer python2.7 e parece não ser mantido.
Nessus
O Nessus possui uma varredura Audit Cloud Infrastructure que suporta: AWS, Azure, Office 365, Rackspace, Salesforce. Algumas configurações extras no Azure são necessárias para obter um Client Id.
Cartography é uma ferramenta Python que consolida ativos de infraestrutura e as relações entre eles em uma visualização gráfica intuitiva, alimentada por um banco de dados Neo4j.
# Installationdockerimagepullghcr.io/lyft/cartographydockerrun--platformlinux/amd64ghcr.io/lyft/cartographycartography--help## Install a Neo4j DB version 3.5.*
dockerrun--platformlinux/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
Starbase coleta ativos e relações de serviços e sistemas, incluindo infraestrutura em nuvem, aplicações SaaS, controles de segurança e mais, em uma visualização gráfica intuitiva suportada pelo banco de dados Neo4j.
# You are going to need Node version 14, so install nvm following https://tecadmin.net/install-nvm-macos-with-homebrew/npminstall--globalyarnnvminstall14gitclonehttps://github.com/JupiterOne/starbase.gitcdstarbasenvmuse14yarninstallyarnstarbase--help# Configure manually config.yaml depending on the env to analyzeyarnstarbasesetupyarnstarbaserun# Dockergitclonehttps://github.com/JupiterOne/starbase.gitcdstarbasecpconfig.yaml.exampleconfig.yaml# Configure manually config.yaml depending on the env to analyzedockerbuild--no-cache-tstarbase:latest.docker-composerunstarbasesetupdocker-composerunstarbaserun
## Config for GCP### Check out: https://github.com/JupiterOne/graph-google-cloud/blob/main/docs/development.md### It requires service account credentialsintegrations:-name:graph-google-cloudinstanceId:testInstanceIddirectory:./.integrations/graph-google-cloudgitRemoteUrl:https://github.com/JupiterOne/graph-google-cloud.gitconfig: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:falsestorage:engine:neo4jconfig:username:neo4jpassword:s3cr3turi:bolt://localhost:7687#Consider using host.docker.internal if from docker
Descubra os usuários mais privilegiados no ambiente AWS ou Azure escaneado, incluindo os AWS Shadow Admins. Utiliza powershell.
Import-Module .\SkyArk.ps1 -forceStart-AzureStealth# in the Cloud ConsoleIEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/cyberark/SkyArk/master/AzureStealth/AzureStealth.ps1')
Scan-AzureAdmins
Uma ferramenta para encontrar a infraestrutura, arquivos e aplicativos de uma empresa (alvo) nos principais provedores de nuvem (Amazon, Google, Microsoft, DigitalOcean, Alibaba, Vultr, Linode).
CloudFox é uma ferramenta para encontrar caminhos de ataque exploráveis na infraestrutura de nuvem (atualmente apenas AWS & Azure são suportados com GCP em breve).
É uma ferramenta de enumeração que tem a intenção de complementar o pentesting manual.
Não cria ou modifica dados dentro do ambiente de nuvem.
Stormspotter cria um "attack graph" dos recursos em uma assinatura Azure. Ele permite que red teams e pentesters visualizem a superfície de ataque e as oportunidades de pivot dentro de um tenant, e potencializa seus defensores para orientar e priorizar rapidamente o trabalho de resposta a incidentes.
Office365
Você precisa de Global Admin ou pelo menos Global Admin Reader (mas note que Global Admin Reader é um pouco limitado). No entanto, essas limitações aparecem em alguns módulos PS e podem ser contornadas acessando os recursos via aplicação web.