Translated ['', 'src/pentesting-cloud/azure-security/az-basic-informatio

This commit is contained in:
Translator
2026-02-05 12:39:39 +00:00
parent cba3aad37d
commit bd05cb25fe
@@ -1,100 +1,100 @@
# Az - Tokens & Public Applications
# Az - Tokeny i publiczne aplikacje
{{#include ../../../banners/hacktricks-training.md}}
## Podstawowe informacje
Entra ID to platforma zarządzania tożsamością i dostępem (IAM) w chmurze firmy Microsoft, stanowiąca podstawowy system uwierzytelniania i autoryzacji dla usług takich jak Microsoft 365 i Azure Resource Manager. Azure AD wdraża ramy autoryzacji OAuth 2.0 oraz protokół uwierzytelniania OpenID Connect (OIDC) do zarządzania dostępem do zasobów.
Entra ID to chmurowa platforma zarządzania tożsamością i dostępem (IAM) Microsoftu, służąca jako podstawowy system uwierzytelniania i autoryzacji dla usług takich jak Microsoft 365 i Azure Resource Manager. Azure AD implementuje framework autoryzacji OAuth 2.0 oraz protokół uwierzytelniania OpenID Connect (OIDC) do zarządzania dostępem do zasobów.
### OAuth
**Kluczowi uczestnicy w OAuth 2.0:**
1. **Serwer zasobów (RS):** Chroni zasoby należące do właściciela zasobów.
2. **Właściciel zasobów (RO):** Zazwyczaj użytkownik końcowy, który posiada chronione zasoby.
3. **Aplikacja kliencka (CA):** Aplikacja starająca się o dostęp do zasobów w imieniu właściciela zasobów.
4. **Serwer autoryzacji (AS):** Wydaje tokeny dostępu aplikacjom klienckim po ich uwierzytelnieniu i autoryzacji.
1. **Resource Server (RS):** Chroni zasoby należące do właściciela zasobów.
2. **Resource Owner (RO):** Zazwyczaj końcowy użytkownik będący właścicielem chronionych zasobów.
3. **Client Application (CA):** Aplikacja żądająca dostępu do zasobów w imieniu właściciela zasobów.
4. **Authorization Server (AS):** Wydaje tokeny dostępu aplikacjom klienckim po ich uwierzytelnieniu i autoryzacji.
**Zakresy i zgoda:**
**Scopes i zgoda:**
- **Zakresy:** Szczegółowe uprawnienia zdefiniowane na serwerze zasobów, które określają poziomy dostępu.
- **Zgoda:** Proces, w którym właściciel zasobów przyznaje aplikacji klienckiej pozwolenie na dostęp do zasobów z określonymi zakresami.
- **Scopes:** Szczegółowe uprawnienia zdefiniowane na serwerze zasobów, określające poziomy dostępu.
- **Consent:** Proces, w którym właściciel zasobów przyznaje aplikacji klienckiej uprawnienia do dostępu do zasobów z określonymi scopes.
**Integracja z Microsoft 365:**
- Microsoft 365 wykorzystuje Azure AD do IAM i składa się z wielu aplikacji OAuth "pierwszej strony".
- Aplikacje te są głęboko zintegrowane i często mają wzajemne relacje serwisowe.
- Aby uprościć doświadczenia użytkowników i zachować funkcjonalność, Microsoft przyznaje "domyślną zgodę" lub "wstępną zgodę" tym aplikacjom pierwszej strony.
- **Domyślna zgoda:** Niektóre aplikacje są automatycznie **przyznawane dostęp do określonych zakresów bez wyraźnej zgody użytkownika lub administratora**.
- Te wstępnie wyrażone zgody są zazwyczaj ukryte zarówno przed użytkownikami, jak i administratorami, co sprawia, że są mniej widoczne w standardowych interfejsach zarządzania.
- Microsoft 365 używa Azure AD do IAM i składa się z wielu "first-party" OAuth aplikacji.
- Aplikacje te są głęboko zintegrowane i często mają współzależne relacje serwisowe.
- Aby uprościć doświadczenie użytkownika i utrzymać funkcjonalność, Microsoft przyznaje tym first-party aplikacjom "implied consent" lub "pre-consent".
- **Implied Consent:** Niektóre aplikacje są automatycznie **przyznawane dostęp do określonych scopes bez jawnej zgody użytkownika lub administratora**.
- Te pre-consented scopes są zazwyczaj ukryte przed użytkownikami i administratorami, co sprawia, że są mniej widoczne w standardowych interfejsach zarządzania.
**Typy aplikacji klienckich:**
**Rodzaje aplikacji klienckich:**
1. **Klienci poufni:**
1. **Confidential Clients:**
- Posiadają własne poświadczenia (np. hasła lub certyfikaty).
- Mogą **bezpiecznie uwierzytelniać się** na serwerze autoryzacji.
2. **Klienci publiczni:**
- Mogą **bezpiecznie uwierzytelniać się** u authorization servera.
2. **Public Clients:**
- Nie mają unikalnych poświadczeń.
- Nie mogą bezpiecznie uwierzytelniać się na serwerze autoryzacji.
- **Implikacja bezpieczeństwa:** Atakujący może podszyć się pod publiczną aplikację kliencką podczas żądania tokenów, ponieważ nie ma mechanizmu, który pozwalałby serwerowi autoryzacji zweryfikować legalność aplikacji.
- Nie mogą bezpiecznie uwierzytelniać się u authorization servera.
- **Implikacja bezpieczeństwa:** Atakujący może podszyć się pod public client aplikację podczas żądania tokenów, ponieważ authorization server nie ma mechanizmu weryfikacji prawdziwości aplikacji.
## Tokeny uwierzytelniające
Istnieją **trzy typy tokenów** używanych w OIDC:
W OIDC używane są **trzy typy tokenów**:
- [**Tokeny dostępu**](https://learn.microsoft.com/en-us/azure/active-directory/develop/access-tokens)**:** Klient przedstawia ten token serwerowi zasobów, aby **uzyskać dostęp do zasobów**. Może być używany tylko dla określonej kombinacji użytkownika, klienta i zasobu i **nie może być unieważniony** do momentu wygaśnięcia - co wynosi domyślnie 1 godzinę.
- **Tokeny ID**: Klient otrzymuje ten **token od serwera autoryzacji**. Zawiera podstawowe informacje o użytkowniku. Jest **powiązany z określoną kombinacją użytkownika i klienta**.
- **Tokeny odświeżające**: Przyznawane klientowi wraz z tokenem dostępu. Używane do **uzyskiwania nowych tokenów dostępu i ID**. Jest powiązany z określoną kombinacją użytkownika i klienta i może być unieważniony. Domyślne wygaśnięcie wynosi **90 dni** dla nieaktywnych tokenów odświeżających i **brak wygaśnięcia dla aktywnych tokenów** (z tokena odświeżającego można uzyskać nowe tokeny odświeżające).
- Token odświeżający powinien być powiązany z **`aud`**, z pewnymi **zakresami** oraz z **dzierżawą** i powinien być w stanie generować tokeny dostępu tylko dla tego aud, zakresów (i nic więcej) oraz dzierżawy. Jednak nie jest to przypadek w przypadku **tokenów aplikacji FOCI**.
- Token odświeżający jest szyfrowany i tylko Microsoft może go odszyfrować.
- Uzyskanie nowego tokena odświeżającego nie unieważnia poprzedniego tokena odświeżającego.
- [**Access Tokens**](https://learn.microsoft.com/en-us/azure/active-directory/develop/access-tokens)**:** Klient przekazuje ten token serwerowi zasobów, aby **uzyskać dostęp do zasobów**. Może być użyty tylko dla konkretnej kombinacji użytkownika, klienta i zasobu i **nie może zostać unieważniony** aż do wygaśnięcia domyślnie 1 godzina.
- **ID Tokens**: Klient otrzymuje ten **token od serwera autoryzacji**. Zawiera podstawowe informacje o użytkowniku. Jest **powiązany z konkretną kombinacją użytkownika i klienta**.
- **Refresh Tokens**: Dostarczane klientowi wraz z tokenem dostępu. Służą do **uzyskiwania nowych access i ID tokenów**. powiązane z konkretną kombinacją użytkownika i klienta i mo być unieważnione. Domyślny okres wygaśnięcia to **90 dni** dla nieaktywnych refresh tokenów i **brak wygaśnięcia dla aktywnych tokenów** (z refresh tokena można otrzymać nowe refresh tokeny).
- Refresh token powinien być powiązany z polem **`aud`**, z pewnymi **scopes** oraz z **tenantem** i powinien generować access tokeny tylko dla tego aud, tych scopes (i nie więcej) oraz tego tenant. Jednak nie dotyczy to tokenów aplikacji **FOCI**.
- Refresh token jest zaszyfrowany i tylko Microsoft może go odszyfrować.
- Uzyskanie nowego refresh tokena nie unieważnia poprzedniego refresh tokena.
> [!WARNING]
> Informacje o **dostępie warunkowym** są **przechowywane** wewnątrz **JWT**. Jeśli więc zażądają Państwo **tokena z dozwolonego adresu IP**, ten **IP** zostanie **przechowany** w tokenie, a następnie można użyć tego tokena z **niedozwolonego IP, aby uzyskać dostęp do zasobów**.
> Informacje dotyczące **conditional access** są **przechowywane** wewnątrz **JWT**. Zatem, jeśli zażadasz **tokenu z dozwolonego adresu IP**, ten **adres IP** zostanie **zapisany** w tokenie i potem możesz użyć tego tokenu z **adresu IP, który nie jest dozwolony, aby uzyskać dostęp do zasobów**.
### Tokeny dostępu "aud"
### Access Tokens "aud"
Pole wskazane w polu "aud" to **serwer zasobów** (aplikacja) używany do przeprowadzenia logowania.
Pole wskazane w polu "aud" to **serwer zasobów** (aplikacja) używana do przeprowadzenia logowania.
Polecenie `az account get-access-token --resource-type [...]` obsługuje następujące typy, a każdy z nich doda określone "aud" w wynikowym tokenie dostępu:
Polecenie `az account get-access-token --resource-type [...]` obsługuje następujące typy, a każdy z nich doda specyficzne "aud" do otrzymanego access tokena:
> [!CAUTION]
> Zauważ, że poniższe to tylko API obsługiwane przez `az account get-access-token`, ale jest ich więcej.
> Zauważ, że poniższe to tylko API obsługiwane przez `az account get-access-token`, ale istnieją też inne.
<details>
<summary>przykłady aud</summary>
<summary>aud examples</summary>
- **aad-graph (Azure Active Directory Graph API)**: Używane do uzyskiwania dostępu do przestarzałego API Azure AD Graph (deprecjonowane), które pozwala aplikacjom na odczyt i zapis danych katalogowych w Azure Active Directory (Azure AD).
- **aad-graph (Azure Active Directory Graph API)**: Używane do uzyskania dostępu do przestarzałego Azure Active Directory Graph API (deprecated), które pozwala aplikacjom na odczyt i zapis danych katalogu w Azure Active Directory (Azure AD).
- `https://graph.windows.net/`
* **arm (Azure Resource Manager)**: Używane do zarządzania zasobami Azure za pośrednictwem API Azure Resource Manager. Obejmuje operacje takie jak tworzenie, aktualizowanie i usuwanie zasobów, takich jak maszyny wirtualne, konta magazynowe i inne.
* **arm (Azure Resource Manager)**: Używane do zarządzania zasobami Azure przez Azure Resource Manager API. Obejmuje operacje takie jak tworzenie, aktualizacja i usuwanie zasobów takich jak maszyny wirtualne, konta storage i inne.
- `https://management.core.windows.net/ or https://management.azure.com/`
- **batch (Azure Batch Services)**: Używane do uzyskiwania dostępu do Azure Batch, usługi, która umożliwia efektywne uruchamianie aplikacji obliczeniowych w chmurze na dużą skalę.
- **batch (Azure Batch Services)**: Używane do dostępu do Azure Batch, usługi umożliwiającej wydajne uruchamianie aplikacji równoległych i HPC w chmurze.
- `https://batch.core.windows.net/`
* **data-lake (Azure Data Lake Storage)**: Używane do interakcji z Azure Data Lake Storage Gen1, które jest skalowalną usługą przechowywania danych i analityki.
* **data-lake (Azure Data Lake Storage)**: Używane do interakcji z Azure Data Lake Storage Gen1, skalowalną usługą przechowywania danych i analityki.
- `https://datalake.azure.net/`
- **media (Azure Media Services)**: Używane do uzyskiwania dostępu do Azure Media Services, które oferują usługi przetwarzania i dostarczania mediów w chmurze dla treści wideo i audio.
- **media (Azure Media Services)**: Używane do dostępu do Azure Media Services, które oferują przetwarzanie i dostarczanie mediów (wideo i audio) w chmurze.
- `https://rest.media.azure.net`
* **ms-graph (Microsoft Graph API)**: Używane do uzyskiwania dostępu do Microsoft Graph API, zjednoczonego punktu końcowego dla danych usług Microsoft 365. Umożliwia dostęp do danych i informacji z usług takich jak Azure AD, Office 365, Enterprise Mobility i usługi bezpieczeństwa.
* **ms-graph (Microsoft Graph API)**: Używane do dostępu do Microsoft Graph API, zunifikowanego punktu końcowego dla danych usług Microsoft 365. Pozwala uzyskać dostęp do danych i informacji z usług takich jak Azure AD, Office 365, Enterprise Mobility i Security services.
- `https://graph.microsoft.com`
- **oss-rdbms (Azure Open Source Relational Databases)**: Używane do uzyskiwania dostępu do usług baz danych Azure dla otwartych silników baz danych, takich jak MySQL, PostgreSQL i MariaDB.
- **oss-rdbms (Azure Open Source Relational Databases)**: Używane do dostępu do usług baz danych Azure dla open-source'owych silników relacyjnych, takich jak MySQL, PostgreSQL i MariaDB.
- `https://ossrdbms-aad.database.windows.net`
</details>
### Zakresy tokenów dostępu "scp"
### Access Tokens Scopes "scp"
Zakres tokena dostępu jest przechowywany wewnątrz klucza scp w tokenie dostępu JWT. Te zakresy definiują, do czego token dostępu ma dostęp.
Zakres access tokena jest przechowywany w kluczu scp wewnątrz access token JWT. Te scopes definiują, do czego access token ma dostęp.
Jeśli JWT ma prawo kontaktować się z określonym API, ale **nie ma zakresu** do wykonania żądanej akcji, **nie będzie w stanie wykonać akcji** z tym JWT.
Jeśli JWT ma uprawnienie do kontaktu z konkretnym API, ale **nie ma scope** pozwalającego wykonać żądaną akcję, **nie będzie w stanie wykonać tej akcji** przy użyciu tego JWT.
### Przykład uzyskania tokena odświeżającego i dostępu
### Przykład pobierania refresh i access tokenów
```python
# Code example from https://github.com/secureworks/family-of-client-ids-research
import msal
@@ -106,7 +106,7 @@ from typing import Any, Dict, List
# LOGIN VIA CODE FLOW AUTHENTICATION
azure_cli_client = msal.PublicClientApplication(
"04b07795-8ddb-461a-bbee-02f9e1bf7b46" # ID for Azure CLI client
"00b41c95-dab0-4487-9791-b9d2c32c80f2" # ID for Office 365 Management
)
device_flow = azure_cli_client.initiate_device_flow(
scopes=["https://graph.microsoft.com/.default"]
@@ -146,29 +146,30 @@ pprint(new_azure_cli_bearer_tokens_for_graph_api)
```
### Inne pola tokena dostępu
- **appid**: Identyfikator aplikacji używany do generowania tokena
- **appidacr**: Referencja klasy kontekstu uwierzytelniania aplikacji wskazuje, jak klient został uwierzytelniony, dla publicznego klienta wartość wynosi 0, a jeśli użyto tajnego klucza klienta, wartość wynosi 1
- **acr**: Roszczenie referencji klasy kontekstu uwierzytelniania wynosi "0", gdy uwierzytelnienie użytkownika końcowego nie spełnia wymagań ISO/IEC 29115.
- **amr**: Metoda uwierzytelniania wskazuje, jak token został uwierzytelniony. Wartość "pwd" wskazuje, że użyto hasła.
- **groups**: Wskazuje grupy, w których główny użytkownik jest członkiem.
- **iss**: Wydawca identyfikuje usługę tokenów bezpieczeństwa (STS), która wygenerowała token. np. https://sts.windows.net/fdd066e1-ee37-49bc-b08f-d0e152119b04/ (uuid to identyfikator dzierżawy)
- **oid**: Identyfikator obiektu głównego użytkownika
- **tid**: Identyfikator dzierżawy
- **iat, nbf, exp**: Wydany (kiedy został wydany), Nie przed (nie może być używany przed tym czasem, zazwyczaj ta sama wartość co iat), Czas wygaśnięcia.
- **appid**: Identyfikator aplikacji użyty do wygenerowania tokena
- **appidacr**: Application Authentication Context Class Reference wskazuje, w jaki sposób klient został uwierzytelniony dla publicznego klienta wartość to 0, a jeśli użyto sekretu klienta (client secret) wartość to 1
- **acr**: Authentication Context Class Reference ma wartość "0", gdy uwierzytelnienie użytkownika końcowego nie spełnia wymagań ISO/IEC 29115.
- **amr**: Metoda uwierzytelniania wskazuje, w jaki sposób token został uwierzytelniony. Wartość pwd” oznacza, że użyto hasła.
- **groups**: Wskazuje grupy, których członkiem jest podmiot.
- **iss**: Issuer identyfikuje security token service (STS), który wygenerował token, np. https://sts.windows.net/fdd066e1-ee37-49bc-b08f-d0e152119b04/ (uuid to tenant ID)
- **oid**: ID obiektu podmiotu
- **tid**: ID dzierżawy (tenant ID)
- **iat, nbf, exp**: Issued at (kiedy został wydany), Not before (nie można używać przed tym czasem, zwykle ta sama wartość co iat), Expiration time (czas wygaśnięcia).
## Eskalacja uprawnień tokenów FOCI
Wcześniej wspomniano, że tokeny odświeżające powinny być powiązane z **zakresami**, z którymi zostały wygenerowane, z **aplikacją** i **dzierżawą**, do której zostały wygenerowane. Jeśli jakikolwiek z tych ograniczeń zostanie naruszony, możliwe jest eskalowanie uprawnień, ponieważ będzie można generować tokeny dostępu do innych zasobów i dzierżaw, do których użytkownik ma dostęp, oraz z większymi zakresami, niż pierwotnie zamierzano.
Wcześniej wspomniano, że refresh tokens powinny być powiązane z **scopes**, z **application** i z **tenant**, dla których zostały wygenerowane. Jeśli któreś z tych ograniczeń zostanie złamane, możliwa jest eskalacja uprawnień będzie można wygenerować access tokens do innych zasobów i tenantów, do których użytkownik ma dostęp, oraz z większymi scopes niż pierwotnie przewidziano.
Co więcej, **jest to możliwe ze wszystkimi tokenami odświeżającymi** w [Microsoft identity platform](https://learn.microsoft.com/en-us/entra/identity-platform/) (konto Microsoft Entra, konta osobiste Microsoft oraz konta społecznościowe, takie jak Facebook i Google), ponieważ jak wspominają [**dokumenty**](https://learn.microsoft.com/en-us/entra/identity-platform/refresh-tokens): "Tokeny odświeżające są powiązane z kombinacją użytkownika i klienta, ale **nie są powiązane z zasobem ani dzierżawą**. Klient może użyć tokena odświeżającego do uzyskania tokenów dostępu **w dowolnej kombinacji zasobów i dzierżaw**, gdzie ma na to pozwolenie. Tokeny odświeżające są szyfrowane i tylko platforma tożsamości Microsoft może je odczytać."
Co więcej, **jest to możliwe dla wszystkich refresh tokens** w [Microsoft identity platform](https://learn.microsoft.com/en-us/entra/identity-platform/) (Microsoft Entra accounts, Microsoft personal accounts, and social accounts like Facebook and Google), ponieważ, jak wspominają [**docs**](https://learn.microsoft.com/en-us/entra/identity-platform/refresh-tokens): "Refresh tokens are bound to a combination of user and client, but **aren't tied to a resource or tenant**. A client can use a refresh token to acquire access tokens **across any combination of resource and tenant** where it has permission to do so. Refresh tokens are encrypted and only the Microsoft identity platform can read them."
Ponadto, należy zauważyć, że aplikacje FOCI są aplikacjami publicznymi, więc **nie jest potrzebny żaden sekret** do uwierzytelnienia na serwerze.
Dodatkowo, aplikacje FOCI są aplikacjami publicznymi, więc **żaden sekret nie jest potrzebny** do uwierzytelnienia się na serwerze.
Następnie znane klientów FOCI zgłoszone w [**oryginalnych badaniach**](https://github.com/secureworks/family-of-client-ids-research/tree/main) można [**znaleźć tutaj**](https://github.com/secureworks/family-of-client-ids-research/blob/main/known-foci-clients.csv).
Znane klienty FOCI zgłoszone w [**original research**](https://github.com/secureworks/family-of-client-ids-research/tree/main) można [**found here**](https://github.com/secureworks/family-of-client-ids-research/blob/main/known-foci-clients.csv).
### Uzyskaj inny zakres
Kontynuując poprzedni przykład kodu, w tym kodzie żądany jest nowy token dla innego zakresu:
Kontynuując wcześniejszy przykład kodu, w tym fragmencie żądany jest nowy token dla innego zakresu:
```python
# Code from https://github.com/secureworks/family-of-client-ids-research
azure_cli_bearer_tokens_for_outlook_api = (
@@ -185,7 +186,7 @@ scopes=[
)
pprint(azure_cli_bearer_tokens_for_outlook_api)
```
### Uzyskaj różne klienty i zakresy
### Uzyskaj innego klienta i inne zakresy
```python
# Code from https://github.com/secureworks/family-of-client-ids-research
microsoft_office_client = msal.PublicClientApplication("d3590ed6-52b3-4102-aeff-aad2292ab01c")
@@ -201,27 +202,28 @@ scopes=["https://graph.microsoft.com/.default"],
# How is this possible?
pprint(microsoft_office_bearer_tokens_for_graph_api)
```
## Gdzie znaleźć tokeny
## Gdzie znaleźć tokens
Z perspektywy atakującego bardzo interesujące jest wiedzieć, gdzie można znaleźć tokeny dostępu i odświeżania, gdy na przykład komputer ofiary jest skompromitowany:
Z perspektywy atakującego bardzo istotne jest wiedzieć, gdzie można znaleźć access i refresh tokens, np. gdy komputer ofiary zostanie skompromitowany:
- W **`<HOME>/.Azure`**
- **`azureProfile.json`** zawiera informacje o zalogowanych użytkownikach z przeszłości
- **`clouds.config` zawiera** informacje o subskrypcjach
- **`service_principal_entries.json`** zawiera dane uwierzytelniające aplikacji (id najemcy, klienci i sekret). Tylko w Linux i macOS
- **`msal_token_cache.json`** zawiera tokeny dostępu i tokeny odświeżania. Tylko w Linux i macOS
- **`service_principal_entries.bin`** i **`msal_token_cache.bin`** są używane w Windows i są szyfrowane za pomocą DPAPI
- Inside **`<HOME>/.Azure`**
- **`azureProfile.json`** zawiera informacje o wcześniej zalogowanych użytkownikach
- **`clouds.config contains`** informacje o subskrypcjach
- **`service_principal_entries.json`** zawiera poświadczenia aplikacji (tenant id, clients and secret). Tylko w Linux & macOS
- **`msal_token_cache.json`** zawiera access tokens i refresh tokens. Tylko w Linux & macOS
- **`service_principal_entries.bin`** and msal_token_cache.bin są używane w Windows i są zaszyfrowane za pomocą DPAPI
- **`msal_http_cache.bin`** to pamięć podręczna żądań HTTP
- Załaduj to: `with open("msal_http_cache.bin", 'rb') as f: pickle.load(f)`
- **`AzureRmContext.json`** zawiera informacje o wcześniejszych logowaniach za pomocą Az PowerShell (ale nie zawiera danych uwierzytelniających)
- W **`C:\Users\<username>\AppData\Local\Microsoft\IdentityCache\*`** znajdują się różne pliki `.bin` z **tokenami dostępu**, tokenami ID i informacjami o koncie szyfrowanymi za pomocą DPAPI użytkownika.
- Można znaleźć więcej **tokenów dostępu** w plikach `.tbres` wewnątrz **`C:\Users\<username>\AppData\Local\Microsoft\TokenBroken\Cache\`**, które zawierają tokeny dostępu szyfrowane w base64 za pomocą DPAPI.
- W Linux i macOS można uzyskać **tokeny dostępu, tokeny odświeżania i tokeny ID** z Az PowerShell (jeśli używane) uruchamiając `pwsh -Command "Save-AzContext -Path /tmp/az-context.json"`
- W Windows to generuje tylko tokeny ID.
- Możliwe jest sprawdzenie, czy Az PowerShell był używany w Linux i macOS, sprawdzając, czy istnieje `$HOME/.local/share/.IdentityService/` (chociaż zawarte pliki są puste i bezużyteczne)
- Jeśli użytkownik jest **zalogowany w Azure w przeglądarce**, zgodnie z tym [**postem**](https://www.infosecnoodle.com/p/obtaining-microsoft-entra-refresh?r=357m16&utm_campaign=post&utm_medium=web), możliwe jest rozpoczęcie procesu uwierzytelniania z **przekierowaniem do localhost**, co sprawia, że przeglądarka automatycznie autoryzuje logowanie i otrzymuje token odświeżania. Należy zauważ, że istnieje tylko kilka aplikacji FOCI, które pozwala na przekierowanie do localhost (takich jak az cli lub moduł powershell), więc te aplikacje muszą być dozwolone.
- Load it: `with open("msal_http_cache.bin", 'rb') as f: pickle.load(f)`
- **`AzureRmContext.json`** zawiera informacje o wcześniejszych logowaniach przy użyciu Az PowerShell (ale bez poświadczeń)
- Inside **`C:\Users\<username>\AppData\Local\Microsoft\IdentityCache\*`** znajduje się kilka `.bin` plików z **access tokens**, ID tokens i informacjami o koncie zaszyfrowanymi za pomocą DPAPI użytkownika.
- Można znaleźć więcej **access tokens** w plikach `.tbres` wewnątrz **`C:\Users\<username>\AppData\Local\Microsoft\TokenBroken\Cache\`**, które zawierają base64 zaszyfrowane za pomocą DPAPI z access tokens.
- W Linux i macOS można uzyskać **access tokens, refresh tokens and id tokens** z Az PowerShell (jeśli używane), uruchamiając `pwsh -Command "Save-AzContext -Path /tmp/az-context.json"`
- W Windows to generuje tylko id tokens.
- Można sprawdz, czy Az PowerShell był używany w Linux i macSO, sprawdzając, czy istnieje `$HOME/.local/share/.IdentityService/` (choć zawarte pliki są puste i bezużyteczne)
- Jeśli użytkownik jest **logged inside Azure with the browser**, zgodnie z tym [**post**](https://www.infosecnoodle.com/p/obtaining-microsoft-entra-refresh?r=357m16&utm_campaign=post&utm_medium=web) można uruchomić flow uwierzytelniania z **przekierowaniem na localhost**, sprawić, by przeglądarka automatycznie zatwierdziła logowanie i otrzymać refresh token. Zauważ, że tylko kilka aplikacji FOCI pozwala na redirect do localhost (np. az cli lub moduł powershell), więc te aplikacje muszą być dozwolone.
- Inną opcją opisaną na blogu jest użycie narzędzia [**BOF-entra-authcode-flow**](https://github.com/sudonoodle/BOF-entra-authcode-flow), które może użyć dowolnej aplikacji, ponieważ **pobierze OAuth code, a następnie uzyska refresh token z tytułu końcowej strony auth** używając redirect URI `https://login.microsoftonline.com/common/oauth2/nativeclient`.
## Odniesienia
## References
- [https://github.com/secureworks/family-of-client-ids-research](https://github.com/secureworks/family-of-client-ids-research)
- [https://github.com/Huachao/azure-content/blob/master/articles/active-directory/active-directory-token-and-claims.md](https://github.com/Huachao/azure-content/blob/master/articles/active-directory/active-directory-token-and-claims.md)