Az - Pass the PRT
Was ist ein PRT
pageAz - Primary Refresh Token (PRT)Überprüfen Sie, ob Sie einen PRT haben
Im Abschnitt SSO-Status sollte AzureAdPrt
auf YES gesetzt sein.
Im selben Output können Sie auch sehen, ob das Gerät mit Azure verbunden ist (im Feld AzureAdJoined
):
PRT-Cookie
Das PRT-Cookie wird tatsächlich x-ms-RefreshTokenCredential
genannt und ist ein JSON Web Token (JWT). Ein JWT enthält 3 Teile, den Header, den Payload und die Signatur, die durch einen .
getrennt sind und alle url-sicher base64-codiert sind. Ein typisches PRT-Cookie enthält den folgenden Header und Body:
Der tatsächliche Primary Refresh Token (PRT) ist im refresh_token
enthalten, das von einem von Azure AD kontrollierten Schlüssel verschlüsselt ist, wodurch sein Inhalt für uns undurchsichtig und nicht entschlüsselbar ist. Das Feld is_primary
kennzeichnet die Einbettung des primären Refresh Tokens in diesem Token. Um sicherzustellen, dass das Cookie an die spezifische Anmeldesitzung gebunden bleibt, von der es beabsichtigt war, wird der request_nonce
von der Seite logon.microsoftonline.com
übertragen.
PRT-Cookie-Fluss unter Verwendung von TPM
Der LSASS-Prozess sendet den KDF-Kontext an den TPM, und der TPM verwendet den Sitzungsschlüssel (der beim Registrieren des Geräts in AzureAD gesammelt und im TPM gespeichert wurde) und den vorherigen Kontext, um einen Schlüssel abzuleiten, und dieser abgeleitete Schlüssel wird verwendet, um das PRT-Cookie (JWT) zu signieren.
Der KDF-Kontext ist ein einmaliges Kennwort von AzureAD und dem PRT, das ein JWT gemischt mit einem Kontext (Zufallsbytes) erstellt.
Daher ist es selbst wenn der PTR nicht extrahiert werden kann, da er sich im TPM befindet, möglich, LSASS zu missbrauchen, um abgeleitete Schlüssel aus neuen Kontexten anzufordern und die generierten Schlüssel zum Signieren von Cookies zu verwenden.
Szenarien für den Missbrauch von PRT
Als regulärer Benutzer ist es möglich, die Nutzung des PRT anzufordern, indem man LSASS um SSO-Daten bittet. Dies kann wie bei nativen Apps erfolgen, die Token vom Web Account Manager (Token-Broker) anfordern. WAM leitet die Anfrage an LSASS weiter, das Token unter Verwendung einer signierten PRT-Behauptung anfordert. Oder es kann mit browserbasierten (Web-)Flows erfolgen, bei denen ein PRT-Cookie als Header verwendet wird, um Anfragen an Azure AS-Anmeldeseiten zu authentifizieren.
Als SYSTEM könnten Sie den PRT stehlen, wenn er nicht durch TPM geschützt ist, oder mit PRT-Schlüsseln in LSASS interagieren, indem Sie Krypto-APIs verwenden.
Beispiele für Pass-the-PRT-Angriffe
Angriff - ROADtoken
Für weitere Informationen zu dieser Methode überprüfen Sie diesen Beitrag. ROADtoken wird BrowserCore.exe
aus dem richtigen Verzeichnis ausführen und es verwenden, um ein PRT-Cookie zu erhalten. Dieses Cookie kann dann mit ROADtools verwendet werden, um sich zu authentifizieren und einen persistente Refresh-Token zu erhalten.
Um ein gültiges PRT-Cookie zu generieren, benötigen Sie zunächst ein einmaliges Kennwort. Sie können dies mit:
Oder mit roadrecon:
Dann können Sie roadtoken verwenden, um einen neuen PRT zu erhalten (führen Sie das Tool aus einem Prozess des Benutzers aus, um anzugreifen):
Weitergabe des PRT
Die Weitergabe des Primary Refresh Token (PRT) kann verwendet werden, um von einem kompromittierten Cloud-Konto auf lokale Ressourcen zuzugreifen. Dies kann durch das Extrahieren des PRT aus dem Cloud-Konto und dessen Verwendung auf einem lokalen System erfolgen.
Dann können Sie das generierte Cookie verwenden, um Token zu generieren, um sich über Azure AD Graph oder Microsoft Graph anzumelden:
Angriff - Verwendung von roadrecon
Angriff - Verwendung von AADInternals und geleaktem PTR
Get-AADIntUserPRTToken
erhält den PRT-Token des Benutzers vom Azure AD- oder Hybrid-verbundenen Computer. Verwendet BrowserCore.exe
, um den PRT-Token zu erhalten.
Oder wenn Sie die Werte von Mimikatz haben, können Sie auch AADInternals verwenden, um ein Token zu generieren:
Gehe zu https://login.microsoftonline.com, lösche alle Cookies für login.microsoftonline.com und gib ein neues Cookie ein.
Dann gehe zu https://portal.azure.com
Der Rest sollte die Standardeinstellungen sein. Stellen Sie sicher, dass Sie die Seite aktualisieren können und das Cookie nicht verschwindet. Wenn es verschwindet, haben Sie möglicherweise einen Fehler gemacht und müssen den Vorgang erneut durchführen. Wenn nicht, sollten Sie in Ordnung sein.
Angriff - Mimikatz
Schritte
Das PRT (Primary Refresh Token) wird aus LSASS (Local Security Authority Subsystem Service) extrahiert und für die spätere Verwendung gespeichert.
Als Nächstes wird der Sitzungsschlüssel extrahiert. Da dieser Schlüssel zunächst ausgegeben und dann vom lokalen Gerät erneut verschlüsselt wird, ist eine Entschlüsselung mithilfe eines DPAPI-Meisterschlüssels erforderlich. Detaillierte Informationen zum DPAPI (Data Protection API) finden Sie in diesen Ressourcen: HackTricks und für ein Verständnis seiner Anwendung verweisen Sie auf den Pass-the-cookie-Angriff.
Nach der Entschlüsselung des Sitzungsschlüssels werden der abgeleitete Schlüssel und der Kontext für das PRT erhalten. Diese sind entscheidend für die Erstellung des PRT-Cookies. Insbesondere wird der abgeleitete Schlüssel verwendet, um das JWT (JSON Web Token) zu signieren, das das Cookie bildet. Eine umfassende Erklärung dieses Prozesses wurde von Dirk-jan bereitgestellt und ist hier zugänglich: hier.
Beachten Sie, dass, wenn sich das PRT im TPM befindet und nicht in lsass
, mimikatz es nicht extrahieren kann.
Es wird jedoch möglich sein, einen Schlüssel aus einem abgeleiteten Schlüssel aus einem Kontext aus dem TPM zu erhalten und ihn zum Signieren eines Cookies zu verwenden (Option 3).
Eine ausführliche Erklärung des durchgeführten Prozesses zur Extraktion dieser Details finden Sie hier: https://dirkjanm.io/digging-further-into-the-primary-refresh-token/
Dies wird nach den im August 2021 vorgenommenen Korrekturen nicht mehr genau funktionieren, um die PRT-Token anderer Benutzer zu erhalten, da nur der Benutzer sein PRT erhalten kann (ein lokaler Administrator kann nicht auf die PRTs anderer Benutzer zugreifen), aber auf seinen eigenen zugreifen kann.
Sie können mimikatz verwenden, um das PRT zu extrahieren:
Kopieren Sie den Teil, der als Prt bezeichnet ist, und speichern Sie ihn.
Extrahieren Sie auch den Sitzungsschlüssel (den KeyValue
des Feldes ProofOfPossesionKey
), den Sie unten hervorgehoben sehen können. Dies ist verschlüsselt, und wir müssen unsere DPAPI-Meisterkeys verwenden, um ihn zu entschlüsseln.
Wenn Sie keine PRT-Daten sehen, könnte es sein, dass Sie keine PRTs haben, weil Ihr Gerät nicht mit Azure AD verbunden ist, oder es könnte sein, dass Sie eine alte Version von Windows 10 verwenden.
Um den Sitzungsschlüssel zu entschlüsseln, müssen Sie Ihre Berechtigungen auf SYSTEM erhöhen, um im Kontext des Computers ausgeführt zu werden und den DPAPI-Meisterkey zur Entschlüsselung zu verwenden. Sie können die folgenden Befehle verwenden, um dies zu tun:
Option 1 - Vollständiges Mimikatz
Jetzt möchten Sie sowohl den Kontextwert kopieren:
Als auch den abgeleiteten Schlüsselwert:
Schließlich können Sie all diese Informationen verwenden, um PRT-Cookies zu generieren:
Gehe zu https://login.microsoftonline.com, lösche alle Cookies für login.microsoftonline.com und gib ein neues Cookie ein.
Gehe dann zu https://portal.azure.com
Der Rest sollte standardmäßig sein. Stelle sicher, dass du die Seite aktualisieren kannst und das Cookie nicht verschwindet. Wenn es verschwindet, hast du möglicherweise einen Fehler gemacht und musst den Vorgang erneut durchführen. Wenn es nicht verschwindet, solltest du in Ordnung sein.
Option 2 - roadrecon mit PTR
Erneuere zuerst den PRT, der in
roadtx.prt
gespeichert wird:
Jetzt können wir Token anfordern, indem wir den interaktiven Browser mit
roadtx browserprtauth
verwenden. Wenn wir den Befehlroadtx describe
verwenden, sehen wir, dass das Zugriffstoken eine MFA-Behauptung enthält, da der PRT, den ich in diesem Fall verwendet habe, auch eine MFA-Behauptung hatte.
Option 3 - roadrecon mit abgeleiteten Schlüsseln
Nachdem der Kontext und der abgeleitete Schlüssel von mimikatz abgerufen wurden, ist es möglich, roadrecon zu verwenden, um ein neues signiertes Cookie zu generieren:
Referenzen
Last updated