Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub deHackTricks y HackTricks Cloud.
Metodología Básica
Cada nube tiene sus peculiaridades, pero en general hay algunas cosas comunes que un pentester debe verificar al probar un entorno en la nube:
Verificaciones de referencia
Esto te ayudará a entender el tamaño del entorno y los servicios utilizados
También te permitirá encontrar algunas configuraciones incorrectas rápidamente, ya que puedes realizar la mayoría de estas pruebas con herramientas automatizadas
Enumeración de Servicios
Probablemente no encontrarás muchas más configuraciones incorrectas aquí si realizaste correctamente las pruebas de referencia, pero podrías encontrar algunas que no se buscaban en la prueba de referencia.
Esto te permitirá saber qué es exactamente lo que se está utilizando en el entorno en la nube
Esto ayudará mucho en los siguientes pasos
Verificar activos expuestos
Esto se puede hacer durante la sección anterior, necesitas descubrir todo lo que está potencialmente expuesto a Internet de alguna manera y cómo se puede acceder.
Aquí estoy hablando de infraestructura expuesta manualmente como instancias con páginas web u otros puertos expuestos, y también sobre otros servicios gestionados por la nube que se pueden configurar para estar expuestos (como bases de datos o buckets)
Luego debes verificar si ese recurso puede estar expuesto o no (¿información confidencial? ¿vulnerabilidades? ¿configuraciones incorrectas en el servicio expuesto?)
Verificar permisos
Aquí debes descubrir todos los permisos de cada rol/usuario dentro de la nube y cómo se utilizan
¿Demasiadas cuentas con privilegios altos (controlan todo)? ¿Claves generadas no utilizadas?... La mayoría de estas verificaciones ya deberían haberse realizado en las pruebas de referencia
Si el cliente está utilizando OpenID o SAML u otra federación, es posible que necesites pedirles más información sobre cómo se asigna cada rol (no es lo mismo que el rol de administrador se asigne a 1 usuario o a 100)
No es suficiente encontrar qué usuarios tienen permisos de admin "*:*". Hay muchos otros permisos que, dependiendo de los servicios utilizados, pueden ser muy sensibles.
Además, hay posibles caminos de escalada de privilegios que se pueden seguir abusando de los permisos. Todas estas cosas deben tenerse en cuenta y se deben informar tantos caminos de privesc como sea posible.
Verificar Integraciones
Es muy probable que se estén utilizando integraciones con otras nubes o SaaS dentro del entorno en la nube.
Para integraciones de la nube que estás auditando con otras plataformas, debes notificar quién tiene acceso para (ab)usar esa integración y debes preguntar qué tan sensible es la acción que se está realizando.
Por ejemplo, quién puede escribir en un bucket de AWS desde donde GCP está obteniendo datos (pregunta qué tan sensible es la acción en GCP al tratar esos datos).
Para integraciones dentro de la nube que estás auditando desde plataformas externas, debes preguntar quién tiene acceso externo para (ab)usar esa integración y verificar cómo se están utilizando esos datos.
Por ejemplo, si un servicio está utilizando una imagen de Docker alojada en GCR, debes preguntar quién tiene acceso para modificarla y qué información sensible y acceso obtendrá esa imagen cuando se ejecute dentro de una nube de AWS.
Herramientas Multi-Nube
Hay varias herramientas que se pueden utilizar para probar diferentes entornos en la nube. Los pasos de instalación y enlaces se indicarán en esta sección.
Una herramienta para identificar malas configuraciones y caminos de escalada de privilegios en nubes y entre nubes/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
Revisar todos los Proyectos
Para revisar todos los proyectos necesitas generar el archivo gcp.spc indicando todos los proyectos a probar. Puedes seguir las indicaciones del siguiente 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.
Requiere python2.7 y parece que no se mantiene.
Nessus
Nessus tiene un escaneo Audit Cloud Infrastructure que soporta: AWS, Azure, Office 365, Rackspace, Salesforce. Se necesitan algunas configuraciones adicionales en Azure para obtener un Client Id.
Cartography es una herramienta Python que consolida los activos de infraestructura y las relaciones entre ellos en una vista de gráfico intuitiva impulsada por una base de datos 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 recopila activos y relaciones de servicios y sistemas incluyendo infraestructura en la nube, aplicaciones SaaS, controles de seguridad y más, en una vista de gráfico intuitiva respaldada por la base de datos 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
Descubre los usuarios con mayores privilegios en el entorno escaneado de AWS o Azure, incluyendo los 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
Una herramienta para encontrar la infraestructura, archivos y aplicaciones de una empresa (objetivo) en los principales proveedores de la nube (Amazon, Google, Microsoft, DigitalOcean, Alibaba, Vultr, Linode).
CloudFox es una herramienta para encontrar caminos de ataque explotables en la infraestructura de la nube (actualmente solo se admiten AWS y Azure con GCP en desarrollo).
Es una herramienta de enumeración que está destinada a complementar el pentesting manual.
No crea ni modifica ningún dato dentro del entorno de la nube.
Más listas de herramientas de seguridad en la nube
Stormspotter crea un "gráfico de ataque" de los recursos en una suscripción de Azure. Permite a los equipos rojos y a los pentesters visualizar la superficie de ataque y las oportunidades de pivote dentro de un inquilino, y potencia a los defensores para orientarse rápidamente y priorizar el trabajo de respuesta a incidentes.
Office365
Necesitas Global Admin o al menos Global Admin Reader (pero ten en cuenta que Global Admin Reader es un poco limitado). Sin embargo, esas limitaciones aparecen en algunos módulos de PS y se pueden eludir accediendo a las funciones a través de la aplicación web.