# Pentesting Cloud Methodology
{{#include ../banners/hacktricks-training.md}}
## Temel Metodoloji
Her bulutun kendine özgü özellikleri vardır, ancak genel olarak bir pentester'ın bulut ortamını test ederken kontrol etmesi gereken birkaç **ortak şey** vardır:
- **Benchmark kontrolleri**
- Bu, **ortamın boyutunu** ve **kullanılan hizmetleri** anlamanıza yardımcı olacaktır.
- Ayrıca, bu testlerin çoğunu **otomatik araçlarla** gerçekleştirebileceğiniz için bazı **hızlı yanlış yapılandırmaları** bulmanızı sağlar.
- **Hizmetlerin Sayımı**
- Benchmark testlerini doğru bir şekilde gerçekleştirdiyseniz burada çok fazla yanlış yapılandırma bulamayabilirsiniz, ancak benchmark testinde bakılmayan bazılarını bulabilirsiniz.
- Bu, bulut ortamında **tam olarak neyin kullanıldığını** bilmenizi sağlar.
- Bu, sonraki adımlarda çok yardımcı olacaktır.
- **Açık varlıkları kontrol et**
- Bu, önceki bölüm sırasında yapılabilir, **potansiyel olarak açık olan her şeyi** ve nasıl erişilebileceğini **bulmalısınız**.
- Burada, web sayfaları veya diğer açık portlara sahip örnekler gibi **manuel olarak açılmış altyapıyı** ve ayrıca **açık hale getirilebilecek diğer bulut yönetilen hizmetleri** (örneğin DB'ler veya bucket'lar) ele alıyorum.
- Sonra, **bu kaynağın açılıp açılamayacağını** kontrol etmelisiniz (gizli bilgi mi? zafiyetler mi? açığa çıkan hizmetteki yanlış yapılandırmalar mı?).
- **İzinleri kontrol et**
- Burada, bulut içindeki her rol/kullanıcının **tüm izinlerini bulmalısınız** ve bunların nasıl kullanıldığını öğrenmelisiniz.
- Çok **yüksek ayrıcalıklı** (her şeyi kontrol eden) hesaplar mı var? Kullanılmayan anahtarlar mı oluşturulmuş?... Bu kontrollerin çoğu zaten benchmark testlerinde yapılmış olmalıdır.
- Müşteri OpenID veya SAML veya diğer **federasyon** kullanıyorsa, onlardan **her rolün nasıl atandığı** hakkında daha fazla **bilgi** istemeniz gerekebilir (admin rolünün 1 kullanıcıya mı yoksa 100 kullanıcıya mı atandığı aynı değildir).
- Hangi kullanıcıların **admin** izinlerine sahip olduğunu bulmak **yeterli değildir** "\*:\*". Kullanılan hizmetlere bağlı olarak çok sayıda **diğer izin** çok **hassas** olabilir.
- Dahası, izinleri kötüye kullanarak takip edilebilecek **potansiyel privesc** yolları vardır. Tüm bu şeyler dikkate alınmalı ve **mümkün olduğunca fazla privesc yolu** rapor edilmelidir.
- **Entegrasyonları kontrol et**
- Bulut ortamında **diğer bulutlar veya SaaS ile entegrasyonların** kullanılması oldukça olasıdır.
- Denetlediğiniz bulutun **diğer platformlarla entegrasyonları** için, bu entegrasyonu **(kötüye) kullanma** erişimine sahip olanları bildirmeli ve gerçekleştirilen eylemin **ne kadar hassas** olduğunu sormalısınız.\
Örneğin, GCP'den veri alan bir AWS bucket'ında kimlerin yazma yetkisi olduğunu sorun (GCP'de bu veriyi işlerken eylemin ne kadar hassas olduğunu sorun).
- Denetlediğiniz bulut içindeki **harici platformlardan gelen entegrasyonlar** için, bu entegrasyonu **(kötüye) kullanma** erişimine sahip olanları sormalı ve verinin nasıl kullanıldığını kontrol etmelisiniz.\
Örneğin, bir hizmet GCR'de barındırılan bir Docker görüntüsü kullanıyorsa, kimlerin bunu değiştirme erişimine sahip olduğunu ve bu görüntü çalıştırıldığında hangi hassas bilgi ve erişim elde edileceğini sormalısınız.
## Çoklu Bulut Araçları
Farklı bulut ortamlarını test etmek için kullanılabilecek birkaç araç vardır. Kurulum adımları ve bağlantılar bu bölümde belirtilecektir.
### [PurplePanda](https://github.com/carlospolop/purplepanda)
**Bulutlarda ve bulutlar/SaaS arasında kötü yapılandırmaları ve privesc yollarını tanımlamak için bir araç.**
{{#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 ve Azure**'ı destekler. Her sağlayıcının nasıl yapılandırılacağını kontrol edin [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="Kurulum" }}
```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 Altyapısı
{{#tabs }}
{{#tab name="Kurulum" }}
```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'i indirin ve kurun ([https://steampipe.io/downloads](https://steampipe.io/downloads)). Ya da Brew kullanın:
```
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
```
Tüm Projeleri Kontrol Et
Tüm projeleri kontrol etmek için test edilecek tüm projeleri belirten `gcp.spc` dosyasını oluşturmanız gerekir. Aşağıdaki scriptteki talimatları takip edebilirsiniz.
```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"
```
**Diğer GCP içgörülerini** (hizmetleri listelemek için yararlıdır) kontrol etmek için: [https://github.com/turbot/steampipe-mod-gcp-insights](https://github.com/turbot/steampipe-mod-gcp-insights)
Terraform GCP kodunu kontrol etmek için: [https://github.com/turbot/steampipe-mod-terraform-gcp-compliance](https://github.com/turbot/steampipe-mod-terraform-gcp-compliance)
Steampipe'ın daha fazla GCP eklentisi: [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 kodunu kontrol etmek için: [https://github.com/turbot/steampipe-mod-terraform-aws-compliance](https://github.com/turbot/steampipe-mod-terraform-aws-compliance)
Steampipe'ın daha fazla AWS eklentisi: [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 gerektirir ve bakımsız görünüyor.
### Nessus
Nessus'un _**Audit Cloud Infrastructure**_ taraması, AWS, Azure, Office 365, Rackspace, Salesforce'u desteklemektedir. **Client Id** almak için **Azure**'da bazı ek yapılandırmalar gereklidir.
### [**cloudlist**](https://github.com/projectdiscovery/cloudlist)
Cloudlist, Bulut Sağlayıcılarından Varlıklar (Host Adları, IP Adresleri) almak için **çoklu bulut aracı**dır.
{{#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="İkinci Sekme" }}
```bash
## For GCP it requires service account JSON credentials
cloudlist -config
```
{{#endtab }}
{{#endtabs }}
### [**cartography**](https://github.com/lyft/cartography)
Cartography, altyapı varlıklarını ve bunlar arasındaki ilişkileri, Neo4j veritabanı tarafından desteklenen sezgisel bir grafik görünümünde birleştiren bir Python aracıdır.
{{#tabs }}
{{#tab name="Install" }}
```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, bulut altyapısı, SaaS uygulamaları, güvenlik kontrolleri ve daha fazlası dahil olmak üzere hizmetlerden ve sistemlerden varlıkları ve ilişkileri toplayarak, Neo4j veritabanı ile desteklenen sezgisel bir grafik görünümüne dönüştürür.
{{#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)
Tarayıcı AWS veya Azure ortamındaki en ayrıcalıklı kullanıcıları, AWS Shadow Admin'leri de dahil olmak üzere keşfedin. PowerShell kullanır.
```bash
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)
Bir şirketin (hedef) altyapısını, dosyalarını ve en büyük bulut sağlayıcılarındaki (Amazon, Google, Microsoft, DigitalOcean, Alibaba, Vultr, Linode) uygulamaları bulmak için bir araç.
### [CloudFox](https://github.com/BishopFox/cloudfox)
- CloudFox, bulut altyapısında (şu anda yalnızca AWS ve Azure destekleniyor, GCP yakında gelecek) istismar edilebilir saldırı yollarını bulmak için bir araçtır.
- Manuel pentesting'i tamamlamak için tasarlanmış bir numaralandırma aracıdır.
- Bulut ortamında herhangi bir veri oluşturmaz veya değiştirmez.
### Daha fazla bulut güvenlik aracı listesi
- [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}}
### Saldırı Grafiği
[**Stormspotter** ](https://github.com/Azure/Stormspotter) Azure aboneliğindeki kaynakların “saldırı grafiğini” oluşturur. Kırmızı takımlara ve pentesterlara saldırı yüzeyini ve bir kiracı içindeki pivot fırsatlarını görselleştirme imkanı tanır ve savunucularınızı olay yanıtı çalışmalarını hızlı bir şekilde yönlendirmek ve önceliklendirmek için güçlendirir.
### Office365
**Global Admin** veya en azından **Global Admin Reader**'a ihtiyacınız var (ancak Global Admin Reader'ın biraz sınırlı olduğunu unutmayın). Ancak, bu sınırlamalar bazı PS modüllerinde ortaya çıkmakta ve özelliklere **web uygulaması aracılığıyla** erişerek aşılabilir.
{{#include ../banners/hacktricks-training.md}}