Az - Pass the PRT
PRT Nedir
pageAz - Primary Refresh Token (PRT)Bir PRT'ye Sahip Olup Olmadığınızı Kontrol Edin
SSO Durumu bölümünde, AzureAdPrt
'nin YES olarak ayarlandığını görmelisiniz.
Aynı çıktıda, cihazın Azure'a katılıp katılmadığını da görebilirsiniz (AzureAdJoined
alanında):
PRT Çerezi
PRT çerezi aslında x-ms-RefreshTokenCredential
olarak adlandırılır ve bir JSON Web Token (JWT) içerir. Bir JWT, .
ile ayrılmış ve tüm url-güvenli base64 kodlanmış olan 3 bölümden oluşur: başlık (header), içerik (payload) ve imza (signature). Tipik bir PRT çerezi aşağıdaki başlık ve içeriği içerir:
Gerçek Primary Refresh Token (PRT), Azure AD'nin kontrolü altında olan bir anahtar tarafından şifrelenen refresh_token
içine yerleştirilir, bu da içeriğini bize karşı opak ve şifresiz hale getirir. is_primary
alanı, bu belirtecin içindeki birincil yenileme belirtecinin yerleştirilmesini gösterir. Çerezin, belirli bir giriş oturumuyla bağlantılı kalmasını sağlamak için request_nonce
logon.microsoftonline.com
sayfasından iletilir.
TPM kullanarak PRT Çerez akışı
LSASS işlemi, KDF bağlamını TPM'ye gönderecek ve TPM, cihaz AzureAD'ye kaydedildiğinde toplanan oturum anahtarını (TPM'de depolanan) ve önceki bağlamı kullanarak bir anahtar türetmek için kullanacak ve bu türetilmiş anahtar, PRT çerezini (JWT) imzalamak için kullanılır.
KDF bağlamı, AzureAD'den gelen bir nonce ve PRT'nin birleştirildiği bir JWT ile bir bağlam (rastgele baytlar) içerir.
Bu nedenle, PTR TPM içinde bulunduğu için çıkarılamaz olsa da, LSASS'ı kötüye kullanarak yeni bağlamlardan türetilmiş anahtarlar isteyebilir ve oluşturulan anahtarları çerezleri imzalamak için kullanabilirsiniz.
PRT Kötüye Kullanım Senaryoları
Bir normal kullanıcı olarak, LSASS'tan SSO verilerini isteyerek PRT kullanımını talep etmek mümkündür. Bu, Web Hesap Yöneticisi'nden (token broker) token isteyen yerel uygulamalar veya tarayıcı tabanlı (web) akışlar ile yapılabilir, burada bir PRT çerezi, Azure AS giriş sayfalarına yapılan istekleri kimlik doğrulamak için başlık olarak kullanılır.
SYSTEM olarak, PRT'nin TPM tarafından korunmadığı durumlarda PRT'yi çalabilir veya kripto API'lerini kullanarak LSASS'ta PRT anahtarlarıyla etkileşimde bulunabilirsiniz.
Pass-the-PRT Saldırı Örnekleri
Saldırı - ROADtoken
Bu yöntem hakkında daha fazla bilgi için bu gönderiye bakın. ROADtoken, doğru dizinden BrowserCore.exe
'yi çalıştırır ve bunu kullanarak bir PRT çerezi elde eder. Bu çerez daha sonra ROADtools ile kimlik doğrulamak ve kalıcı bir yenileme belirteci elde etmek için kullanılabilir.
Geçerli bir PRT çerezi oluşturmak için ihtiyacınız olan ilk şey bir nonce'dur. Bunu şu şekilde alabilirsiniz:
Veya roadrecon kullanarak:
Ardından, yeni bir PRT almak için roadtoken kullanabilirsiniz (saldırmak için kullanıcının bir işleminden araçta çalıştırın):
Aşağıdaki, bir satırda:
Ardından, Azure AD Graph veya Microsoft Graph kullanarak giriş yapmak için üretilen çerezi kullanarak tokenlar üretebilirsiniz:
Saldırı - roadrecon kullanarak
Saldırı - Sızdırılan PTR kullanarak AADInternals kullanma
Get-AADIntUserPRTToken
, Azure AD'ye katılan veya Hibrit katılan bir bilgisayardan kullanıcının PRT belirtecini alır. PRT belirtecini almak için BrowserCore.exe
kullanır.
Ya da Mimikatz'tan değerlere sahipseniz, AADInternals kullanarak bir belirteç oluşturabilirsiniz:
https://login.microsoftonline.com adresine gidin, login.microsoftonline.com için tüm çerezleri temizleyin ve yeni bir çerez girin.
Ardından https://portal.azure.com adresine gidin.
Gerisi varsayılan olmalıdır. Sayfayı yenileyebilir ve çerezin kaybolmadığından emin olun, eğer kaybolursa hata yapmış olabilirsiniz ve işlemi tekrar yapmanız gerekebilir. Kaybolmazsa, sorun yok demektir.
Saldırı - Mimikatz
Adımlar
PRT (Primary Refresh Token) LSASS (Yerel Güvenlik Yetkilendirme Alt Sistemi Hizmeti) 'den çıkarılır ve sonraki kullanımlar için saklanır.
Ardından Oturum Anahtarı çıkarılır. Bu anahtar başlangıçta verilir ve ardından yerel cihaz tarafından yeniden şifrelenir, bu nedenle DPAPI anahtarını kullanarak şifre çözme gerektirir. DPAPI (Veri Koruma API) hakkında ayrıntılı bilgi için bu kaynaklara bakabilirsiniz: HackTricks ve uygulamasını anlamak için Pass-the-cookie attack sayfasına bakın.
Oturum Anahtarı'nın şifre çözülmesinden sonra, türetilmiş anahtar ve PRT için bağlam elde edilir. Bunlar, PRT çerezi oluşturmak için önemlidir. Özellikle, türetilmiş anahtar, çerezi oluşturan JWT (JSON Web Token) 'ı imzalamak için kullanılır. Bu sürecin kapsamlı bir açıklaması Dirk-jan tarafından sağlanmıştır ve buradan erişilebilir.
PRT TPM içinde ise ve lsass
içinde değilse, mimikatz onu çıkaramaz.
Ancak, TPM'den bir türetilmiş anahtarın bağlamından bir anahtar almak ve bunu bir çerez imzalamak için kullanmak mümkün olacaktır (seçenek 3'ü kontrol edin).
Bu ayrıntıları çıkarmak için yapılan sürecin detaylı bir açıklamasını burada bulabilirsiniz: https://dirkjanm.io/digging-further-into-the-primary-refresh-token/
Bu, Ağustos 2021 düzeltmelerinden sonra diğer kullanıcıların PRT tokenlerini almak için tam olarak çalışmayacaktır, çünkü yalnızca kullanıcı kendi PRT'sini alabilir (yerel bir yönetici diğer kullanıcıların PRT'lerine erişemez), ancak kendi PRT'sine erişebilir.
PRT'yi çıkarmak için mimikatz kullanabilirsiniz:
![image](../../../.gitbook/assets/image (4) (1) (3).png)
Prt olarak etiketlenmiş kısmı kopyalayın ve kaydedin.
Ayrıca, aşağıda vurgulanan ProofOfPossesionKey
alanının KeyValue
değerini de çıkarın. Bu şifrelenmiştir ve bunu çözmek için DPAPI anahtarlarımızı kullanmamız gerekecek.
![image](../../../.gitbook/assets/image (11) (2).png)
Eğer PRT verilerini görmüyorsanız, cihazınızın Azure AD'ye katılmadığı veya Windows 10'un eski bir sürümünü çalıştırdığı anlamına gelebilir.
Oturum açma anahtarını çözmek için, DPAPI anahtarını kullanabilmek için bilgisayar bağlamında çalışmak üzere yetkilerinizi SYSTEM olarak yükseltmeniz gerekmektedir. Bunun için aşağıdaki komutları kullanabilirsiniz:
Seçenek 1 - Tam Mimikatz
Şimdi hem Context değerini kopyalamak istiyorsunuz:
Hem de türetilmiş anahtar değerini:
Son olarak, tüm bu bilgileri kullanarak PRT çerezleri oluşturabilirsiniz:
https://login.microsoftonline.com adresine gidin, login.microsoftonline.com için tüm çerezleri temizleyin ve yeni bir çerez girin.
Ardından https://portal.azure.com adresine gidin.
Gerisi varsayılan olmalıdır. Sayfayı yenileyebilir ve çerezin kaybolmadığından emin olun, eğer kaybolursa hata yapmış olabilirsiniz ve işlemi tekrar yapmanız gerekebilir. Kaybolmazsa, sorun yok demektir.
Seçenek 2 - PTR kullanarak roadrecon
İlk olarak PRT'yi yenileyin ve
roadtx.prt
dosyasına kaydedin:
Şimdi, etkileşimli tarayıcıyı kullanarak
roadtx browserprtauth
komutunu kullanarak token talep edebiliriz.roadtx describe
komutunu kullandığımızda, erişim tokeninin bir MFA talebi içerdiğini görürüz çünkü bu durumda kullandığım PRT'nin de bir MFA talebi vardı.
Seçenek 3 - türetilmiş anahtarları kullanarak roadrecon
Mimikatz tarafından dökülen bağlam ve türetilmiş anahtar ile, roadrecon'u kullanarak yeni bir imzalı çerez oluşturmak mümkündür:
Referanslar
Last updated