一、 引言
在文章公有云攻防系列——云服务利用篇[1]中,我们向大家介绍了一些利用公有云厂商提供的云服务来进行攻击的案例,说明了公有云在给用户提供便利的同时,也有可能带来新的风险。本文则从近几年的一些云上数据泄露事件出发,梳理了发生数据泄露的常见原因,重点介绍了其中一个重要原因——云凭证的泄露与利用,最后站在防御的角度给出一些防止凭证泄露的方案。
文中涉及到的技术仅供教学、研究使用,禁止用于非法用途。
二、 云上数据泄露事件
要关注云上数据安全,需要先从实际的安全事件中出发,总结安全事件涉及的技术关键词。云计算的部署模式多种多样,包括公有云、私有云、混合云和社区云,以下梳理了近几年发生这些的一些云上的一些数据泄露事件:
从表格中可知,云上数据泄露的原因多且杂,尤其涉及到人的原因,可被影响的因素较多。
随着应用程序的不断完善以及各种安全防护产品的诞生,网络安全防御系统在不断升级加强,但人员仍是系统中最薄弱的环节。相比于利用漏洞进行网络攻击的高门槛,针对人员因素的攻击的门槛更低。或是在使用复杂云服务时访问控制配置不当、或是由于意识薄弱而误点击钓鱼邮件、或是在技术社区意外泄露了重要凭证,种种因素都有可能被攻击者利用,造成数据泄露。下文主要介绍其中一个因素:云凭证的泄露。
三、 常见凭证泄露途径
云厂商在提供云服务时,为了方便用户在多种场景下(如在业务代码中调用云服务功能或引入云上数据资源时)使用,大部分都支持API调用的方式,此时便涉及到访问控制的问题。
用户可以使用云厂商生成的凭证(如图1所示)可成功访问该凭证对应权限下的云服务资源:
图1 某云厂商API密钥
凭证格式主要分为SecretId和SecretKey,其中SecretId用于标识API调用者身份,SecretKey用于验证API调用者身份。
在实际调用云服务API时,部分开发者会将凭证以硬编码的形式保存在代码中,但这无疑增加了额外的风险。这些凭证可能会因为人员的失误通过各种途径泄露出去,最终导致相关数据受到损害。以下梳理了云凭证常见的泄露途径:
Github是深受众多开发者喜爱的代码托管平台,开发者常常将个人代码或公司代码推送至私有仓库或公共仓库,但在推送代码的过程中可能会因为审计工作不足导致代码中的硬编码凭证泄露出去。据GitGuardian报告[3]指出,“2021年检测超过600万个泄露的硬编码凭证被推送到Github上,比2020年翻了一倍”。报告所指的另一个问题也需要关注,“私有仓库比公共仓库隐藏的硬编码凭证要多得多”,因为私有仓库不对外公开访问的原因,许多开发者便“心安”地将凭证直接推送至私有仓库中,但一旦Github的Access Token发生泄露,私有仓库也将变得不再私有。
除了Github,还有Gitee、 Gitea、Gogs和Gitblit平台也可能发生同样的情况。如开源项目Gitlab,被不少企业用来管理内部代码,但Gitlab漏洞频出,一旦内部Gitlab代码平台存在漏洞且对外可访问,恶意攻击者可利用相关漏洞攻陷代码服务器,窃取源代码。在绿盟科技先前发布的文章DevOps风险测绘之代码篇[4]中表明,源代码泄露风险不可小觑,感兴趣的可以详细阅读。
随着容器技术的火热发展和快速落地,Docker Hub成了另一个开发者喜爱的平台。据报告[23]指出,Docker Hub上存储了八百多万可用的公共镜像,GitGuardian通过抽样扫描其中一万数量的镜像,得出“4.62%的镜像至少暴露了一个secret”的结论,可见公共镜像仓库也成为凭证泄露的又一大平台。
2020年,在中国最大的程序员技术博客平台CSDN上,曾有一名用户分享如何把数据备份到阿里云上,不慎将硬编码的阿里云凭证泄露[5]。参与系统开发的人员在个人层面发布相关博客时,并不能按照公司级别严格的流程,可能会由于审核不足误将敏感信息泄露。
利用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调用的形式时,也提供了相关的文档说明和实例演示,以腾讯云为例:
1. 访问 https://console.cloud.tencent.com/api/explorer可查看相关操作对应的API
2. 选择Python语言,点击“调试SDK示例代码”可进入Cloudshell界面,如图3所示:
图3 Cloudshell界面
3. 进入相关python文件,修改”cloud_secret_id”和”cloud_secret_key”值(如图4所示)为发现的凭证,然后运行python文件即可利用该凭证进行操作。
图4 修改python文件
除上述官方方式外,也可利用现有的工具,以下是调研的一些凭证利用工具:
五、 如何防止凭证泄露
在了解到云凭证的泄露途径之后,便需要思考对应的防御对策。以下时是总结的一些可供参考的方案和建议:
严格的代码审计
个人、公司代码在提交至公开代码仓库或公共镜像仓库时,应对代码或镜像进行严格的审计,避免出现硬编码的凭证。
凭证安全管理和保护
使用专业的凭证管理工具存储凭证,避免使用硬编码,在需要使用凭证时调用工具获取值即可。同时定期更换凭证,即时凭证泄露也有可能失效。
定期检查代码仓库漏洞
若公司自建代码管理平台,需定期检查平台的脆弱性,同时禁止对外公开访问。
漏洞评估
对于调用云服务资源的应用程序定期进行漏洞评估,防止出现因为漏洞导致的凭证泄露。
员工安全意识培训
加强对员工的安全意识培训,严格禁止公司内部代码私自上传、拍照行为。
参考文献
[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
[3]https://res.cloudinary.com/da8kiytlc/image/upload/v1646148528/GitGuardian_StateOfSecretsSprawl2022.pdf
[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
本公众号原创文章仅代表作者观点,不代表绿盟科技立场。所有原创内容版权均属绿盟科技研究通讯。未经授权,严禁任何媒体以及微信公众号复制、转载、摘编或以其他方式使用,转载须注明来自绿盟科技研究通讯并附上本文链接。
关于我们
绿盟科技研究通讯由绿盟科技创新研究院负责运营,绿盟科技创新研究院是绿盟科技的前沿技术研究部门,包括星云实验室、天枢实验室和孵化中心。团队成员由来自清华、北大、哈工大、中科院、北邮等多所重点院校的博士和硕士组成。
绿盟科技创新研究院作为“中关村科技园区海淀园博士后工作站分站”的重要培养单位之一,与清华大学进行博士后联合培养,科研成果已涵盖各类国家课题项目、国家专利、国家标准、高水平学术论文、出版专业书籍等。
我们持续探索信息安全领域的前沿学术方向,从实践出发,结合公司资源和先进技术,实现概念级的原型系统,进而交付产品线孵化产品并创造巨大的经济价值。
长按上方二维码,即可关注我
原文始发于微信公众号(绿盟科技研究通讯):公有云攻防系列:云凭证的泄露与利用