复现Azure AD中基于ROPC的恶意Azure CLI登录操作
复现ROPC登录Azure CLI的实操指引
一、Azure CLI中触发ROPC认证的正确方式
Azure CLI不会直接把ROPC作为显式选项展示,但可以通过参数触发,前提是满足前置条件:
- 测试账号未启用MFA(ROPC不支持MFA,有MFA的话请求直接失败)
- 租户临时允许该测试账号绕过相关条件访问策略(否则会被拦截)
触发方式有两种:
直接使用账号密码登录CLI:
执行命令:az login -u <测试用户名> -p <测试密码>当满足条件时,CLI底层会自动调用ROPC流,此时查看登录日志应该能看到对应Windows Azure Service Management API的记录。
手动获取管理API令牌后导入CLI:
如果直接登录没触发,可先通过ROPC请求获取Azure管理平面的令牌,再导入CLI:- 用Postman或curl发送ROPC请求,指定资源为
https://management.core.windows.net/(对应Windows Azure Service Management API) - 获取到
access_token后,执行:az login --access-token <获取到的令牌> az account set --subscription <目标订阅ID>
- 用Postman或curl发送ROPC请求,指定资源为
二、调整Postman的ROPC请求以匹配恶意日志资源
你当前Postman请求的资源是Microsoft Graph,是因为默认请求的是Graph的权限,要改成对应Azure管理API的资源:
针对Azure AD v1端点的请求(更匹配旧版ROPC场景)
POST https://login.microsoftonline.com/{租户ID}/oauth2/token Content-Type: application/x-www-form-urlencoded client_id=04b07795-8ddb-461a-bbee-02f9e1bf7b46&resource=https://management.core.windows.net/&username=<测试用户名>&password=<测试密码>&grant_type=password
注:04b07795-8ddb-461a-bbee-02f9e1bf7b46是Azure CLI官方的服务主体ID,直接使用即可。
针对Azure AD v2端点的请求
POST https://login.microsoftonline.com/{租户ID}/oauth2/v2.0/token Content-Type: application/x-www-form-urlencoded client_id=04b07795-8ddb-461a-bbee-02f9e1bf7b46&scope=https://management.core.windows.net//user_impersonation&username=<测试用户名>&password=<测试密码>&grant_type=password
发送以上请求后,查看Azure AD登录日志,就能看到资源为Windows Azure Service Management API的记录。
三、复现前的必要检查
- 确认测试账号未启用MFA,且没有被条件访问策略强制要求MFA或其他限制
- 确认租户中Azure CLI的服务主体(ID:04b07795-8ddb-461a-bbee-02f9e1bf7b46)未被禁用ROPC流(默认是允许的,除非有自定义配置)
内容的提问来源于stack exchange,提问作者sysadmintor
相关产品推荐
相关产品推荐

