来自  绿色联盟


随着消费者对隐私保护,权限滥用等问题关注度的持续提升,安卓绿色联盟“安全标准技术组”各位专家在原《安卓绿色联盟应用体验标准(安全篇)》的基础上,对应用的行为规范、Manifest和权限使用安全规范隐私安全等内容进行了补充更新(参见下文深绿色字体部分),经过理事会执行组的多次评审,今日起正式公示并公开征求广大应用意见,公示期三个月,如无异议,本标准将于2018年10月18日起正式生效执行。

您可在本文章下留言,也可将意见发送至邮箱:aga@androidga.com。

1

基础安全标准


1.1   安装,运行及卸载

  • 应用在用户未授权情况下,不能进行程序下载、安装、或升级操作;

  • 应用在用户未授权情况下,不能执行自启动操作;

  • 应用在用户强制关闭或退出后,不能继续占用系统资源;

  • 应用中不能包含反卸载操作;

1.2  功能使用

  • 应用在用户未授权情况下,不能执行拨打电话、发送短信等操作;

  • 应用在用户未授权情况下,不能执行摄像、录音、截屏等操作;

  • 应用在用户未授权情况下,不能打开或关闭如WiFi、蓝牙、GPS等;

1.3  数据操作

  • 应用在用户未授权情况下,不能读写用户短信、联系人等隐私数据;

  • 应用在用户未授权情况下,不能收集或上报用户设备、系统及应用程序信息;

  • 应用在用户未授权情况下,不能修改系统配置等资源文件;

  • 应用在用户未授权情况下,不能修改其他应用程序的权限、数据等;

1.4  行为规范(修订)

  • 应用在用户未授权情况下,不能进行消费操作;

  • 应用不能包含故意破坏用户使用体验、阻碍用户正常使用手机或应用的任何行为;

  • 应用中不能包含任何侵犯用户知情权、选择权的恶意行为

  • 应用在用户未授权情况下,不能利用漏洞等方式获取系统控制权限,进行非授权操作;

  • 如无必要的使用场景,应用不能在桌面、锁屏和其他应用上,弹出悬浮窗、自定义后台Toast、后台弹出Activity等骚扰用户的行为;

  • 如无必要的使用场景,应用不能发送无法删除的常驻通知;

  • 应用不能弹出、显示影响用户体验的广告,如抬头、强制插屏、侧边等;

  • 应用不能引导用户开启开发者选项,禁止引导用户开启USB调试模式;

1.5  其他标准

  • 应用不能包含病毒、×××;

  • 应用不能包含漏洞、后门;

  • 应用不能包含国家法律禁止的内容,包括但不限于×××,×××,或任何危害国家安全的信息;

  • 应用不能包含其他任何形式损害用户利益及资产的行为;

  • 应用不能通过热补丁,引入恶意行为和不符合本标准的行为;


2

开发安全标准


2.1   Manifest和权限使用安全规范(修订)

1)权限管理。权限使用满足最小化原则:

  • 不申请不需要使用的权限,为自定义权限设置合理的安全保护级别;

  • 应用申请的权限,都必须有明确、合理的功能和使用场景;

  • TargetSdkVersion>=23,必须适配Android M及以后版本的动态权限机制。

  • 对于非核心权限,应用不能在权限动态弹框授权提示被用户拒绝后,强制要求用户开启,包括但不限于:(1)应用退出;(2)弹框提醒用户打开>=2次;

2)功能项管理。关闭不需要及有风险的功能选项,如数据备份功能、调试功能;

3)组件管理。组件声明的合理性,避免导出不需要外部调用的组件,如需导出应设置合理的权限保护;

2.2 应用编码安全规范

2.2.1 基础编码安全规范

  • 保证开发环境的安全性,如使用官方渠道下载的开发工具;

  • 避免硬编码关键数据,如加密密钥、后端服务器敏感信息等;

  • 应用代码净化,代码逻辑优化、剔除应用中的死代码块;

  • 统一的日志管理接口,避免在日志中记录敏感信息;

  • 应用发布之前,关闭调试接口和调试日志。

2.2.2 系统API使用安全规范

  • 使用官方推荐版本的API接口,不使用系统废弃的API

  • 熟悉并遵从安全规范,避免遗漏安全限制操作,引入安全风险;

  • 对关键操作身份校验和权限检查;


2.2.3 第三方代码使用安全规范

  • 代码评估。来源可靠性评估、代码质量评估、潜在安全风险评估;

  • 权限控制。确认引入代码所需使用的权限最小化;

  • 更新维护。关注代码的安全动态和版本更新情况,及时修复安全问题,更新代码;

  • 安全保护。对引入的代码进行混淆,防止×××者针对性的×××;


