# Pentesting Cloud Methodology {{#include ../banners/hacktricks-training.md}}
## Mbinu za Msingi Kila cloud ina sifa zake za kipekee lakini kwa ujumla kuna mambo machache **ya kawaida msimamizi wa pentester anapaswa kuangalia** wakati anapofanya mtihani wa mazingira ya cloud: - **Benchmark checks** - Hii itakusaidia **kuelewa ukubwa** wa mazingira na **services zinazotumika** - Pia itakuwezesha kupata baadhi ya **misconfigurations ya haraka** kwani unaweza kufanya nyingi ya hizi tests kwa kutumia **automated tools** - **Services Enumeration** - Huenda usipate misconfiguration mingi zaidi hapa ikiwa umefanya benchmark tests ipasavyo, lakini unaweza kupata baadhi ambayo hayakutafutwa katika benchmark test. - Hii itakuwezesha kujua **ni nini hasa kinachotumika** katika mazingira ya cloud - Hii itasaidia sana katika hatua zinazofuata - **Check exposed assets** - Hii inaweza kufanywa wakati wa sehemu iliyopita, unahitaji **kubaini kila kitu kinachoweza kuwa exposed** kwa Internet kwa njia yoyote na jinsi kinavyoweza kufikiwa. - Hapa ninachukua **infrastructure iliyofunguliwa kwa mkono** kama instances zilizo na kurasa za wavuti au ports nyingine zilizo exposed, na pia kuhusu huduma nyingine zinazodhibitiwa na cloud ambazo zinaweza kusanidiwa kuwa exposed (kama DBs au buckets) - Kisha unapaswa kuangalia **je, rasilimali hiyo inaweza ku-expose au la** (taarifa za siri? vulnerabilities? misconfigurations katika service iliyo exposed?) - **Check permissions** - Hapa unapaswa **kubaini ruhusa zote za kila role/user** ndani ya cloud na jinsi zinavyotumiwa - Je, kuna akaunti nyingi zenye **privilege kubwa sana** (zinadhibiti kila kitu)? Keys zilizotengenezwa hazitumiwi?... Mengi ya haya maangalia yalipaswa kufanyika tayari katika benchmark tests - Ikiwa mteja anatumia OpenID au SAML au **federation** nyingine unaweza kuhitaji kuwauliza kwa undani zaidi **maalum** kuhusu **jinsi kila role inavyotengwa** (si sawa admin role ikipewa user 1 au user 100) - Haikuwa **vitu vya kutosha kupata** ni users gani wana **admin** permissions "\*:\*". Kuna **ruhusa nyingi nyingine** ambazo kulingana na services zinazotumika zinaweza kuwa za **nyeti**. - Zaidi ya hayo, kuna njia za **privesc** zinazoweza kufuatwa kwa kutumia maelezo hayo. Mambo yote haya yanapaswa kuzingatiwa na **viwango vingi vya privesc kadri liwezekanavyo** vinapaswa kuripotiwa. - **Check Integrations** - Inawezekana sana kwamba **integrations na clouds nyingine au SaaS** zinatumika ndani ya mazingira ya cloud. - Kwa **integrations za cloud unazochunguza** na platform nyingine unapaswa kuwajulisha **nani anaweza kufikia/ku(tya)abuse integration hiyo** na unapaswa kuuliza **ni kiasi gani kitendo hicho ni nyeti**.\ Kwa mfano, nani anaweza kuandika katika bucket ya AWS ambapo GCP inapokea data kutoka (uliza jinsi kitendo hicho kinavyokuwa nyeti katika GCP linaposhughulikia data hiyo). - Kwa **integrations ndani ya cloud unazochunguza** zinazotoka kwenye platform za nje, unapaswa kuuliza **nani anaweza kufikia kwa nje ili ku(tya)abuse integration hiyo** na kuangalia jinsi data hiyo inavyotumiwa.\ Kwa mfano, ikiwa service inatumia Docker image iliyohifadhiwa katika GCR, unapaswa kuuliza nani anaweza kuibadilisha na ni taarifa gani nyeti na access itakayopatikana kwa image hiyo ikichukuliwa ndani ya AWS cloud. ## Multi-Cloud tools Kuna zana kadhaa ambazo zinaweza kutumika kujaribu mazingira tofauti za cloud. Hatua za usakinishaji na links zitatolea katika sehemu hii. ### [PurplePanda](https://github.com/carlospolop/purplepanda) A tool to **identify bad configurations and privesc path in clouds and 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) Inasaidia **AWS, GCP & Azure**. Angalia jinsi ya kusanidi kila mtoa huduma katika [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="Install" }} ```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" }} Pakua na sakinisha Steampipe ([https://steampipe.io/downloads](https://steampipe.io/downloads)). Au tumia 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 ```
Angalia Miradi Yote Ili kuangalia miradi yote unahitaji kutengeneza faili ya `gcp.spc` inayosema miradi yote ya kujaribu. Unaweza kufuata tu maelekezo kutoka kwa skripti ifuatayo ```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" ```
Ili kuangalia **insights nyingine za GCP** (inayofaa kwa kuorodhesha huduma) tumia: [https://github.com/turbot/steampipe-mod-gcp-insights](https://github.com/turbot/steampipe-mod-gcp-insights) Ili kuangalia Terraform GCP code: [https://github.com/turbot/steampipe-mod-terraform-gcp-compliance](https://github.com/turbot/steampipe-mod-terraform-gcp-compliance) Viendelezaji zaidi za GCP za 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 msimbo: [https://github.com/turbot/steampipe-mod-terraform-aws-compliance](https://github.com/turbot/steampipe-mod-terraform-aws-compliance) Plugins zaidi za AWS za 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.\ Inahitaji python2.7 na inaonekana haidumwi. ### Nessus Nessus ina skani ya _**Audit Cloud Infrastructure**_ inayounga mkono: AWS, Azure, Office 365, Rackspace, Salesforce. Inahitaji usanidi wa ziada kwenye **Azure** ili kupata **Client Id**. ### [**cloudlist**](https://github.com/projectdiscovery/cloudlist) Cloudlist ni **chombo cha multi-cloud cha kupata Assets** (Hostnames, IP Addresses) kutoka kwa 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 ni chombo cha Python kinachokusanya mali za miundombinu na uhusiano baina yao katika muonekano wa grafu unaoeleweka unaoendeshwa na hifadhidata ya 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 hukusanya rasilimali na uhusiano kutoka kwa huduma na mifumo, ikijumuisha miundombinu ya cloud, programu za SaaS, udhibiti wa usalama, na zaidi, katika muonekano wa grafu unaoeleweka unaosimamiwa na hifadhidata ya 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) Gundua watumiaji wenye ruhusa nyingi zaidi katika mazingira ya AWS au Azure yaliyokaguliwa, ikiwa ni pamoja na AWS Shadow Admins. Inatumia 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) Chombo cha kutafuta miundombinu ya kampuni (target), faili, na apps kwenye watoa huduma wakubwa wa cloud (Amazon, Google, Microsoft, DigitalOcean, Alibaba, Vultr, Linode). ### [CloudFox](https://github.com/BishopFox/cloudfox) - CloudFox ni chombo cha kutafuta exploitable attack paths katika miundombinu ya cloud (kwa sasa inasaidia tu AWS & Azure na GCP inakuja hivi karibuni). - Ni chombo cha kuorodhesha kinachokusudiwa kukamilisha manual pentesting. - Hairuhusu kuunda au kubadilisha data yoyote ndani ya mazingira ya cloud. ### More lists of cloud security tools - [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}} ## Common Cloud Security Features ### Ukompyuta wa Siri {{#ref}} confidential-computing/luks2-header-malleability-null-cipher-abuse.md {{#endref}} {{#include ../banners/hacktricks-training.md}}