mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-28 22:51:09 -07:00
Translated ['', 'src/pentesting-cloud/azure-security/az-enumeration-tool
This commit is contained in:
@@ -2,10 +2,10 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Zainstaluj PowerShell w systemie Linux
|
||||
## Instalacja PowerShell w systemie linux
|
||||
|
||||
> [!TIP]
|
||||
> W linuxie będziesz musiał zainstalować PowerShell Core:
|
||||
> W systemie linux będziesz musiał zainstalować PowerShell Core:
|
||||
```bash
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y wget apt-transport-https software-properties-common
|
||||
@@ -24,15 +24,15 @@ pwsh
|
||||
# Az cli
|
||||
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
|
||||
```
|
||||
## Zainstaluj PowerShell na MacOS
|
||||
## Zainstaluj PowerShell w MacOS
|
||||
|
||||
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 nie jest jeszcze zainstalowany:
|
||||
1. Zainstaluj `brew`, jeśli jeszcze nie jest zainstalowany:
|
||||
```bash
|
||||
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
|
||||
```
|
||||
2. Zainstaluj najnowszą stabilną wersję PowerShell:
|
||||
2. Zainstaluj najnowsze stabilne wydanie PowerShell:
|
||||
```sh
|
||||
brew install powershell/tap/powershell
|
||||
```
|
||||
@@ -45,23 +45,23 @@ pwsh
|
||||
brew update
|
||||
brew upgrade powershell
|
||||
```
|
||||
## Główne narzędzia Enumeration
|
||||
## Główne narzędzia do enumeracji
|
||||
|
||||
### az cli
|
||||
|
||||
[**Azure Command-Line Interface (CLI)**](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli) to narzędzie multiplatformowe napisane w Python 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) 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.
|
||||
|
||||
Korzystaj z tego linku, aby zobaczyć [**installation instructions¡**](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli#install).
|
||||
Follow this link for the [**installation instructions¡**](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>`
|
||||
|
||||
#### Debug | MitM az cli
|
||||
#### Debugowanie | 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 żądania, które narzędzie **`az`** wysyła:
|
||||
```bash
|
||||
az account management-group list --output table --debug
|
||||
```
|
||||
Aby przeprowadzić **MitM** na narzędziu i ręcznie **sprawdzić wszystkie żądania**, które wysyła, możesz zrobić:
|
||||
Aby przeprowadzić **MitM** wobec narzędzia i ręcznie **sprawdzić wszystkie wysyłane przez nie żądania**, możesz zrobić:
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="Bash" }}
|
||||
@@ -104,13 +104,177 @@ $env:HTTP_PROXY="http://127.0.0.1:8080"
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
<details>
|
||||
<summary><strong>Naprawa “CA cert does not include key usage extension”</strong></summary>
|
||||
|
||||
### Dlaczego pojawia się 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.
|
||||
|
||||
Na nowszych stosach (Python 3.13 + OpenSSL 3) walidacja CA jest surowsza:
|
||||
|
||||
- Certyfikat CA musi zawierać **Basic Constraints: `CA:TRUE`** oraz rozszerzenie **Key Usage** pozwalające na podpisywanie certyfikatów (**`keyCertSign`**, i zwykle **`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”.
|
||||
|
||||
To powoduje błędy takie jak:
|
||||
|
||||
- `CA cert does not include key usage extension`
|
||||
- `CERTIFICATE_VERIFY_FAILED`
|
||||
- `self-signed certificate in certificate chain`
|
||||
|
||||
Więc musisz:
|
||||
|
||||
1. Utworzyć nowoczesne CA (z poprawnym Key Usage).
|
||||
2. Sprawić, by Burp używał go do podpisywania przechwytywanych certyfikatów.
|
||||
3. Zaufać temu CA w macOS.
|
||||
4. Wskazać Azure CLI / Requests na ten bundel 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)
|
||||
|
||||
#### 1) Utwórz zgodne ze standardami CA dla Burp (PEM + KEY)
|
||||
|
||||
Create an OpenSSL config file that explicitly sets CA extensions:
|
||||
```bash
|
||||
mkdir -p ~/burp-ca && cd ~/burp-ca
|
||||
|
||||
cat > burp-ca.cnf <<'EOF'
|
||||
[ req ]
|
||||
default_bits = 2048
|
||||
prompt = no
|
||||
default_md = sha256
|
||||
distinguished_name = dn
|
||||
x509_extensions = v3_ca
|
||||
|
||||
[ dn ]
|
||||
C = US
|
||||
O = Burp Custom CA
|
||||
CN = Burp Custom Root CA
|
||||
|
||||
[ v3_ca ]
|
||||
basicConstraints = critical,CA:TRUE
|
||||
keyUsage = critical,keyCertSign,cRLSign
|
||||
subjectKeyIdentifier = hash
|
||||
authorityKeyIdentifier = keyid:always,issuer
|
||||
EOF
|
||||
```
|
||||
Wygeneruj certyfikat CA + klucz prywatny:
|
||||
```bash
|
||||
openssl req -x509 -new -nodes \
|
||||
-days 3650 \
|
||||
-keyout burp-ca.key \
|
||||
-out burp-ca.pem \
|
||||
-config burp-ca.cnf
|
||||
```
|
||||
Sprawdzenie poprawności (MUSISZ zobaczyć Key Usage):
|
||||
```bash
|
||||
openssl x509 -in burp-ca.pem -noout -text | egrep -A3 "Basic Constraints|Key Usage"
|
||||
```
|
||||
Powinno zawierać coś w stylu:
|
||||
|
||||
- `CA:TRUE`
|
||||
- `Key Usage: ... Certificate Sign, CRL Sign`
|
||||
|
||||
#### 2) Konwersja do PKCS#12 (format importu dla Burp)
|
||||
|
||||
Burp potrzebuje certificate + private key, najprościej jako PKCS#12:
|
||||
```bash
|
||||
openssl pkcs12 -export \
|
||||
-out burp-ca.p12 \
|
||||
-inkey burp-ca.key \
|
||||
-in burp-ca.pem \
|
||||
-name "Burp Custom Root CA"
|
||||
```
|
||||
Zostaniesz poproszony o hasło eksportu (ustaw je; Burp o nie poprosi).
|
||||
|
||||
#### 3) Zaimportuj CA do Burp i uruchom Burp ponownie
|
||||
|
||||
W Burp:
|
||||
|
||||
- Proxy → Opcje
|
||||
- Znajdź Import / export certyfikatu CA
|
||||
- Kliknij Importuj certyfikat CA
|
||||
- Wybierz PKCS#12
|
||||
- Wskaż `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.
|
||||
|
||||
#### 4) Zaufaj nowemu CA w macOS systemowym pęku kluczy
|
||||
|
||||
To pozwoli aplikacjom systemowym i wielu stosom TLS zaufać 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”.)
|
||||
|
||||
#### 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
|
||||
|
||||
Azure CLI używa wewnętrznie Python Requests; ustaw oba z nich:
|
||||
```bash
|
||||
export REQUESTS_CA_BUNDLE="$HOME/burp-ca/burp-ca.pem"
|
||||
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.
|
||||
|
||||
#### 7) Zweryfikuj, że Burp rzeczywiście podpisuje certyfikaty twoim nowym CA (krytyczna kontrola)
|
||||
|
||||
To potwierdza, że twój ł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.:
|
||||
|
||||
`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.
|
||||
|
||||
#### 8) Zweryfikuj, czy Python Requests działa przez Burp
|
||||
```bash
|
||||
python3 - <<'EOF'
|
||||
import requests
|
||||
requests.get("https://login.microsoftonline.com")
|
||||
print("OK")
|
||||
EOF
|
||||
```
|
||||
Oczekiwane: `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`.
|
||||
|
||||
</details>
|
||||
|
||||
### Az PowerShell
|
||||
|
||||
Azure PowerShell to moduł zawierający cmdlets umożliwiające zarządzanie zasobami Azure bezpośrednio z wiersza poleceń PowerShell.
|
||||
Azure PowerShell to moduł z cmdletami do zarządzania zasobami Azure bezpośrednio z wiersza poleceń PowerShell.
|
||||
|
||||
Skorzystaj z tego linku, aby uzyskać [**installation instructions**](https://learn.microsoft.com/en-us/powershell/azure/install-azure-powershell).
|
||||
Follow this link for the [**installation instructions**](https://learn.microsoft.com/en-us/powershell/azure/install-azure-powershell).
|
||||
|
||||
Commands in Azure PowerShell AZ Module are structured like: `<Action>-Az<Service> <parameters>`
|
||||
Polecenia w Azure PowerShell AZ Module mają strukturę: `<Action>-Az<Service> <parameters>`
|
||||
|
||||
#### Debug | MitM Az PowerShell
|
||||
|
||||
@@ -118,11 +282,11 @@ Używając parametru **`-Debug`** można zobaczyć wszystkie żądania wysyłane
|
||||
```bash
|
||||
Get-AzResourceGroup -Debug
|
||||
```
|
||||
Aby wykonać **MitM** na narzędziu i **ręcznie sprawdzić wszystkie żądania**, które ono wysyła, możesz ustawić zmienne środowiskowe `HTTPS_PROXY` i `HTTP_PROXY` zgodnie z [**docs**](https://learn.microsoft.com/en-us/powershell/azure/az-powershell-proxy).
|
||||
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).
|
||||
|
||||
### Microsoft Graph PowerShell
|
||||
|
||||
Microsoft Graph PowerShell to wieloplatformowe SDK, które umożliwia dostęp do wszystkich Microsoft Graph API, w tym usług takich jak SharePoint, Exchange i Outlook, za pomocą jednego endpointu. Obsługuje PowerShell 7+, nowoczesne uwierzytelnianie przez MSAL, tożsamości zewnętrzne oraz zaawansowane zapytania. Z naciskiem na zasadę najmniejszych uprawnień zapewnia bezpieczne operacje i otrzymuje regularne aktualizacje, aby być zgodnym z najnowszymi funkcjami Microsoft Graph API.
|
||||
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.
|
||||
|
||||
Follow this link for the [**installation instructions**](https://learn.microsoft.com/en-us/powershell/microsoftgraph/installation).
|
||||
|
||||
@@ -136,19 +300,19 @@ Get-MgUser -Debug
|
||||
```
|
||||
### ~~**AzureAD Powershell**~~
|
||||
|
||||
The Azure Active Directory (AD) module, now **wycofany**, jest częścią Azure PowerShell do zarządzania zasobami Azure AD. Zapewnia cmdletów 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 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.
|
||||
|
||||
> [!TIP]
|
||||
> Zastąpiony przez Microsoft Graph PowerShell
|
||||
> Zostało to zastąpione przez Microsoft Graph PowerShell
|
||||
|
||||
Przejdź do tego linku, aby zobaczyć [**instrukcje instalacji**](https://www.powershellgallery.com/packages/AzureAD).
|
||||
Kliknij ten link, aby przejść do [**installation instructions**](https://www.powershellgallery.com/packages/AzureAD).
|
||||
|
||||
|
||||
## Zautomatyzowane narzędzia Recon i zgodności
|
||||
## Zautomatyzowany rekonesans i narzędzia do zgodności
|
||||
|
||||
### [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 wykonywanie kontroli zgodności i wykrywanie błędnych konfiguracji. Obecnie najbardziej polecane moduły Azure do uruchomienia to:
|
||||
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:
|
||||
|
||||
- [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)
|
||||
@@ -179,9 +343,9 @@ powerpipe server
|
||||
```
|
||||
### [Prowler](https://github.com/prowler-cloud/prowler)
|
||||
|
||||
Prowler jest narzędziem bezpieczeństwa Open Source do przeprowadzania ocen najlepszych praktyk bezpieczeństwa, audytów, incident response, continuous monitoring, hardening i forensics readiness dla AWS, Azure, Google Cloud oraz Kubernetes.
|
||||
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.
|
||||
|
||||
Umożliwia uruchomienie setek testów przeciwko środowisku Azure w celu wykrycia nieprawidłowych konfiguracji związanych z bezpieczeństwem oraz zebrania wyników w formacie json (i innych formatach tekstowych) lub przeglądania ich w sieci.
|
||||
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.
|
||||
```bash
|
||||
# Create a application with Reader role and set the tenant ID, client ID and secret in prowler so it access the app
|
||||
|
||||
@@ -203,7 +367,7 @@ docker run --rm -e "AZURE_CLIENT_ID=<client-id>" -e "AZURE_TENANT_ID=<tenant-id>
|
||||
```
|
||||
### [Monkey365](https://github.com/silverhack/monkey365)
|
||||
|
||||
Pozwala automatycznie przeprowadzać przeglądy konfiguracji zabezpieczeń subskrypcji Azure i Microsoft Entra ID.
|
||||
Pozwala na automatyczne przeprowadzanie przeglądów konfiguracji bezpieczeństwa subskrypcji Azure i Microsoft Entra ID.
|
||||
|
||||
Raporty HTML są przechowywane w katalogu `./monkey-reports` w folderze repozytorium github.
|
||||
```bash
|
||||
@@ -226,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 wielochmurowego, które umożliwia ocenę stanu bezpieczeństwa środowisk chmurowych.
|
||||
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.
|
||||
```bash
|
||||
virtualenv -p python3 venv
|
||||
source venv/bin/activate
|
||||
@@ -242,9 +406,9 @@ python scout.py azure --cli
|
||||
```
|
||||
### [Azure-MG-Sub-Governance-Reporting](https://github.com/JulianHayward/Azure-MG-Sub-Governance-Reporting)
|
||||
|
||||
Jest to skrypt PowerShell, który pomaga **wizualizować wszystkie zasoby i uprawnienia wewnątrz Management Group i Entra ID** dzierżawy oraz znaleźć nieprawidłowe konfiguracje bezpieczeństwa.
|
||||
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.
|
||||
|
||||
Działa przy użyciu modułu Az PowerShell, więc każde uwierzytelnianie obsługiwane przez ten moduł jest obsługiwane przez narzędzie.
|
||||
Działa przy użyciu Az PowerShell module, więc każde uwierzytelnianie obsługiwane przez to narzędzie jest obsługiwane.
|
||||
```bash
|
||||
import-module Az
|
||||
.\AzGovVizParallel.ps1 -ManagementGroupId <management-group-id> [-SubscriptionIdWhitelist <subscription-id>]
|
||||
@@ -253,7 +417,7 @@ import-module Az
|
||||
|
||||
### [**ROADRecon**](https://github.com/dirkjanm/ROADtools)
|
||||
|
||||
Enumeracja ROADRecon dostarcza informacji o konfiguracji Entra ID, takich jak użytkownicy, grupy, role, zasady dostępu warunkowego...
|
||||
Enumeration narzędzia ROADRecon oferuje informacje o konfiguracji Entra ID, takie jak użytkownicy, grupy, role, polityki warunkowego dostępu...
|
||||
```bash
|
||||
cd ROADTools
|
||||
pipenv shell
|
||||
@@ -266,19 +430,19 @@ roadrecon gui
|
||||
```
|
||||
### [**AzureHound**](https://github.com/BloodHoundAD/AzureHound)
|
||||
|
||||
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, etc.)
|
||||
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.)
|
||||
|
||||
Key traits
|
||||
- Działa z dowolnego miejsca w publicznym internecie przeciwko tenant APIs (nie wymaga dostępu do sieci wewnętrznej)
|
||||
- Generuje JSON do załadunku przez BloodHound CE w celu wizualizacji ścieżek ataku pomiędzy tożsamościami i zasobami w chmurze
|
||||
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
|
||||
|
||||
Authentication options
|
||||
Opcje uwierzytelniania
|
||||
- Nazwa użytkownika + hasło: -u <upn> -p <password>
|
||||
- Token odświeżający: --refresh-token <rt>
|
||||
- JSON Web Token (token dostępu): --jwt <jwt>
|
||||
- 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>]
|
||||
|
||||
@@ -317,37 +481,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 odpytywane
|
||||
- Punkty końcowe Graph (przykłady):
|
||||
Co jest zapytywane
|
||||
- Graph endpoints (przykłady):
|
||||
- /v1.0/organization, /v1.0/users, /v1.0/groups, /v1.0/roleManagement/directory/roleDefinitions, directoryRoles, owners/members
|
||||
- Punkty końcowe ARM (przykłady):
|
||||
- ARM endpoints (przykłady):
|
||||
- management.azure.com/subscriptions/.../providers/Microsoft.Storage/storageAccounts
|
||||
- .../Microsoft.KeyVault/vaults, .../Microsoft.Compute/virtualMachines, .../Microsoft.Web/sites, .../Microsoft.ContainerService/managedClusters
|
||||
|
||||
Zachowanie preflight i punkty końcowe
|
||||
- Każde wywołanie azurehound list <object> zwykle wykonuje te testowe wywołania przed enumeracją:
|
||||
1) Identity platform: login.microsoftonline.com
|
||||
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
|
||||
2) Graph: GET https://graph.microsoft.com/v1.0/organization
|
||||
3) ARM: GET https://management.azure.com/subscriptions?api-version=...
|
||||
- Bazowe URL-e środowisk Cloud różnią się dla Government/China/Germany. Zobacz constants/environments.go w repo.
|
||||
- Podstawowe URL-e środowiska cloud różnią się dla Government/China/Germany. Zobacz constants/environments.go w repo.
|
||||
|
||||
Obiekty intensywnie używające ARM (mniej widoczne w Activity/Resource logs)
|
||||
- Poniższa lista targetów w przeważającej mierze używa odczytów z 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 zwykle nie są zapisywane w Activity Logs; odczyty data-plane (np. *.blob.core.windows.net, *.vault.azure.net) są objęte przez Diagnostic Settings na poziomie zasobu.
|
||||
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.
|
||||
|
||||
Uwagi OPSEC i dotyczące logowania
|
||||
- Microsoft Graph Activity Logs nie są domyślnie włączone; włącz je i eksportuj do SIEM, aby uzyskać widoczność wywołań Graph. Spodziewaj się preflightowego GET /v1.0/organization z UA azurehound/v2.x.x.
|
||||
- Logi non-interactive sign-in Entra ID rejestrują identity platform auth (login.microsoftonline.com) używane przez AzureHound.
|
||||
- Operacje odczytu/listingu ARM control-plane nie są zapisywane w Activity Logs; wiele operacji azurehound list przeciw zasobom nie pojawi się tam. Tylko data-plane logging (poprzez Diagnostic Settings) uchwyci odczyty do punktów końcowych usług.
|
||||
- Defender XDR GraphApiAuditEvents (preview) może ujawniać wywołania Graph i identyfikatory tokenów, ale może brakować UserAgent i mieć ograniczony okres przechowywania.
|
||||
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.
|
||||
|
||||
Wskazówka: Podczas enumeracji ścieżek przywilejów zrzucaj użytkowników, grupy, role i przypisania ról, następnie zaimportuj do BloodHound i użyj prebuilt cypher queries, aby wyeksponować Global Administrator/Privileged Role Administrator oraz przechodzącą eskalację przez nested groups i przypisania RBAC.
|
||||
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.
|
||||
|
||||
Uruchom BloodHound web za pomocą `curl -L https://ghst.ly/getbhce | docker compose -f - up` i zaimportuj plik `output.json`. Następnie, na karcie EXPLORE, w sekcji CYPHER zobaczysz ikonę folderu zawierającą pre-built queries.
|
||||
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.
|
||||
|
||||
### [**MicroBurst**](https://github.com/NetSPI/MicroBurst)
|
||||
|
||||
MicroBurst zawiera funkcje i skrypty wspierające Azure Services discovery, audyt słabych konfiguracji oraz działania post exploitation, takie jak credential dumping. Jest przeznaczony do użycia podczas penetration tests, w których wykorzystywany jest Azure.
|
||||
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.
|
||||
```bash
|
||||
Import-Module .\MicroBurst.psm1
|
||||
Import-Module .\Get-AzureDomainInfo.ps1
|
||||
@@ -355,9 +519,9 @@ Get-AzureDomainInfo -folder MicroBurst -Verbose
|
||||
```
|
||||
### [**PowerZure**](https://github.com/hausec/PowerZure)
|
||||
|
||||
PowerZure został stworzony z potrzeby posiadania frameworku, który potrafi zarówno przeprowadzać rozpoznanie, jak i eksploatację Azure, EntraID oraz powiązanych zasobów.
|
||||
PowerZure powstał z potrzeby frameworka, który potrafi zarówno wykonywać reconnaissance, jak i exploitation Azure, EntraID oraz powiązanych z nimi zasobów.
|
||||
|
||||
Korzysta z modułu **Az PowerShell**, więc każde uwierzytelnienie obsługiwane przez ten moduł jest również obsługiwane przez PowerZure.
|
||||
Używa modułu **Az PowerShell**, więc każde uwierzytelnienie obsługiwane przez ten moduł jest obsługiwane przez narzędzie.
|
||||
```bash
|
||||
# Login
|
||||
Import-Module Az
|
||||
@@ -388,7 +552,7 @@ Invoke-AzureRunCommand -Command <command> -VMName <vmname>
|
||||
```
|
||||
### [**GraphRunner**](https://github.com/dafthack/GraphRunner/wiki/Invoke%E2%80%90GraphRunner)
|
||||
|
||||
GraphRunner to zestaw narzędzi post-exploitation do interakcji z Microsoft Graph API. Udostępnia różne narzędzia do przeprowadzania reconnaissance, persistence i pillaging danych z konta Microsoft Entra ID (Azure AD).
|
||||
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).
|
||||
```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
|
||||
@@ -432,11 +596,9 @@ Invoke-GraphRunner -Tokens $tokens
|
||||
```
|
||||
### [Stormspotter](https://github.com/Azure/Stormspotter)
|
||||
|
||||
Stormspotter tworzy „attack graph” zasobów w subskrypcji Azure.
|
||||
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.
|
||||
|
||||
Umożliwia red teams i pentesters wizualizację attack surface oraz możliwości pivot w obrębie tenant, a także znacząco wzmacnia twoich defenders, pozwalając im szybko się zorientować i priorytetyzować pracę związaną z incident response.
|
||||
|
||||
**Niestety wygląda na porzucony.**
|
||||
**Niestety wygląda na nieutrzymywane**.
|
||||
```bash
|
||||
# Start Backend
|
||||
cd stormspotter\backend\
|
||||
@@ -454,11 +616,11 @@ 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)
|
||||
```
|
||||
## Źródła
|
||||
- [Cloud Discovery With AzureHound (Unit 42)](https://unit42.paloaltonetworks.com/threat-actor-misuse-of-azurehound/)
|
||||
- [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)
|
||||
## 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)
|
||||
- [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