Chaque cloud a ses propres particularités mais en général, il y a quelques points communs qu'un pentester devrait vérifier lors du test d'un environnement cloud :
Vérifications de référence
Cela vous aidera à comprendre la taille de l'environnement et les services utilisés
Cela vous permettra également de trouver certaines mauvaises configurations rapidement car vous pouvez effectuer la plupart de ces tests avec des outils automatisés
Énumération des Services
Vous ne trouverez probablement pas beaucoup plus de configurations incorrectes ici si vous avez correctement effectué les tests de référence, mais vous pourriez en trouver certaines qui n'ont pas été recherchées dans le test de référence.
Cela vous permettra de savoir ce qui est exactement utilisé dans l'environnement cloud
Cela aidera beaucoup dans les étapes suivantes
Vérifier les actifs exposés
Cela peut être fait pendant la section précédente, vous devez découvrir tout ce qui est potentiellement exposé à Internet d'une manière ou d'une autre et comment cela peut être accédé.
Ici, je parle de l'infrastructure exposée manuellement comme des instances avec des pages web ou d'autres ports exposés, et aussi des services gérés par le cloud qui peuvent être configurés pour être exposés (comme des bases de données ou des seaux)
Ensuite, vous devriez vérifier si cette ressource peut être exposée ou non (informations confidentielles ? vulnérabilités ? mauvaises configurations dans le service exposé ?)
Vérifier les permissions
Ici, vous devriez découvrir toutes les permissions de chaque rôle/utilisateur à l'intérieur du cloud et comment elles sont utilisées
Trop de comptes hautement privilégiés (contrôlent tout) ? Clés générées non utilisées ?... La plupart de ces vérifications auraient dû être faites dans les tests de référence déjà
Si le client utilise OpenID ou SAML ou une autre fédération, vous pourriez avoir besoin de leur demander plus d'informations sur comment chaque rôle est attribué (ce n'est pas la même chose que le rôle d'administrateur est attribué à 1 utilisateur ou à 100)
Ce n'est pas suffisant de trouver quels utilisateurs ont des permissions admin "*:*". Il y a beaucoup d'autres permissions qui, en fonction des services utilisés, peuvent être très sensibles.
De plus, il y a des moyens potentiels de privesc à suivre en abusant des permissions. Toutes ces choses devraient être prises en compte et autant de chemins de privesc que possible devraient être signalés.
Vérifier les Intégrations
Il est très probable que des intégrations avec d'autres clouds ou SaaS soient utilisées à l'intérieur de l'environnement cloud.
Pour les intégrations du cloud que vous auditez avec d'autres plateformes, vous devriez notifier qui a accès à (ab)user de cette intégration et vous devriez demander à quel point l'action effectuée est sensible.
Par exemple, qui peut écrire dans un seau AWS d'où GCP obtient des données (demandez à quel point l'action dans GCP traitant ces données est sensible).
Pour les intégrations à l'intérieur du cloud que vous auditez provenant de plateformes externes, vous devriez demander qui a accès de l'extérieur à (ab)user de cette intégration et vérifier comment ces données sont utilisées.
Par exemple, si un service utilise une image Docker hébergée dans GCR, vous devriez demander qui a accès à la modifier et quelles informations sensibles et accès obtiendra cette image lorsqu'elle est exécutée à l'intérieur d'un cloud AWS.
Outils Multi-Cloud
Il existe plusieurs outils qui peuvent être utilisés pour tester différents environnements cloud. Les étapes d'installation et les liens seront indiqués dans cette section.
Un outil pour identifier les mauvaises configurations et les chemins de privesc dans les clouds et à travers les clouds/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
Vérifier tous les projets
Pour vérifier tous les projets, vous devez générer le fichier gcp.spc indiquant tous les projets à tester. Vous pouvez simplement suivre les indications du script suivant
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.
Il nécessite python2.7 et semble ne plus être maintenu.
Nessus
Nessus propose un scan Audit Cloud Infrastructure prenant en charge : AWS, Azure, Office 365, Rackspace, Salesforce. Des configurations supplémentaires dans Azure sont nécessaires pour obtenir un Client Id.
Cartography est un outil Python qui consolide les actifs d'infrastructure et les relations entre eux dans une vue graphique intuitive alimentée par une base de données 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 collecte des actifs et des relations de services et systèmes incluant l'infrastructure cloud, les applications SaaS, les contrôles de sécurité, et plus encore, dans une vue graphique intuitive soutenue par la base de données 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
Découvrez les utilisateurs les plus privilégiés dans l'environnement AWS ou Azure scanné, y compris les AWS Shadow Admins. Il utilise 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
Un outil pour trouver l'infrastructure, les fichiers et les applications d'une entreprise (cible) sur les principaux fournisseurs de cloud (Amazon, Google, Microsoft, DigitalOcean, Alibaba, Vultr, Linode).
CloudFox est un outil pour trouver des chemins d'attaque exploitables dans l'infrastructure cloud (actuellement seulement AWS & Azure sont pris en charge avec GCP à venir).
C'est un outil d'énumération qui est destiné à compléter le pentesting manuel.
Il ne crée ni ne modifie aucune donnée à l'intérieur de l'environnement cloud.
Stormspotter crée un "graphique d'attaque" des ressources dans un abonnement Azure. Il permet aux équipes rouges et aux pentesters de visualiser la surface d'attaque et les opportunités de pivotement au sein d'un locataire, et dynamise vos défenseurs pour orienter rapidement et prioriser le travail de réponse aux incidents.
Office365
Vous avez besoin d'un Global Admin ou au moins d'un Global Admin Reader (mais notez que Global Admin Reader est un peu limité). Cependant, ces limitations apparaissent dans certains modules PS et peuvent être contournées en accédant aux fonctionnalités via l'application web.