前言
随着企业上云逐渐形成了趋势和规模,云安全也成为了新的焦点和风口,云上安全越来越重要;在近几年的攻防中AKSK、小程序、云上供应链都已经成为了兵家必争之地和重要突破口
云服务不仅提供了高效的数据存储和计算能力,还支持了业务的快速扩展和灵活部署。然而,云计算的广泛应用也带来了新的安全挑战,特别是在数据保护和访问控制方面。网络攻击者正不断寻找并利用云服务中的漏洞,威胁企业的敏感数据和业务连续性。
在这种背景下,云上攻防成为了信息安全领域的重要课题。本文将深入探讨云计算环境中的三个关键安全问题:任意上传、域名接管与AK/SK泄漏。这些问题不仅直接影响到云服务的安全性,还可能导致严重的业务中断和数据泄露。
任意上传漏洞允许攻击者将恶意文件上传到云服务器,从而执行恶意代码或窃取数据。域名接管攻击则利用DNS配置的漏洞,接管目标域名控制权,实施钓鱼攻击或流量劫持。AK/SK(Access Key/Secret Key)的泄漏则更加严重,攻击者可以利用这些凭证未经授权地访问云服务,执行恶意操作。理解和防护这些安全威胁,是保障云环境安全的关键。
在接下来的章节中,我们将详细描述每种安全威胁的工作原理,并提供实际可行的防护措施。
任意上传
对象存储权限配置错误:
公共读或公共读写
- 公共读(Public Read):当Bucket配置为公共读时,任何人都可以读取存储桶中的对象,但不能进行写操作。这种配置通常用于需要公开访问的数据,如网站的静态资源。然而,公共读配置可能导致数据泄露,因为任何人都可以访问这些数据。
- 公共读写(Public Read/Write):当Bucket配置为公共读写时,任何人都可以读取和写入存储桶中的对象。这种配置非常危险,因为攻击者可以随意上传、修改或删除存储桶中的数据。
权限Bucket授权策略
- ListObject权限:Bucket的授权策略可以设置为允许或拒绝用户在存储桶中列出对象。当有ListObject权限时,用户可以查看存储桶中所有对象的列表。这可能泄露存储桶的内部结构和文件名,给攻击者提供更多的信息来进行进一步的攻击。
权限Bucket读写权限
- 公共读写权限:如果Bucket配置为公共读写权限,任何人都可以执行PUT操作,将文件上传到存储桶中。攻击者可以利用这个漏洞上传恶意文件,导致数据污染或恶意代码执行。
如图所示,如果对象存储配置不当,比如公共读写,那么可能就会造成任意文件上传与文件覆盖。
改请求方式为PUT
如果目标的对象存储支持 html 解析,那就可以利用任意文件上传进行 XSS 钓鱼、挂暗链、挂黑页、供应链投毒等操作。
防护措施
为了防止由于权限配置错误引起的安全问题,可以采取以下防护措施:
- 使用最小权限原则:仅为用户和应用程序分配其完成任务所需的最小权限,避免过度授权。
- 避免公共读写:除非绝对必要,尽量避免将Bucket配置为公共读或公共读写。使用细粒度的权限控制,确保只有授权用户可以访问或修改数据。
- 配置Bucket策略:通过配置Bucket策略,明确规定哪些用户或角色可以进行哪些操作。例如,可以设置只允许特定的IP地址范围或特定的用户组访问特定的对象。
- 启用访问日志和监控:启用访问日志和监控,实时记录和监控Bucket的访问情况,及时发现异常行为。
- 定期审查权限配置:定期审查和更新Bucket的权限配置,确保符合当前的安全需求和策略。
- 使用多层次安全控制:结合使用IAM(身份和访问管理)策略、Bucket策略和对象ACL(访问控制列表),提供多层次的安全控制。
通过采取这些防护措施,企业和个人可以有效地防止由于权限配置错误引起的数据泄露和恶意篡改,确保对象存储中的数据安全。
域名解析与Bucket接管
问题描述
在云存储服务(如Amazon S3、阿里云OSS等)中,用户通常会创建Bucket(存储桶)来存储数据,并且可以将Bucket与特定的域名绑定,以便通过该域名直接访问Bucket中的内容。域名解析是将域名映射到对应的Bucket上,使得用户可以通过域名访问存储桶中的资源。
然而,当Bucket被删除后,如果未及时更新或删除域名解析记录,这个域名解析仍然指向已经不存在的Bucket。这种情况下,攻击者可以利用这个漏洞,创建一个同名的Bucket,从而接管原本已删除的Bucket绑定的域名。这种攻击方式被称为“Bucket接管”。
判断是否可以接管
当尝试访问域名绑定的Bucket时,不同的响应信息可以帮助判断该Bucket是否可以被接管:
- NoSuchBucket:如果访问该域名时返回“NoSuchBucket”错误信息,说明这个Bucket已经不存在,但域名解析仍然指向该Bucket。这表明攻击者可以尝试创建一个同名的Bucket,并接管该域名的访问权。
- AccessDenied:如果返回“AccessDenied”错误信息,则说明这个Bucket存在,但当前用户没有权限访问。此时,攻击者无法接管该Bucket。
- 可以尝试如ping该存储桶地址如若返回为域名地址,则能确认问题确实存在
防护措施
为了防止Bucket接管问题,企业和个人可以采取以下防护措施:
- 及时更新域名解析记录:在删除Bucket后,及时更新或删除对应的域名解析记录,确保域名不再指向已删除的Bucket。
- 定期审查DNS记录:定期检查DNS记录,确保没有指向不存在或不正确资源的记录。
- 使用多因素认证:在域名管理平台启用多因素认证,增加安全性,防止未经授权的更改。
- 域名监控:使用自动化工具监控域名的解析记录和状态,及时发现和修复潜在的问题。
通过理解和防护这些安全威胁,企业和个人可以有效降低云环境中的安全风险,确保数据和资源的安全性。
AK/SK 泄漏的途径
当AccessKeyId和SecretAccessKey(简称AK/SK)泄漏时,攻击者可以利用这些凭证直接访问云服务,执行各种未经授权的操作,如读取数据、上传文件、删除资源等。以下是对AK/SK泄漏的解读及相关防护措施。
- APP、小程序中的泄漏:开发者在开发移动应用、微信小程序等过程中,可能会将AK/SK硬编码到应用中。如果应用的代码被反编译或通过其他方式被获取,AK/SK可能会泄露。
- JavaScript中的泄漏:前端代码(如JavaScript)是公开的,任何人都可以查看。如果开发者在前端代码中包含了AK/SK,这些密钥将暴露给所有访问网站的用户。
AccessKey标识特征整理与查找
在发现AK/SK泄漏后,可以通过以下方法来整理和查找泄露的密钥:
- 标识特征:AK通常有一定的格式和长度,可以使用正则表达式或其他自动化工具来扫描代码库、日志文件、版本控制历史等位置,查找可能泄露的AK/SK。
- 使用搜索引擎:通过搜索引擎查找代码片段,尤其是在公开的代码仓库(如GitHub)中。很多时候,开发者会无意中将含有AK/SK的代码提交到公共代码仓库。
- 监控与告警:使用自动化工具监控代码库、日志、配置文件等位置,如果发现疑似AK/SK的内容,立即触发告警并采取措施。
AccessKey标识特征整理-查找:https://wiki.teamssix.com/CloudService/more/
阿里云
阿里云 (Alibaba Cloud) 的 Access Key 开头标识一般是 “LTAI”。
^LTAI[A-Za-z0-9]{12,20}$
- Access Key ID长度为16-24个字符,由大写字母和数字组成。
- Access Key Secret长度为30个字符,由大写字母、小写字母和数字组成。
#腾讯云
腾讯云 (Tencent Cloud) 的 Access Key 开头标识一般是 “AKID”。
^AKID[A-Za-z0-9]{13,20}$
- SecretId长度为17个字符,由字母和数字组成。
- SecretKey长度为40个字符,由字母和数字组成。
#华为云
华为云 (Huawei Cloud) 的 Access Key 是20个随机大写字母和数字组成,较难用正则表达式匹配。
[A-Z0-9]{20}
#百度云
百度云 (Baidu Cloud) 的 Access Key 开头标识一般是 “AK”。
^AK[A-Za-z0-9]{10,40}$
可通过HAE添加正则表达式高光显示便于寻找目标
防护措施
为了防止AK/SK泄漏和减少泄漏后的风险,可以采取以下措施:
- 避免在客户端存储AK/SK:尽量不要在客户端应用(如APP、小程序、前端JavaScript代码)中存储或暴露AK/SK。可以通过后端代理服务来处理需要鉴权的请求。
- 使用环境变量和配置管理工具:将AK/SK存储在安全的环境变量中或使用配置管理工具,并确保这些信息不会被包含在代码库中。
- 定期轮换AK/SK:定期更新和轮换AK/SK,并在泄漏发生时立即禁用泄漏的密钥并生成新的密钥。
- 最小权限原则:为每个AK/SK分配最小必要权限,确保即使密钥泄漏,攻击者能够造成的损害也被限制在最低范围。
- 使用短期临时凭证:考虑使用云服务提供的短期临时凭证(如AWS的STS)来代替长期有效的AK/SK,减少泄漏的风险。
- 加密与密钥管理:使用云服务的密钥管理服务(KMS)来加密和保护AK/SK,并确保在传输过程中使用加密协议(如HTTPS)。
通过采取这些措施,可以显著降低AK/SK泄漏的风险,并在发生泄漏时快速响应以减少可能的损失。