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