1. 概述
1.1 背景
Android是基于Linux而开发的具有开放性、自由性的一种操作系统,现主要应用于移动设备,如手机、平板电脑和车载系统等。从2007年Google推出第一代Android操作系统至今已有10年的时间,移动行业的市场份额与规模也在急速增长,现在几乎每人都在用或曾用过接触过Android智能手机。
Android智能手机普及率的提高,随之开发上线的移动APP(应用程序)也越来越多,越来越广泛,现在人们日常用到的,几乎都能找到适合的APP来完成我们目前的需要。
但随着Android智能手机及移动APP越来越普及,带来的安全隐患也越来越突出,越来越被人们所关注。
在《中华人民共和国网络安全法》于2017年6月1日开始正式施行的当下,移动APP开发与安全的企业组织及个人都有义务保护移动APP的安全,确保用户的个人数据及隐私不被不法分子窃取盗用。
因此无论从安全问题造成用户和企业的直接损失,还是挽回企业信誉,按照相关APP开发规范,遵守《网络安全法》的角度来看,移动APP的安全问题都应成为重视对象。
2. Android移动APP安全问题现状
2.1 移动APP发展现状
移动技术的发展主要由消费用户决定。消费用户对于安全级别的要求较低,决定了移动技术在大规模应用于企业市场前期时就已经存在了大量的安全风险问题。
在面对已经存在的移动APP的安全威胁时,我们往往无法将日常桌面级平台的经验搬过来使用,主要是由于恶意攻击在最近几年越来越多,但相较其它安全威胁类型占比不大。主要根源在于移动APP的本质,移动APP通过网络与移动设备之间进行传播,遭遇攻击的可能性多种多样。
另外,大量的Android移动APP发布到互联网或应用商城中,其间缺乏相应的安全检测环节,导致用户直接下载存在安全问题的移动APP并将其安装至自己的Android智能手机中。
2.2 用户眼中移动APP的安全现状
普通消费用户及企业用户看来,移动APP的安全似乎跟自己的关系不大,或者说即使存在安全隐患也不会给自己带来比较大的影响和损失。他们往往不清楚由于移动APP的安全问题可能导致自己的个人信息泄露及财产的损失等其他安全威胁。
即使用户明确或怀疑某个APP存在安全问题,也不会当机立断的将其卸载弃用,而是会视相应的情况而定。
但随着移动APP安全问题越来越突出,用户也渐渐关注并重视起来。在不久的将来,移动APP更出色的安全性可能会渐渐成为吸引用户的关键因素。
2.3 Android移动APP安全问题的现状与危害
根据某相关机构的数据统计结果来看,65%的移动APP至少存在一个高危漏洞,88%的移动APP至少存在一个中危漏洞,平均每一个移动APP存在7.32个漏洞。而在其中,安全漏洞占据了几乎三分之二。
目前移动APP主要存在安全问题包括:Activity公开组件暴露、Broadcast Receiver组件调用漏洞、Service组件任意调用漏洞、Pending Intent包含隐式Intent信息泄露漏洞、Android APP allowBackup安全漏洞、应用反编译、外部存储设备敏感信息泄漏等。
以下为近期对Android移动APP安全检测发现的若干问题的简要概述。
2.3.1 Activity公开组件暴露
在对移动APP的安装包进行解析时,查看其Manifest配置文件。在其中查看Activity的android:exported属性参数,该属性用来标示当前Activity是否可以被另一个APP的组件启动。如果Activity里面至少有一个filter的话,意味着这个Activity可以被其它应用从外部唤起,此时其默认值为true。
不只有exported这个属性可以指定Activity是否暴露给其它应用,也可以使用permission来限制外部实体唤醒当前Activity。故查看android:permission是否指定启用该Activity所需要的权限名称。
通过测试工具对Activity组件进行测试。
通过测试工具发现其APP存在四个可被导出的Activity。
通过工具自带的Activity调用模块尝试启动上述Activity,在手机端可见APP程序被启动。
利用Activity界面劫持工具对APP的登录等截面进行攻击劫持。
攻击者可将正常的Activity界面替换成仿冒的恶意Activity界面,也可通过第三方APP任意调用可被导出的Activity组件,导致敏感信息泄露,并可能受到绕过认证、恶意代码注入等攻击的风险。
2.3.2 外部存储设备敏感信息泄漏
在对APP的安全检测中,查看APP在Android设备中的安装目录,发现其中xml、log文件及数据库文件中通过明文存储了用户姓名,手机号,身份证号等敏感信息。
攻击者可通过泄露的用户敏感信息进行盗取账号,个人信息买卖等非法行为。
2.3.3 应用反编译
通过工具将移动APP的安装包apk文件进行反编译,查看源代码,若已加壳的APP只能看到很少的smali文件。若APP未进行过加壳,则会显示很多smali文件,并可将smali转换,程序源代码就会展现出来。
已经过加壳处理的APP安装包通过反编译后,只能看到少量与加壳相关的smali文件,无APP相关smali。
查看其源代码也只有若干加壳类显示出来,无法真正获取到APP的源代码。
未经过加壳处理的APP安装包可通过反编译工具查看其详细的smali文件。
查看其源代码如下:
对于未经过加壳处理的移动APP安装包,可通过反编译查看其详细的源代码、配置文件等。攻击者可对获取到的APP源代码、配置文件进行分析,还可以通过代码审计等方式深入挖掘APP存在的安全漏洞,并对发现的漏洞进行利用,对APP及其用户造成极大的安全隐患。
2.3.4 Android APP allowBackup安全漏洞
在AndroidManifest.xml文件中allowBackup属性值被设置为true时(默认值为true)。
使用adb backup命令对APP数据进行备份。
允许备份数据。
使用adb restore命令对APP数据进行恢复。
允许恢复数据。
攻击者可通过adb backup对APP数据备份,导出APP中存储的数据,造成用户数据的泄露。
3. 导致Android移动APP安全问题的追溯
Android移动APP安全问题产生主要是开发者对于开发的不严谨,不规范造成的。
首先,开发者第一要务是保证APP的正常运行及功能完善,在保证了此前提下而容易忽略源代码的严谨性及规范性,往往由于某些细小的环节没有把控,导致安全问题的产生。
其次,开发者可能并不能够知晓常见的APP安全问题,不知道如何规避此类问题的繁盛,安全意识不健全。在不久的将来,这将可能是区分开发者水平的决定性因素之一。
4. 安全建议与总结
移动APP安全越来越被重视,将安全融入到APP的开发周期中,视图解决开发和安全分割的现状。
对于缺少开发周期周缺少安全检测的公司或个人,可通过第三方安全检测机构或平台,对其APP进行安全检测,加固APP的安全性,为推向市场后用户的安全使用保驾护航。
《网络安全法》的颁布从大众视角来看,标志着中国互联网安全正式告别蛮荒时代。对于开发企业及个人而言,贯彻落实网络安全法合规性刻不容缓。在APP开发过程中做到严谨规范,这是移动APP安全乃至整个信息安全领域的第一步。
关注我们
对安全有兴趣的小伙伴可以关注或加入我们,TideSec安全团队: