20 KiB
Методологія Пентестингу Хмари
{{#include ../banners/hacktricks-training.md}}
Основна Методологія
Кожна хмара має свої особливості, але загалом є кілька загальних речей, які повинен перевірити пентестер під час тестування хмарного середовища:
- Перевірки стандартів
- Це допоможе вам зрозуміти розмір середовища та використовувані сервіси
- Це також дозволить вам знайти деякі швидкі неправильні налаштування, оскільки більшість з цих тестів можна виконати за допомогою автоматизованих інструментів
- Перерахування сервісів
- Ви, ймовірно, не знайдете багато інших неправильних налаштувань тут, якщо ви правильно виконали перевірки стандартів, але ви можете знайти деякі, які не були враховані в тестах стандартів.
- Це дозволить вам дізнатися що саме використовується в хмарному середовищі
- Це дуже допоможе на наступних етапах
- Перевірка відкритих активів
- Це можна зробити під час попереднього розділу, вам потрібно виявити все, що потенційно відкрито в Інтернеті і як до цього можна отримати доступ.
- Тут я маю на увазі вручну відкриту інфраструктуру, таку як інстанси з веб-сторінками або інші порти, що відкриті, а також інші управляємі хмарні сервіси, які можуть бути налаштовані на відкриття (такі як бази даних або контейнери)
- Потім ви повинні перевірити чи може цей ресурс бути відкритим чи ні (конфіденційна інформація? вразливості? неправильні налаштування в відкритому сервісі?)
- Перевірка дозволів
- Тут ви повинні виявити всі дозволи кожної ролі/користувача всередині хмари і як вони використовуються
- Занадто багато високопривілейованих (контроль всього) акаунтів? Згенеровані ключі не використовуються?... Більшість цих перевірок вже повинні були бути виконані в тестах стандартів
- Якщо клієнт використовує OpenID або SAML або іншу федерацію, вам, можливо, потрібно буде запитати у них додаткову інформацію про те, як призначається кожна роль (не те ж саме, що роль адміністратора призначена 1 користувачу або 100)
- Недостатньо просто знайти, які користувачі мають адміністративні дозволи "*:*". Є багато інших дозволів, які в залежності від використовуваних сервісів можуть бути дуже чутливими.
- Більше того, є потенційні шляхи підвищення привілеїв шляхом зловживання дозволами. Усі ці речі повинні бути враховані, і якомога більше шляхів підвищення привілеїв повинні бути зафіксовані.
- Перевірка інтеграцій
- Існує висока ймовірність, що інтеграції з іншими хмарами або SaaS використовуються всередині хмарного середовища.
- Для інтеграцій хмари, яку ви перевіряєте з іншою платформою, ви повинні повідомити хто має доступ до (зловживати) цією інтеграцією і ви повинні запитати наскільки чутливим є виконувана дія.
Наприклад, хто може записувати в контейнер AWS, з якого GCP отримує дані (запитайте, наскільки чутливою є дія в GCP, що стосується цих даних). - Для інтеграцій всередині хмари, яку ви перевіряєте з зовнішніх платформ, ви повинні запитати хто має зовнішній доступ до (зловживати) цією інтеграцією і перевірити, як ці дані використовуються.
Наприклад, якщо сервіс використовує Docker-образ, розміщений у GCR, ви повинні запитати, хто має доступ до його модифікації і яку чутливу інформацію та доступ отримає цей образ при виконанні всередині хмари AWS.
Інструменти для багатохмарності
Існує кілька інструментів, які можна використовувати для тестування різних хмарних середовищ. Кроки установки та посилання будуть вказані в цьому розділі.
PurplePanda
Інструмент для виявлення поганих налаштувань і шляхів підвищення привілеїв у хмарах та між хмарами/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
Він підтримує AWS, GCP & Azure. Перевірте, як налаштувати кожного постачальника в 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
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="Встановлення" }}
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" }} Завантажте та встановіть Steampipe (https://steampipe.io/downloads). Або використовуйте 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
Перевірити всі проекти
Щоб перевірити всі проекти, вам потрібно згенерувати файл gcp.spc, вказуючи всі проекти для тестування. Ви можете просто слідувати вказівкам з наступного скрипту.
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"
Щоб перевірити інші GCP інсайти (корисні для перерахунку сервісів), використовуйте: https://github.com/turbot/steampipe-mod-gcp-insights
Щоб перевірити код Terraform GCP: https://github.com/turbot/steampipe-mod-terraform-gcp-compliance
Більше плагінів GCP для 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
Щоб перевірити код Terraform AWS: https://github.com/turbot/steampipe-mod-terraform-aws-compliance
Більше плагінів AWS для Steampipe: https://github.com/orgs/turbot/repositories?q=aws {{#endtab }} {{#endtabs }}
cs-suite
AWS, GCP, Azure, DigitalOcean.
Вимагає python2.7 і виглядає непідтримуваним.
Nessus
Nessus має Аудит хмарної інфраструктури сканування, що підтримує: AWS, Azure, Office 365, Rackspace, Salesforce. Деякі додаткові налаштування в Azure потрібні для отримання Client Id.
cloudlist
Cloudlist є мульти-хмарним інструментом для отримання активів (імен хостів, IP-адрес) від постачальників хмарних послуг.
{{#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="Другий таб" }}
## For GCP it requires service account JSON credentials
cloudlist -config </path/to/config>
{{#endtab }} {{#endtabs }}
картографія
Картографія - це інструмент на Python, який консолідує інфраструктурні активи та відносини між ними в інтуїтивно зрозумілому графічному вигляді, що працює на базі Neo4j.
{{#tabs }} {{#tab name="Встановлення" }}
# 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 збирає активи та відносини з сервісів і систем, включаючи хмарну інфраструктуру, SaaS-додатки, засоби безпеки та інше, в інтуїтивно зрозумілому графічному вигляді, підтримуваному базою даних 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
Виявлення найбільш привілейованих користувачів у відсканованому середовищі AWS або Azure, включаючи AWS Shadow Admins. Він використовує 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
Інструмент для знаходження інфраструктури, файлів та додатків компанії (цілі) на провідних хмарних платформах (Amazon, Google, Microsoft, DigitalOcean, Alibaba, Vultr, Linode).
CloudFox
- CloudFox - це інструмент для знаходження експлуатованих шляхів атаки в хмарній інфраструктурі (в даний час підтримуються лише AWS та Azure, GCP незабаром).
- Це інструмент для перерахунку, який призначений для доповнення ручного pentesting.
- Він не створює і не модифікує жодні дані в хмарному середовищі.
Більше списків інструментів безпеки хмари
GCP
{{#ref}} gcp-security/ {{#endref}}
Workspace
{{#ref}} workspace-security/ {{#endref}}
AWS
{{#ref}} aws-security/ {{#endref}}
Azure
{{#ref}} azure-security/ {{#endref}}
Attack Graph
Stormspotter створює “графік атаки” ресурсів у підписці Azure. Це дозволяє червоним командам та pentesters візуалізувати поверхню атаки та можливості для переходу в межах орендаря, а також значно покращує вашу оборону для швидкої орієнтації та пріоритизації роботи з реагування на інциденти.
Office365
Вам потрібен Global Admin або принаймні Global Admin Reader (але зверніть увагу, що Global Admin Reader має деякі обмеження). Однак ці обмеження з'являються в деяких PS модулях і можуть бути обійдені, отримуючи доступ до функцій через веб-додаток.
{{#include ../banners/hacktricks-training.md}}