背景
Amazon Web Services (AWS) 是全球企业、小型企业甚至政府的首选云计算平台。从 NASA 到 Netflix,数以百万计的公司使用 AWS 服务和 API 来满足他们的基础设施需求、托管要求,并支持他们的网站和移动应用程序。这就是为什么威胁参与者不断寻找方法来破坏公司的 AWS 服务以获取敏感信息、用户数据和内部网络。
CloudSEK 观察到,为数百万用户提供服务的各种大小公司都拥有带有 API 密钥的移动应用程序,这些 API 密钥在应用程序包中进行了硬编码。
这些密钥很容易被恶意黑客或竞争对手发现,他们可以使用它来破坏他们的数据和网络。事实上,最近多次备受瞩目的黑客攻击,例如Imperva 漏洞,已经利用这种错误配置来破坏云基础设施。因此,硬编码的 API 密钥类似于锁住你的房子,但将密钥放在一个标题为“请勿打开”的信封中。
AWS 密钥的工作原理
AWS 密钥允许以编程方式访问 AWS 服务,而无需用户登录 AWS 登录面板。AWS 密钥将具有与用于生成密钥的 IAM 用户相同的权限。通常,临时密钥是使用非常有限的权限生成的,并且是短暂的。临时访问密钥用于在不安全的环境中使用。
AWS 密钥泄露的影响
AWS 密钥硬编码存入移动应用程序源代码中可能会产生一个大问题,尤其是当该 IAM 角色具有较高的权限。这将会导致出现被滥用的情况:攻击可以被链接起来,进一步访问整个基础设施,甚至是代码库和配置。
下面举一个例子感受一下。
这是 Playstore 中的一个应用程序,下载量超过 50 万次,在其 strings.xml 文件中硬编码了 AWS 密钥和秘密。
此密钥可以访问多个 AWS 服务,包括ACM(证书管理器)、ElasticBeanstalk、Kinesis、OpsWorks、S3。
进一步查看一下S3的曝光情况:发现 AWS 凭证可以访问 88 个 S3 存储桶(读/写)。这 88 个存储桶总共包含 10,073,444 个文件,暴露的数据总计达 5.5 TB。这些存储桶被部署来托管从项目生成的文件和数据。我们发现应用程序源代码、备份文件、用户报告、测试工件、用户上传、日志、WordPress 备份、用户证书、配置文件、凭证文件等都存储在存储桶中。
在这些文件中,可以获取到更多凭据,例如数据库主机名、密码、令牌,并进一步扩展到正在运行的基础架构中。
下图是带有 msql 的纯文本密码的数据库配置文件。
使用密码可访问的公开数据库。
历史案件
- 2020 年 1 月:暴露的个人数据点包括姓名、邮政和电子邮件地址、电话号码等,详情可查看相关文章
- 2021 年 4 月:黑客组织 ShinyHunters 泄露了 250 万用户和 56 亿了解你的客户 (KYC) 数据。详情可查看相关文章
为什么这些密钥在 APK 中被硬编码
- 即使此操作不需要密钥,从 s3 存储桶访问静态文件以在移动应用程序中显示它们。
- 将从应用用户收集的数据上传到 s3
- 通过 AWS SES 服务发送邮件
使用 AWS 密钥的理想方式
当您以编程方式使用 AWS 时,您需要提供您的 access keys(访问密钥),以便 AWS 可以在编程调用中验证您的身份。您的access keys由access key ID(例如,AKIAIOSFODNN7EXAMPLE)和secret access key(例如,wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY)组成。拥有您的ccess keys的任何人都对您的 AWS 资源具有与您相同的访问权限。
官方参考文档(https://docs.aws.amazon.com/general/latest/gr/aws-general.pdf#aws-access-keys-best-practices)
如果您无意中公开了 AWS 访问密钥需尽快进行撤销/删除访问密钥(https://aws.amazon.com/premiumsupport/knowledge-center/delete-access-key/)