Az - Pass the PRT
Co to jest PRT
pageAz - Primary Refresh Token (PRT)Sprawdź, czy masz PRT
W sekcji Stanu SSO powinieneś zobaczyć AzureAdPrt
ustawione na YES.
W tym samym wyniku możesz również sprawdzić, czy urządzenie jest dołączone do Azure (w polu AzureAdJoined
):
Ciasteczko PRT
Ciasteczko PRT jest faktycznie nazywane x-ms-RefreshTokenCredential
i jest to Token JSON Web (JWT). JWT zawiera 3 części, nagłówek, ładunek i podpis, podzielone kropką .
i wszystkie zakodowane w base64 w sposób bezpieczny dla adresu URL. Typowe ciasteczko PRT zawiera następujący nagłówek i ciało:
Rzeczywisty Token odświeżania podstawowy (PRT) jest zamknięty w refresh_token
, który jest szyfrowany kluczem pod kontrolą Azure AD, co sprawia, że jego zawartość jest nieprzejrzysta i nie do odszyfrowania dla nas. Pole is_primary
oznacza zamknięcie podstawowego tokenu odświeżania w tym tokenie. Aby zapewnić, że ciasteczko pozostaje powiązane z konkretną sesją logowania, request_nonce
jest przesyłany z strony logon.microsoftonline.com
.
Przepływ ciasteczka PRT przy użyciu TPM
Proces LSASS wyśle do TPM kontekst KDF, a TPM użyje klucza sesji (zebranego podczas rejestracji urządzenia w AzureAD i przechowywanego w TPM) oraz poprzedniego kontekstu do pochodzenia klucza, a ten pochodny klucz jest używany do podpisania ciasteczka PRT (JWT).
Kontekst KDF to nonce z AzureAD i PRT tworzący JWT zmieszany z kontekstem (losowe bajty).
Dlatego nawet jeśli PTR nie może być wyodrębniony, ponieważ znajduje się wewnątrz TPM, można nadal wykorzystać LSASS do żądania kluczy pochodnych z nowych kontekstów i użyć wygenerowanych kluczy do podpisywania Ciasteczek.
Scenariusze nadużycia PRT
Jako zwykły użytkownik można żądać użycia PRT poprzez prośbę do LSASS o dane SSO. Można to zrobić jak aplikacje natywne, które żądają tokenów od Menedżera Kont Webowych (broker tokenów). WAM przekazuje żądanie do LSASS, który prosi o tokeny, używając podpisanej deklaracji PRT. Lub można to zrobić za pomocą przepływów opartych na przeglądarce (web), gdzie ciasteczko PRT jest używane jako nagłówek do uwierzytelniania żądań do stron logowania Azure AS.
Jako SYSTEM można ukraść PRT, jeśli nie jest chroniony przez TPM lub interagować z kluczami PRT w LSASS za pomocą interfejsów API kryptograficznych.
Przykłady ataków Pass-the-PRT
Atak - ROADtoken
Aby uzyskać więcej informacji na temat tej metody sprawdź ten post. ROADtoken uruchomi BrowserCore.exe
z odpowiedniego katalogu i użyje go do uzyskania ciasteczka PRT. Następnie to ciasteczko można użyć z narzędziami ROADtools do uwierzytelniania i uzyskania trwałego tokenu odświeżania.
Aby wygenerować prawidłowe ciasteczko PRT, pierwszą rzeczą, którą potrzebujesz, jest nonce. Możesz to uzyskać za pomocą:
Lub używając roadrecon:
Następnie możesz użyć roadtoken, aby uzyskać nowy PRT (uruchom narzędzie z procesu użytkownika do ataku):
Tłumaczenie:
Następnie możesz użyć wygenerowanego ciasteczka do generowania tokenów i logowania za pomocą Azure AD Graph lub Microsoft Graph:
Atak - Użycie roadrecon
Atak - Użycie AADInternals i wyciekłego PTR
Get-AADIntUserPRTToken
pobiera token PRT użytkownika z komputera dołączonego do Azure AD lub hybrydowo dołączonego. Wykorzystuje BrowserCore.exe
do pobrania tokenu PRT.
lub jeśli masz wartości z Mimikatz, możesz również użyć AADInternals do wygenerowania tokena:
Przejdź do https://login.microsoftonline.com, wyczyść wszystkie pliki cookie dla login.microsoftonline.com i wprowadź nowe cookie.
Następnie przejdź do https://portal.azure.com
Reszta powinna być domyślna. Upewnij się, że możesz odświeżyć stronę, a ciasteczko nie zniknie. Jeśli zniknie, możesz popełnić błąd i musisz przejść przez proces ponownie. Jeśli nie zniknie, powinieneś być w porządku.
Atak - Mimikatz
Kroki
PRT (Primary Refresh Token) jest wyodrębniany z LSASS (Local Security Authority Subsystem Service) i przechowywany do późniejszego użycia.
Następnie wyodrębniany jest Klucz Sesji. Ponieważ ten klucz jest początkowo wydawany, a następnie ponownie szyfrowany przez lokalne urządzenie, konieczne jest odszyfrowanie za pomocą klucza głównego DPAPI. Szczegółowe informacje na temat DPAPI (Data Protection API) można znaleźć w tych zasobach: HackTricks, a dla zrozumienia jego zastosowania, należy odnieść się do ataku Pass-the-cookie.
Po odszyfrowaniu Klucza Sesji uzyskuje się klucz pochodny i kontekst dla PRT. Są one kluczowe dla tworzenia ciasteczka PRT. Konkretnie, klucz pochodny jest wykorzystywany do podpisywania JWT (JSON Web Token), który stanowi ciasteczko. Pełne wyjaśnienie tego procesu zostało dostarczone przez Dirk-jana, dostępne tutaj.
Zauważ, że jeśli PRT znajduje się w TPM, a nie w lsass
, mimikatz nie będzie w stanie go wyodrębnić.
Jednak będzie możliwe uzyskanie klucza z klucza pochodnego z kontekstu z TPM i wykorzystanie go do podpisania ciasteczka (sprawdź opcję 3).
Możesz znaleźć szczegółowe wyjaśnienie przeprowadzonego procesu w celu wyodrębnienia tych szczegółów tutaj: https://dirkjanm.io/digging-further-into-the-primary-refresh-token/
To nie będzie działać dokładnie po poprawkach z sierpnia 2021 r., aby uzyskać tokeny PRT innych użytkowników, ponieważ tylko użytkownik może uzyskać swój PRT (administrator lokalny nie może uzyskać dostępu do PRT innych użytkowników), ale może uzyskać swój.
Możesz użyć mimikatz do wyodrębnienia PRT:
Skopiuj część oznaczoną jako Prt i zapisz ją.
Wyodrębnij również klucz sesji (wartość KeyValue
pola ProofOfPossesionKey
), który widzisz zaznaczony poniżej. Jest on zaszyfrowany i będziemy musieli użyć naszych kluczy głównych DPAPI do jego odszyfrowania.
Jeśli nie widzisz żadnych danych PRT, może to oznaczać, że nie masz żadnych PRT, ponieważ urządzenie nie jest dołączone do Azure AD, lub może to być spowodowane tym, że używasz starej wersji systemu Windows 10.
Aby odszyfrować klucz sesji, musisz podnieść swoje uprawnienia do SYSTEMU, aby działać w kontekście komputera i móc użyć klucza głównego DPAPI do odszyfrowania. Możesz skorzystać z poniższych poleceń:
Opcja 1 - Pełny Mimikatz
Teraz chcesz skopiować zarówno wartość kontekstu:
Jak i wartość klucza pochodnego:
W końcu możesz użyć wszystkich tych informacji do generowania plików cookie PRT:
Przejdź do https://login.microsoftonline.com, wyczyść wszystkie pliki cookie dla login.microsoftonline.com i wprowadź nowe cookie.
Następnie przejdź do https://portal.azure.com
Reszta powinna być domyślna. Upewnij się, że możesz odświeżyć stronę, a ciasteczko nie zniknie. Jeśli zniknie, możesz popełnić błąd i musisz przejść przez proces ponownie. Jeśli nie zniknie, powinieneś być w porządku.
Opcja 2 - roadrecon za pomocą PTR
Najpierw odnowić PRT, który zostanie zapisany w
roadtx.prt
:
Teraz możemy żądać tokenów za pomocą interaktywnej przeglądarki za pomocą polecenia
roadtx browserprtauth
. Jeśli użyjemy poleceniaroadtx describe
, zobaczymy, że token dostępu zawiera twierdzenie MFA, ponieważ PRT, którego w tym przypadku użyłem, również zawiera twierdzenie MFA.
Opcja 3 - roadrecon z użyciem wygenerowanych kluczy
Mając kontekst i wygenerowany klucz wycieknięty przez mimikatz, można użyć roadrecon do wygenerowania nowego podpisanego ciasteczka za pomocą:
Odnośniki
Last updated