Każda chmura ma swoje własne szczególności, ale ogólnie istnieje kilka wspólnych rzeczy, które pentester powinien sprawdzić podczas testowania środowiska chmurowego:
Sprawdzanie benchmarków
To pomoże Ci zrozumieć rozmiar środowiska i używane usługi
Pozwoli to również znaleźć kilka szybkich błędów konfiguracyjnych, ponieważ większość tych testów można przeprowadzić za pomocą automatycznych narzędzi
Enumaracja usług
Prawdopodobnie nie znajdziesz wielu więcej błędów konfiguracyjnych, jeśli poprawnie przeprowadziłeś testy benchmarkowe, ale możesz znaleźć niektóre, które nie były brane pod uwagę w teście benchmarkowym.
To pozwoli Ci wiedzieć co dokładnie jest używane w środowisku chmurowym
To bardzo pomoże w następnych krokach
Sprawdź wystawione zasoby
Można to zrobić podczas poprzedniej sekcji, musisz dowiedzieć się, co jest potencjalnie wystawione w jakiś sposób na Internet i jak można to uzyskać.
Tutaj mam na myśli ręcznie wystawioną infrastrukturę, taką jak instancje z stronami internetowymi lub innymi portami, które są wystawione, a także inne usługi zarządzane w chmurze, które mogą być skonfigurowane do wystawienia (takie jak bazy danych lub kosze)
Następnie powinieneś sprawdzić czy ten zasób może być wystawiony czy nie (informacje poufne? luki? błędy konfiguracyjne w wystawionej usłudze?)
Sprawdź uprawnienia
Tutaj powinieneś dowiedzieć się o wszystkich uprawnieniach każdej roli/użytkownika w chmurze i jak są one używane
Zbyt wiele wysoko uprzywilejowanych (kontrolujących wszystko) kont? Wygenerowane klucze, które nie są używane?... Większość tych kontroli powinna być już przeprowadzona w testach benchmarkowych
Jeśli klient korzysta z OpenID lub SAML lub innej federacji, możesz potrzebować poprosić ich o dodatkowe informacje na temat jak każda rola jest przypisywana (to nie to samo, co przypisanie roli administratora do 1 użytkownika lub do 100)
Nie wystarczy znaleźć, którzy użytkownicy mają uprawnienia administratora "*:*". Istnieje 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, które można śledzić, nadużywając uprawnień. Wszystkie te rzeczy powinny być brane pod uwagę i jak najwięcej ścieżek privesc powinno być zgłoszonych.
Sprawdź integracje
Jest bardzo prawdopodobne, że integracje z innymi chmurami lub SaaS są używane w środowisku chmurowym.
Dla integracji chmury, którą audytujesz z inną platformą powinieneś powiadomić kto ma dostęp do (nadużywania) tej integracji i powinieneś zapytać jak wrażliwa jest wykonywana akcja.
Na przykład, kto może pisać w koszu AWS, z którego GCP pobiera dane (zapytaj, jak wrażliwa jest akcja w GCP w związku z tymi danymi).
Dla integracji wewnątrz chmury, którą audytujesz z zewnętrznych platform, powinieneś zapytać kto ma dostęp zewnętrzny do (nadużywania) tej integracji i sprawdzić, jak te dane są używane.
Na przykład, jeśli usługa korzysta z obrazu Dockera hostowanego w GCR, powinieneś zapytać, kto ma dostęp do jego modyfikacji i jakie wrażliwe informacje i dostęp uzyska ten obraz po uruchomieniu w chmurze AWS.
Narzędzia Multi-Cloud
Istnieje kilka narzędzi, które można wykorzystać do testowania różnych środowisk chmurowych. Kroki instalacji i linki będą wskazane w tej sekcji.
Narzędzie do identyfikacji złych konfiguracji i ścieżek privesc w chmurach i między chmurami/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
Sprawdź wszystkie projekty
Aby sprawdzić wszystkie projekty, musisz wygenerować plik gcp.spc, wskazując wszystkie projekty do przetestowania. Możesz po prostu postępować zgodnie z instrukcjami z poniższego skryptu.
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.
Wymaga python2.7 i wygląda na nieutrzymywane.
Nessus
Nessus ma skan Audit Cloud Infrastructure wspierający: AWS, Azure, Office 365, Rackspace, Salesforce. Wymagane są dodatkowe konfiguracje w Azure, aby uzyskać Client Id.
Cartography to narzędzie w Pythonie, które konsoliduje zasoby infrastruktury oraz relacje między nimi w intuicyjnym widoku graficznym zasilanym przez bazę danych 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 zbiera zasoby i relacje z usług i systemów, w tym infrastrukturę chmurową, aplikacje SaaS, kontrole bezpieczeństwa i inne, w intuicyjny widok graficzny wspierany przez bazę danych 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
Odkryj najbardziej uprzywilejowanych użytkowników w zeskanowanym środowisku AWS lub Azure, w tym AWS Shadow Admins. Używa 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
Narzędzie do znajdowania infrastruktury, plików i aplikacji firmy (cel) na czołowych dostawcach chmury (Amazon, Google, Microsoft, DigitalOcean, Alibaba, Vultr, Linode).
Stormspottertworzy „graf ataku” zasobów w subskrypcji Azure. Umożliwia zespołom red i pentesterom wizualizację powierzchni ataku i możliwości pivotowania w obrębie najemcy, a także wspomaga obrońców w szybkim orientowaniu się i priorytetyzowaniu pracy związanej z odpowiedzią na incydenty.
Office365
Potrzebujesz Global Admin lub przynajmniej Global Admin Reader (ale zauważ, że Global Admin Reader jest nieco ograniczony). Jednak te ograniczenia pojawiają się w niektórych modułach PS i można je obejść, uzyskując dostęp do funkcji za pośrednictwem aplikacji internetowej.