先知安全沙龙(杭州站) - 浅谈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的核心作用
- 身份认证: 验证请求者的身份
- 请求签名: 确保请求在传输过程中未被篡改
- 权限控制: 基于IAM策略进行细粒度访问控制
二、AK/SK的典型使用场景
2.1 云服务API调用
- 阿里云、AWS、腾讯云等云服务商的API调用
- SDK自动处理签名过程
2.2 移动应用后端服务
- 移动APP与后端服务的通信认证
- 避免明文传输敏感凭证
2.3 微服务间认证
- 服务网格内部的服务间调用认证
- 替代传统的用户名/密码方式
三、AK/SK的安全机制
3.1 签名过程
- 构造规范请求(Canonical Request)
- 创建待签字符串(StringToSign)
- 计算签名(Signature)
- 将签名添加到请求头或参数中
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 凭证管理最佳实践
- 最小权限原则: 仅授予必要权限
- 定期轮换: 定期更换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生命周期
- 实现健壮的签名验证机制
- 遵循最小权限原则
- 实施多层防御措施
- 建立持续监控和审计机制