我们的 AI 引擎 Neutron 在加州大学伯克利分校的 CyberGym 基准测试中取得了 96.75% 的成绩。 了解更多

安全

安全

移动应用中的硬编码 AWS 密钥

本文介绍在移动应用中使用 AWS 服务时,应如何管理 AWS 访问密钥。

本文介绍在移动应用中使用 AWS 服务时,应如何管理 AWS 访问密钥。

让客户对云持保留态度的主要原因之一,是数据的控制权以及整个链条的安全性。 为了回应这一顾虑,AWS 在其责任共担模型(Shared Responsibility Model)中界定了 AWS 与 客户在安全控制方面的边界,并说明了在各个层面使用 AWS 服务时应遵循的安全最佳实践。

AWS 责任共担模型

简而言之,AWS 负责云本身的安全(以橙色部分表示),而客户 负责云中的安全(以绿色部分表示)。因此,作为客户,您需要负责 管理用户以及他们访问服务的方式。

当您以编程方式访问 AWS 时,需要使用访问密钥来验证您自己以及您的 应用的身份。任何持有您访问密钥的人,都拥有与您相同级别的 AWS 资源访问权限。正因如此, 您在任何情况下都不应公开您的访问密钥。Uber 一定不会忘记这个教训: https://awsinsider.net/articles/2017/11/21/uber-aws-data-breach.aspx

如果您要将代码上传到 git 仓库,可以使用 git-secrets,它会进行检查并阻止您 将访问密钥提交到 git 仓库中。

如果您的移动应用需要访问 AWS 服务,将访问密钥硬编码是一个高风险漏洞, 因为任何检查您代码的人都可能获取您的密钥。

要检查您的应用中是否存在硬编码的密钥,可以使用 Ostorlab 安全扫描器,它能够检测移动应用(Android 和 iOS)中硬编码的 访问密钥。

在示例中,我将使用一个 Android 应用将图片上传到 AWS S3。

第一个示例直接在上传函数中使用硬编码的密钥:

 // KEY and SECRET are gotten when we create an IAM user above
 String KEY = "AKIAIUG2TRZ99XFZONBA";
 String SECRET = "31eJbrNp5OJgrbvxTyzz38MUZ/MBMNVkG0irtd/2";

 BasicAWSCredentials credentials = new BasicAWSCredentials(KEY, SECRET);
 AmazonS3Client s3Client =new AmazonS3Client(credentials);

 TransferUtility transferUtility =
         TransferUtility.builder()
                 .context(getApplicationContext())
                 .awsConfiguration(AWSMobileClient.getInstance().getConfiguration())
                 .s3Client(s3Client)
                 .build();

第二个示例在资源配置文件中使用密钥:

<?xml version="1.0" encoding="utf-8"?>
<keys>
 <key name="aws_access_key_id">AIDAJILINIFRJA2HBEEQ </key>
 <key name="aws_secret_access_key"> 5syV8k5gCDJXtSCW4BKOjcpCLJHAhgbe/YfSPoJE </key>
</keys>

Ostorlab 能够检测到这两种密钥的存在:

替代文本
扫描

点击“应用中硬编码的 AWS 敏感信息”(AWS sensitive information hardcoded in the application),即可在技术详情 部分找到这些密钥:

因此,如果您正在开发移动应用并使用 AWS 服务: - 检查是否存在硬编码的访问密钥 - 对代码进行混淆,避免访问密钥被轻易获取(可以了解一下 Proguard) - 将密钥存储在另一个组件中,仅在需要时再获取,例如使用 AWS Secret Manager。

标签:

aws, mobile, security