mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-06-12 19:11:44 -07:00
Translated ['', 'src/pentesting-cloud/azure-security/az-enumeration-tool
This commit is contained in:
@@ -1,11 +1,11 @@
|
||||
# Az - Narzędzia do enumeracji
|
||||
# Az - Enumeration Tools
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Instalacja PowerShell w systemie linux
|
||||
## Zainstaluj PowerShell w Linux
|
||||
|
||||
> [!TIP]
|
||||
> W systemie linux będziesz musiał zainstalować PowerShell Core:
|
||||
> W Linux będziesz musiał zainstalować PowerShell Core:
|
||||
```bash
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y wget apt-transport-https software-properties-common
|
||||
@@ -28,11 +28,11 @@ curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
|
||||
|
||||
Instrukcje z [**documentation**](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-macos?view=powershell-7.4):
|
||||
|
||||
1. Zainstaluj `brew`, jeśli jeszcze nie jest zainstalowany:
|
||||
1. Zainstaluj `brew`, jeśli nie jest jeszcze zainstalowany:
|
||||
```bash
|
||||
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
|
||||
```
|
||||
2. Zainstaluj najnowsze stabilne wydanie PowerShell:
|
||||
2. Zainstaluj najnowszą stabilną wersję PowerShell:
|
||||
```sh
|
||||
brew install powershell/tap/powershell
|
||||
```
|
||||
@@ -45,23 +45,23 @@ pwsh
|
||||
brew update
|
||||
brew upgrade powershell
|
||||
```
|
||||
## Główne narzędzia do enumeracji
|
||||
## Główne narzędzia enumeracji
|
||||
|
||||
### az cli
|
||||
|
||||
[**Azure Command-Line Interface (CLI)**](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli) jest narzędziem wieloplatformowym napisanym w Pythonie do zarządzania i administrowania (większością) zasobów Azure i Entra ID. Łączy się z Azure i wykonuje polecenia administracyjne przez wiersz poleceń lub skrypty.
|
||||
[**Azure Command-Line Interface (CLI)**](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli) to wieloplatformowe narzędzie napisane w Pythonie do zarządzania i administrowania (większością) zasobów Azure i Entra ID. Łączy się z Azure i wykonuje polecenia administracyjne za pośrednictwem wiersza poleceń lub skryptów.
|
||||
|
||||
Follow this link for the [**installation instructions¡**](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli#install).
|
||||
Skorzystaj z tego linku, aby zobaczyć [**instrukcje instalacji¡**](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli#install).
|
||||
|
||||
Polecenia w Azure CLI są zorganizowane według wzorca: `az <service> <action> <parameters>`
|
||||
|
||||
#### Debugowanie | MitM az cli
|
||||
#### Debug | MitM az cli
|
||||
|
||||
Używając parametru **`--debug`**, można zobaczyć wszystkie żądania, które narzędzie **`az`** wysyła:
|
||||
Używając parametru **`--debug`** można zobaczyć wszystkie requesty, które narzędzie **`az`** wysyła:
|
||||
```bash
|
||||
az account management-group list --output table --debug
|
||||
```
|
||||
Aby przeprowadzić **MitM** wobec narzędzia i ręcznie **sprawdzić wszystkie wysyłane przez nie żądania**, możesz zrobić:
|
||||
Aby wykonać **MitM** na narzędziu i **ręcznie sprawdzić wszystkie wysyłane przez nie żądania**, możesz użyć:
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="Bash" }}
|
||||
@@ -105,17 +105,17 @@ $env:HTTP_PROXY="http://127.0.0.1:8080"
|
||||
{{#endtabs }}
|
||||
|
||||
<details>
|
||||
<summary><strong>Naprawa “CA cert does not include key usage extension”</strong></summary>
|
||||
<summary><strong>Naprawianie „CA cert does not include key usage extension”</strong></summary>
|
||||
|
||||
### Dlaczego pojawia się błąd
|
||||
### Dlaczego pojawia się ten błąd
|
||||
|
||||
Gdy Azure CLI się uwierzytelnia, wykonuje żądania HTTPS (przez MSAL → Requests → OpenSSL). Jeśli przechwytujesz TLS za pomocą Burp, Burp generuje „w locie” certyfikaty dla serwisów takich jak `login.microsoftonline.com` i podpisuje je za pomocą CA Burp.
|
||||
Gdy Azure CLI się uwierzytelnia, wysyła żądania HTTPS (przez MSAL → Requests → OpenSSL). Jeśli przechwytujesz TLS za pomocą Burp, Burp generuje certyfikaty „on the fly” dla stron takich jak `login.microsoftonline.com` i podpisuje je swoim CA.
|
||||
|
||||
Na nowszych stosach (Python 3.13 + OpenSSL 3) walidacja CA jest surowsza:
|
||||
W nowszych stackach (Python 3.13 + OpenSSL 3) walidacja CA jest bardziej rygorystyczna:
|
||||
|
||||
- Certyfikat CA musi zawierać **Basic Constraints: `CA:TRUE`** oraz rozszerzenie **Key Usage** pozwalające na podpisywanie certyfikatów (**`keyCertSign`**, i zwykle **`cRLSign`**).
|
||||
- Certyfikat CA musi zawierać **Basic Constraints: `CA:TRUE`** oraz rozszerzenie **Key Usage** zezwalające na podpisywanie certyfikatów (**`keyCertSign`**, a zwykle także **`cRLSign`**).
|
||||
|
||||
Domyślne CA Burp (PortSwigger CA) jest przestarzałe i zazwyczaj nie ma rozszerzenia Key Usage, więc OpenSSL odrzuca je nawet jeśli je „ufasz”.
|
||||
Domyślny CA Burp (PortSwigger CA) jest stary i zwykle nie ma rozszerzenia Key Usage, więc OpenSSL odrzuca go nawet jeśli „mu ufasz”.
|
||||
|
||||
To powoduje błędy takie jak:
|
||||
|
||||
@@ -123,24 +123,24 @@ To powoduje błędy takie jak:
|
||||
- `CERTIFICATE_VERIFY_FAILED`
|
||||
- `self-signed certificate in certificate chain`
|
||||
|
||||
Więc musisz:
|
||||
Dlatego musisz:
|
||||
|
||||
1. Utworzyć nowoczesne CA (z poprawnym Key Usage).
|
||||
2. Sprawić, by Burp używał go do podpisywania przechwytywanych certyfikatów.
|
||||
1. Utworzyć nowoczesny CA (z poprawnym Key Usage).
|
||||
2. Skonfigurować Burp, aby używał go do podpisywania przechwyconych certyfikatów.
|
||||
3. Zaufać temu CA w macOS.
|
||||
4. Wskazać Azure CLI / Requests na ten bundel CA.
|
||||
4. Skierować Azure CLI / Requests na ten bundle CA.
|
||||
|
||||
### Krok po kroku: działająca konfiguracja
|
||||
|
||||
#### 0) Wymagania wstępne
|
||||
|
||||
- Burp uruchomiony lokalnie (proxy na `127.0.0.1:8080`)
|
||||
- Azure CLI zainstalowany (Homebrew)
|
||||
- Masz dostęp do `sudo` (by zaufać CA w systemowym pęku kluczy)
|
||||
- Zainstalowane Azure CLI (Homebrew)
|
||||
- Możesz użyć `sudo` (żeby zaufać CA w systemowym keychain)
|
||||
|
||||
#### 1) Utwórz zgodne ze standardami CA dla Burp (PEM + KEY)
|
||||
#### 1) Utwórz zgodny ze standardem Burp CA (PEM + KEY)
|
||||
|
||||
Create an OpenSSL config file that explicitly sets CA extensions:
|
||||
Utwórz plik konfiguracyjny OpenSSL, który jawnie ustawia rozszerzenia CA:
|
||||
```bash
|
||||
mkdir -p ~/burp-ca && cd ~/burp-ca
|
||||
|
||||
@@ -164,7 +164,7 @@ subjectKeyIdentifier = hash
|
||||
authorityKeyIdentifier = keyid:always,issuer
|
||||
EOF
|
||||
```
|
||||
Wygeneruj certyfikat CA + klucz prywatny:
|
||||
Wygeneruj certyfikat CA + private key:
|
||||
```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
|
||||
```
|
||||
Sprawdzenie poprawności (MUSISZ zobaczyć Key Usage):
|
||||
Sanity check (MUSISZ zobaczyć Key Usage):
|
||||
```bash
|
||||
openssl x509 -in burp-ca.pem -noout -text | egrep -A3 "Basic Constraints|Key Usage"
|
||||
```
|
||||
Powinno zawierać coś w stylu:
|
||||
Oczekiwano czegoś takiego jak:
|
||||
|
||||
- `CA:TRUE`
|
||||
- `Key Usage: ... Certificate Sign, CRL Sign`
|
||||
|
||||
#### 2) Konwersja do PKCS#12 (format importu dla Burp)
|
||||
#### 2) Convert to PKCS#12 (Burp import format)
|
||||
|
||||
Burp potrzebuje certificate + private key, najprościej jako PKCS#12:
|
||||
Burp potrzebuje certificate + private key, najłatwiej jako PKCS#12:
|
||||
```bash
|
||||
openssl pkcs12 -export \
|
||||
-out burp-ca.p12 \
|
||||
@@ -191,41 +191,41 @@ openssl pkcs12 -export \
|
||||
-in burp-ca.pem \
|
||||
-name "Burp Custom Root CA"
|
||||
```
|
||||
Zostaniesz poproszony o hasło eksportu (ustaw je; Burp o nie poprosi).
|
||||
Zostaniesz poproszony o hasło eksportu (ustaw je; Burp zapyta o nie).
|
||||
|
||||
#### 3) Zaimportuj CA do Burp i uruchom Burp ponownie
|
||||
|
||||
W Burp:
|
||||
|
||||
- Proxy → Opcje
|
||||
- Znajdź Import / export certyfikatu CA
|
||||
- Kliknij Importuj certyfikat CA
|
||||
- Proxy → Options
|
||||
- Znajdź Import / export CA certificate
|
||||
- Kliknij Import CA certificate
|
||||
- Wybierz PKCS#12
|
||||
- Wskaż `burp-ca.p12`
|
||||
- Wybierz `burp-ca.p12`
|
||||
- Wprowadź hasło
|
||||
- Uruchom Burp całkowicie ponownie (ważne)
|
||||
|
||||
Dlaczego restart? Burp może nadal używać starego CA aż do ponownego uruchomienia.
|
||||
Dlaczego restart? Burp może nadal używać starego CA do czasu restartu.
|
||||
|
||||
#### 4) Zaufaj nowemu CA w macOS systemowym pęku kluczy
|
||||
#### 4) Zaufaj nowemu CA w systemowym keychain macOS
|
||||
|
||||
To pozwoli aplikacjom systemowym i wielu stosom TLS zaufać CA.
|
||||
To pozwala systemowym aplikacjom i wielu stosom TLS ufać CA.
|
||||
```bash
|
||||
sudo security add-trusted-cert \
|
||||
-d -r trustRoot \
|
||||
-k /Library/Keychains/System.keychain \
|
||||
~/burp-ca/burp-ca.pem
|
||||
```
|
||||
(Jeśli wolisz GUI: Keychain Access → System → Certificates → import → set “Always Trust”.)
|
||||
(Jeśli wolisz GUI: Keychain Access → System → Certificates → import → ustaw „Always Trust”.)
|
||||
|
||||
#### 5) Skonfiguruj zmienne środowiskowe proxy
|
||||
```bash
|
||||
export HTTPS_PROXY="http://127.0.0.1:8080"
|
||||
export HTTP_PROXY="http://127.0.0.1:8080"
|
||||
```
|
||||
#### 6) Skonfiguruj Requests/Azure CLI, aby ufały twojemu Burp CA
|
||||
#### 6) Skonfiguruj Requests/Azure CLI, aby ufały Twojemu Burp CA
|
||||
|
||||
Azure CLI używa wewnętrznie Python Requests; ustaw oba z nich:
|
||||
Azure CLI używa wewnętrznie Python Requests; ustaw oba te:
|
||||
```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"
|
||||
Notatki:
|
||||
|
||||
- `REQUESTS_CA_BUNDLE` jest używany przez Requests.
|
||||
- `SSL_CERT_FILE` pomaga innym klientom TLS i w przypadkach brzegowych.
|
||||
- Zazwyczaj nie potrzebujesz już starych `ADAL_PYTHON_SSL_NO_VERIFY` / `AZURE_CLI_DISABLE_CONNECTION_VERIFICATION`, gdy CA jest poprawny.
|
||||
- `SSL_CERT_FILE` pomaga dla innych klientów TLS i przypadków brzegowych.
|
||||
- Zwykle nie potrzebujesz już starych `ADAL_PYTHON_SSL_NO_VERIFY` / `AZURE_CLI_DISABLE_CONNECTION_VERIFICATION`, gdy CA jest poprawne.
|
||||
|
||||
#### 7) Zweryfikuj, że Burp rzeczywiście podpisuje certyfikaty twoim nowym CA (krytyczna kontrola)
|
||||
#### 7) Verify Burp is actually signing with your new CA (critical check)
|
||||
|
||||
To potwierdza, że twój łańcuch przechwytywania jest poprawny:
|
||||
To potwierdza, że łańcuch przechwytywania jest poprawny:
|
||||
```bash
|
||||
openssl s_client -connect login.microsoftonline.com:443 \
|
||||
-proxy 127.0.0.1:8080 </dev/null 2>/dev/null \
|
||||
| openssl x509 -noout -issuer
|
||||
```
|
||||
Oczekiwany wystawca (issuer) zawiera nazwę twojego CA, np.:
|
||||
Oczekiwany issuer zawiera nazwę twojego CA, np.:
|
||||
|
||||
`O=Burp Custom CA, CN=Burp Custom Root CA`
|
||||
|
||||
Jeśli nadal widzisz PortSwigger CA, Burp nie używa zaimportowanego CA → sprawdź import i uruchom ponownie.
|
||||
Jeśli nadal widzisz PortSwigger CA, Burp nie używa twojego zaimportowanego CA → sprawdź ponownie import i uruchom ponownie.
|
||||
|
||||
#### 8) Zweryfikuj, czy Python Requests działa przez Burp
|
||||
#### 8) Verify Python Requests works through Burp
|
||||
```bash
|
||||
python3 - <<'EOF'
|
||||
import requests
|
||||
@@ -258,61 +258,61 @@ requests.get("https://login.microsoftonline.com")
|
||||
print("OK")
|
||||
EOF
|
||||
```
|
||||
Oczekiwane: `OK`
|
||||
OK
|
||||
|
||||
#### 9) Test Azure CLI
|
||||
```bash
|
||||
az account get-access-token --resource=https://management.azure.com/
|
||||
```
|
||||
Jeśli jesteś już zalogowany, powinno zwrócić JSON z `accessToken`.
|
||||
Jeśli jesteś już zalogowany, powinien zwrócić JSON z `accessToken`.
|
||||
|
||||
</details>
|
||||
|
||||
### Az PowerShell
|
||||
|
||||
Azure PowerShell to moduł z cmdletami do zarządzania zasobami Azure bezpośrednio z wiersza poleceń PowerShell.
|
||||
Azure PowerShell to moduł z cmdletami do zarządzania zasobami Azure bezpośrednio z linii poleceń PowerShell.
|
||||
|
||||
Follow this link for the [**installation instructions**](https://learn.microsoft.com/en-us/powershell/azure/install-azure-powershell).
|
||||
Przejdź pod ten link po [**instructions instalacji**](https://learn.microsoft.com/en-us/powershell/azure/install-azure-powershell).
|
||||
|
||||
Polecenia w Azure PowerShell AZ Module mają strukturę: `<Action>-Az<Service> <parameters>`
|
||||
Komendy w Azure PowerShell AZ Module są zbudowane w taki sposób: `<Action>-Az<Service> <parameters>`
|
||||
|
||||
#### Debug | MitM Az PowerShell
|
||||
|
||||
Używając parametru **`-Debug`** można zobaczyć wszystkie żądania wysyłane przez narzędzie:
|
||||
Używając parametru **`-Debug`** możliwe jest zobaczenie wszystkich requestów, które narzędzie wysyła:
|
||||
```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).
|
||||
Aby wykonać **MitM** na tym narzędziu i **sprawdzić ręcznie wszystkie requests**, które wysyła, możesz ustawić zmienne env `HTTPS_PROXY` i `HTTP_PROXY` zgodnie z [**docs**](https://learn.microsoft.com/en-us/powershell/azure/az-powershell-proxy).
|
||||
|
||||
### Microsoft Graph PowerShell
|
||||
|
||||
Microsoft Graph PowerShell to wieloplatformowe SDK, które umożliwia dostęp do wszystkich Microsoft Graph APIs, w tym usług takich jak SharePoint, Exchange i Outlook, wykorzystując pojedynczy endpoint. Wspiera PowerShell 7+, nowoczesną autentykację za pomocą MSAL, tożsamości zewnętrzne oraz zaawansowane zapytania. Skupiając się na zasadzie najmniejszych uprawnień, zapewnia bezpieczne operacje i otrzymuje regularne aktualizacje, aby być zgodnym z najnowszymi funkcjami Microsoft Graph API.
|
||||
Microsoft Graph PowerShell to cross-platform SDK, które umożliwia dostęp do wszystkich Microsoft Graph APIs, w tym usług takich jak SharePoint, Exchange i Outlook, używając jednego endpoint. Obsługuje PowerShell 7+, nowoczesną authentication przez MSAL, external identities oraz advanced queries. Skupiając się na least privilege access, zapewnia secure operations i otrzymuje regularne updates, aby nadążać za najnowszymi funkcjami Microsoft Graph API.
|
||||
|
||||
Follow this link for the [**installation instructions**](https://learn.microsoft.com/en-us/powershell/microsoftgraph/installation).
|
||||
Skorzystaj z tego linku do [**installation instructions**](https://learn.microsoft.com/en-us/powershell/microsoftgraph/installation).
|
||||
|
||||
Commands in Microsoft Graph PowerShell are structured like: `<Action>-Mg<Service> <parameters>`
|
||||
Commands w Microsoft Graph PowerShell są zbudowane tak: `<Action>-Mg<Service> <parameters>`
|
||||
|
||||
#### Debug Microsoft Graph PowerShell
|
||||
|
||||
Używając parametru **`-Debug`** można zobaczyć wszystkie żądania, które narzędzie wysyła:
|
||||
Używając parametru **`-Debug`** można zobaczyć wszystkie requests, które narzędzie wysyła:
|
||||
```bash
|
||||
Get-MgUser -Debug
|
||||
```
|
||||
### ~~**AzureAD Powershell**~~
|
||||
|
||||
Moduł Azure Active Directory (AD), obecnie **deprecated**, jest częścią Azure PowerShell służącą do zarządzania zasobami Azure AD. Udostępnia cmdlety do zadań takich jak zarządzanie użytkownikami, grupami i rejestracjami aplikacji w Entra ID.
|
||||
Moduł Azure Active Directory (AD), obecnie **deprecated**, jest częścią Azure PowerShell do zarządzania zasobami Azure AD. Udostępnia cmdlets do zadań takich jak zarządzanie użytkownikami, grupami i rejestracjami aplikacji w Entra ID.
|
||||
|
||||
> [!TIP]
|
||||
> Zostało to zastąpione przez Microsoft Graph PowerShell
|
||||
|
||||
Kliknij ten link, aby przejść do [**installation instructions**](https://www.powershellgallery.com/packages/AzureAD).
|
||||
Przejdź pod ten link po [**instrukcje instalacji**](https://www.powershellgallery.com/packages/AzureAD).
|
||||
|
||||
|
||||
## Zautomatyzowany rekonesans i narzędzia do zgodności
|
||||
## Automated Recon & Compliance Tools
|
||||
|
||||
### [turbot azure plugins](https://github.com/orgs/turbot/repositories?q=mod-azure)
|
||||
|
||||
Turbot wraz ze steampipe i powerpipe umożliwia zbieranie informacji z Azure i Entra ID oraz przeprowadzanie kontroli zgodności i wykrywanie błędnych konfiguracji. Obecnie najbardziej zalecane moduły Azure do uruchomienia to:
|
||||
Turbot z steampipe i powerpipe pozwala zbierać informacje z Azure i Entra ID oraz wykonywać kontrole compliance i znajdować misconfigurations. Obecnie najbardziej zalecane moduły Azure do uruchomienia to:
|
||||
|
||||
- [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 +343,9 @@ powerpipe server
|
||||
```
|
||||
### [Prowler](https://github.com/prowler-cloud/prowler)
|
||||
|
||||
Prowler to narzędzie bezpieczeństwa open source służące do przeprowadzania ocen zgodności z najlepszymi praktykami bezpieczeństwa, audytów, reagowania na incydenty, ciągłego monitoringu, hardeningu oraz przygotowania do forensics w środowiskach AWS, Azure, Google Cloud i Kubernetes.
|
||||
Prowler to Open Source narzędzie bezpieczeństwa do wykonywania ocen dobrych praktyk bezpieczeństwa dla AWS, Azure, Google Cloud i Kubernetes, audytów, incident response, continuous monitoring, hardening oraz forensics readiness.
|
||||
|
||||
Umożliwia uruchomienie setek testów przeciwko środowisku Azure w celu wykrycia nieprawidłowych konfiguracji bezpieczeństwa oraz zebrania wyników w formacie json (i innych formatach tekstowych) albo przeglądania ich przez interfejs webowy.
|
||||
W praktyce pozwala nam uruchomić setki checks przeciwko środowisku Azure, aby znaleźć błędne konfiguracje bezpieczeństwa i zebrać wyniki w json (oraz innych formatach tekstowych) albo sprawdzać je w web.
|
||||
```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 +367,9 @@ docker run --rm -e "AZURE_CLIENT_ID=<client-id>" -e "AZURE_TENANT_ID=<tenant-id>
|
||||
```
|
||||
### [Monkey365](https://github.com/silverhack/monkey365)
|
||||
|
||||
Pozwala na automatyczne przeprowadzanie przeglądów konfiguracji bezpieczeństwa subskrypcji Azure i Microsoft Entra ID.
|
||||
Pozwala automatycznie przeprowadzać przeglądy konfiguracji bezpieczeństwa subskrypcji Azure i Microsoft Entra ID.
|
||||
|
||||
Raporty HTML są przechowywane w katalogu `./monkey-reports` w folderze repozytorium github.
|
||||
Raporty HTML są przechowywane w katalogu `./monkey-reports` wewnątrz folderu repozytorium github.
|
||||
```bash
|
||||
git clone https://github.com/silverhack/monkey365
|
||||
Get-ChildItem -Recurse monkey365 | Unblock-File
|
||||
@@ -390,7 +390,7 @@ Invoke-Monkey365 -TenantId <tenant-id> -ClientId <client-id> -ClientSecret $Secu
|
||||
```
|
||||
### [ScoutSuite](https://github.com/nccgroup/ScoutSuite)
|
||||
|
||||
Scout Suite zbiera dane konfiguracyjne do ręcznej inspekcji i wyróżnia obszary ryzyka. To narzędzie do audytu bezpieczeństwa dla środowisk multi-cloud, umożliwiające ocenę stanu bezpieczeństwa tych środowisk.
|
||||
Scout Suite zbiera dane konfiguracyjne do manualnej inspekcji i wyróżnia obszary ryzyka. To wielochmurowe narzędzie do security-auditing, które umożliwia ocenę security posture środowisk cloud.
|
||||
```bash
|
||||
virtualenv -p python3 venv
|
||||
source venv/bin/activate
|
||||
@@ -406,18 +406,26 @@ python scout.py azure --cli
|
||||
```
|
||||
### [Azure-MG-Sub-Governance-Reporting](https://github.com/JulianHayward/Azure-MG-Sub-Governance-Reporting)
|
||||
|
||||
To skrypt powershell, który pomaga Ci **zwizualizować wszystkie zasoby i uprawnienia w ramach Management Group i tenantu Entra ID** oraz wykryć nieprawidłowe konfiguracje bezpieczeństwa.
|
||||
To jest skrypt powershell, który pomaga **zwizualizować wszystkie zasoby i uprawnienia wewnątrz Management Group oraz tenanta Entra ID** i znaleźć błędne konfiguracje bezpieczeństwa.
|
||||
|
||||
Działa przy użyciu Az PowerShell module, więc każde uwierzytelnianie obsługiwane przez to narzędzie jest obsługiwane.
|
||||
Działa przy użyciu modułu Az PowerShell, więc każde uwierzytelnianie obsługiwane przez to narzędzie jest obsługiwane przez to narzędzie.
|
||||
```bash
|
||||
import-module Az
|
||||
.\AzGovVizParallel.ps1 -ManagementGroupId <management-group-id> [-SubscriptionIdWhitelist <subscription-id>]
|
||||
```
|
||||
## Zautomatyzowane narzędzia Post-Exploitation
|
||||
|
||||
### [**ROADRecon**](https://github.com/dirkjanm/ROADtools)
|
||||
### [**ROADtools**](https://github.com/dirkjanm/ROADtools) / ROADrecon / ROADtx
|
||||
|
||||
Enumeration narzędzia ROADRecon oferuje informacje o konfiguracji Entra ID, takie jak użytkownicy, grupy, role, polityki warunkowego dostępu...
|
||||
ROADtools to jedna z głównych open-source frameworków do offensive research w Entra ID. Najbardziej istotne komponenty to:
|
||||
|
||||
- **`roadrecon`**: discovery tenantu i generowanie lokalnego datasetu (users, groups, roles, devices, service principals, applications, directory settings).
|
||||
- **`roadtx`**: token acquisition/exchange, ponowne użycie refresh-token, device registration oraz workflow PRT.
|
||||
- **`roadlib`**: niższopoziomowa biblioteka auth/API używana przez pozostałe moduły.
|
||||
|
||||
Zebrane dane są przechowywane w lokalnej bazie danych SQLite i można je przeglądać w web UI ROADrecon, co jest przydatne do mapowania privileged users, role assignments, devices, service principals oraz relacji między applications przed planowaniem persistence lub lateral movement.
|
||||
|
||||
#### Zbieranie ROADrecon
|
||||
```bash
|
||||
cd ROADTools
|
||||
pipenv shell
|
||||
@@ -428,19 +436,52 @@ roadrecon auth --as-app --client "<client-id>" --password "<secret>" --tenant "<
|
||||
roadrecon gather
|
||||
roadrecon gui
|
||||
```
|
||||
ROADrecon pierwotnie był skierowany na Azure AD Graph. Od **22 maja 2026**, oficjalne repozytorium nadal utrzymuje wsparcie dla Microsoft Graph w gałęzi **`msgraph`**, a community forks, takie jak **Tom2Byrne/ROADtools**, nadal aktualizują zbieranie danych oparte na Graph. W buildach obsługujących Graph, ROADrecon dodaje przełącznik **`-mg`**, aby wyliczać endpointy takie jak **`/users`**, **`/groups`**, **`/devices`**, **`/servicePrincipals`** oraz **`/applications`**.
|
||||
```bash
|
||||
# Graph-capable ROADrecon builds
|
||||
roadrecon auth -u test@corp.onmicrosoft.com -p "Welcome2022!"
|
||||
roadrecon gather -mg
|
||||
roadrecon gui
|
||||
```
|
||||
#### Wysokowartościowe use cases ROADtx
|
||||
|
||||
Jeśli masz już poprawne credentials, refresh token albo sesję pochodzącą z PRT, ROADtx jest często używany do:
|
||||
|
||||
- **Register a rogue Entra ID device** przeciwko **`urn:ms-drs:enterpriseregistration.windows.net`** w celu uzyskania device keys/certificates i utworzenia trwałego access opartego na device.
|
||||
- **Exchange/reuse refresh tokens** aby uzyskać świeże Microsoft Graph lub inne resource tokens bez ponownego interaktywnego sign-in.
|
||||
- **Abuse PRT workflows** aby po cichu mintować nowe access tokens w tle.
|
||||
|
||||
Pomocna wskazówka huntingowa jest taka, że domyślne wartości **`roadtx device`** historycznie były:
|
||||
|
||||
- **OS**: `Windows`
|
||||
- **OS version**: `10.0.19041.928`
|
||||
- **Name**: `DESKTOP-<RANDOM 8 DIGITS>`
|
||||
|
||||
Te wartości łatwo zmienić, więc traktuj je jako **weak indicators**. Nadal są przydatne, gdy korelujesz je z nietypowymi eventami device registration, niekorporacyjnymi wzorcami nazewnictwa, podejrzanymi source IPs/geos/ASNs lub scriptowymi user agents.
|
||||
|
||||
#### Uwagi opsec / hunting dotyczące ROADtools
|
||||
|
||||
Ponieważ ROADtools używa legalnych Microsoft identity APIs, defenderzy powinni huntować **kombinację** aktywności tokenów, wzorców enumeration i anomalii user-agent zamiast oczekiwać sygnatur podobnych do malware. Przydatne sygnały obejmują:
|
||||
|
||||
- Operacje audytowe **Device registration**, takie jak `Add device`, `Add registered owner to device`, `Add registered user to device` oraz `Register device`
|
||||
- Requests lub sign-ins powiązane z **Device Registration Service**
|
||||
- Script-like user agents, takie jak **`python-requests`**, **`urllib`** lub **`curl`**
|
||||
- Burstowe odczyty Microsoft Graph do endpointów intensywnie używanych do discovery, takich jak **`/users`**, **`/groups`**, **`/devices`**, **`/servicePrincipals`** i **`/applications`**
|
||||
- Silne OAuth scopes pojawiające się w danych audytowych, zwłaszcza **`Directory.ReadWrite.All`**, **`Device.ReadWrite.All`**, **`Application.ReadWrite.All`**, **`AuditLog.ReadWrite.All`** oraz **`Policy.ReadWrite.All`**
|
||||
|
||||
### [**AzureHound**](https://github.com/BloodHoundAD/AzureHound)
|
||||
|
||||
AzureHound jest kolektorem BloodHound dla Microsoft Entra ID i Azure. Jest to pojedynczy statyczny plik binarny w Go dla Windows/Linux/macOS, który łączy się bezpośrednio z:
|
||||
- Microsoft Graph (katalog Entra ID, M365) oraz
|
||||
- Azure Resource Manager (ARM) control plane (subskrypcje, grupy zasobów, compute, storage, Key Vault, App Services, AKS, itd.)
|
||||
AzureHound jest kolektorem BloodHound dla Microsoft Entra ID i Azure. To pojedynczy statyczny binarny plik Go dla Windows/Linux/macOS, który komunikuje się bezpośrednio z:
|
||||
- Microsoft Graph (Entra ID directory, M365) oraz
|
||||
- Azure Resource Manager (ARM) control plane (subscriptions, resource groups, compute, storage, key vault, app services, AKS, itd.)
|
||||
|
||||
Główne cechy
|
||||
- Działa z dowolnego miejsca w publicznym internecie wobec tenant API (nie wymaga dostępu do sieci wewnętrznej)
|
||||
- Generuje JSON do importu przez BloodHound CE, umożliwiając wizualizację ścieżek ataku między tożsamościami a zasobami w chmurze
|
||||
- Domyślny User-Agent zaobserwowany: azurehound/v2.x.x
|
||||
Kluczowe cechy
|
||||
- Działa z dowolnego miejsca w publicznym internecie przeciwko tenant APIs (nie jest wymagany dostęp do wewnętrznej sieci)
|
||||
- Generuje JSON do ingestion w BloodHound CE, aby wizualizować attack paths między identities i cloud resources
|
||||
- Domyślny User-Agent obserwowany: azurehound/v2.x.x
|
||||
|
||||
Opcje uwierzytelniania
|
||||
- Nazwa użytkownika + hasło: -u <upn> -p <password>
|
||||
Opcje authentication
|
||||
- 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>
|
||||
@@ -481,37 +522,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
|
||||
```
|
||||
Co jest zapytywane
|
||||
Co jest queryowane
|
||||
- Graph endpoints (przykłady):
|
||||
- /v1.0/organization, /v1.0/users, /v1.0/groups, /v1.0/roleManagement/directory/roleDefinitions, directoryRoles, owners/members
|
||||
- ARM endpoints (przykłady):
|
||||
- management.azure.com/subscriptions/.../providers/Microsoft.Storage/storageAccounts
|
||||
- .../Microsoft.KeyVault/vaults, .../Microsoft.Compute/virtualMachines, .../Microsoft.Web/sites, .../Microsoft.ContainerService/managedClusters
|
||||
|
||||
Preflight behavior and endpoints
|
||||
- Każda komenda azurehound list <object> zazwyczaj wykonuje te wywołania testowe przed enumeracją:
|
||||
1) Platforma tożsamości: login.microsoftonline.com
|
||||
Zachowanie preflight i endpoints
|
||||
- Każdy azurehound list <object> zazwyczaj wykonuje te testowe calls przed enumeracją:
|
||||
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=...
|
||||
- Podstawowe URL-e środowiska cloud różnią się dla Government/China/Germany. Zobacz constants/environments.go w repo.
|
||||
- Bazowe URL-e cloud environment różnią się dla Government/China/Germany. Zobacz constants/environments.go w repo.
|
||||
|
||||
ARM-heavy objects (less visible in Activity/Resource logs)
|
||||
- The following list targets predominantly use ARM control plane reads: 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.
|
||||
- These GET/list operations are typically not written to Activity Logs; data-plane reads (e.g., *.blob.core.windows.net, *.vault.azure.net) are covered by Diagnostic Settings at the resource level.
|
||||
ARM-heavy obiekty (mniej widoczne w Activity/Resource logs)
|
||||
- Poniższa lista targets używa głównie odczytów ARM control plane: 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.
|
||||
- Te operacje GET/list zazwyczaj nie są zapisywane w Activity Logs; odczyty data-plane (np. *.blob.core.windows.net, *.vault.azure.net) są objęte Diagnostic Settings na poziomie resource.
|
||||
|
||||
OPSEC and logging notes
|
||||
- Microsoft Graph Activity Logs are not enabled by default; enable and export to SIEM to gain visibility of Graph calls. Expect the Graph preflight GET /v1.0/organization with UA azurehound/v2.x.x.
|
||||
- Entra ID non-interactive sign-in logs record the identity platform auth (login.microsoftonline.com) used by AzureHound.
|
||||
- ARM control-plane read/list operations are not recorded in Activity Logs; many azurehound list operations against resources won’t appear there. Only data-plane logging (via Diagnostic Settings) will capture reads to service endpoints.
|
||||
- Defender XDR GraphApiAuditEvents (preview) can expose Graph calls and token identifiers but may lack UserAgent and have limited retention.
|
||||
Uwagi OPSEC i logging
|
||||
- Microsoft Graph Activity Logs nie są domyślnie włączone; włącz je i eksportuj do SIEM, aby zyskać widoczność Graph calls. Spodziewaj się Graph preflight GET /v1.0/organization z UA azurehound/v2.x.x.
|
||||
- Entra ID non-interactive sign-in logs rejestrują identity platform auth (login.microsoftonline.com) używane przez AzureHound.
|
||||
- ARM control-plane read/list operations nie są zapisywane w Activity Logs; wiele azurehound list operations wobec resources nie pojawi się tam. Tylko data-plane logging (przez Diagnostic Settings) przechwyci reads do service endpoints.
|
||||
- Defender XDR GraphApiAuditEvents (preview) może ujawniać Graph calls i token identifiers, ale może nie mieć UserAgent i mieć ograniczoną retencję.
|
||||
|
||||
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.
|
||||
Wskazówka: Podczas enumeracji dla privilege paths, zrzut users, groups, roles i role assignments, potem zaimportuj to do BloodHound i użyj gotowych cypher queries, aby wykryć Global Administrator/Privileged Role Administrator oraz transitive escalation przez nested groups i RBAC assignments.
|
||||
|
||||
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.
|
||||
Uruchom BloodHound web z `curl -L https://ghst.ly/getbhce | docker compose -f - up` i zaimportuj plik `output.json`. Następnie, w zakładce EXPLORE, w sekcji CYPHER możesz zobaczyć ikonę folderu, która zawiera pre-built queries.
|
||||
|
||||
### [**MicroBurst**](https://github.com/NetSPI/MicroBurst)
|
||||
|
||||
MicroBurst zawiera funkcje i skrypty wspierające Azure Services discovery, audyt słabej konfiguracji oraz post exploitation działania, takie jak credential dumping. Jest przeznaczony do użycia podczas penetration tests, w których używany jest Azure.
|
||||
MicroBurst zawiera functions i scripts, które wspierają Azure Services discovery, weak configuration auditing oraz post exploitation actions takie jak credential dumping. Jest przeznaczony do użycia podczas penetration tests, gdzie używane jest Azure.
|
||||
```bash
|
||||
Import-Module .\MicroBurst.psm1
|
||||
Import-Module .\Get-AzureDomainInfo.ps1
|
||||
@@ -519,9 +560,9 @@ Get-AzureDomainInfo -folder MicroBurst -Verbose
|
||||
```
|
||||
### [**PowerZure**](https://github.com/hausec/PowerZure)
|
||||
|
||||
PowerZure powstał z potrzeby frameworka, który potrafi zarówno wykonywać reconnaissance, jak i exploitation Azure, EntraID oraz powiązanych z nimi zasobów.
|
||||
PowerZure powstał z potrzeby stworzenia frameworka, który może zarówno wykonywać reconnaissance, jak i exploitation Azure, EntraID oraz powiązanych zasobów.
|
||||
|
||||
Używa modułu **Az PowerShell**, więc każde uwierzytelnienie obsługiwane przez ten moduł jest obsługiwane przez narzędzie.
|
||||
Używa modułu **Az PowerShell**, więc każde uwierzytelnianie obsługiwane przez to narzędzie jest obsługiwane przez to narzędzie.
|
||||
```bash
|
||||
# Login
|
||||
Import-Module Az
|
||||
@@ -552,7 +593,7 @@ Invoke-AzureRunCommand -Command <command> -VMName <vmname>
|
||||
```
|
||||
### [**GraphRunner**](https://github.com/dafthack/GraphRunner/wiki/Invoke%E2%80%90GraphRunner)
|
||||
|
||||
GraphRunner jest zestawem narzędzi post-exploitation umożliwiającym interakcję z Microsoft Graph API. Zapewnia różne narzędzia do przeprowadzania reconnaissance, persistence oraz pozyskiwania danych z konta Microsoft Entra ID (Azure AD).
|
||||
GraphRunner to zestaw narzędzi post-exploitation do interakcji z Microsoft Graph API. Zapewnia różne narzędzia do prowadzenia reconnaissance, persistence oraz pillaging danych z konta Microsoft Entra ID (Azure AD).
|
||||
```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 +637,9 @@ Invoke-GraphRunner -Tokens $tokens
|
||||
```
|
||||
### [Stormspotter](https://github.com/Azure/Stormspotter)
|
||||
|
||||
Stormspotter tworzy „attack graph” zasobów w subskrypcji Azure. Umożliwia red teams i pentesters wizualizację attack surface oraz pivot opportunities w obrębie tenant i znacznie przyspiesza pracę obrońców, pozwalając im szybko się zorientować i priorytetyzować zadania związane z incident response.
|
||||
Stormspotter tworzy „attack graph” zasobów w subskrypcji Azure. Umożliwia red teams i pentesters wizualizację attack surface oraz pivot opportunities w obrębie tenant, a także przyspiesza pracę defenderów, pomagając im szybko zorientować się w sytuacji i priorytetyzować incident response.
|
||||
|
||||
**Niestety wygląda na nieutrzymywane**.
|
||||
**Niestety wygląda na unmaintained**.
|
||||
```bash
|
||||
# Start Backend
|
||||
cd stormspotter\backend\
|
||||
@@ -616,11 +657,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)
|
||||
```
|
||||
## Referencje
|
||||
- [Odkrywanie chmury za pomocą AzureHound (Unit 42)](https://unit42.paloaltonetworks.com/threat-actor-misuse-of-azurehound/)
|
||||
- [Repozytorium AzureHound](https://github.com/SpecterOps/AzureHound)
|
||||
- [Repozytorium BloodHound](https://github.com/SpecterOps/BloodHound)
|
||||
- [Flagi AzureHound Community Edition](https://bloodhound.specterops.io/collect-data/ce-collection/azurehound-flags)
|
||||
## 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 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)
|
||||
|
||||
Reference in New Issue
Block a user