先知安全沙龙(杭州站) - 浅谈AK/SK场景与攻击面分析
字数 2008 2025-08-23 18:31:34

AK/SK场景与攻击面分析教学文档

一、AK/SK基础概念

1.1 什么是AK/SK

  • AK (Access Key ID): 访问密钥ID,用于标识用户身份
  • SK (Secret Access Key): 秘密访问密钥,用于签名验证
  • 组合使用AK/SK进行API请求的身份认证和授权

1.2 AK/SK的核心作用

  1. 身份认证: 验证请求者的身份
  2. 请求签名: 确保请求在传输过程中未被篡改
  3. 权限控制: 基于IAM策略进行细粒度访问控制

二、AK/SK的典型使用场景

2.1 云服务API调用

  • 阿里云、AWS、腾讯云等云服务商的API调用
  • SDK自动处理签名过程

2.2 移动应用后端服务

  • 移动APP与后端服务的通信认证
  • 避免明文传输敏感凭证

2.3 微服务间认证

  • 服务网格内部的服务间调用认证
  • 替代传统的用户名/密码方式

三、AK/SK的安全机制

3.1 签名过程

  1. 构造规范请求(Canonical Request)
  2. 创建待签字符串(StringToSign)
  3. 计算签名(Signature)
  4. 将签名添加到请求头或参数中

3.2 签名算法示例

import hmac
import hashlib
import base64

def sign_request(secret_key, string_to_sign):
    hmac_obj = hmac.new(secret_key.encode('utf-8'), 
                       string_to_sign.encode('utf-8'), 
                       hashlib.sha256)
    return base64.b64encode(hmac_obj.digest()).decode('utf-8')

3.3 临时凭证(STS)

  • 包含AK/SK和Security Token
  • 有限的有效期(通常15分钟-1小时)
  • 更细粒度的权限控制

四、AK/SK的常见攻击面

4.1 凭证泄露

  • 代码仓库泄露: GitHub等平台意外提交AK/SK
  • 客户端硬编码: 移动应用或前端代码中包含AK/SK
  • 日志记录泄露: 错误日志中打印敏感凭证

4.2 签名绕过

  • 签名算法缺陷: 自定义签名算法实现漏洞
  • 时间戳验证缺失: 不验证请求时间导致重放攻击
  • 参数篡改: 签名后修改请求参数

4.3 权限配置不当

  • 过度授权: AK/SK关联的权限策略过于宽松
  • 权限提升: 通过特定API调用提升权限
  • 服务滥用: 利用AK/SK发起DDoS或挖矿

4.4 中间人攻击

  • HTTPS降级: 强制使用HTTP导致凭证泄露
  • 代理拦截: 恶意代理记录AK/SK
  • DNS劫持: 重定向到恶意端点

五、AK/SK的安全防护措施

5.1 凭证管理最佳实践

  1. 最小权限原则: 仅授予必要权限
  2. 定期轮换: 定期更换AK/SK(建议90天)
  3. 使用STS: 优先使用临时凭证而非长期AK/SK
  4. 监控异常: 设置AK/SK使用告警

5.2 代码安全

  • 避免硬编码: 使用环境变量或密钥管理服务
  • Git防护: 添加.gitignore和pre-commit hook检查
  • 代码扫描: 定期扫描代码库中的敏感信息

5.3 网络传输安全

  • 强制HTTPS: 禁用HTTP协议
  • 证书固定: 防止中间人攻击
  • 请求限速: 防止凭证被暴力破解

5.4 签名安全增强

  1. 包含时间戳: 防止重放攻击
  2. 包含nonce: 确保请求唯一性
  3. 签名头保护: 防止签名头被篡改
  4. 多因素验证: 结合IP白名单等额外验证

六、攻击案例分析

6.1 案例1: GitHub泄露AK/SK导致云资源被劫持

  • 攻击路径: 开发人员提交代码到公开仓库 → 攻击者扫描获取AK/SK → 创建高权限IAM用户
  • 防护措施: 使用git-secrets工具预防凭证提交

6.2 案例2: 签名算法实现缺陷导致绕过

  • 漏洞细节: 服务端未验证请求参数顺序,攻击者可重新排序参数后保持签名有效
  • 修复方案: 严格规范参数排序规则并双重验证

6.3 案例3: STS Token泄露导致临时权限滥用

  • 攻击过程: 通过XSS漏洞窃取STS Token → 在有效期内创建后门账户
  • 防护建议: 缩短STS有效期并限制调用频率

七、AK/SK安全审计要点

7.1 凭证审计

  • 检查是否存在长期未轮换的AK/SK
  • 验证是否所有AK/SK都必要
  • 检查权限策略是否遵循最小权限原则

7.2 签名实现审计

  1. 验证签名算法是否符合标准
  2. 检查时间戳和nonce处理逻辑
  3. 测试参数篡改是否会被检测
  4. 验证重放攻击防护机制

7.3 网络传输审计

  • 检查是否强制使用HTTPS
  • 验证证书验证是否严格
  • 测试是否存在HTTP降级漏洞

八、工具与资源

8.1 安全工具

  • TruffleHog: 扫描Git历史中的敏感信息
  • AWS CLI: 管理AK/SK和测试权限
  • CloudSploit: 云安全配置审计工具
  • Burp Suite: 测试API签名实现

8.2 学习资源

  • AWS签名V4文档
  • 阿里云RAM最佳实践
  • OAuth 2.0安全规范
  • NIST云安全指南

