1.简介¶
1.1.构建安全智能手机社会
本指南汇总了一系列技巧提示,帮助 Android 应用程序开发人员了解如何进行安全设计和安全编码。我们的目的是让尽可能多的 Android 应用程序开发人员利用这些知识,因此将这些信息公之于众。
近年来,智能手机市场迅速扩张,其势头似乎势不可挡。广泛而多元化的应用程序进一步加速了该市场的增长。传统手机上的安全限制造成手机的许多关键功能无法得到利用,而智能手机应用程序可以充分利用这些功能。因此,智能手机能够实现在传统手机上无法使用的各种应用程序,这使智能手机更具吸引力。
智能手机应用程序带来的强大功能也给开发人员带来了巨大责任。传统手机的默认安全限制使应用程序能够保持相对安全的级别,即使是未秉承安全意识开发的应用程序也是如此。正如前面所提到的一样,由于智能手机的主要优势在于它们对应用程序开发人员开放,如果开发人员在不了解安全问题的情况下设计或编写应用程序代码,则可能导致用户个人信息泄露或被恶意软件利用的风险,进而导致财务损失,如非法拨打收费昂贵的号码。
由于 Android 是一个非常开放的模型,允许访问智能手机上的许多功能,因此人们认为 Android 应用程序开发人员比 iOS 应用程序开发人员需要更多地关注安全问题。此外,应用程序安全性的责任几乎完全由应用程序开发人员承担。例如,在应用市场(如 Google Play:以前的 Android Market)未进行任何筛查的前提下,即可向公众发布应用程序,但这不适用于 iOS 应用程序。
随着智能手机市场的快速增长,智能手机应用程序开发市场不同领域的软件工程师数量突然激增。因此,我们迫切需要分享安全设计知识,并整合与移动应用相关的特定安全问题的安全编码知识。
有鉴于这样的形势,日本的智能手机安全协会 (JSSEC) 启动了安全编码小组,收集安全设计的诀窍以及 Android 应用程序的安全编码知识,并且决定通过本指南公开所有信息。我们的目的是让大量 Android 应用程序开发人员熟悉安全设计和编码的专业知识,从而提高市场上发布的许多 Android 应用程序的安全级别。我们相信这一做法将有助于打造更可靠、更安全的智能手机社会。
1.2.通过测试版定期提供及时反馈¶
JSSEC 安全编码小组将尽最大努力使指南中的内容尽可能准确,但我们不能就此提供任何保证。我们相信,及时宣传和分享专业知识是我们的首要任务。同样,我们将在特定时刻上传并公布我们认为是最新且最准确的信息内容,并在我们收到任何反馈或更正后更新更准确的信息。换言之,我们将常态性地采用测试版方法。我们认为这种方法对许多计划使用指南的 Android 应用程序开发人员来说都很有意义。
最新版本的指南和示例代码可从以下网址获得。
- https://www.jssec.org/dl/android_securecoding_en.pdf 指南(英语)
- https://www.jssec.org/dl/android_securecoding_en.zip 示例代码(英语)
可从以下网址获取最新的日语版本。
1.3.指南使用协议¶
在使用本指南时,我们需要您同意以下两条防范声明。
- 指南中包含的信息可能不准确。请根据您自己的判断使用本指南中的信息。
- 如果发现指南中包含任何错误,请向我们发送电子邮件,下文给出了地址。但是,我们不能保证回复或作出任何相应修订。
日本智能手机安全协会
安全编码小组咨询
电子邮件:jssec-securecoding-qa@googlegroups.com
主题:[意见]Android 安全编码指南 20180901EN
内容:姓名(可选)、从属关系(可选)、电子邮件(可选)、意见(必填)和其他事项(可选)
1.4.2018 年 2 月 1 日版本的修订文章¶
作为进一步研究的结果,本章节提供了从安全性角度出发对上一版本进行的修正和修改列表。
在更正文章时,我们采纳了我们的研究结果以及读者就本指南之前版本提出的宝贵意见。
我们认为,听取读者的意见是提高文档实用性的关键因素。
我们建议参考以前版本的文档的用户查看下面的列表。请注意,该列表不包括以下类型的更改和错误更正:录入错误修复、此版本中添加的新文章、组织结构的更改和表达上的改进。
欢迎您对本指南发表评论,提出任何意见或建议。
2018 年 2 月 1 日版本中修订的章节 | 本版本中修订的章节 | 修订版 |
---|---|---|
2.5.将示例代码安装到 Android Studio 的步骤 | 2.5.将示例代码安装到 Android Studio 的步骤 | 根据 AndroidStudio 3.1 版本中的做法修改了安装示例项目的步骤。 |
4.1.3.7.自动填充框架 | 4.1.3.7.自动填充框架 | 添加了新的安全措施,使用了在 Android 9.0(API 等级 28)中可用的 Autofill Service 上的软件包信息。 |
4.5.3.6.[引用]加密 SQLite 数据库(适用于 Android 的 SQLCipher) | 4.5.3.6.[引用]加密 SQLite 数据库(适用于 Android 的 SQLCipher) | 根据 2018 年 8 月之前的文章将 SQLCipher 上的文章更新为最新版本。 |
(不适用) | 4.9.3.4.WebView 中的安全浏览 | 添加了可在我们之前未提及的 WebView 中使用的 SafeBrowsing 功能的操作环境说明,以及在 Android 8.0(API 等级 26)和 Android 8.1(API 等级 27)中添加的 API。 |
(不适用) | 4.11.使用共享内存 | 添加了在 Android 8.1(API 等级 27)中添加的 SharedMemory API 安全使用说明。 |
5.2.1.2.如何使用内部定义的签名权限在内部应用程序之间通信 | 5.2.1.2.如何使用内部定义的签名权限在内部应用程序之间通信 | 添加了用于验证 Android 9.0(API 等级 28)中引入的应用程序签名的 API 说明。 |
5.4.1.2.通过 HTTPS 通信 | 5.4.1.2.通过 HTTPS 通信 | 添加了仅 SAN 可用于 Android 9.0(API 等级 28)中的服务器许可方证书,因为 RFC2818 不建议使用 CN。 |
5.4.3.7.网络安全配置 | 5.4.3.7.网络安全配置 | 修改了内容,以反映从 Android 9.0(API 等级 28)开始,cleartextTrafficPermitted 的默认值变为 false。 |
5.7.使用指纹身份验证功能 | 5.7.使用指纹身份验证功能 | 使用 Android 9.0 中引入的 BiometricPrompt API 添加了示例代码(API 等级 28)。 |
5.4.3.2.将私有证书颁发机构的根证书安装到 Android OS 的证书存储 | 5.4.3.2.将私有证书颁发机构的根证书安装到 Android OS 的证书存储 | 添加了即便在专用证书颁发机构的根证书已安装的情况下,系统也会忽略此证书的功能。 |
5.4.3.8.(列):过渡到 TLS1.2 以实现安全连接 | 5.4.3.8.(列):过渡到 TLS1.2 以实现安全连接 | 根据截至 2018 年 8 月的数据更新了 Android OS 的共享信息。 |