一、 引言
在文章《公有云攻防系列——云服务利用篇》[1]中,我们向大家介绍了一些利用公有云厂商提供的云服务来进行攻击的案例,说明了公有云在给用户提供便利的同时,也有可能带来新的风险。本文则从近几年的一些云上数据泄露事件出发,梳理了发生数据泄露的常见原因,重点介绍了其中一个重要原因——云凭证的泄露与利用,最后站在防御的角度给出一些防止凭证泄露的方案。
文中涉及到的技术仅供教学、研究使用,禁止用于非法用途。
二、 云上数据泄露事件
要关注云上数据安全,需要先从实际的安全事件中出发,总结安全事件涉及的技术关键词。云计算的部署模式多种多样,包括公有云、私有云、混合云和社区云,以下梳理了近几年发生这些云上的一些数据泄露事件:
时间 | 事件 | 技术关键词 |
2020年7月 | 美国开放银行Dave的750万用户数据泄露,原因是前合作伙伴Waydev拥有Dave在Github和Gitlab上的OAuth token,Waydev由于漏洞被黑客入侵,导致token泄露,黑客从Dave的Github项目中发现明文密码,成功访问Dave的系统并窃取了数据。 | SaaS、第三方服务、Github、明文密码、凭证泄露 |
2020年7月 | 上海公安上亿条数据被曝在暗网出售,原因是托管在阿里云服务器上的数据库管理界面并未设置密码,导致数据被窃取[2]。 | 阿里云、硬编码密码、凭证泄露、CSDN |
2021年8月 | VpnMentor的研究团队发现B2B 营销公司 OneMoreLead 将其存储数据库设置为公开访问,数据库中包含至少6300万条用户数据。 | 私有云、错误配置 |
2021年8月 | T-Mobile 被曝泄露近4900万条用户数据,原因是黑客通过网络攻击入侵其测试环境,然后进入其内部网络,成功窃取数据。 | 私有云、测试环境对外访问、漏洞攻击 |
2021年11月 | 电子交易平台Robinhood披露,未经授权的有关方通过电话冒充员工,访问了其客户支持系统,成功窃取了约700万条用户数据。 | 私有云、用户冒充、社工欺骗 |
2021年12月 | 在线预订服务平台 FlexBooker超370万账户数据遭泄露,原因是攻击者获取了AWS基础设施中一个被泄露的账户,从而入侵AWS云存储系统,导致数据泄露 | AWS、账户泄露、凭证泄露 |
2022年2月 | 美国的一家提供在线电子邮件营销工具的公司Beetle Eye发生重大数据泄漏,此次事件是由于AWS S3存储桶未进行任何加密且配置错误造成的,该漏洞导致Amazon S3存储桶处于打开状态,泄漏了大约700万人的敏感数据。 | AWS、S3存储桶、错误配置 |
2022年4月 | 美国知名投资公司Cash App Investing的820万客户数据被泄漏,由一名前员工下载了公司内部的一份报告引起,泄漏的信息包含客户的全名和经纪帐号等信息。 | 私有云、离职员工、账户管理 |
2022年8月 | SpiderSilk 公司发现了微软的员工在Github上暴露了公司在线基础设施的敏感登录凭据,其中七个暴露点都是Azure服务器的凭证。 | Azure、员工误泄漏、凭证泄露、Github |
2022年9月 | 网络安全商SOCRadar 披露,微软由于“一个配置错误的数据桶”导致分布在全球 111 个国家和地区的超过 65000 家企业受到影响。 | Azure、存储桶、错误配置 |
从表格中可知,云上数据泄露的原因多且杂,尤其涉及到人的原因,可被影响的因素较多。
随着应用程序的不断完善以及各种安全防护产品的诞生,网络安全防御系统在不断升级加强,但人员仍是系统中最薄弱的环节。相比于利用漏洞进行网络攻击的高门槛,针对人员因素的攻击的门槛更低。或是在使用复杂云服务时访问控制配置不当、或是由于意识薄弱而误点击钓鱼邮件、或是在技术社区意外泄露了重要凭证,种种因素都有可能被攻击者利用,造成数据泄露。下文主要介绍其中一个因素:云凭证的泄露。
三、 常见凭证泄露途径
云厂商在提供云服务时,为了方便用户在多种场景下(如在业务代码中调用云服务功能或引入云上数据资源时)使用,大部分都支持API调用的方式,此时便涉及到访问控制的问题。
用户使用云厂商生成的凭证(如图1所示)可成功访问该凭证对应权限下的云服务资源:
图1 某云厂商API密钥
凭证格式主要分为SecretId和SecretKey,其中SecretId用于标识API调用者身份,SecretKey用于验证API调用者身份。
在实际调用云服务API时,部分开发者会将凭证以硬编码的形式保存在代码中,但这无疑增加了额外的风险。这些凭证可能会因为人员的失误通过各种途径泄露出去,最终导致相关数据受到损害。以下梳理了云凭证常见的泄露途径:
3.1 代码托管平台
Github是深受众多开发者喜爱的代码托管平台,开发者常常将个人代码或公司代码推送至私有仓库或公共仓库,但在推送代码的过程中可能会因为审计工作不足导致代码中的硬编码凭证泄露出去。据GitGuardian报告[3]指出,“2021年检测超过600万个泄露的硬编码凭证被推送到Github上,比2020年翻了一倍”。报告所指的另一个问题也需要关注,“私有仓库比公共仓库隐藏的硬编码凭证要多得多”,因为私有仓库不对外公开访问的原因,许多开发者便“心安”地将凭证直接推送至私有仓库中,但一旦Github的Access Token发生泄露,私有仓库也将变得不再私有。
除了Github,还有Gitee、 Gitea、Gogs和Gitblit平台也可能发生同样的情况。如开源项目Gitlab,被不少企业用来管理内部代码,但Gitlab漏洞频出,一旦内部Gitlab代码平台存在漏洞且对外可访问,恶意攻击者可利用相关漏洞攻陷代码服务器,窃取源代码。在绿盟科技先前发布的文章《DevOps风险测绘之代码篇》[4]中表明,源代码泄露风险不可小觑,感兴趣的可以详细阅读。
3.2 公共镜像仓库
随着容器技术的火热发展和快速落地,Docker Hub成了另一个开发者喜爱的平台。据报告[3]指出,Docker Hub上存储了八百多万可用的公共镜像,GitGuardian通过抽样扫描其中一万数量的镜像,得出“4.62%的镜像至少暴露了一个secret”的结论,可见公共镜像仓库也成为凭证泄露的又一大平台。
3.3 技术社区
2020年,在中国最大的程序员技术博客平台CSDN上,曾有一名用户分享如何把数据备份到阿里云上,不慎将硬编码的阿里云凭证泄露[5]。参与系统开发的人员在个人层面发布相关博客时,并不能按照公司级别严格的流程,可能会由于审核不足误将敏感信息泄露。
3.4 应用程序漏洞
利用Spring Boot信息泄露获取凭证
Spring Boot是用来简化Spring应用开发流程的框架,采用JAVA语言编写。Actuator是其中用来监控的功能模块,当Actuator启用时,如果没有做好权限控制,可导致用户未授权访问某些执行器端点(如/heapdump)来获取应用系统中的监控信息。Heap dump是堆转储文件,是一个JAVA进程在某个时间点的内存快照。当/heapdump可未授权访问时,可利用工具[6]从heapdump文件中查找凭证,如图2所示:
图2 匹配到aws凭证(图源自[7])
由swagger引发的OSS AccessKey泄露[8]
Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化RESTful风格的Web服务。当可访问Swagger接口文档时,可测试接口是否存在注入、越权等漏洞,若存在未授权访问,则有可能从敏感接口获取到凭证信息。
四、 云凭证的利用
当通过各种途径获取到云凭证时,该如何利用呢?如前文所说,云厂商在提供API调用的形式时,也提供了相关的文档说明和实例演示,以腾讯云为例:
- 访问https://console.cloud.tencent.com/api/explorer可查看相关操作对应的API
- 选择Python语言,点击“调试SDK示例代码”可进入Cloudshell界面,如图3所示:
图3 Cloudshell界面
- 进入相关python文件,修改”cloud_secret_id”和”cloud_secret_key”值(如图4所示)为发现的凭证,然后运行python文件即可利用该凭证进行操作。
图4 修改python文件
除上述官方方式外,也可利用现有的工具,以下是调研的一些凭证利用工具:
项目名称 | 项目地址 | 项目功能 |
Pacu | https://github.com/RhinoSecurityLabs/pacu | AWS攻击利用框架,包括用户权限提升、IAM用户的后门、攻击易受攻击的Lambda函数等 |
CF | https://github.com/teamssix/cf | 针对阿里云、腾讯云、aws的ak凭证进行利用 |
aws-cli | https://github.com/aws/aws-cli | 命令行操作AWS云服务的官方客户端 |
gcloud CLI | https://cloud.google.com/sdk/docs/install#linux | 命令行操作Google云服务的官方客户端 |
alicloud-tools | https://github.com/iiiusky/alicloud-tools | 辅助使用阿里云API操作ECS以及策略组的小工具 |
五、 如何防止凭证泄露
在了解到云凭证的泄露途径之后,便需要思考对应的防御对策。以下是总结的一些可供参考的方案和建议:
严格的代码审计
个人、公司代码在提交至公开代码仓库或公共镜像仓库时,应对代码或镜像进行严格的审计,避免出现硬编码的凭证。
凭证安全管理和保护
使用专业的凭证管理工具存储凭证,避免使用硬编码,在需要使用凭证时调用工具获取值即可。同时定期更换凭证,即时凭证泄露也有可能失效。
定期检查代码仓库漏洞
若公司自建代码管理平台,需定期检查平台的脆弱性,同时禁止对外公开访问。
漏洞评估
对于调用云服务资源的应用程序定期进行漏洞评估,防止出现因为漏洞导致的凭证泄露。
员工安全意识培训
加强对员工的安全意识培训,严格禁止公司内部代码私自上传、拍照行为。
参考文献
[1] https://mp.weixin.qq.com/s/zw9nGP9-czU2aPrpVa6wkg
[2] https://www.rfi.fr/cn/%E4%B8%AD%E5%9B%BD/20220715-%E4%B8%8A%E6%B5%B7%E5%85%AC%E5%AE%89%E5%B1%8010%E4%BA%BF%E4%B8%AD%E5%9B%BD%E4%BA%BA%E6%95%B0%E6%8D%AE%E5%A4%96%E6%B5%81%E7%BD%AA%E9%AD%81%E7%A5%B8%E9%A6%96%E7%A7%B0%E6%98%AF%E9%98%BF%E9%87%8C-%E5%AE%98%E6%96%B9%E7%BA%A6%E8%B0%88
[4] https://mp.weixin.qq.com/s/s-y0T_L5rP0WkGyvJsFd6g
[5] https://archive.ph/mP3bh#selection-10187.2-10189.435
[6] https://github.com/wyzxxz/heapdump_tool
[7] https://zhuanlan.zhihu.com/p/372985944
[8] https://www.yuque.com/corgi/fw01x2/ds00tf
原文始发于绿盟技术博客:公有云攻防系列:云凭证的泄露与利用