AAD权限提升技术问询:应用管理员权限与服务主体凭据问题
我来帮你拆解这两个AAD权限相关的问题,都是权限提升场景里的核心要点:
问题1:如何查询应用管理员账户的权限,以及与“应用程序”权限的区别?
查询应用管理员账户权限的方法
你可以通过几种方式查看应用管理员(Application Administrator)账户的具体权限:
- Azure AD门户操作:登录Azure Portal后,进入「Azure Active Directory」→「角色和管理员」,找到「应用程序管理员」角色并点击。在「权限」标签页里,能看到这个角色允许执行的所有操作(比如管理应用注册、修改service principal、配置企业应用等);如果要查某个具体用户的分配权限,也可以在「已分配的成员」里点对应的用户,查看其拥有的角色详情。
- PowerShell(Microsoft Graph模块):先运行
Connect-MgGraph -Scopes "RoleManagement.Read.Directory"完成登录,然后用Get-MgRoleDefinition -Filter "displayName eq 'Application Administrator'"就能获取该角色的完整权限列表;如果要查特定用户的角色分配,用Get-MgRoleAssignment -Filter "principalId eq '<你的用户ID>'"即可。 - Graph API:发送GET请求到
https://graph.microsoft.com/v1.0/roleManagement/directory/roleDefinitions?$filter=displayName eq 'Application Administrator',返回结果里的permissions字段就是该角色的所有权限项。
两种权限的核心区别
- 应用管理员账户的权限:这是授予给用户/安全组的目录角色权限,本质是让用户拥有管理AAD中应用类资源的权限。比如应用管理员可以创建、修改应用注册,或者调整service principal的配置——权限的主体是用户,用户需要用自己的身份登录后才能行使这些权限。
- 应用程序权限:这是授予给service principal(应用程序在AAD中的身份实体)的权限,是应用本身被允许执行的操作。比如某个企业应用被授予了「读取所有SharePoint文件」的权限,这个权限属于应用本身,应用可以通过自己的凭据认证后直接调用API执行操作,不需要依赖用户身份。
问题2:向service principal分配凭据具体指什么?
简单来说,service principal就是应用程序在AAD里的“身份账号”,就像用户需要用户名密码登录一样,应用也需要凭据来证明自己的身份,从而获取对应的权限。向service principal分配凭据,就是给这个应用身份添加可用于身份验证的凭证,常见的类型有:
- 客户端密码(Client Secret):一串自动生成的字符串,相当于应用的“密码”,可以在Azure Portal的「应用注册」→「证书和密码」里手动创建,也可以通过PowerShell或Graph API生成。
- 证书:上传一个公钥到service principal,应用使用对应的私钥进行签名认证,安全性比客户端密码更高。
- 托管标识凭据:如果应用部署在Azure服务(比如VM、函数应用)上,可以启用托管标识,AAD会自动为这个身份生成和管理凭据,不需要手动创建。
在你提到的权限提升场景中,攻击者攻陷应用管理员账户后,会先找到那些本身就拥有高权限(比如能读取/修改目录设置、SharePoint文件)的service principal,然后给这个service principal添加新的凭据(比如创建一个新的client secret)。之后攻击者就可以用这个凭据,以该service principal的身份向AAD认证获取访问令牌,进而利用这个应用的高权限执行恶意操作——也就是所谓的“模拟这些应用程序”。
内容的提问来源于stack exchange,提问作者user14913641
相关产品推荐
相关产品推荐

