15 KiB
Pentesting Cloud Methodology
{{#include ../banners/hacktricks-training.md}}
Podstawowa metodologia
Each cloud has its own peculiarities but in general there are a few common things a pentester should check when testing a cloud environment:
- Kontrole benchmarkowe
- To pomoże ci zrozumieć rozmiar środowiska i używane usługi
- Pozwoli też znaleźć kilka szybkich błędów konfiguracji, gdyż większość tych testów można wykonać za pomocą narzędzi automatycznych
- Enumeracja usług
- Prawdopodobnie nie znajdziesz tu wielu dodatkowych błędów konfiguracji, jeśli prawidłowo wykonałeś testy benchmarkowe, ale możesz znaleźć takie, na które nie zwrócono uwagi podczas testu benchmarkowego.
- To pozwoli ci wiedzieć co dokładnie jest używane w środowisku chmurowym
- To bardzo pomoże w kolejnych krokach
- Sprawdź zasoby wystawione
- Można to zrobić w poprzedniej sekcji — musisz odnaleźć wszystko, co potencjalnie jest wystawione do Internetu i jak można to uzyskać.
- Tutaj mam na myśli ręcznie wystawioną infrastrukturę jak instancje z stronami WWW lub innymi otwartymi portami, a także inne zarządzane usługi chmurowe, które mogą być skonfigurowane do wystawienia (such as DBs or buckets)
- Następnie powinieneś sprawdzić czy zasób może być wystawiony, czy nie (informacje poufne? podatności? błędy konfiguracji w wystawionej usłudze?)
- Sprawdź uprawnienia
- Tutaj powinieneś odnaleźć wszystkie uprawnienia każdej roli/użytkownika w chmurze i jak są używane
- Zbyt wiele kont z wysokimi uprawnieniami (kontrolujących wszystko)? Wygenerowane klucze nieużywane?... Większość z tych kontroli powinna być już wykonana w testach benchmarkowych
- Jeżeli klient używa OpenID, SAML lub innej federacji, może być konieczne poprosić ich o dodatkowe informacje dotyczące jak przypisywana jest każda rola (to nie to samo, gdy rola admina przypisana jest 1 użytkownikowi lub 100)
- Nie wystarczy znaleźć, którzy użytkownicy mają uprawnienia admin ":". Jest wiele innych uprawnień, które w zależności od używanych usług mogą być bardzo wrażliwe.
- Co więcej, istnieją potencjalne ścieżki privesc do wykorzystania przez nadużycie uprawnień. Wszystkie te rzeczy należy wziąć pod uwagę i zgłosić jak najwięcej ścieżek privesc.
- Sprawdź integracje
- Jest bardzo prawdopodobne, że integracje z innymi chmurami lub SaaS są używane w obrębie środowiska chmurowego.
- W przypadku integracji chmury, którą audytujesz, z inną platformą powinieneś powiadomić kto ma dostęp do (nadużycia) tej integracji i zapytać jak wrażliwa jest wykonywana akcja.
Na przykład, kto może zapisywać do AWS bucketu, z którego GCP pobiera dane (zapytaj, jak wrażliwa jest ta operacja w GCP przy przetwarzaniu tych danych). - W przypadku integracji wewnątrz audytowanej chmury z platform zewnętrznych, powinieneś zapytać kto z zewnątrz ma dostęp do (nadużycia) tej integracji i sprawdzić, jak te dane są wykorzystywane.
Na przykład, jeśli usługa używa obrazu Docker hostowanego w GCR, powinieneś zapytać, kto ma dostęp do modyfikacji tego obrazu i jakie wrażliwe informacje oraz uprawnienia uzyska ten obraz po uruchomieniu wewnątrz chmury AWS.
Narzędzia multi-cloud
There are several tools that can be used to test different cloud environments. The installation steps and links are going to be indicated in this section.
PurplePanda
A tool to identify bad configurations and privesc path in clouds and 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
Obsługuje AWS, GCP & Azure. Sprawdź, jak skonfigurować każdego dostawcę w 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" }} Pobierz i zainstaluj Steampipe (https://steampipe.io/downloads). Lub użyj 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
Sprawdź wszystkie projekty
Aby sprawdzić wszystkie projekty, musisz wygenerować plik gcp.spc wskazujący wszystkie projekty do przetestowania. Możesz po prostu skorzystać ze wskazówek w poniższym skrypcie
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"
Aby sprawdzić inne GCP insights (przydatne do enumeracji usług) użyj: https://github.com/turbot/steampipe-mod-gcp-insights
Aby sprawdzić Terraform GCP code: https://github.com/turbot/steampipe-mod-terraform-gcp-compliance
Więcej GCP pluginów 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
Aby sprawdzić kod Terraform dla AWS: https://github.com/turbot/steampipe-mod-terraform-aws-compliance
Więcej wtyczek Steampipe dla AWS: https://github.com/orgs/turbot/repositories?q=aws {{#endtab }} {{#endtabs }}
cs-suite
AWS, GCP, Azure, DigitalOcean.
Wymaga python2.7 i wygląda na nieutrzymywane.
Nessus
Nessus ma skan Audit Cloud Infrastructure obsługujący: AWS, Azure, Office 365, Rackspace, Salesforce. W Azure wymagane są dodatkowe konfiguracje, aby uzyskać Client Id.
cloudlist
Cloudlist to narzędzie multi-cloud do pozyskiwania zasobów (Hostnames, IP Addresses) od dostawców chmurowych.
{{#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 to narzędzie w Pythonie, które konsoliduje zasoby infrastruktury i relacje między nimi w intuicyjnym widoku grafu opartym na bazie danych 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 zbiera zasoby i relacje z usług i systemów, w tym infrastruktury chmurowej, aplikacji SaaS, mechanizmów zabezpieczeń i innych, do intuicyjnego widoku grafowego wspieranego przez bazę danych 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
Odnajdź najbardziej uprzywilejowanych użytkowników w skanowanym środowisku AWS lub Azure, w tym AWS Shadow Admins. Używa 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
Narzędzie do znajdowania infrastruktury firmy (target), plików i aplikacji u największych dostawców chmury (Amazon, Google, Microsoft, DigitalOcean, Alibaba, Vultr, Linode).
CloudFox
- CloudFox to narzędzie do znajdowania exploitable attack paths w cloud infrastructure (aktualnie obsługiwane tylko AWS & Azure, GCP wkrótce).
- Jest enumeration tool, które ma uzupełniać manualny pentesting.
- Nie tworzy ani nie modyfikuje żadnych danych w obrębie środowiska chmurowego.
More lists of cloud security tools
GCP
{{#ref}} gcp-security/ {{#endref}}
Workspace
{{#ref}} workspace-security/ {{#endref}}
AWS
{{#ref}} aws-security/ {{#endref}}
Azure
{{#ref}} azure-security/ {{#endref}}
Attack Graph
Stormspotter tworzy „attack graph” zasobów w subskrypcji Azure. Umożliwia red teams i pentesters wizualizację attack surface i możliwości pivot w ramach tenant, a także przyspiesza obrońców, pozwalając szybko się zorientować i priorytetyzować prace związane z incident response.
Office365
Potrzebujesz Global Admin lub przynajmniej Global Admin Reader (ale pamiętaj, że Global Admin Reader jest trochę ograniczony). Jednak te ograniczenia pojawiają się w niektórych PS modules i można je obejść, uzyskując dostęp do funkcji via the web application.
{{#include ../banners/hacktricks-training.md}}