Files
hacktricks-cloud/src/pentesting-cloud/pentesting-cloud-methodology.md
T

18 KiB
Raw Blame History

Методологія Pentesting Cloud

{{#include ../banners/hacktricks-training.md}}

Базова методологія

Кожна хмара має свої особливості, але загалом є кілька спільних речей, які pentester має перевірити під час тестування хмарного середовища:

  • Перевірки бенчмарку
  • Це допоможе вам зрозуміти розмір середовища та використовувані сервіси
  • Це також дозволить знайти деякі швидкі неправильні конфігурації, оскільки більшість цих тестів можна виконати за допомогою автоматизованих інструментів
  • Перерахування сервісів
  • Ймовірно ви не знайдете набагато більше неправильних конфігурацій тут, якщо правильно виконали бенчмарк-перевірки, але може трапитись щось, що не шукали під час бенчмарку.
  • Це дозволить вам знати що саме використовується в хмарному середовищі
  • Це дуже допоможе на наступних кроках
  • Перевірка експонованих ресурсів
  • Це можна робити під час попереднього розділу, потрібно з’ясувати все, що потенційно експоновано в Internet якимось чином і як до цього можна отримати доступ.
  • Тут я маю на увазі мануально експоновану інфраструктуру — наприклад інстанси з веб-сторінками або іншими відкритими портами, а також інші керовані хмарні сервіси, які можуть бути налаштовані як експоновані (наприклад DBs або buckets)
  • Потім слід перевірити чи можна отримати доступ до цього ресурсу (конфіденційна інформація? вразливості? неправильні конфігурації в експонованому сервісі?)
  • Перевірка дозволів
  • Тут ви повинні виявити всі дозволи кожної ролі/кожного користувача всередині хмари і як вони використовуються
  • Забагато високо привілейованих (control everything) акаунтів? Згенеровані ключі, якими не користуються? ... Більшість цих перевірок вже має бути виконана під час бенчмарку
  • Якщо клієнт використовує OpenID або SAML або іншу federation, можливо вам потрібно попросити додаткову інформацію про те, як призначається кожна роль (не те саме, коли роль admin призначена 1 користувачу або 100)
  • Недостатньо лише знайти, які користувачі мають права admin "*:*". Є багато інших дозволів, які залежно від використовуваних сервісів можуть бути дуже чутливими.
  • Більше того, існують потенційні privesc шляхи, які можна використати зловживаючи дозволами. Усі ці речі потрібно врахувати і по можливості задокументувати якомога більше privesc шляхів.
  • Перевірка інтеграцій
  • Дуже ймовірно, що інтеграції з іншими хмарами або SaaS використовуються в межах хмарного середовища.
  • Для інтеграцій хмари, яку ви аудитуєте, з іншими платформами слід повідомити хто має доступ (щоб (злов)використати цю інтеграцію) і запитати, наскільки чутлива дія, що виконується.
    Наприклад, хто може записувати в AWS bucket, звідки GCP отримує дані (запитайте, наскільки чутлива ця дія в GCP при обробці тих даних).
  • Для інтеграцій всередині хмари, яку ви аудитуєте, з зовнішніх платформ, слід запитати хто зовні має доступ (щоб (злов)використати цю інтеграцію) і перевірити, як ці дані використовуються.
    Наприклад, якщо сервіс використовує Docker image, розміщений в GCR, запитайте, хто має доступ змінювати його та яку чутливу інформацію і доступ отримає цей образ при виконанні всередині AWS cloud.

Інструменти Multi-Cloud

Існує кілька інструментів, які можна використовувати для тестування різних хмарних середовищ. Кроки інсталяції та посилання будуть вказані в цьому розділі.

PurplePanda

Інструмент для виявлення неправильних конфігурацій та privesc path у хмарах та між хмарами/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" }}

# 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" }} Завантажте та встановіть 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 insights (корисні для перерахування сервісів), використовуйте: 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 має скан Audit Cloud Infrastructure, який підтримує: AWS, Azure, Office 365, Rackspace, Salesforce. Для отримання Client Id у Azure потрібні додаткові налаштування.

cloudlist

Cloudlist — це multi-cloud tool for getting Assets (Hostnames, IP Addresses) з Cloud Providers.

{{#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 — інструмент на Python, який консолідує інфраструктурні активи та зв'язки між ними в інтуїтивному графовому поданні, що працює на базі 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 збирає активи та взаємозв'язки з сервісів і систем, включно з cloud infrastructure, SaaS applications, security controls та іншими, у зручне графове подання на базі Neo4j database.

{{#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.
  • Він не створює й не змінює жодних даних у хмарному середовищі.

Додаткові списки інструментів для безпеки хмар

Google

GCP

{{#ref}} gcp-security/ {{#endref}}

Workspace

{{#ref}} workspace-security/ {{#endref}}

AWS

{{#ref}} aws-security/ {{#endref}}

Azure

{{#ref}} azure-security/ {{#endref}}

Загальні функції безпеки хмар

Конфіденційні обчислення

{{#ref}} confidential-computing/luks2-header-malleability-null-cipher-abuse.md {{#endref}}

{{#include ../banners/hacktricks-training.md}}