Translated ['', 'src/pentesting-cloud/azure-security/az-enumeration-tool

This commit is contained in:
Translator
2026-05-26 19:12:30 +00:00
parent 1c9beffaa3
commit 04e4f038e8
@@ -1,11 +1,11 @@
# Az - Enumeration Tools
# Az - Enumeration Araçları
{{#include ../../banners/hacktricks-training.md}}
## Linux'te PowerShell'i Kurma
## Linux'ta PowerShell Kurulumu
> [!TIP]
> Linux'te PowerShell Core'u kurmanız gerekecek:
> Linux'ta PowerShell Core kurmanız gerekecek:
```bash
sudo apt-get update
sudo apt-get install -y wget apt-transport-https software-properties-common
@@ -24,19 +24,19 @@ pwsh
# Az cli
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
```
## MacOS'ta PowerShell'i Yükleme
## MacOS'ta PowerShell kurun
Talimatlar için [**documentation**](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-macos?view=powershell-7.4):
[**documentation**](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-macos?view=powershell-7.4) içindeki talimatlar:
1. `brew` henüz yüklü değilse yükleyin:
1. Henüz kurulu değilse `brew` kurun:
```bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```
2. PowerShell'in en son kararlı sürümünü yükleyin:
2. PowerShell'in en son kararlı sürümünü kurun:
```sh
brew install powershell/tap/powershell
```
3. PowerShell'i çalıştır:
3. PowerShell'ı çalıştırın:
```sh
pwsh
```
@@ -45,23 +45,23 @@ pwsh
brew update
brew upgrade powershell
```
## Ana Enumeration Araçları
## Main Enumeration Tools
### az cli
[**Azure Command-Line Interface (CLI)**](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli) Python ile yazılmış, çapraz platform bir araç olup (çoğu) Azure ve Entra ID kaynaklarını yönetmek ve idare etmek için kullanılır. Azure'a bağlanır ve komut satırı veya scriptler aracılığıyla yönetim komutlarını çalıştırır.
[**Azure Command-Line Interface (CLI)**](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli) Python ile yazılmış, Azure ve Entra ID kaynaklarının çoğunu yönetmek ve idare etmek için kullanılan platformlar arası bir araçtır. Azure'a bağlanır ve komut satırı veya scriptler aracılığıyla yönetim komutlarını çalıştırır.
Follow this link for the [**installation instructions¡**](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli#install).
Kurulum talimatları için şu bağlantıyı takip edin: [**installation instructions¡**](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli#install).
Commands in Azure CLI are structured using a pattern of: `az <service> <action> <parameters>`
Azure CLI içindeki komutlar şu kalıp kullanılarak yapılandırılır: `az <service> <action> <parameters>`
#### Debug | MitM az cli
**`--debug`** parametresini kullanarak aracın **`az`** gönderdiği tüm istekleri görmek mümkündür:
**`--debug`** parametresini kullanarak, **`az`** aracının gönderdiği tüm requests'i görmek mümkündür:
```bash
az account management-group list --output table --debug
```
Aracı üzerinde bir **MitM** gerçekleştirmek ve gönderdiği tüm istekleri manuel olarak kontrol etmek için şunu yapabilirsiniz:
Araca bir **MitM** yapmak ve gönderdiği **tüm istekleri** manuel olarak kontrol etmek için şunu yapabilirsiniz:
{{#tabs }}
{{#tab name="Bash" }}
@@ -105,42 +105,42 @@ $env:HTTP_PROXY="http://127.0.0.1:8080"
{{#endtabs }}
<details>
<summary><strong>“CA cert does not include key usage extension” hatasını düzeltme</strong></summary>
<summary><strong>“CA cert does not include key usage extension” düzeltme</strong></summary>
### Hatanın nedeni
### Hata neden oluşur
When Azure CLI authenticates, it makes HTTPS requests (via MSAL → Requests → OpenSSL). If youre intercepting TLS with Burp, Burp generates “on the fly” certificates for sites like `login.microsoftonline.com` and signs them with Burps CA.
Azure CLI kimlik doğrulaması yaparken HTTPS istekleri yapar (MSAL → Requests → OpenSSL üzerinden). TLS trafiğini Burp ile intercept ediyorsanız, Burp `login.microsoftonline.com` gibi siteler için “on the fly” sertifikalar üretir ve bunları Burps CA ile imzalar.
Yeni yığınlarda (Python 3.13 + OpenSSL 3), CA doğrulaması daha katıdır:
Daha yeni stacklerde (Python 3.13 + OpenSSL 3), CA doğrulaması daha katıdır:
- Bir CA sertifikası **Basic Constraints: `CA:TRUE`** içermeli ve sertifika imzalamaya izin veren bir **Key Usage** uzantısına sahip olmalıdır (**`keyCertSign`**, genelde **`cRLSign`** de).
- Bir CA certificate, **Basic Constraints: `CA:TRUE`** ve certificate signinge izin veren bir **Key Usage** extension içermelidir (**`keyCertSign`**, ve genellikle **`cRLSign`**).
Burpın varsayılan CA'sı (PortSwigger CA) eski olup genelde Key Usage uzantısından yoksundur; bu yüzden OpenSSL, ona “güvenseniz bile reddeder.
Burps default CA (PortSwigger CA) eskidir ve genellikle Key Usage extension’ını içermez; bu yüzden siz “trust” etseniz bile OpenSSL onu reddeder.
Bu şu hatalara yol açar:
Bu da şu hataları üretir:
- `CA cert does not include key usage extension`
- `CERTIFICATE_VERIFY_FAILED`
- `self-signed certificate in certificate chain`
Bu yüzden şunları yapmalısınız:
Bu yüzden şunları yapmanız gerekir:
1. Doğru Key Usage içeren modern bir CA oluşturun.
2. Burp'ın yakalanan sertifikaları imzalarken onu kullanmasını sağlayın.
3. macOS'ta bu CA'yı güvenilir olarak ekleyin.
4. Azure CLI / Requests'i o CA bundle'a yönlendirin.
1. Uygun Key Usage içeren modern bir CA oluşturun.
2. Burpnin intercept edilen certleri imzalamak için bunu kullanmasını sağlayın.
3. O CAyı macOSta trust edin.
4. Azure CLI / Requestsi o CA bundlea yönlendirin.
### Adım adım: çalışan yapılandırma
#### 0) Ön koşullar
#### 0) Önkoşullar
- Burp yerel olarak çalışıyor (proxy at `127.0.0.1:8080`)
- Azure CLI yüklü (Homebrew)
- `sudo` kullanabiliyor olun (CA'yı sistem keychain'ine güvenilir olarak eklemek için)
- Burp yerel olarak çalışıyor olsun (proxy: `127.0.0.1:8080`)
- Azure CLI kurulmuş olsun (Homebrew)
- `sudo` kullanabiliyor olun (CAyı system keychainde trust etmek için)
#### 1) Standartlara uygun bir Burp CA oluşturun (PEM + KEY)
#### 1) Standards-compliant bir Burp CA oluşturun (PEM + KEY)
Create an OpenSSL config file that explicitly sets CA extensions:
CA extensionlarını açıkça ayarlayan bir OpenSSL config dosyası oluşturun:
```bash
mkdir -p ~/burp-ca && cd ~/burp-ca
@@ -164,7 +164,7 @@ subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
EOF
```
CA sertifikası + özel anahtar oluşturun:
CA sertifikasını + private key oluşturun:
```bash
openssl req -x509 -new -nodes \
-days 3650 \
@@ -172,18 +172,18 @@ openssl req -x509 -new -nodes \
-out burp-ca.pem \
-config burp-ca.cnf
```
Basit doğrulama (Key Usage'ı mutlaka görmelisiniz):
Sanity check (Key Usage görmelisiniz):
```bash
openssl x509 -in burp-ca.pem -noout -text | egrep -A3 "Basic Constraints|Key Usage"
```
Şunun gibi şeyler içermesi beklenir:
Beklenen şey şuna benzer:
- `CA:TRUE`
- `Key Usage: ... Certificate Sign, CRL Sign`
#### 2) PKCS#12'e dönüştürme (Burp içe aktarma formatı)
#### 2) PKCS#12'ye dönüştür (Burp import formatı)
Burp sertifika + özel anahtar ister, en kolay yol PKCS#12:
Burp certificate + private key ister, en kolayı PKCS#12 olarak:
```bash
openssl pkcs12 -export \
-out burp-ca.p12 \
@@ -191,41 +191,41 @@ openssl pkcs12 -export \
-in burp-ca.pem \
-name "Burp Custom Root CA"
```
Dışa aktarma parolası istenecek (bir tane belirleyin; Burp bunu soracak).
Sizden bir export password istenecek (bir tane belirleyin; Burp bunu soracak).
#### 3) CA'yı Burp'a içe aktarın ve Burp'u yeniden başlatın
#### 3) CA'yı Burp'a import et ve Burp'u restart et
Burp içinde:
- Proxy → Options
- Import / export CA certificate öğesini bulun
- Import CA certificate'e tıklayın
- PKCS#12'yi seçin
- `burp-ca.p12` dosyasını seçin
- Parolayı girin
- Burp'u tamamen yeniden başlatın (önemli)
- Find Import / export CA certificate
- Click Import CA certificate
- Choose PKCS#12
- Select `burp-ca.p12`
- Enter the password
- Restart Burp completely (important)
Neden yeniden başlatmak? Burp, yeniden başlatılana kadar eski CA'yı kullanmaya devam edebilir.
Neden restart? Burp, restart edilene kadar eski CA'yı kullanmaya devam edebilir.
#### 4) macOS system keychain'de yeni CA'ya güvenin
#### 4) Yeni CA'ya macOS system keychain içinde trust ver
Bu sayede sistem uygulamaları ve birçok TLS yığını CA'yı güvenilir kabul eder.
Bu, system apps ve birçok TLS stack'in CA'ya trust etmesini sağlar.
```bash
sudo security add-trusted-cert \
-d -r trustRoot \
-k /Library/Keychains/System.keychain \
~/burp-ca/burp-ca.pem
```
(If you prefer GUI: Keychain Access → System → Certificates → import → set “Always Trust”.)
(Arayüzü tercih ediyorsanız: Keychain Access → System → Certificates → import → “Always Trust” olarak ayarlayın.)
#### 5) Proxy ortam değişkenlerini yapılandırın
#### 5) Proxy env vars yapılandırın
```bash
export HTTPS_PROXY="http://127.0.0.1:8080"
export HTTP_PROXY="http://127.0.0.1:8080"
```
#### 6) Requests/Azure CLI'yi Burp CA'nızı güvenilir sayacak şekilde yapılandırın
#### 6) Burp CA'nize güvenmesi için Requests/Azure CLI'yi yapılandırın
Azure CLI dahili olarak Python Requests kullanır; her ikisini de şu şekilde ayarlayın:
Azure CLI dahili olarak Python Requests kullanır; ikisini de ayarlayın:
```bash
export REQUESTS_CA_BUNDLE="$HOME/burp-ca/burp-ca.pem"
export SSL_CERT_FILE="$HOME/burp-ca/burp-ca.pem"
@@ -233,24 +233,24 @@ export SSL_CERT_FILE="$HOME/burp-ca/burp-ca.pem"
Notlar:
- `REQUESTS_CA_BUNDLE` Requests tarafından kullanılır.
- `SSL_CERT_FILE` diğer TLS kullanan uygulamalara ve uç durumlara yardımcı olur.
- CA doğru olduğunda genellikle eski `ADAL_PYTHON_SSL_NO_VERIFY` / `AZURE_CLI_DISABLE_CONNECTION_VERIFICATION`'e ihtiyaç duymazsınız.
- `SSL_CERT_FILE`, diğer TLS tüketicileri ve edge caseler için yardımcı olur.
- CA doğru olduğunda genellikle eski `ADAL_PYTHON_SSL_NO_VERIFY` / `AZURE_CLI_DISABLE_CONNECTION_VERIFICATION` ayarlarına artık ihtiyaç duymazsınız.
#### 7) Burp'un gerçekten yeni CA'nızla imzaladığını doğrulayın (kritik kontrol)
#### 7) Burpnin gerçekten yeni CAnız ile imzaladığını doğrulayın (kritik kontrol)
Bu, yakalama zincirinizin doğru olduğunu onaylar:
Bu, interception zincirinizin doğru olduğunu doğrular:
```bash
openssl s_client -connect login.microsoftonline.com:443 \
-proxy 127.0.0.1:8080 </dev/null 2>/dev/null \
| openssl x509 -noout -issuer
```
Beklenen issuer CA adınızı içerir, örn.:
Beklenen issuer, CA adınızı içerir, örneğin:
`O=Burp Custom CA, CN=Burp Custom Root CA`
Hâlâ PortSwigger CA görüyorsanız, Burp içe aktardığınız CA'yı kullanmıyor → içe aktarmayı tekrar kontrol edin ve yeniden başlatın.
Hâlâ PortSwigger CA görüyorsanız, Burp içe aktardığınız CAyı kullanmıyor demektir → import işlemini yeniden kontrol edin ve yeniden başlatın.
#### 8) Python Requests'in Burp üzerinden çalıştığını doğrulayın
#### 8) Verify Python Requests works through Burp
```bash
python3 - <<'EOF'
import requests
@@ -258,61 +258,59 @@ requests.get("https://login.microsoftonline.com")
print("OK")
EOF
```
Beklenen: `OK`
#### 9) Azure CLI testi
```bash
az account get-access-token --resource=https://management.azure.com/
```
Zaten oturum açtıysanız, bir `accessToken` içeren JSON döndürmelidir.
Eğer zaten giriş yapmışsanız, `accessToken` içeren JSON döndürmelidir.
</details>
### Az PowerShell
Azure PowerShell, PowerShell komut satırından Azure kaynaklarını doğrudan yönetmek için cmdlet'ler içeren bir modüldür.
Azure PowerShell, Azure kaynaklarını doğrudan PowerShell komut satırından yönetmek için kullanılan cmdlet'lerden oluşan bir modüldür.
Follow this link for the [**installation instructions**](https://learn.microsoft.com/en-us/powershell/azure/install-azure-powershell).
[**kurulum talimatları**](https://learn.microsoft.com/en-us/powershell/azure/install-azure-powershell) için bu bağlantıyı takip edin.
Commands in Azure PowerShell AZ Module are structured like: `<Action>-Az<Service> <parameters>`
Azure PowerShell AZ Module içindeki komutlar şu şekilde yapılandırılır: `<Action>-Az<Service> <parameters>`
#### Debug | MitM Az PowerShell
Parametre **`-Debug`** kullanıldığında aracın gönderdiği tüm istekleri görmek mümkündür:
**`-Debug`** parametresini kullanarak tool'un gönderdiği tüm istekleri görmek mümkündür:
```bash
Get-AzResourceGroup -Debug
```
In order to do a **MitM** to the tool and **check all the requests** it's sending manually you can set the env variables `HTTPS_PROXY` and `HTTP_PROXY` according to the [**docs**](https://learn.microsoft.com/en-us/powershell/azure/az-powershell-proxy).
**MitM** yapmak ve gönderdiği tüm requests'leri manuel olarak **kontrol etmek** için, [**docs**](https://learn.microsoft.com/en-us/powershell/azure/az-powershell-proxy) doğrultusunda `HTTPS_PROXY` ve `HTTP_PROXY` env variables ayarlayabilirsiniz.
### Microsoft Graph PowerShell
Microsoft Graph PowerShell, tek bir endpoint üzerinden SharePoint, Exchange ve Outlook gibi servisler de dahil olmak üzere tüm Microsoft Graph API'larına erişim sağlayan çapraz platform bir SDK'dır. PowerShell 7+, MSAL aracılığıyla modern kimlik doğrulamayı, harici kimlikleri (external identities) ve gelişmiş sorguları destekler. En az ayrıcalık (least privilege) ilkesine odaklanarak güvenli işlemler sağlar ve Microsoft Graph API'nin en son özellikleriyle uyumlu kalmak için düzenli güncellemeler alır.
Microsoft Graph PowerShell, SharePoint, Exchange ve Outlook gibi services dahil olmak üzere tüm Microsoft Graph APIs'lerine tek bir endpoint kullanarak erişim sağlayan cross-platform bir SDK'dır. PowerShell 7+, MSAL üzerinden modern authentication, external identities ve advanced queries destekler. Least privilege access odaklı yapısıyla secure operations sağlar ve en son Microsoft Graph API features ile uyumlu kalmak için düzenli olarak updates alır.
Follow this link for the [**installation instructions**](https://learn.microsoft.com/en-us/powershell/microsoftgraph/installation).
[**installation instructions**](https://learn.microsoft.com/en-us/powershell/microsoftgraph/installation) için bu linki takip edin.
Commands in Microsoft Graph PowerShell are structured like: `<Action>-Mg<Service> <parameters>`
Microsoft Graph PowerShell içindeki commands şu şekilde yapılandırılır: `<Action>-Mg<Service> <parameters>`
#### Microsoft Graph PowerShell Hata Ayıklama
#### Debug Microsoft Graph PowerShell
Using the parameter **`-Debug`** it's possible to see all the requests the tool is sending:
**`-Debug`** parameter'ını kullanarak tool'un gönderdiği tüm requests'leri görmek mümkündür:
```bash
Get-MgUser -Debug
```
### ~~**AzureAD Powershell**~~
The Azure Active Directory (AD) module, now **deprecated**, is part of Azure PowerShell for managing Azure AD resources. Azure AD kaynaklarını yönetmek için kullanılan Azure PowerShell'in bir parçasıdır. Entra ID'de kullanıcıları, grupları ve uygulama kayıtlarını yönetmek gibi görevler için cmdlet'ler sağlar.
Azure Active Directory (AD) modülü, artık **deprecated**, Azure AD kaynaklarını yönetmek için Azure PowerShellin bir parçasıdır. Kullanıcıları, grupları ve application registrations’ı Entra ID içinde yönetmek gibi görevler için cmdletler sağlar.
> [!TIP]
> Bu, Microsoft Graph PowerShell ile değiştirildi.
> Bu, Microsoft Graph PowerShell ile değiştirilmiştir
Follow this link for the [**installation instructions**](https://www.powershellgallery.com/packages/AzureAD).
[**kurulum talimatları**](https://www.powershellgallery.com/packages/AzureAD) için bu bağlantıyı takip edin.
## Automated Recon & Compliance Tools
### [turbot azure plugins](https://github.com/orgs/turbot/repositories?q=mod-azure)
Turbot with steampipe and powerpipe allows to gather information from Azure and Entra ID and perform compliance checks and find misconfigurations. Turbot, steampipe ve powerpipe ile Azure ve Entra ID'den bilgi toplamanıza, uyumluluk kontrolleri yapmanıza ve yanlış yapılandırmaları bulmanıza olanak tanır. The currently most recommended Azure modules to run are:
Steampipe ve powerpipe ile Turbot, Azure ve Entra IDden bilgi toplamaya ve compliance kontrolleri yapıp misconfigurations bulmaya olanak sağlar. Şu anda çalıştırılması en çok önerilen Azure modülleri şunlardır:
- [https://github.com/turbot/steampipe-mod-azure-compliance](https://github.com/turbot/steampipe-mod-azure-compliance)
- [https://github.com/turbot/steampipe-mod-azure-insights](https://github.com/turbot/steampipe-mod-azure-insights)
@@ -343,9 +341,9 @@ powerpipe server
```
### [Prowler](https://github.com/prowler-cloud/prowler)
Prowler, AWS, Azure, Google Cloud ve Kubernetes için güvenlik en iyi uygulamaları değerlendirmeleri, denetimler, olay müdahalesi, sürekli izleme, hardening ve forensics readiness gerçekleştirmek üzere kullanılan açık kaynaklı bir güvenlik aracıdır.
Prowler, AWS, Azure, Google Cloud ve Kubernetes security best practices değerlendirmeleri, audits, incident response, continuous monitoring, hardening ve forensics readiness yapmak için kullanılan bir Open Source security tool'dur.
Temelde bir Azure ortamı üzerinde yüzlerce kontrol çalıştırarak güvenlik yanlış yapılandırmalarını bulmamıza ve sonuçları json (ve diğer metin formatlarında) olarak toplamamıza veya web üzerinde görüntülememize olanak tanır.
Temel olarak, bir Azure environment üzerinde security misconfigurations bulmak için yüzlerce check çalıştırmamıza ve sonuçları json (ve diğer text format) olarak toplamamıza veya web üzerinden kontrol etmemize olanak tanır.
```bash
# Create a application with Reader role and set the tenant ID, client ID and secret in prowler so it access the app
@@ -367,9 +365,9 @@ docker run --rm -e "AZURE_CLIENT_ID=<client-id>" -e "AZURE_TENANT_ID=<tenant-id>
```
### [Monkey365](https://github.com/silverhack/monkey365)
Azure abonelikleri ve Microsoft Entra ID güvenlik yapılandırma incelemelerini otomatik olarak gerçekleştirmeyi sağlar.
Azure subscriptions ve Microsoft Entra ID güvenlik yapılandırma incelemelerini otomatik olarak gerçekleştirmeyi sağlar.
HTML raporları, github repository klasörünün içindeki `./monkey-reports` dizininde saklanır.
HTML raporları, github repository klasörü içindeki `./monkey-reports` dizininde saklanır.
```bash
git clone https://github.com/silverhack/monkey365
Get-ChildItem -Recurse monkey365 | Unblock-File
@@ -390,7 +388,7 @@ Invoke-Monkey365 -TenantId <tenant-id> -ClientId <client-id> -ClientSecret $Secu
```
### [ScoutSuite](https://github.com/nccgroup/ScoutSuite)
Scout Suite, manuel inceleme için yapılandırma verilerini toplar ve riskli alanları vurgular. Bulut ortamlarının güvenlik duruşunun değerlendirilmesine olanak tanıyan çoklu bulut güvenlik denetimi aracıdır.
Scout Suite, manuel inceleme için configuration verilerini toplar ve risk alanlarını vurgular. Bu, cloud ortamlarının security posture assessment’ını mümkün kılan multi-cloud security-auditing tooldur.
```bash
virtualenv -p python3 venv
source venv/bin/activate
@@ -406,18 +404,26 @@ python scout.py azure --cli
```
### [Azure-MG-Sub-Governance-Reporting](https://github.com/JulianHayward/Azure-MG-Sub-Governance-Reporting)
Bu, **bir Management Group ve Entra ID tenant içindeki tüm kaynakları ve izinleri görselleştirmenize** ve güvenlik yanlış yapılandırmalarını bulmanıza yardımcı olan bir PowerShell script'idir.
Bu, bir Management Group ve Entra ID tenant içindeki tüm resources ve permissionsu **görselleştirmenize** ve security misconfigurations bulmanıza yardımcı olan bir powershell scripttir.
Az PowerShell module kullanılarak çalışır; dolayısıyla bu araç tarafından desteklenen herhangi bir kimlik doğrulama yöntemi kullanılabilir.
Az PowerShell module kullanarak çalışır, bu yüzden bu tool tarafından desteklenen herhangi bir authentication, tool tarafından da desteklenir.
```bash
import-module Az
.\AzGovVizParallel.ps1 -ManagementGroupId <management-group-id> [-SubscriptionIdWhitelist <subscription-id>]
```
## Automated Post-Exploitation tools
### [**ROADRecon**](https://github.com/dirkjanm/ROADtools)
### [**ROADtools**](https://github.com/dirkjanm/ROADtools) / ROADrecon / ROADtx
ROADRecon'in enumeration'ı, Entra ID yapılandırması hakkında bilgi sağlar; örneğin users, groups, roles, conditional access policies...
ROADtools, Entra ID offensive research için başlıca open-source frameworklerden biridir. En ilgili bileşenler şunlardır:
- **`roadrecon`**: tenant discovery ve local dataset oluşturma (users, groups, roles, devices, service principals, applications, directory settings).
- **`roadtx`**: token acquisition/exchange, refresh-token reuse, device registration ve PRT workflows.
- **`roadlib`**: diğer modüller tarafından kullanılan daha düşük seviyeli auth/API library.
Toplanan data local bir SQLite database içinde saklanır ve ROADrecon web UI üzerinden incelenebilir; bu, persistence veya lateral movement planlamadan önce privileged users, role assignments, devices, service principals ve application relationshipsi map etmek için faydalıdır.
#### ROADrecon collection
```bash
cd ROADTools
pipenv shell
@@ -428,25 +434,57 @@ roadrecon auth --as-app --client "<client-id>" --password "<secret>" --tenant "<
roadrecon gather
roadrecon gui
```
ROADrecon başlangıçta Azure AD Graph hedefliyordu. **22 Mayıs 2026** itibarıyla, resmi repository hâlâ Microsoft Graph desteğini **`msgraph`** branchinde tutuyor ve **Tom2Byrne/ROADtools** gibi community forklar Graph tabanlı collection’ı güncellemeye devam ediyor. Graph destekli builds içinde, ROADrecon **`-mg`** switchini ekleyerek **`/users`**, **`/groups`**, **`/devices`**, **`/servicePrincipals`** ve **`/applications`** gibi endpointleri enumerate eder.
```bash
# Graph-capable ROADrecon builds
roadrecon auth -u test@corp.onmicrosoft.com -p "Welcome2022!"
roadrecon gather -mg
roadrecon gui
```
#### ROADtx yüksek değerli kullanım senaryoları
Zaten geçerli kimlik bilgilerin, bir refresh token’ın veya PRT-derived bir session’ın varsa, ROADtx genellikle şunlar için kullanılır:
- **Sahte bir Entra ID device kaydetmek** against **`urn:ms-drs:enterpriseregistration.windows.net`** cihaz anahtarları/sertifikaları elde etmek ve kalıcı device-backed access oluşturmak için.
- **Refresh tokenları exchange/reuse etmek** böylece etkileşimli sign-ini tekrarlamadan yeni Microsoft Graph veya diğer resource tokenları almak.
- **PRT workflowsu abuse etmek** arka planda sessizce yeni access tokenlar mint etmek için.
Faydalı bir hunting ipucu, varsayılan **`roadtx device`** değerlerinin tarihsel olarak şunlar olmasıdır:
- **OS**: `Windows`
- **OS version**: `10.0.19041.928`
- **Name**: `DESKTOP-<RANDOM 8 DIGITS>`
Bu değerler kolayca değiştirilebilir, bu yüzden onları **zayıf göstergeler** olarak değerlendir. Yine de sıra dışı device registration olayları, kurumsal olmayan adlandırma kalıpları, şüpheli source IPler/geolar/ASNler veya scripted user agentlarla birlikte kullanıldığında faydalıdır.
#### ROADtools opsec / hunting notları
ROADtools meşru Microsoft identity APIlerini kullandığı için, savunmacılar malware-like signatures beklemek yerine token activity, enumeration patterns ve user-agent anomalilerinin **kombinasyonunu** avlamalıdır. Faydalı sinyaller şunlardır:
- `Add device`, `Add registered owner to device`, `Add registered user to device` ve `Register device` gibi **Device registration** audit işlemleri
- **Device Registration Service** ile bağlantılı istekler veya sign-inler
- **`python-requests`**, **`urllib`** veya **`curl`** gibi script benzeri user agentlar
- **`/users`**, **`/groups`**, **`/devices`**, **`/servicePrincipals`** ve **`/applications`** gibi discovery-heavy endpointlere karşı bursty Microsoft Graph okumaları
- Audit verilerinde görünen güçlü OAuth scopeları, özellikle **`Directory.ReadWrite.All`**, **`Device.ReadWrite.All`**, **`Application.ReadWrite.All`**, **`AuditLog.ReadWrite.All`** ve **`Policy.ReadWrite.All`**
### [**AzureHound**](https://github.com/BloodHoundAD/AzureHound)
AzureHound, Microsoft Entra ID ve Azure için BloodHound toplayıcısıdır. Windows/Linux/macOS için tek bir statik Go ikili dosyasıdır ve doğrudan şunlarla iletişim kurar:
- Microsoft Graph (Entra ID directory, M365) and
- Azure Resource Manager (ARM) control plane (subscriptions, resource groups, compute, storage, key vault, app services, AKS, etc.)
AzureHound, Microsoft Entra ID ve Azure için BloodHound collectordır. Windows/Linux/macOS için Microsoft Grapha ve
Azure Resource Manager (ARM) control planee doğrudan bağlanan tek bir statik Go binarysidir (subscriptions, resource groups, compute, storage, key vault, app services, AKS, etc.)
Temel özellikler
- Kiracı API'lerine kamu interneti üzerinden her yerden çalıştırılabilir (iç ağ erişimi gerekmez)
- Kimlikler ve bulut kaynakları arasındaki saldırı yollarını görselleştirmek için BloodHound CE'nin içeri alması amacıyla JSON çıktısı üretir
- Public internet üzerinden tenant APIlerine herhangi bir yerden çalışır (internal network access gerekmez)
- Identityler ve cloud resources genelinde attack pathleri görselleştirmek için BloodHound CE ingestiona JSON çıktısı üretir
- Gözlemlenen varsayılan User-Agent: azurehound/v2.x.x
Kimlik doğrulama seçenekleri
- Kullanıcı adı + parola: -u <upn> -p <password>
Authentication seçenekleri
- Username + password: -u <upn> -p <password>
- Refresh token: --refresh-token <rt>
- JSON Web Token (access token): --jwt <jwt>
- Service principal secret: -a <appId> -s <secret>
- Service principal certificate: -a <appId> --cert <cert.pem> --key <key.pem> [--keypass <pass>]
Örnekler
Examples
```bash
# Full tenant collection to file using different auth flows
## User creds
@@ -481,37 +519,37 @@ azurehound list storage-containers -t "<tenant-id>" -o containers.json
azurehound list web-apps -t "<tenant-id>" -o webapps.json
azurehound list function-apps -t "<tenant-id>" -o funcapps.json
```
What gets queried
Ne sorgulanır
- Graph endpoints (örnekler):
- /v1.0/organization, /v1.0/users, /v1.0/groups, /v1.0/roleManagement/directory/roleDefinitions, directoryRoles, owners/members
- ARM endpoints (örnekler):
- management.azure.com/subscriptions/.../providers/Microsoft.Storage/storageAccounts
- .../Microsoft.KeyVault/vaults, .../Microsoft.Compute/virtualMachines, .../Microsoft.Web/sites, .../Microsoft.ContainerService/managedClusters
Preflight behavior and endpoints
- Her azurehound list <object> tipik olarak sayımlamadan önce şu test çağrılarını gerçekleştirir:
1) Kimlik platformu: login.microsoftonline.com
Preflight davranışı ve endpoints
- Her azurehound list <object> genellikle enumeration öncesinde şu test calls'u yapar:
1) Identity platform: login.microsoftonline.com
2) Graph: GET https://graph.microsoft.com/v1.0/organization
3) ARM: GET https://management.azure.com/subscriptions?api-version=...
- Cloud environment base URLs Government/China/Germany için farklıdır. Repo'daki constants/environments.go dosyasına bakın.
- Cloud environment base URLs Government/China/Germany için farklıdır. Repo içindeki constants/environments.go dosyasına bakın.
ARM-heavy objects (less visible in Activity/Resource logs)
- Aşağıdaki hedefler ağırlıklı olarak ARM kontrol düzlemi okumalarını kullanır: automation-accounts, container-registries, function-apps, key-vaults, logic-apps, managed-clusters, management-groups, resource-groups, storage-accounts, storage-containers, virtual-machines, vm-scale-sets, web-apps.
- Bu GET/list işlemleri tipik olarak Activity Logs'a yazılmaz; data-plane okumaları (örn. *.blob.core.windows.net, *.vault.azure.net) kaynak düzeyinde Diagnostic Settings ile kapsanır.
ARM-ağırlıklı objects (Activity/Resource logs içinde daha az görünür)
- Aşağıdaki list targets ağırlıklı olarak ARM control plane reads kullanır: automation-accounts, container-registries, function-apps, key-vaults, logic-apps, managed-clusters, management-groups, resource-groups, storage-accounts, storage-containers, virtual-machines, vm-scale-sets, web-apps.
- Bu GET/list operations tipik olarak Activity Logs'a yazılmaz; data-plane reads (ör. *.blob.core.windows.net, *.vault.azure.net) resource seviyesindeki Diagnostic Settings ile kapsanır.
OPSEC and logging notes
- Microsoft Graph Activity Logs varsayılan olarak etkin değildir; Graph çağrılarının görünürlüğünü elde etmek için etkinleştirip SIEM'e aktarın. Preflight Graph GET /v1.0/organization çağrısında UA azurehound/v2.x.x bekleyin.
- Entra ID non-interactive sign-in logları, AzureHound tarafından kullanılan kimlik platformu kimlik doğrulamasını (login.microsoftonline.com) kaydeder.
- ARM control-plane read/list işlemleri Activity Logs'a kaydedilmez; birçok azurehound list işlemi kaynaklara karşı orada görünmeyecektir. Sadece data-plane logging (Diagnostic Settings aracılığıyla) servis uç noktalarına yapılan okumaları yakalar.
- Defender XDR GraphApiAuditEvents (preview) Graph çağrılarını ve token tanımlayıcılarını ortaya çıkarabilir ancak UserAgent eksik olabilir ve saklama süresi sınırlı olabilir.
OPSEC ve logging notları
- Microsoft Graph Activity Logs varsayılan olarak etkin değildir; Graph calls için görünürlük kazanmak üzere etkinleştirip SIEM'e export edin. Graph preflight GET /v1.0/organization çağrısını UA azurehound/v2.x.x ile bekleyin.
- Entra ID non-interactive sign-in logs, AzureHound tarafından kullanılan identity platform auth'ını (login.microsoftonline.com) kaydeder.
- ARM control-plane read/list operations Activity Logs'a kaydedilmez; resources'a karşı birçok azurehound list operation orada görünmez. Sadece data-plane logging (Diagnostic Settings üzerinden) service endpoints'e yapılan reads'i yakalar.
- Defender XDR GraphApiAuditEvents (preview), Graph calls ve token identifiers'ı ortaya çıkarabilir ancak UserAgent eksik olabilir ve retention sınırlı olabilir.
Tip: When enumerating for privilege paths, dump users, groups, roles, and role assignments, then ingest in BloodHound and use prebuilt cypher queries to surface Global Administrator/Privileged Role Administrator and transitive escalation via nested groups and RBAC assignments.
İpucu: Privilege path'ler için enumeration yaparken users, groups, roles ve role assignments dump edin; ardından BloodHound'a ingest edip prebuilt cypher queries kullanarak Global Administrator/Privileged Role Administrator ve nested groups ile RBAC assignments üzerinden transitive escalation'ı ortaya çıkarın.
Launch the BloodHound web with `curl -L https://ghst.ly/getbhce | docker compose -f - up` and import the `output.json` file. Then, in the EXPLORE tab, in the CYPHER section you can see a folder icon that contains pre-built queries.
BloodHound web'i `curl -L https://ghst.ly/getbhce | docker compose -f - up` ile başlatın ve `output.json` dosyasını import edin. Ardından EXPLORE tab'ında, CYPHER section içinde pre-built queries içeren bir folder icon görebilirsiniz.
### [**MicroBurst**](https://github.com/NetSPI/MicroBurst)
MicroBurst, Azure Services keşfini, zayıf yapılandırma denetimini ve credential dumping gibi post exploitation eylemlerini destekleyen fonksiyonlar ve script'ler içerir. Azure'ın kullanıldığı penetration tests sırasında kullanılmak içindir.
MicroBurst, Azure Services discovery, weak configuration auditing ve credential dumping gibi post exploitation actions'ı destekleyen functions ve scripts içerir. Azure kullanılan penetration tests sırasında kullanılmak üzere tasarlanmıştır.
```bash
Import-Module .\MicroBurst.psm1
Import-Module .\Get-AzureDomainInfo.ps1
@@ -519,9 +557,9 @@ Get-AzureDomainInfo -folder MicroBurst -Verbose
```
### [**PowerZure**](https://github.com/hausec/PowerZure)
PowerZure, Azure, EntraID ve ilgili kaynaklar üzerinde hem reconnaissance hem de exploitation gerçekleştirebilen bir framework ihtiyacından doğmuştur.
PowerZure, Azure, EntraID ve ilişkili kaynaklarda hem reconnaissance hem de exploitation yapabilen bir framework ihtiyacından doğmuştur.
Bu araç **Az PowerShell** modülünü kullanır; bu nedenle modülün desteklediği herhangi bir authentication bu araç tarafından da desteklenir.
**Az PowerShell** modülünü kullanır, bu nedenle bu aracın desteklediği herhangi bir authentication, araç tarafından da desteklenir.
```bash
# Login
Import-Module Az
@@ -552,7 +590,7 @@ Invoke-AzureRunCommand -Command <command> -VMName <vmname>
```
### [**GraphRunner**](https://github.com/dafthack/GraphRunner/wiki/Invoke%E2%80%90GraphRunner)
GraphRunner, Microsoft Graph API ile etkileşim kurmak için kullanılan bir post-exploitation araç setidir. Microsoft Entra ID (Azure AD) hesabından reconnaissance, persistence ve pillaging yoluyla veri toplama ve kalıcılık sağlama gibi işlemler için çeşitli araçlar sağlar.
GraphRunner, Microsoft Graph API ile etkileşim için kullanılan bir post-exploitation toolsettir. Microsoft Entra ID (Azure AD) hesabından reconnaissance, persistence ve veri pillaging gerçekleştirmek için çeşitli araçlar sağlar.
```bash
#A good place to start is to authenticate with the Get-GraphTokens module. This module will launch a device-code login, allowing you to authenticate the session from a browser session. Access and refresh tokens will be written to the global $tokens variable. To use them with other GraphRunner modules use the Tokens flag (Example. Invoke-DumpApps -Tokens $tokens)
Import-Module .\GraphRunner.ps1
@@ -596,9 +634,9 @@ Invoke-GraphRunner -Tokens $tokens
```
### [Stormspotter](https://github.com/Azure/Stormspotter)
Stormspotter, Azure aboneliğindeki kaynakların bir “attack graph”ini oluşturur. Bu, red teams ve pentesters'in tenant içindeki attack surface ve pivot opportunities'ı görselleştirmesini sağlar ve defenders'ın incident response çalışmalarını hızlıca yönlendirmesine ve önceliklendirmesine yardımcı olur.
Stormspotter, bir Azure subscription içindeki kaynakların bir “attack graph”ini oluşturur. Red team'lerin ve pentester'ların bir tenant içindeki attack surface'i ve pivot fırsatlarını görselleştirmesini sağlar ve defender'larınızı incident response çalışmalarını hızlıca konumlandırıp önceliklendirecek şekilde güçlendirir.
**Ne yazık ki, bakımsız görünüyor.**
**Ne yazık ki, bakımsız görünüyor**.
```bash
# Start Backend
cd stormspotter\backend\
@@ -616,11 +654,15 @@ az login -u test@corp.onmicrosoft.com -p Welcome2022!
python stormspotter\stormcollector\sscollector.pyz cli
# This will generate a .zip file to upload in the frontend (127.0.0.1:9091)
```
## Kaynaklar
- [AzureHound ile Bulut Keşfi (Unit 42)](https://unit42.paloaltonetworks.com/threat-actor-misuse-of-azurehound/)
## References
- [Cloud Discovery With AzureHound (Unit 42)](https://unit42.paloaltonetworks.com/threat-actor-misuse-of-azurehound/)
- [Paved With Intent: ROADtools and Nation-State Tactics in the Cloud](https://unit42.paloaltonetworks.com/roadtools-cloud-attacks/)
- [ROADtools repository](https://github.com/dirkjanm/ROADtools)
- [ROADtools msgraph branch](https://github.com/dirkjanm/ROADtools/tree/msgraph)
- [Tom2Byrne/ROADtools](https://github.com/Tom2Byrne/ROADtools)
- [AzureHound repository](https://github.com/SpecterOps/AzureHound)
- [BloodHound repository](https://github.com/SpecterOps/BloodHound)
- [AzureHound Community Edition Bayrakları](https://bloodhound.specterops.io/collect-data/ce-collection/azurehound-flags)
- [AzureHound Community Edition Flags](https://bloodhound.specterops.io/collect-data/ce-collection/azurehound-flags)
- [AzureHound constants/environments.go](https://github.com/SpecterOps/AzureHound/blob/main/constants/environments.go)
- [AzureHound client/storage_accounts.go](https://github.com/SpecterOps/AzureHound/blob/main/client/storage_accounts.go)
- [AzureHound client/roles.go](https://github.com/SpecterOps/AzureHound/blob/main/client/roles.go)