九、总结

AK/SK作为现代应用广泛使用的认证机制,其安全性直接影响整个系统的安全态势。通过理解其工作原理、常见攻击面及防护措施,开发和安全团队可以更有效地保护云资源和服务API。关键要点包括:

  1. 严格管理AK/SK生命周期
  2. 实现健壮的签名验证机制
  3. 遵循最小权限原则
  4. 实施多层防御措施
  5. 建立持续监控和审计机制
AK/SK场景与攻击面分析教学文档 一、AK/SK基础概念 1.1 什么是AK/SK AK (Access Key ID) : 访问密钥ID,用于标识用户身份 SK (Secret Access Key) : 秘密访问密钥,用于签名验证 组合使用AK/SK进行API请求的身份认证和授权 1.2 AK/SK的核心作用 身份认证 : 验证请求者的身份 请求签名 : 确保请求在传输过程中未被篡改 权限控制 : 基于IAM策略进行细粒度访问控制 二、AK/SK的典型使用场景 2.1 云服务API调用 阿里云、AWS、腾讯云等云服务商的API调用 SDK自动处理签名过程 2.2 移动应用后端服务 移动APP与后端服务的通信认证 避免明文传输敏感凭证 2.3 微服务间认证 服务网格内部的服务间调用认证 替代传统的用户名/密码方式 三、AK/SK的安全机制 3.1 签名过程 构造规范请求(Canonical Request) 创建待签字符串(StringToSign) 计算签名(Signature) 将签名添加到请求头或参数中 3.2 签名算法示例 3.3 临时凭证(STS) 包含AK/SK和Security Token 有限的有效期(通常15分钟-1小时) 更细粒度的权限控制 四、AK/SK的常见攻击面 4.1 凭证泄露 代码仓库泄露 : GitHub等平台意外提交AK/SK 客户端硬编码 : 移动应用或前端代码中包含AK/SK 日志记录泄露 : 错误日志中打印敏感凭证 4.2 签名绕过 签名算法缺陷 : 自定义签名算法实现漏洞 时间戳验证缺失 : 不验证请求时间导致重放攻击 参数篡改 : 签名后修改请求参数 4.3 权限配置不当 过度授权 : AK/SK关联的权限策略过于宽松 权限提升 : 通过特定API调用提升权限 服务滥用 : 利用AK/SK发起DDoS或挖矿 4.4 中间人攻击 HTTPS降级 : 强制使用HTTP导致凭证泄露 代理拦截 : 恶意代理记录AK/SK DNS劫持 : 重定向到恶意端点 五、AK/SK的安全防护措施 5.1 凭证管理最佳实践 最小权限原则 : 仅授予必要权限 定期轮换 : 定期更换AK/SK(建议90天) 使用STS : 优先使用临时凭证而非长期AK/SK 监控异常 : 设置AK/SK使用告警 5.2 代码安全 避免硬编码 : 使用环境变量或密钥管理服务 Git防护 : 添加.gitignore和pre-commit hook检查 代码扫描 : 定期扫描代码库中的敏感信息 5.3 网络传输安全 强制HTTPS : 禁用HTTP协议 证书固定 : 防止中间人攻击 请求限速 : 防止凭证被暴力破解 5.4 签名安全增强 包含时间戳 : 防止重放攻击 包含nonce : 确保请求唯一性 签名头保护 : 防止签名头被篡改 多因素验证 : 结合IP白名单等额外验证 六、攻击案例分析 6.1 案例1: GitHub泄露AK/SK导致云资源被劫持 攻击路径: 开发人员提交代码到公开仓库 → 攻击者扫描获取AK/SK → 创建高权限IAM用户 防护措施: 使用git-secrets工具预防凭证提交 6.2 案例2: 签名算法实现缺陷导致绕过 漏洞细节: 服务端未验证请求参数顺序,攻击者可重新排序参数后保持签名有效 修复方案: 严格规范参数排序规则并双重验证 6.3 案例3: STS Token泄露导致临时权限滥用 攻击过程: 通过XSS漏洞窃取STS Token → 在有效期内创建后门账户 防护建议: 缩短STS有效期并限制调用频率 七、AK/SK安全审计要点 7.1 凭证审计 检查是否存在长期未轮换的AK/SK 验证是否所有AK/SK都必要 检查权限策略是否遵循最小权限原则 7.2 签名实现审计 验证签名算法是否符合标准 检查时间戳和nonce处理逻辑 测试参数篡改是否会被检测 验证重放攻击防护机制 7.3 网络传输审计 检查是否强制使用HTTPS 验证证书验证是否严格 测试是否存在HTTP降级漏洞 八、工具与资源 8.1 安全工具 TruffleHog : 扫描Git历史中的敏感信息 AWS CLI : 管理AK/SK和测试权限 CloudSploit : 云安全配置审计工具 Burp Suite : 测试API签名实现 8.2 学习资源 AWS签名V4文档 阿里云RAM最佳实践 OAuth 2.0安全规范 NIST云安全指南 九、总结 AK/SK作为现代应用广泛使用的认证机制,其安全性直接影响整个系统的安全态势。通过理解其工作原理、常见攻击面及防护措施,开发和安全团队可以更有效地保护云资源和服务API。关键要点包括: 严格管理AK/SK生命周期 实现健壮的签名验证机制 遵循最小权限原则 实施多层防御措施 建立持续监控和审计机制