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

This commit is contained in:
Translator
2026-02-05 12:38:21 +00:00
parent ed74a38a58
commit 0166ad5b96
@@ -4,97 +4,97 @@
## Temel Bilgiler
Entra ID, Microsoft'un bulut tabanlı kimlik ve erişim yönetimi (IAM) platformudur ve Microsoft 365 ve Azure Resource Manager gibi hizmetler için temel kimlik doğrulama ve yetkilendirme sistemi olarak hizmet vermektedir. Azure AD, kaynaklara erişimi yönetmek için OAuth 2.0 yetkilendirme çerçevesini ve OpenID Connect (OIDC) kimlik doğrulama protokolünü uygular.
Entra ID, Microsoft'un bulut tabanlı kimlik ve erişim yönetimi (IAM) platformudur ve Microsoft 365 ve Azure Resource Manager gibi hizmetler için temel kimlik doğrulama ve yetkilendirme sistemi olarak hizmet verir. Azure AD, kaynaklara erişimi yönetmek için OAuth 2.0 authorization framework ve OpenID Connect (OIDC) authentication protocolünü uygular.
### OAuth
**OAuth 2.0'da Anahtar Katılımcılar:**
**OAuth 2.0'deki Temel Katılımcılar:**
1. **Kaynak Sunucusu (RS):** Kaynak sahibine ait kaynakları korur.
2. **Kaynak Sahibi (RO):** Genellikle korunan kaynaklara sahip olan son kullanıcıdır.
3. **İstemci Uygulaması (CA):** Kaynak sahibinin adına kaynaklara erişim talep eden bir uygulamadır.
4. **Yetkilendirme Sunucusu (AS):** İstemci uygulamalarına erişim token'ları verir, bunları kimlik doğruladıktan ve yetkilendirdikten sonra.
1. **Resource Server (RS):** Kaynak sahibine ait kaynakları koruyan sunucu.
2. **Resource Owner (RO):** Genellikle korunan kaynaklara sahip olan son kullanıcı.
3. **Client Application (CA):** Resource owner adına kaynaklara erişim talep eden uygulama.
4. **Authorization Server (AS):** İstemci uygulamaları kimlik doğruladıktan ve yetkilendirdikten sonra onlara access tokenlar verir.
**Kapsamlar ve Onay:**
**Scopes ve Onay:**
- **Kapsamlar:** Erişim seviyelerini belirten, kaynak sunucusunda tanımlanan ayrıntılı izinlerdir.
- **Onay:** Bir kaynak sahibinin, belirli kapsamlarla kaynaklara erişim izni verdiği süreçtir.
- **Scopes:** Kaynak sunucuda tanımlanmış, erişim düzeylerini belirleyen ayrıntılı izinler.
- **Consent (Onay):** Resource owner'ın, istemci uygulamaya belirli scope'larla kaynaklara erişim izni vermesi süreci.
**Microsoft 365 Entegrasyonu:**
- Microsoft 365, IAM için Azure AD'yi kullanır ve birden fazla "birinci taraf" OAuth uygulamasından oluşur.
- Bu uygulamalar derinlemesine entegre edilmiştir ve genellikle karşılıklı bağımlı hizmet ilişkilerine sahiptir.
- Kullanıcı deneyimini basitleştirmek ve işlevselliği korumak için Microsoft, bu birinci taraf uygulamalarına "ima edilen onay" veya "ön onay" verir.
- **İma Edilen Onay:** Belirli uygulamalar, açık kullanıcı veya yönetici onayı olmaksızın belirli kapsamlarla **erişim izni alır**.
- Bu ön onaylı kapsamlar genellikle hem kullanıcılar hem de yöneticiler için gizlidir, bu da standart yönetim arayüzlerinde daha az görünür hale getirir.
- Microsoft 365, IAM için Azure AD'yi kullanır ve birden fazla "first-party" OAuth uygulamasından oluşur.
- Bu uygulamalar derin entegrasyonludur ve genellikle birbirine bağımlı servis ilişkilerine sahiptir.
- Kullanıcı deneyimini basitleştirmek ve işlevselliği korumak için Microsoft, bu first-party uygulamalara "implied consent" veya "pre-consent" verir.
- **Implied Consent:** Belirli uygulamalara, açık bir kullanıcı veya yönetici onayı olmadan belirli scope'lara otomatik olarak **erişim verilmesi**.
- Bu ön-onaylı scope'lar genellikle hem kullanıcıların hem de yöneticilerin standart yönetim arayüzlerinde görülmesini zorlaştıracak şekilde gizlenir.
**İstemci Uygulama Türleri:**
**Client Application Türleri:**
1. **Gizli İstemciler:**
- Kendi kimlik bilgilerine (örneğin, parolalar veya sertifikalar) sahiptir.
- Yetkilendirme sunucusuna **güvenli bir şekilde kimlik doğrulaması yapabilirler**.
2. **Açık İstemciler:**
- Benzersiz kimlik bilgilerine sahip değildir.
- Yetkilendirme sunucusuna güvenli bir şekilde kimlik doğrulaması yapamazlar.
- **Güvenlik Etkisi:** Bir saldırgan, token talep ederken bir açık istemci uygulamasını taklit edebilir, çünkü yetkilendirme sunucusunun uygulamanın meşruiyetini doğrulamak için bir mekanizması yoktur.
1. **Confidential Clients:**
- Kendi kimlik bilgilerine (ör. parola veya sertifika) sahiptir.
- Authorization server'a kendilerini **güvenli şekilde kimlik doğrulayabilirler**.
2. **Public Clients:**
- Benzersiz kimlik bilgileri yoktur.
- Authorization server'a güvenli şekilde kimlik doğrulayamazlar.
- **Güvenlik Etkisi:** Authorization server, uygulamanın meşruiyetini doğrulayamadığı için bir saldırgan public client uygulamasını taklit ederek token isteyebilir.
## Kimlik Doğrulama Token'ları
## Authentication Tokens
OIDC'de kullanılan **üç tür token** vardır:
- [**Erişim Token'ları**](https://learn.microsoft.com/en-us/azure/active-directory/develop/access-tokens)**:** İstemci, bu token'ı kaynak sunucusuna **kaynaklara erişmek için** sunar. Sadece belirli bir kullanıcı, istemci ve kaynak kombinasyonu için kullanılabilir ve **sona erene kadar iptal edilemez** - bu varsayılan olarak 1 saattir.
- **ID Token'ları**: İstemci, bu **token'ı yetkilendirme sunucusundan** alır. Kullanıcı hakkında temel bilgileri içerir. **Belirli bir kullanıcı ve istemci kombinasyonuna bağlıdır**.
- **Refresh Token'ları**: İstemciye erişim token'ı ile birlikte verilir. **Yeni erişim ve ID token'ları almak için** kullanılır. Belirli bir kullanıcı ve istemci kombinasyonuna bağlıdır ve iptal edilebilir. Varsayılan sona erme süresi **90 gündür** inaktif refresh token'lar için ve **aktif token'lar için sona erme yoktur** (bir refresh token'dan yeni refresh token'lar almak mümkündür).
- Bir refresh token, bir **`aud`** ile, bazı **kapsamlarla** ve bir **tenant** ile ilişkilendirilmelidir ve yalnızca o aud, kapsamlar (ve daha fazlası değil) ve tenant için erişim token'ları oluşturabilmelidir. Ancak, bu **FOCI uygulama token'ları** için geçerli değildir.
- Bir refresh token şifrelenmiştir ve yalnızca Microsoft bunu çözebilir.
- [**Access Tokens**](https://learn.microsoft.com/en-us/azure/active-directory/develop/access-tokens)**:** İstemci, kaynaklara **erişim sağlamak** için bu token'ı resource server'a sunar. Sadece belirli bir kullanıcı, istemci ve kaynak kombinasyonu için kullanılabilir ve süresi dolana kadar **iptal edilemez** varsayılan olarak bu süre 1 saattir.
- **ID Tokens**: İstemci, bu token'ı authorization server'dan alır. Kullanıcı hakkında temel bilgileri içerir. **Belirli bir kullanıcı ve istemci kombinasyonuna bağlıdır.**
- **Refresh Tokens**: İstemciye access token ile birlikte verilir. Yeni access ve ID token'lar **almak** için kullanılır. Belirli bir kullanıcı ve istemci kombinasyonuna bağlıdır ve iptal edilebilir. Varsayılan sona erme süresi, etkin olmayan refresh tokenlar için **90 gündür** ve **etkin tokenlar için sona erme yoktur** (bir refresh token'dan yeni refresh token almak mümkündür).
- Bir refresh token bir **`aud`**'a, bazı **scopes**'lara ve bir **tenant**a bağlı olmalı ve yalnızca o aud, scope'lar (ve daha fazlası değil) ve tenant için access token üretebilmelidir. Ancak bu, **FOCI applications tokens** için geçerli değildir.
- Bir refresh token şifrelenmiştir ve yalnızca Microsoft bunu deşifre edebilir.
- Yeni bir refresh token almak, önceki refresh token'ı iptal etmez.
> [!WARNING]
> **Koşullu erişim** bilgileri **JWT** içinde **saklanır**. Yani, **izin verilen bir IP adresinden token talep ederseniz**, o **IP** token içinde **saklanır** ve ardından o token'ı **izin verilmeyen bir IP'den kaynaklara erişmek için** kullanabilirsiniz.
> Conditional access bilgisi **JWT** içinde **saklanır**. Bu yüzden, **token'ı izin verilen bir IP adresinden talep ederseniz**, o **IP** token içinde **saklanır** ve daha sonra bu token'ı izin verilmeyen bir IP'den kullanarak kaynaklara erişebilirsiniz.
### Erişim Token'ları "aud"
### Access Tokens "aud"
"aud" alanında belirtilen alan, giriş yapmak için kullanılan **kaynak sunucusudur** (uygulama).
"`aud`" alanında belirtilen değer, giriş yapmak için kullanılan **resource server** (uygulama) içindir.
`az account get-access-token --resource-type [...]` komutu, aşağıdaki türleri destekler ve her biri sonuçta oluşan erişim token'ında belirli bir "aud" ekleyecektir:
`az account get-access-token --resource-type [...]` komutu aşağıdaki türleri destekler ve her biri elde edilen access token içinde spesifik bir "aud" ekleyecektir:
> [!CAUTION]
> Aşağıdakilerin yalnızca `az account get-access-token` tarafından desteklenen API'ler olduğunu unutmayın, ancak daha fazlası vardır.
> Aşağıdakilerin yalnızca `az account get-access-token` tarafından desteklenen API'ler olduğunu, ancak daha fazlasının olduğunu unutmayın.
<details>
<summary>aud örnekleri</summary>
- **aad-graph (Azure Active Directory Graph API)**: Uygulamaların Azure Active Directory (Azure AD) içindeki dizin verilerini okumasına ve yazmasına olanak tanıyan eski Azure AD Graph API'ye (kaldırılmış) erişmek için kullanılır.
- **aad-graph (Azure Active Directory Graph API)**: Eski Azure AD Graph API'ye (deprecated) erişmek için kullanılır; uygulamaların Azure Active Directory (Azure AD) içinde dizin verilerini okumasına ve yazmasına izin verir.
- `https://graph.windows.net/`
* **arm (Azure Resource Manager)**: Azure kaynaklarını Azure Resource Manager API'si aracılığıyla yönetmek için kullanılır. Bu, sanal makineler, depolama hesapları ve daha fazlası gibi kaynakları oluşturma, güncelleme ve silme gibi işlemleri içerir.
* **arm (Azure Resource Manager)**: Azure Resource Manager API aracılığıyla Azure kaynaklarını yönetmek için kullanılır. Bu, sanal makineler, depolama hesapları ve benzeri kaynakları oluşturma, güncelleme ve silme gibi işlemleri içerir.
- `https://management.core.windows.net/ or https://management.azure.com/`
- **batch (Azure Batch Services)**: Bulutta büyük ölçekli paralel ve yüksek performanslı hesaplama uygulamalarını verimli bir şekilde etkinleştiren Azure Batch'e erişmek için kullanılır.
- **batch (Azure Batch Services)**: Büyük ölçekli paralel ve yüksek performanslı hesaplama uygulamalarını bulutta verimli bir şekilde çalıştırmayı sağlayan Azure Batch'e erişim için kullanılır.
- `https://batch.core.windows.net/`
* **data-lake (Azure Data Lake Storage)**: Azure Data Lake Storage Gen1 ile etkileşimde bulunmak için kullanılır; bu, ölçeklenebilir bir veri depolama ve analiz hizmetidir.
* **data-lake (Azure Data Lake Storage)**: Azure Data Lake Storage Gen1 ile etkileşim için kullanılır; bu, ölçeklenebilir veri depolama ve analitik hizmetidir.
- `https://datalake.azure.net/`
- **media (Azure Media Services)**: Video ve ses içeriği için bulut tabanlı medya işleme ve dağıtım hizmetleri sağlayan Azure Media Services'e erişmek için kullanılır.
- **media (Azure Media Services)**: Video ve ses içeriği için bulut tabanlı medya işleme ve dağıtım hizmetleri sağlayan Azure Media Services'a erişim için kullanılır.
- `https://rest.media.azure.net`
* **ms-graph (Microsoft Graph API)**: Microsoft 365 hizmetleri verilerine erişmek için kullanılan Microsoft Graph API'ye erişmek için kullanılır. Azure AD, Office 365, Kurumsal Mobilite ve Güvenlik hizmetleri gibi hizmetlerden veri ve içgörülere erişmenizi sağlar.
* **ms-graph (Microsoft Graph API)**: Microsoft 365 hizmet verileri için birleşik uç nokta olan Microsoft Graph API'ye erişmek için kullanılır. Azure AD, Office 365, Enterprise Mobility ve Security hizmetleri gibi servislerden veri ve içgörüler elde etmenizi sağlar.
- `https://graph.microsoft.com`
- **oss-rdbms (Azure Open Source Relational Databases)**: MySQL, PostgreSQL ve MariaDB gibi açık kaynaklı ilişkisel veritabanı motorları için Azure Veritabanı hizmetlerine erişmek için kullanılır.
- **oss-rdbms (Azure Open Source Relational Databases)**: MySQL, PostgreSQL ve MariaDB gibi açık kaynak ilişkisel veritabanı motorları için Azure Database hizmetlerine erişmek için kullanılır.
- `https://ossrdbms-aad.database.windows.net`
</details>
### Erişim Token'ları Kapsamları "scp"
### Access Tokens Scopes "scp"
Bir erişim token'ının kapsamı, erişim token'ı JWT'si içindeki scp anahtarında saklanır. Bu kapsamlar, erişim token'ının erişim sağladığı şeyleri tanımlar.
Access token'ın scope'u, access token JWT içindeki scp anahtarında saklanır. Bu scope'lar, access token'ın neye erişimi olduğunu tanımlar.
Eğer bir JWT belirli bir API ile iletişim kurmasına izin verilirse ancak **istenen eylemi gerçekleştirmek için kapsamı yoksa**, o JWT ile o eylemi **gerçekleştiremeyecektir**.
Eğer bir JWT belirli bir API ile iletişim kurmaya izinliyse ama istenen işlemi yapacak scope'a **sahip değilse**, o JWT ile lemi **gerçekleştiremez**.
### Refresh ve erişim token'ı alma örneği
### Get refresh & access token example
```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"]
@@ -144,31 +144,32 @@ scopes=["https://graph.microsoft.com/.default"],
)
pprint(new_azure_cli_bearer_tokens_for_graph_api)
```
### Diğer erişim jetonu alanları
### Diğer access token alanları
- **appid**: Jetonu oluşturmak için kullanılan Uygulama Kimliği
- **appidacr**: Uygulama Kimlik Doğrulama Bağlamı Sınıf Referansı, istemcinin nasıl kimlik doğrulandığını gösterir; kamu istemcisi için değer 0'dır, eğer bir istemci sırrı kullanılıyorsa değer 1'dir.
- **acr**: Kimlik Doğrulama Bağlamı Sınıf Referansı talebi "0" olduğunda, son kullanıcı kimlik doğrulaması ISO/IEC 29115 gereksinimlerini karşılamamıştır.
- **amr**: Kimlik doğrulama yöntemi, jetonun nasıl kimlik doğrulandığını gösterir. "pwd" değeri, bir şifre kullanıldığını belirtir.
- **groups**: Prensipin üyesi olduğu grupları gösterir.
- **iss**: Jetonu üreten güvenlik jetonu hizmetini (STS) tanımlar. örn. https://sts.windows.net/fdd066e1-ee37-49bc-b08f-d0e152119b04/ (uuid, kiracı kimliğidir)
- **oid**: Prensipin nesne kimliği
- **tid**: Kiracı kimliği
- **iat, nbf, exp**: Verildiği zaman (ne zaman verildi), Önce değil (bu zamandan önce kullanılamaz, genellikle iat ile aynı değerdir), Süre sonu.
- **appid**: Token'i oluşturmak için kullanılan Application ID
- **appidacr**: The Application Authentication Context Class Reference, istemcinin nasıl kimlik doğrulandığını gösterir; public client için değer 0, client secret kullanıldıysa değer 1'dir
- **acr**: Authentication Context Class Reference bildirimi, son-kullanıcı kimlik doğrulaması ISO/IEC 29115 gereksinimlerini karşılamadıysa "0" olur.
- **amr**: Authentication method, token'in nasıl doğrulandığını gösterir. pwd değeri bir parolanın kullanıldığını gösterir.
- **groups**: Öznenin üye olduğu grupları gösterir.
- **iss**: Token'i oluşturan security token service (STS) sağlayıcısını tanımlar. e.g. https://sts.windows.net/fdd066e1-ee37-49bc-b08f-d0e152119b04/ (the uuid is the tenant ID)
- **oid**: Öznenin object ID'si
- **tid**: Tenant ID
- **iat, nbf, exp**: Issued at (veriliş zamanı), Not before (bu zamandan önce kullanılamaz, genelde aynı değer iat), Expiration time (sona erme zamanı).
## FOCI Jetonları Yetki Yükseltme
Daha önce, yenileme jetonlarının oluşturulduğu **kapsamlar**, **uygulama** ve **kiracı** ile ilişkilendirilmesi gerektiği belirtilmişti. Bu sınırlardan herhangi biri ihlal edilirse, kullanıcının erişim sağladığı diğer kaynaklar ve kiracılar için erişim jetonları oluşturmak mümkün olacağından yetki yükseltmek mümkündür ve bu, başlangıçta amaçlandığından daha fazla kapsamla yapılabilir.
## FOCI Tokens Privilege Escalation
Ayrıca, **bu, [Microsoft kimlik platformu](https://learn.microsoft.com/en-us/entra/identity-platform/) (Microsoft Entra hesapları, Microsoft kişisel hesapları ve Facebook ve Google gibi sosyal hesaplar) ile tüm yenileme jetonları için mümkündür** çünkü [**belgelerde**](https://learn.microsoft.com/en-us/entra/identity-platform/refresh-tokens) belirtildiği gibi: "Yenileme jetonları, kullanıcı ve istemci kombinasyonuna bağlıdır, ancak **bir kaynak veya kiracıya bağlı değildir**. Bir istemci, izin verildiği her kaynak ve kiracı kombinasyonu için erişim jetonları almak üzere bir yenileme jetonu kullanabilir. Yenileme jetonları şifrelenmiştir ve yalnızca Microsoft kimlik platformu bunları okuyabilir."
Daha önce, refresh tokens'in üretildiği **scopes**'a, üretildiği **application**'a ve **tenant**'a bağlı olması gerektiği belirtilmişti. Bu sınırların herhangi biri kırılırsa, kullanıcının erişimi olan diğer kaynaklar ve tenant'lar için ve orijinal amaçlanandan daha fazla scope ile access token'lar üretmek mümkün olacağından privilege escalation mümkün olur.
Ayrıca, FOCI uygulamalarının kamuya açık uygulamalar olduğunu ve bu nedenle **sunucuya kimlik doğrulamak için bir sır gerekmediğini** unutmayın.
Dahası, **bu, Microsoft identity platform'daki tüm refresh token'larla mümkündür** (Microsoft Entra accounts, Microsoft personal accounts, and social accounts like Facebook and Google) çünkü [**docs**] şöyle diyor: "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."
Daha sonra, [**orijinal araştırmada**](https://github.com/secureworks/family-of-client-ids-research/tree/main) bildirilen bilinen FOCI istemcileri [**burada**](https://github.com/secureworks/family-of-client-ids-research/blob/main/known-foci-clients.csv) bulunabilir.
Ayrıca, FOCI uygulamalarının public applications olduğunu unutmayın; bu yüzden sunucuya kimlik doğrulamak için **hiçbir secret gerekmez**.
### Farklı kapsam al
Then known FOCI clients reported in the [**original research**] can be [**found here**].
Önceki örnek koduna devam ederek, bu kodda farklı bir kapsam için yeni bir jeton talep edilmektedir:
### Farklı scope almak
Önceki örnek koda devam ederek, bu kodda farklı bir scope için yeni bir token isteniyor:
```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)
```
### Farklı istemci ve kapsamlar alın
### Farklı client ve scopes edinin
```python
# Code from https://github.com/secureworks/family-of-client-ids-research
microsoft_office_client = msal.PublicClientApplication("d3590ed6-52b3-4102-aeff-aad2292ab01c")
@@ -201,25 +202,26 @@ scopes=["https://graph.microsoft.com/.default"],
# How is this possible?
pprint(microsoft_office_bearer_tokens_for_graph_api)
```
## Tokenları nerede bulabilirsiniz
## Tokenler nerede bulunur
Saldırganlar açısından, bir kurbanın PC'si ele geçirildiğinde erişim ve yenileme tokenlarının nerede bulunabileceğini bilmek oldukça ilginçtir:
Bir saldırganın bakış açısından, örneğin bir kurbanın PC'si ele geçirildiğinde access ve refresh token'ların nerede bulunabileceğini bilmek çok ilginçtir:
- **`<HOME>/.Azure`** içinde
- **`azureProfile.json`** geçmişte oturum açmış kullanıcılar hakkında bilgi içerir
- **`clouds.config`** abonelikler hakkında bilgi içerir
- **`service_principal_entries.json`** uygulama kimlik bilgilerini (tenant id, client ve secret) içerir. Sadece Linux ve macOS'ta
- **`msal_token_cache.json`** erişim tokenlarını ve yenileme tokenlarını içerir. Sadece Linux ve macOS'ta
- **`service_principal_entries.bin`** ve **`msal_token_cache.bin`** Windows'ta kullanılır ve DPAPI ile şifrelenmiştir
- **`msal_http_cache.bin`** HTTP isteği önbelleğidir
- Yükleyin: `with open("msal_http_cache.bin", 'rb') as f: pickle.load(f)`
- **`AzureRmContext.json`** Az PowerShell kullanarak önceki oturum açma bilgilerini içerir (ancak kimlik bilgileri yoktur)
- **`C:\Users\<username>\AppData\Local\Microsoft\IdentityCache\*`** içinde, kullanıcıların DPAPI ile şifrelenmiş **erişim tokenları**, ID tokenları ve hesap bilgileri içeren birkaç `.bin` dosyası bulunmaktadır.
- **`C:\Users\<username>\AppData\Local\Microsoft\TokenBroken\Cache\`** içindeki `.tbres` dosyalarında daha fazla **erişim tokenı** bulmak mümkündür; bu dosyalar DPAPI ile şifrelenmiş base64 içerir.
- Linux ve macOS'ta, `pwsh -Command "Save-AzContext -Path /tmp/az-context.json"` komutunu çalıştırarak Az PowerShell'den **erişim tokenları, yenileme tokenları ve id tokenları** alabilirsiniz (kullanıldıysa).
- Windows'ta bu sadece id tokenları üretir.
- Linux ve macOS'ta Az PowerShell'in kullanılıp kullanılmadığını kontrol etmek için `$HOME/.local/share/.IdentityService/` dizininin var olup olmadığını kontrol edebilirsiniz (içindeki dosyalar boş ve işe yaramaz olsa da).
- Kullanıcı **tarayıcı ile Azure'a giriş yaptıysa**, bu [**gönderiye**](https://www.infosecnoodle.com/p/obtaining-microsoft-entra-refresh?r=357m16&utm_campaign=post&utm_medium=web) göre, **localhost'a yönlendirme** ile kimlik doğrulama akışını başlatmak, tarayıcının otomatik olarak giriş yetkisini vermesini sağlamak ve yenileme tokenını almak mümkündür. Yalnızca localhost'a yönlendirmeye izin veren birkaç FOCI uygulaması (az cli veya powershell modülü gibi) olduğunu unutmayın, bu nedenle bu uygulamaların izinli olması gerekir.
- İçinde **`<HOME>/.Azure`**
- **`azureProfile.json`** geçmişte oturum açmış kullanıcılarla ilgili bilgiler içerir
- **`clouds.config contains`** aboneliklerle ilgili bilgiler içerir
- **`service_principal_entries.json`** uygulama kimlik bilgilerini içerir (tenant id, clients ve secret). Sadece Linux & macOS
- **`msal_token_cache.json`** access tokens ve refresh tokens içerir. Sadece Linux & macOS
- **`service_principal_entries.bin`** ve msal_token_cache.bin Windows'ta kullanılır ve DPAPI ile şifrelenir
- **`msal_http_cache.bin`** HTTP isteklerinin bir cache'idir
- Yüklemek için: `with open("msal_http_cache.bin", 'rb') as f: pickle.load(f)`
- **`AzureRmContext.json`** Az PowerShell kullanılarak yapılan önceki logins ile ilgili bilgiler içerir (ancak kimlik bilgisi içermez)
- İçinde **`C:\Users\<username>\AppData\Local\Microsoft\IdentityCache\*`** birkaç `.bin` dosyası bulunur; bunlar kullanıcının DPAPI'si ile şifrelenmiş **access tokens**, ID tokens ve hesap bilgilerini içerir.
- Daha fazla **access tokens** `C:\Users\<username>\AppData\Local\Microsoft\TokenBroken\Cache\` içindeki `.tbres` dosyalarında bulunabilir; bu dosyalar access token'ları DPAPI ile şifrelenmiş base64 formatında içerir.
- Linux ve macOS'ta Az PowerShell (kullanıldıysa) ile `pwsh -Command "Save-AzContext -Path /tmp/az-context.json"` komutunu çalıştırarak **access tokens, refresh tokens ve id tokens** elde edebilirsiniz
- Windows'ta bu sadece id token'ları üretir.
- Linux ve macOS'ta Az PowerShell'in kullanılıp kullanılmadığını `$HOME/.local/share/.IdentityService/` dizininin var olup olmadığına bakarak görebilirsiniz (ancak içindeki dosyalar genellikle boş ve işe yaramaz)
- If the user is **logged inside Azure with the browser**, according to this [**post**](https://www.infosecnoodle.com/p/obtaining-microsoft-entra-refresh?r=357m16&utm_campaign=post&utm_medium=web) it's possible to start the authentication flow with a **redirect to localhost**, make the browser automatically authorize the login, and receive the resh token. Note that there are only a few FOCI applications that allow redicet to localhost (like az cli or the powershell module), so these applications must be allowed.
- Blogda açıklanan bir diğer seçenek, herhangi bir uygulamayı kullanabilen [**BOF-entra-authcode-flow**](https://github.com/sudonoodle/BOF-entra-authcode-flow) aracını kullanmaktır; çünkü bu araç `https://login.microsoftonline.com/common/oauth2/nativeclient` redirect URI'sini kullanarak nihai auth sayfasının başlığından OAuth kodunu alıp ardından refresh token elde edecektir.
## Referanslar