内容来源:2018 年 09 月 15 日,华为资深技术专家李欣哲在“从研发到测试,手把手教你打造绿色应用”进行《应用安全常见问题及解决方案》的演讲分享。IT 大咖说做为独家视频合做方,经主办方和讲者审阅受权发布。android
阅读字数:3315 | 9分钟阅读web
观看嘉宾演讲视频及PPT,请点击:t.cn/E2DtMQW安全
本文分为三个部分,第一个部分会介绍一下安卓的应用现状,第二部分是安卓的常见问题(偏漏洞方面),最后是隐私安全问题。网络
首先咱们来看一下官方发布的数据,国家互联网应急响应中心对全部的移动平台进行统计后,发现安卓平台的用户是最容易受到攻击的,并且恶意的程序高达99.9%。这主要是因为安卓的自己开源开放的机制致使的,同时近些年来安卓的用户量逐年增高,让你们看到的利益,从而引来了愈来愈多的攻击者。架构
这是咱们内部审计发现的一些数据,在通过仔细的排查,发现不少应用广泛都会存在一些漏洞。而少部分应用会在他们不知情或者是故意的状况下,带有一些病毒和恶意的行为。app
接下来会给你们介绍下咱们今年发现了一些漏洞,其实说漏洞仍是有些不恰当,它更像是四个攻击面,包括组件问题、url绕过、中间人攻击、Webview漏洞,尽管这几个问题看起来很是简单,可是在手机上包括一些主流APP上倒是很是的常见。函数
对于组件问题,若是单论存在的缘由,可能在安卓创建之初它就存在了。组件暴露实际上是一个很是正常的事情,可是不正常的就在于不少开发者喜欢把一些没有开发完的代码也随着应用发布出去,他们可能以为这些部分跟其余的组件或者界面没有太大关联,用户没法接触到这些界面。可是实际上若是设置了组件暴露,攻击者就能够轻松的攻击应用,包括调用隐藏功能,开启后门,拒绝服务等。工具
组件暴露,若是含有权限,并且没有设置保护(这里的权限不只仅是传统意义上的那种谷歌定义的高权限行为),攻击者就能够在在用户不知情状况下作一些事情,好比访问组件直接发短信,测试
还有一种状况是应用设计逻辑上比较高危,好比我以前看到一款金融类的APP,它的设计就是先有一个输入密码的界面,相似于保护锁,经过保护锁验证成功以后才能够金融信息这样的隐私数据。可是若是第二个界面组件暴露了,就能够不用锁直接绕过验证。url
下面介绍一个,今年某某社交软件发现的SDK的问题。这个问题大概是在今年7月份才修复,该社交软件,用户量大概有几个亿,审计发现有14000多个应用存在这种问题。
问题出在一个有分享功能的SDK上, 这个SDK存在两个暴露的组件,其中一个组件的漏洞让攻击者能够访问到应用的任意私有组件,至关于绕过了谷歌的沙箱机制。另外一个组件的漏洞不只可让然访问私有组件,还能够向组件传参数。它们主要形成了两个问题,一个是拒绝服务,一个是调用未受权界面(甚至后门)。
URl绕过问题也只能说是攻击面,不能说是漏洞。这块首先有一个路径遍历漏洞,通常问题应用或者SDK在大量使用路径url做为参数的状况下,若是不校验路径的合法性,就容易致使这个问题。安卓平台最典型的路径遍历漏洞就是 ZipEntry URl路径遍历问题,和传统web相同。
另外一个问题是url白名单绕过,随着联网应用的增多,你们都喜欢用webviwe组件去加载一个网页,那就须要加载url,而webviwe组件自己问题就很是的多,它权限中有不少敏感的行为,好比获取地理位置信息。
在使用webview的时候,大多数开发者并不但愿组件任何网页都加载,所以会实现一个白名单函数约束加载的网页,常见的约束函数有contains()、indexOf()、endwith()、getHost()等,因为约束机制都是人为实现的,所以会带来不安全的因素。
url白名单可能存在的场景,包括安卓的scheme属性、暴露组件、一扫、评论、聊天输入。
扫一扫的问题比较有意思,按照道理讲,经过扫二维码和直接网页点击的url,若是有白名单校验机制的话,应该是加载同一个白名单函数。可是可能因为团队架构设计的缘由,致使两块分别由不一样人负责,形成白名单校验机制也不同,从而带来一些问题。
中间人攻击其实也是历史悠久的问题,最先也是在web平台,不过如今由于安卓平台的网络链接愈来愈多,用户量愈来愈大,这个也是成为了安隐患很是大的问题。
中间人攻击能够劫持应用发出的请求,返回用户不指望的东西。全部的http均可以被中间人攻击,由于它自己就是不安全的网络传输。
https做为http的安全解决方案,若是实现的不够好,也有不少的漏洞。目前众所周知的漏洞位置由X509TrustManager、HostnameVerifier、setHostnameVerifier,对于场景分别是客户端不校验SSL证书或者校验逻辑有误;自定义实现HostnameVerifier接口,却不检查域名和证书域名是否匹配;直接使用接受任意域名的HostnameVerifier接口。
Webview漏洞方面今年发现的,影响面最广,并且数量不断递增的就是JavaScript的接口暴露问题。目前市面上比较流行的,用了Webview组件的应用,大概有1/5都存在这种问题。
咱们某应用中供应商的SDK中就存在大量暴露的JavaScript接口,经过代码跟踪咱们发现这个接口能够执行不少操做,包括发短信、打电话、下载应用等等功能,
对于webview漏洞的解决方案主要是扫描代码中关键字,以上这些都是webview的一些配置,它们单独拿出来可能都不是什么问题,可是组合起来就会形成很是多的问题。
咱们使用的应用里确定有不少的隐私数据,例如的姓名,年龄、性别、身份证号等等信息,这些信息能够经过网络、SD卡存储、短信发送、NFC、蓝牙传输等各类方式泄露出去。
那么做为一个开发者,要如何防范这些泄露呢,或者说保证本身开发的应用没有这些行为,其中就包括判断所引入的大量开源的SDK是否有恶意的行为。
这里介绍一款工具——flowdroid,它是一款针对android app数据分析的工具。它其实是分析了你的信息流全部可能的经过的路径,其中分为source跟sink,,source表示敏感数据、sink表示泄露点。
以上为今天的分享内容,谢谢你们!
编者:IT大咖说,转载请标明版权和出处