背景:Webview安全风险之前一直没引起重视,直到addJavascriptInterface挂马漏洞拉开了Webview安全风险的序幕。由于Android版本的碎片化,导致Webview存在大量的Nday漏洞和安全风险。
阿里聚安全专家将会对Webview存在的安全风险进行整理及防御方案探讨。
一、 UXSS漏洞攻击
Webview历史上存在大量的Nday漏洞,包括但不限于UXSS漏洞、远程拒绝服务漏洞等等。以v8 builtins object exposed to user causing UXSS这个漏洞为例,builtins对象的方法暴露给用户,可以导致UXSS漏洞,执行任意恶意js代码。
攻击演示:用浏览器浏览恶意网站,cookie等隐私信息就会被黑客获取。
阿里聚安全防御方案:由于Android版本的碎片化,上述漏洞广泛存在于大量手机上。而且上述漏洞为Webview组件的系统漏洞,引用Webview组件的应用程序都会受到影响。目前尚无较好的修复方案,只能通过升级系统版本来修复。对于比较严重的UXSS漏洞,应用程序可对恶意代码进行过滤。
二、 远程命令执行攻击
13年下半年,Webview曝出了比较严重的远程命令执行漏洞。在webView 下有一个非常特殊的接口函数addJavascriptInterface。能实现本地java和js的交互。利用addJavascriptInterface这个接口函数可实现反射穿透webkit控制android 本机。技术细节可参考如下文章:《WebView中接口隐患与手机挂马利用》。
攻击演示:某app用addJavaInterface导出WE接口,可利用该接口向SD卡远程写入webview.txt文件。
阿里聚安全防御方案:
1、 Android 4.2 (api17)已经开始采用新的接口函数,@JavascriptInterface 代替addjavascriptInterface。
三、 Webview不安全API攻击
去年的Webview addJavaInterface代码执行漏洞曾经火了很长时间,虽然代码执行漏洞修复了,Webview导出函数的安全性仍需要引起重视,类似于Windows平台上的ActiveX导出接口。某app导出readFileByJS函数,黑客可以利用该漏洞读取任意文件。
攻击演示:某app没注意到导出接口的安全性,导出getSessionKey函数,黑客可利用该接口获取skey等隐私信息。
阿里聚安全防御方案:
1、进行严格的调用域限制。
2、注意不提供影响系统安全的接口函数,例如可以用来上传用户系统文件的函数、远程执行代码的函数就不要提供了。如果需要提供,一定要让函数在使用中有明显提示,让用户自己选择是否要上传或者下载文件,以防止有人恶意利用该函数。
3、在处理接口函数的警告信息时,需要妥善处理,不要随意将报警信息显示出来。防止开发者忽略了对函数警告信息的屏蔽,而使得其被恶意攻击者所利用,造成信息泄漏。
四、 Webview API不安全使用
Webview中可以用loadDataWithBaseURL加载一段html代码,函数原型如下:
loadDataWithBaseUrl(String baseUrl, String data, String mimeType, String encoding, String historyUrl)。其中,baseUrl为默认的html代码,data为要加载的 html代码,mimeType为文本类型,encoding为编码格式,historyUrl为历史记录的html代码。如果baseUrl和data可控,则可让app加载指定的攻击html进行攻击。
攻击演示:某app对loadDataWithBaseURL函数使用不当,恶意app可用该漏洞获取Databases目录下webview.db文件。
阿里聚安全防御方案:
1、baseUrl和data不要让用户可控。
2、禁止File域下执行js。
五、 File域同源策略绕过攻击
2013年10月份,外部爆出FireFox Android版存在file域同源策略绕过漏洞,可造成cookie等敏感信息泄露,黑客可利用该漏洞获取FireFox的所有文件。低版本的系统Webview组件也存在同样的漏洞,应用程序使用Webview并支持File域,就会受到该漏洞的攻击。
攻击演示:某app对file域没有限制,用该漏洞获取shared_prefs目录下config.xml文件。
阿里聚安全防御方案:
1、不要将不必要组件导出。
2、如需导出,禁止使用File域。
3、如需使用File协议,禁止js执行:setJavaScriptEnabled(False)。
六、 Hybrid Application框架攻击
为了让Web开发者轻松地和手机本地重要应用程序(如通讯录和摄像头)交互,诞生了很多跨平台移动web中间件,其中使用最为广泛的为PhoneGap开发框架。PhoneGap提供了一组设备相关的API,通过这组API,移动应用能够以JavaScript访问原生的设备功能,如摄像头、麦克风、位置信息等。可以通过web脚本语言调用PhoneGap API构建应用程序,无需本地代码(如Java或对象C等)。
由于PhoneGap默认设置的访问域名白名单存在缺陷,因此恶意网址可以绕过域名限制,利用PhoneGap提供的接口权限,获取用户的隐私信息。PhoneGap<3.1版本存在白名单绕过,敏感权限暴露的漏洞。
攻击演示:利用PhoneGap漏洞,读取联系人手机号。
阿里聚安全防御方案:
国外的研究人员写了一篇关于Hybrid Application访问控制的文章,《Breaking and Fixing Origin-Based Access Control
in Hybrid Web/Mobile Application Frameworks》,详细阐述了PhoneGap框架的安全风险,并在PhoneGap的基础上进行修改,提高PhoneGap的安全性。它的核心思想是每个访问bridge的域名都要通过一个不可伪造的token来认证。
1、 修改framework的js库,每次都从localStorage读取token,并在调用jsbridge时当做参数传递过去
2、 framework检验token,并决定是否授予本地资源的访问权限。
3、 Webview远程命令执行防御:基于PhoneGap 2.9修改,用Android API Level 17,因此不受该漏洞影响。为了向下兼容,首先将bridge机制设为事件而不是接口;其次修改PhoneGap的exposeJsInterface()函数,当API Level低于17时,不要将js接口添加到Webview。
一、 UXSS漏洞攻击
Webview历史上存在大量的Nday漏洞,包括但不限于UXSS漏洞、远程拒绝服务漏洞等等。以v8 builtins object exposed to user causing UXSS这个漏洞为例,builtins对象的方法暴露给用户,可以导致UXSS漏洞,执行任意恶意js代码。
攻击演示:用浏览器浏览恶意网站,cookie等隐私信息就会被黑客获取。
![](http://bbs.pediy.com/upload/attach/201412/653009_7caqb13y1wvujq8.png)
阿里聚安全防御方案:由于Android版本的碎片化,上述漏洞广泛存在于大量手机上。而且上述漏洞为Webview组件的系统漏洞,引用Webview组件的应用程序都会受到影响。目前尚无较好的修复方案,只能通过升级系统版本来修复。对于比较严重的UXSS漏洞,应用程序可对恶意代码进行过滤。
二、 远程命令执行攻击
13年下半年,Webview曝出了比较严重的远程命令执行漏洞。在webView 下有一个非常特殊的接口函数addJavascriptInterface。能实现本地java和js的交互。利用addJavascriptInterface这个接口函数可实现反射穿透webkit控制android 本机。技术细节可参考如下文章:《WebView中接口隐患与手机挂马利用》。
攻击演示:某app用addJavaInterface导出WE接口,可利用该接口向SD卡远程写入webview.txt文件。
![](http://bbs.pediy.com/upload/attach/201412/653009_tnaygcuhubx4bhi.png)
![](http://bbs.pediy.com/upload/attach/201412/653009_e2u5xb4agzgm5a9.png)
阿里聚安全防御方案:
1、 Android 4.2 (api17)已经开始采用新的接口函数,@JavascriptInterface 代替addjavascriptInterface。
三、 Webview不安全API攻击
去年的Webview addJavaInterface代码执行漏洞曾经火了很长时间,虽然代码执行漏洞修复了,Webview导出函数的安全性仍需要引起重视,类似于Windows平台上的ActiveX导出接口。某app导出readFileByJS函数,黑客可以利用该漏洞读取任意文件。
攻击演示:某app没注意到导出接口的安全性,导出getSessionKey函数,黑客可利用该接口获取skey等隐私信息。
![](http://bbs.pediy.com/upload/attach/201412/653009_fup6wl5p4fekg5d.png)
阿里聚安全防御方案:
1、进行严格的调用域限制。
2、注意不提供影响系统安全的接口函数,例如可以用来上传用户系统文件的函数、远程执行代码的函数就不要提供了。如果需要提供,一定要让函数在使用中有明显提示,让用户自己选择是否要上传或者下载文件,以防止有人恶意利用该函数。
3、在处理接口函数的警告信息时,需要妥善处理,不要随意将报警信息显示出来。防止开发者忽略了对函数警告信息的屏蔽,而使得其被恶意攻击者所利用,造成信息泄漏。
四、 Webview API不安全使用
Webview中可以用loadDataWithBaseURL加载一段html代码,函数原型如下:
loadDataWithBaseUrl(String baseUrl, String data, String mimeType, String encoding, String historyUrl)。其中,baseUrl为默认的html代码,data为要加载的 html代码,mimeType为文本类型,encoding为编码格式,historyUrl为历史记录的html代码。如果baseUrl和data可控,则可让app加载指定的攻击html进行攻击。
攻击演示:某app对loadDataWithBaseURL函数使用不当,恶意app可用该漏洞获取Databases目录下webview.db文件。
![](http://bbs.pediy.com/upload/attach/201412/653009_3ti8xbzem0k4vet.png)
![](http://bbs.pediy.com/upload/attach/201412/653009_hevn3ecq6qdjj3m.png)
阿里聚安全防御方案:
1、baseUrl和data不要让用户可控。
2、禁止File域下执行js。
五、 File域同源策略绕过攻击
2013年10月份,外部爆出FireFox Android版存在file域同源策略绕过漏洞,可造成cookie等敏感信息泄露,黑客可利用该漏洞获取FireFox的所有文件。低版本的系统Webview组件也存在同样的漏洞,应用程序使用Webview并支持File域,就会受到该漏洞的攻击。
攻击演示:某app对file域没有限制,用该漏洞获取shared_prefs目录下config.xml文件。
![](http://bbs.pediy.com/upload/attach/201412/653009_b7lc6g7uja9y3du.jpg)
阿里聚安全防御方案:
1、不要将不必要组件导出。
2、如需导出,禁止使用File域。
3、如需使用File协议,禁止js执行:setJavaScriptEnabled(False)。
六、 Hybrid Application框架攻击
为了让Web开发者轻松地和手机本地重要应用程序(如通讯录和摄像头)交互,诞生了很多跨平台移动web中间件,其中使用最为广泛的为PhoneGap开发框架。PhoneGap提供了一组设备相关的API,通过这组API,移动应用能够以JavaScript访问原生的设备功能,如摄像头、麦克风、位置信息等。可以通过web脚本语言调用PhoneGap API构建应用程序,无需本地代码(如Java或对象C等)。
由于PhoneGap默认设置的访问域名白名单存在缺陷,因此恶意网址可以绕过域名限制,利用PhoneGap提供的接口权限,获取用户的隐私信息。PhoneGap<3.1版本存在白名单绕过,敏感权限暴露的漏洞。
攻击演示:利用PhoneGap漏洞,读取联系人手机号。
![](http://bbs.pediy.com/upload/attach/201412/653009_fxy295xixvlju31.png)
阿里聚安全防御方案:
国外的研究人员写了一篇关于Hybrid Application访问控制的文章,《Breaking and Fixing Origin-Based Access Control
in Hybrid Web/Mobile Application Frameworks》,详细阐述了PhoneGap框架的安全风险,并在PhoneGap的基础上进行修改,提高PhoneGap的安全性。它的核心思想是每个访问bridge的域名都要通过一个不可伪造的token来认证。
1、 修改framework的js库,每次都从localStorage读取token,并在调用jsbridge时当做参数传递过去
2、 framework检验token,并决定是否授予本地资源的访问权限。
3、 Webview远程命令执行防御:基于PhoneGap 2.9修改,用Android API Level 17,因此不受该漏洞影响。为了向下兼容,首先将bridge机制设为事件而不是接口;其次修改PhoneGap的exposeJsInterface()函数,当API Level低于17时,不要将js接口添加到Webview。
![](http://bbs.pediy.com/upload/attach/201412/653009_5rdfjw4bq5geuf7.png)