diff --git a/src/pentesting-cloud/azure-security/az-enumeration-tools.md b/src/pentesting-cloud/azure-security/az-enumeration-tools.md index 7b7d4a3b1..8ecd77b6f 100644 --- a/src/pentesting-cloud/azure-security/az-enumeration-tools.md +++ b/src/pentesting-cloud/azure-security/az-enumeration-tools.md @@ -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 ` +Azure CLI içindeki komutlar şu kalıp kullanılarak yapılandırılır: `az ` #### 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 }}
-“CA cert does not include key usage extension” hatasını düzeltme +“CA cert does not include key usage extension” düzeltme -### Hatanın nedeni +### Hata neden oluşur -When Azure CLI authenticates, it makes HTTPS requests (via MSAL → Requests → OpenSSL). If you’re intercepting TLS with Burp, Burp generates “on the fly” certificates for sites like `login.microsoftonline.com` and signs them with Burp’s 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ı Burp’s CA ile imzalar. -Yeni yığınlarda (Python 3.13 + OpenSSL 3), CA doğrulaması daha katıdır: +Daha yeni stack’lerde (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 signing’e 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. +Burp’s 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. Burp’nin intercept edilen cert’leri imzalamak için bunu kullanmasını sağlayın. +3. O CA’yı macOS’ta trust edin. +4. Azure CLI / Requests’i o CA bundle’a 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 (CA’yı system keychain’de 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 extension’ları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 case’ler 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) Burp’nin gerçekten yeni CA’nı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 \ | 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 CA’yı 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.
### 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: `-Az ` +Azure PowerShell AZ Module içindeki komutlar şu şekilde yapılandırılır: `-Az ` #### 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: `-Mg ` +Microsoft Graph PowerShell içindeki commands şu şekilde yapılandırılır: `-Mg ` -#### 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 PowerShell’in bir parçasıdır. Kullanıcıları, grupları ve application registrations’ı Entra ID içinde yönetmek gibi görevler için cmdlet’ler 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 ID’den 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=" -e "AZURE_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 -ClientId -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 tool’dur. ```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 permissions’u **görselleştirmenize** ve security misconfigurations bulmanıza yardımcı olan bir powershell script’tir. -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 [-SubscriptionIdWhitelist ] ``` ## 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 framework’lerden 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 relationships’i map etmek için faydalıdır. + +#### ROADrecon collection ```bash cd ROADTools pipenv shell @@ -428,25 +434,57 @@ roadrecon auth --as-app --client "" --password "" --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`** branch’inde tutuyor ve **Tom2Byrne/ROADtools** gibi community fork’lar Graph tabanlı collection’ı güncellemeye devam ediyor. Graph destekli builds içinde, ROADrecon **`-mg`** switch’ini ekleyerek **`/users`**, **`/groups`**, **`/devices`**, **`/servicePrincipals`** ve **`/applications`** gibi endpoint’leri 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 token’ları exchange/reuse etmek** böylece etkileşimli sign-in’i tekrarlamadan yeni Microsoft Graph veya diğer resource token’ları almak. +- **PRT workflows’u abuse etmek** arka planda sessizce yeni access token’lar 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-` + +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 IP’ler/geo’lar/ASN’ler veya scripted user agent’larla birlikte kullanıldığında faydalıdır. + +#### ROADtools opsec / hunting notları + +ROADtools meşru Microsoft identity API’lerini 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-in’ler +- **`python-requests`**, **`urllib`** veya **`curl`** gibi script benzeri user agent’lar +- **`/users`**, **`/groups`**, **`/devices`**, **`/servicePrincipals`** ve **`/applications`** gibi discovery-heavy endpoint’lere karşı bursty Microsoft Graph okumaları +- Audit verilerinde görünen güçlü OAuth scope’ları, ö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 collector’dır. Windows/Linux/macOS için Microsoft Graph’a ve +Azure Resource Manager (ARM) control plane’e doğrudan bağlanan tek bir statik Go binary’sidir (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 API’lerine herhangi bir yerden çalışır (internal network access gerekmez) +- Identity’ler ve cloud resources genelinde attack path’leri görselleştirmek için BloodHound CE ingestion’a JSON çıktısı üretir - Gözlemlenen varsayılan User-Agent: azurehound/v2.x.x -Kimlik doğrulama seçenekleri -- Kullanıcı adı + parola: -u -p +Authentication seçenekleri +- Username + password: -u -p - Refresh token: --refresh-token - JSON Web Token (access token): --jwt - Service principal secret: -a -s - Service principal certificate: -a --cert --key [--keypass ] -Örnekler +Examples ```bash # Full tenant collection to file using different auth flows ## User creds @@ -481,37 +519,37 @@ azurehound list storage-containers -t "" -o containers.json azurehound list web-apps -t "" -o webapps.json azurehound list function-apps -t "" -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 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 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 -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 toolset’tir. 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)