近日,中国消费者协会通报部分应用存在收集个人信息及隐私问题,涉及应用多达100款。那么Android应用常见的安全与隐私问题有哪些?又该如何解决?本文由华为技术专家李欣哲对以上问题进行解读。
①组件暴露
组件暴露是很正常的事情,但存在的问题是很多开发者将没有开发完的代码随着应用发布出去。如果设置了组件暴露,攻击者很可能用此攻击应用,调用应用的隐藏功能、拒绝服务等。
②组件含有权限未设置保护
应用执行高权限功能,如在用户不知情的情况下,组件产生直接发短信、打电等行为。
③组件配置失当
尽管组件设置为非暴露,但如果设置intent filter,其他应用可以进行一样的声明,造成应用被劫持问题(隐式调用被劫持)。
④案例:
组件问题—某社交应用SDK
如图,是一个有分享功能的SDK,这个SDK存在两个暴露的组件。
⑤组件问题造成的影响
a、拒绝服务
拒绝服务并不是指应用存在问题,而是指通过SDK调用组件直接导致应用发生崩溃的现象。
b、调用未授权界面甚至后门
金融类的APP可以直接绕过密码,获得用户信息。
推荐工具:Drozer
Drozer是一款开源Android安全测试框架,不仅可以测试组件暴露问题,还可以测很多其他问题,是一款非常高效的测试工具。
①路径遍历漏洞
问题应用/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();
中间人攻击包含Http中间人攻击与Https中间人攻击。
①漏洞位置
X509TrustManager 、HostnameVerifier 、 setHostnameVerifier
②漏洞触发前提条件
a、自定义的X509TrustManager不校验证书;
b、实现的自定义HostnameVerifier不校验域名接受任意域名;
c、使用setHostnameVerifier (ALLOW_ALL_HOSTNAME_VERIFIER);
③对应场景
a、客户端不校验SSL证书或者校验逻辑有误
b、自定义实现HostnameVerifier接口,但不检查站点域名和证书域名是否匹配
c、直接使用接受任意域名的HostnameVerifier接口
④解决方案
使用渗透工具Burp Suite
①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
①推荐工具
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的加密。