2.2.4 代码保护安全规范

  • 代码混淆。提高×××者代码分析难度;

  • 加固保护。使用自研或者第三方加固系统进行应用加固,进行代码隐藏和加密保护;

2.3 数据安全规范

2.3.1 数据加密安全规范

  • 数据密文和加密密钥应存放在不同的位置;

  • 密钥存储模块应具备防调试及反编译的能力;

  • 密钥数据应分散存储,为获取密钥密文增大难度;

2.3.2 数据存储安全规范

  • 应用程序关键数据应该存放在私有目录下,并设置合理的访问权限;

  • 应用程序中的隐私数据应加密存储。用于加密的密钥应妥善保存;

  • 禁止程序运行日志中包含有用户敏感数据、程序调试数据等;

2.3.3 数据使用安全规范

  • 数据合法性保护。控制用户输入数据的类型、长度,进行恶意代码过滤等;

  • 数据完整和有效性保护。对于接收到的外部数据、加载的外部文件,进行完整、有效性性检查;

2.4   通信安全

2.4.1  本地通信安全

  • intent数据安全。避免在intent包含用户敏感数据,从intent中获取数据时加入必要的异常处理;

  • intentscheme url 协议安全。使用过程中加入安全限制,防止UXSS等安全问题;

  • 组件调用方式安全。避免通过隐式方式进行调用组件,防止组件劫持;

  • 本地socket通信安全。避免是使用socket方式进行本地通信,如需使用,localhost端口号随机生成,并对端口连接对象进行身份认证和鉴权;

2.4.2 远程通信安全

  • 使用https代替http进行通信,并对https证书进行严格校验;

  • 避免进行远程端口开发通信,如需使用,需要对端口连接对象进行身份认证和鉴权;

2.5 业务安全

2.5.1 认证和授权

  • 认证和授权过程应在服务器端完成,避免客户端绕过问题;

  • 对于涉及敏感信息的服务,每次使用前需进行身份认证;

  • 控制登录凭证token有效期,通信过程中进行token鉴权;

  • 避免在终端设备上使用不安全的方法来存储用户名、口令及其它登录凭证;

  • 用户密码需要使用强不可逆的加密算法加密后传输,并引入salt,提高破解难度;

  • 账户号和终端设备信息进行绑定,防止终端模拟×××;

2.5.2  业务逻辑及数据安全

  • 条件判断。确保逻辑过程中前置判断条件的有效性、不可绕    过性,防止×××者进行数据修改绕过安全限制;

  • 逻辑设计。确保业务逻辑设计、分支条件及边界条件处理的正确性和完备性,防止不可控执行流程;

  • 工作分配。确保服务端和客户端分工正确,防止一些应该放在服务端的校验工作设置在了客户端,造成权限校验绕过;

  • 业务数据。关键业务数据防篡改、防伪造、防重放;

  • 短信验证码安全。禁止验证码回传行为,验证码至少6位,同时严格限定验证码时效;

2.5.3 业务运维安全

  • 业务风险监控、预警、异常处理预案;

  • 安全动态跟踪及预警、安全事件排查、漏洞修复;

2.6 运行环境安全

  • 运行期重打包检测;

  • 模拟器运行环境检测;

  • 调试、注入操作监控;

  • root环境运行检测


2.7 隐私安全(修订)

  • 涉及到应用下载软件、对用户系统或软件升级等修改用户个人空间的行为,须得到用户的同意;      

  • 收集或使用个人数据前,须明确提示用户,并获得用户的明示同意,并且允许用户随时关闭对个人数据的收集和使用;   

  • 默认禁止收集数据主体的敏感个人数据,除非业务必需(如:运动健康类业务)或为了满足法律与监管机构要求可收集和处理(含profiling),并且同意应该单独收集;

  • 应提供对用户的同意和撤销同意行为进行记录的机制;

  • 隐私声明内容发生变化时,须告知用户查看并获得用户同意;

  • 个人数据收集范围、使用目的不得超出隐私声明,且遵循最小化原则,当个人数据的采集范围、使用目的发生变更时,应及时更新隐私声明;

  • 于存储个人数据的系统,需对存储的个人数据定义存留期;

  • 数据主体撤销同意之后,产品必须禁止继续收集和处理其相应个人数据;

  • 将数据主体个人数据提供给第三方前,必须获得数据主体的同意;      

  •  推送的内容(含广告)必须是符合政治、法律和宗教要求,并且推送频度不能干扰用户正常使用;

  •  第三方应用软件调用移动智能终端敏感功能时,应先获得用户明确同意;         

  •  第三方应用软件对用户数据操作时,应先获得用户明确同意;

  •  应用软件不得申请和调用与提供服务无关的终端功能