(转)移动App应用安全漏洞分析报告
漏洞扫描方式主要分为静态和动态,静态扫描的漏洞类型主要包含SQL注入风险、webview系列、文件模式配置错误、https不校验证书、database配置错误等。动态扫描的漏洞类型主要包含拒绝服务攻击、文件目录遍历漏洞、file跨域访问等。
本报告选取11类android app中同等数量的热门app,其活跃用户量可覆盖83%的移动端网民,根据阿里巴巴移动安全中心对这些app的漏洞检测,得到以下结论:
参与检测的android app中,近97%的app都存在漏洞问题,且平均漏洞量高达40个。
安全类app漏洞问题最多,其漏洞总量499个,占所有类别app漏洞总量的21%。
新闻、旅游类app相对最不安全,其各自漏洞总量约240个,且其中高危漏洞量占比30%。
游戏类app相对最安全,漏洞总量约57个,且其中高危漏洞占比约2%。
从测试结果来看,android app的安全问题不容乐观,漏洞的存在尤其是高危漏洞,会对app开发者甚至用户带来较大影响,如何提前发现潜在风险、保护开发者和用户的利益是阿里巴巴移动安全团队一直坚持的责任。
第一章 Android APP漏洞现状
为了解android app的总体现状,报告中将app归纳为11个类别:健康、娱乐、安全、教育、新闻、旅游、游戏、社交、购物、金融、阅读。选取11类app中等量热门app,并使用阿里巴巴聚安全的漏洞扫描产品进行静态和动态检测,扫描结果如下:
从漏洞类别来看,android app漏洞中排在首位的是sql注入类漏洞,占比38.2%,其次是webview漏洞,占比35.4%,见左图。
从漏洞风险级别来看,android app中高危漏洞占20.7%,低危漏洞占79.3%,其中高危漏洞主要集中在webview系列和https证书未校验上。
SQL注入类漏洞占比38.2%,主要是代码中未过滤用户输入,攻击者可通过提交恶意sql查询语句达到其作恶目的。Sql注入虽大部分属于中低危漏洞,但仍可造成敏感数据、系统最高权限被窃取等问题。
Webview的一些高危漏洞,主要由代码中使用addJavascriptInterface等危险函数、使用不校验证书等因素导致。这些漏洞可远程执行代码,对用户远程安装恶意软件。
Https相关的高危漏洞,主要由https使用ALLOW_ALL_HOSTNAME_VERIFIER等参数校验证书,没有对主机等信息进行校验导致,这些漏洞会引发攻击者轻易劫持https会话、嗅探用户密码和其他敏感信息等问题。
高危漏洞潜藏着巨大的安全问题,但从测试结果来看,很多android app都存在高危漏洞问题,其安全性令人担忧。
第二章 Android APP漏洞问题分析
本章将对app的漏洞扫描结果进一步分析,首先将分析漏洞的静态和动态检测结果,其次将总结归纳漏洞产生的原因。
2.1 各类别app漏洞情况分析
1. 漏洞的静态扫描结果分析
使用阿里巴巴聚安全的漏洞扫描产品,对11个类别同等数量的热门app进行静态扫描,各类app的安全情况不尽相同:
参与测试的app中近97%的app都有安全漏洞,且平均漏洞量达40个。
安全类app漏洞问题最多。
在检测到的所有漏洞中,安全类app的漏洞总量多达499个(约占总漏洞量21%),其中高风险漏洞占比约2%,整体而言,即便是安全类app,亦存在较多的安全问题。
新闻、旅游类app相对最不安全
新闻、旅游类app漏洞总量均超230个(约占总漏洞量的10%),且其中高风险漏洞量占比高达30%,在所有app中相对最不安全。
游戏类app相对最安全
游戏类app无论是漏洞总量,或是其中的高风险漏洞占比均较少,在所有app中相对最安全。
2. 漏洞的动态扫描结果分析
使用阿里巴巴聚安全的漏洞扫描产品,对11个类别同等数量的热门app进行动态扫描,扫描结果几乎都是拒绝服务攻击类漏洞,未发现文件目录遍历、file跨域访问等漏洞。
从以下数据图可以看出,各类别app或多或少都存在拒绝服务攻击漏洞,尤其以金融类(37个)、娱乐类(35个),购物类(32个),安全类(28个)为重,而游戏类的拒绝服务攻击漏洞总量相对最少(3个)。
拒绝服务漏洞其实是组件暴露问题,组件一旦被暴露,特定的恶意数据就可写入组件,从而导致该app崩溃,造成拒绝服务,进而影响app开发者和用户的利益。
3. 总结
以上分析数据说明android类app的安全问题并不容乐观,需要进一步探究造成漏洞的原因以及解决方案,以尽量避免漏洞的产生及弥补安全问题带来的影响。
2.2 App漏洞原因分析
Android app的漏洞类型很多,如SQL注入、webview系列漏洞、文件模式配置错误、HTTPS不校验证书、拒绝服务攻击等,造成漏洞的原因可以归结为以下两类:
1. App开发者自身的问题
a) 编码不规范
很多公司对编码规范没有要求,或app开发者没有按照编码规范来进行编码,容易导致敏感信息泄露,比如日志打印问题、在发行版本中没有关闭日志打印功能等。
b) 安全意识不够
很多android函数的参数需慎用,如常用函数openFileOutput,如果设置mode参数为Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE,就容易泄露android app的数据。另外,接口处理需要更加严谨,例如暴露了一个接口,允许运行用户输入的信息,若对信息未做任何处理,就容易引起拒绝服务攻击等安全问题。
2. Android上0day的发现
Android上0day的发现,可导致android app以前安全的功能变得不安全,在android系统没有补丁的情况下,需及时在android app上打补丁,但鉴于很多android app开发者对漏洞信息不敏感等原因,并未做到及时修补,从而导致漏洞的存在。
总之,Android app的安全问题,很大程度上可能是开发者犯下的低级错误。较为有效的解决办是能够在代码编写过程中使用SDL编码流程,同时使用漏洞扫描产品对app进行检测,不断修补自身app的安全问题。安全无小事,所有app开发者都应重视。
第三章 总结
本次检测采用了11个类别app中同等数量的热门app,共扫描出近2500个漏洞,平均每个android app有40个安全漏洞,且约97%的测试app或多或少都存在安全漏洞。这些数据反映出android app漏洞问题的严峻性,在app市场上,很多android app都存在潜在的安全风险,一旦被利用,会给用户和开发者带来很大影响。
从 漏洞检测
结果来看,android app的漏洞问题不容乐观,这些问题是否可以规避?是否有自动化的漏洞扫描产品供app开发者使用?是否可以降低开发者和用户的利益受损程度? 答案是肯定的,除了加强app开发者的安全意识,在app发布之前利用安全产品进行漏洞扫描检测可以及早发现隐含的安全问题,保护开发者利益,保护用户利益。