应用安全问题层出不穷,开发者该如何破解?

发布时间:2018-12-04 16:00:00

近日,中国消费者协会通报部分应用存在收集个人信息及隐私问题,涉及应用多达100款。那么Android应用常见的安全与隐私问题有哪些?又该如何解决?本文由华为技术专家李欣哲对以上问题进行解读。

Android应用常见安全问题

1、组件问题

①组件暴露

组件暴露是很正常的事情,但存在的问题是很多开发者将没有开发完的代码随着应用发布出去。如果设置了组件暴露,攻击者很可能用此攻击应用,调用应用的隐藏功能、拒绝服务等。

②组件含有权限未设置保护

应用执行高权限功能,如在用户不知情的情况下,组件产生直接发短信、打电等行为。

③组件配置失当

尽管组件设置为非暴露,但如果设置intent filter,其他应用可以进行一样的声明,造成应用被劫持问题(隐式调用被劫持)。

④案例:

组件问题—某社交应用SDK

如图,是一个有分享功能的SDK,这个SDK存在两个暴露的组件。

⑤组件问题造成的影响

a、拒绝服务

拒绝服务并不是指应用存在问题,而是指通过SDK调用组件直接导致应用发生崩溃的现象。

b、调用未授权界面甚至后门

金融类的APP可以直接绕过密码,获得用户信息。

推荐工具:Drozer

Drozer是一款开源Android安全测试框架,不仅可以测试组件暴露问题,还可以测很多其他问题,是一款非常高效的测试工具。

2、URL绕过问题

①路径遍历漏洞

问题应用/SDK大量使用路径/URL作为参数,如果不校验路径的合法性,容易导致路径遍历攻击 。 Android 平台最典型的路径遍历漏洞是ZipEntry,URL路径遍历问题跟传统的Web相同。

②URL白名单绕过

Webview组件加载URL时,有的情况下使用者不希望 Webview组件任何网页都可以加载,因此会有一个过滤机制,通过设置一个白名单函数约束加载的网页来实现,这些设置会带来很多不安全因素。常见约束URL的函数有contains()、indexOf()、 endwith()、getHost()等等。

③白名单绕过案例

如图,应用可以绕过白名单。这一步只要域名中有.xxx.com即可通过检查,最后构造的URL是:http://m.xxx.com.xxx.org/webview.html,其中 m.xxx.com.cubarco.org是攻击者可以注册的域名。

④URL绕过问题解决方案

URL白名单存在场景: Android:scheme属性、暴露组件、扫一扫、聊天输入、评论;

不安全校验函数: contains() 、indexOf() 、endwith() 、getHost() 、getPathSegments();

3、中间人攻击

中间人攻击包含Http中间人攻击与Https中间人攻击。

①漏洞位置

X509TrustManager 、HostnameVerifier 、 setHostnameVerifier

②漏洞触发前提条件

a、自定义的X509TrustManager不校验证书;

b、实现的自定义HostnameVerifier不校验域名接受任意域名;

c、使用setHostnameVerifier (ALLOW_ALL_HOSTNAME_VERIFIER);

③对应场景

a、客户端不校验SSL证书或者校验逻辑有误

b、自定义实现HostnameVerifier接口,但不检查站点域名和证书域名是否匹配

c、直接使用接受任意域名的HostnameVerifier接口

④解决方案

使用渗透工具Burp Suite

4、Webview 漏洞

①WebView远程代码执行(4.3版本以前)

a、CVE-2012-6636 addJavascriptInterface 利用该漏洞执行任意Java对象的方法

b、CVE-2013-4710 openFile 同源绕过

②File域控制不严

a、setAllowFileAccessFromFileURLs

b、setAllowUniversalAccessFromFileURLs

c、setAllowFileAccess + setJavaScriptEnabled(true)

③信息泄露

a、密码明文存储 setSavePassword (true)(4.4版本前)

b、地理位置泄露 setGeolocationEnabled

④URL外部可控

a、 loadUrl (String url)

b、 loadUrl (String url, Map<String, String> additionalHttpHeaders)

c、 loadData(String data, String mimeType, String encoding)

d、 loadDataWithBaseURL(String baseUrl, String data, String mimeType,String encoding, String historyUrl)

⑤Webview漏洞——JavaScript接口暴露

某应用中供应商SDK存在大量暴露JavaScript接口。

如图,通过代码跟踪发现,此接口可以执行很多操作, 如发短信、打电话、下载应用等。方式为通过将js脚本中间人注入到该应用的Webview交互返回的报文中。

⑥Webview漏洞解决方案

如下Webview的配置项,单独使用时没有问题,但是组合起来配置,就会造成许多问题。

扫描代码关键字:

a、setSavePassword

b、setGeolocationEnabled

c、setAllowFileAccessFromFileURLs

d、setAllowUniversalAccessFromFileURLs

e、setAllowFileAccess

f、setJavaScriptEnabled

g、@JavaScriptInterface

h、setAllowContentAccess

Android应用隐私问题及解决方案

1、隐私泄露途径

2、如何检查应用内的隐私泄露?

①推荐工具

flowdroid是一款Android app数据流分析工具 。

flowdroid分析信息流所有可能的路径,追踪从source到sink的所有数据流。

source:账号密码、联系人、短信、数据库、IMEI 等敏感数据

sink:因特网、存储卡、log打印、短信发送等泄露点。

②下载路径

https://github.com/secure-software-engineering/FlowDroid

③案例——某供应商SDK

如图发现某应用中供应商SDK出现source-sink问题。

定位sink所在位置:

getHttpURLConnection,跟踪代码找到发送数据的方法setHttpHeader,可以看到v0作为Http头部数据被发送。

继续跟进setHttpHeader方法,确认每一个子函数的具体执行内容,如该方法的最后一行:addHeadSign。

跟踪getDeviceId方法,发现方法名跟获取IMEI号有关;分析该疑似获取IMEI号的方法,可以看到获取了手机的IMEI号,而且进行了sha256的加密。

安卓绿色联盟会根据每期技术沙龙议题输出精彩技术干货文章,分享讲师PPT,为未能现场参加技术沙龙的您提供另一个干货学习机会。

分享:
请先后留下您的评论
热门评论
没有更多评论了
合作咨询
申请加入会员
请选择您企业的所属类别