Android开发常见安全漏洞总结

本文详细总结了Android开发中的多种安全漏洞,包括WebView组件的远程代码执行、跨域访问、忽略SSL证书验证错误等问题,并提供了相应的解决方案。此外,还涉及密码明文保存、本地端口开放、Content Provider目录遍历、SQL注入等多个安全风险,每个漏洞都给出了具体的修复措施,以增强应用的安全性。
摘要由CSDN通过智能技术生成

WebView组件远程代码执行漏洞

addJavascriptInterface接口

Android API level 16以及之前的版本存在远程代码执行安全漏洞,该漏洞源于程序没有正确限制使用WebView.addJavascriptInterface方法,远程攻击者可通过使用Java Reflection API利用该漏洞执行任意Java对象的方法,简单的说就是通过addJavascriptInterface给WebView加入一个JavaScript桥接接口,JavaScript通过调用这个接口可以直接操作本地的JAVA接口。

mWebView.getSettings().setJavaScriptEnabled(true);  
mWebView.addJavascriptInterface(new JSInterface(), "jsInterface");  

我们向WebView注册一个名叫“jsInterface”的对象,然后在JS中可以访问到jsInterface这个对象,就可以调用这个对象的一些方法,最终可以调用到Java代码中,从而实现了JS与Java代码的交互。

JS中可以遍历window对象,找到存在“getClass”方法的对象的对象,然后再通过反射的机制,得到Runtime对象,然后调用静态方法来执行一些命令。

核心代码如下:

function execute(cmdArgs)  
{
     
    for (var obj in window) {
     
        if ("getClass" in window[obj]) {
     
            alert(obj);  
            return  window[obj].getClass().forName("java.lang.Runtime")  
                 .getMethod("getRuntime",null).invoke(null,null).exec(cmdArgs);  
        }  
    }  
} 

解决方案

  1. Google 在Android 4.2 版本中规定对被调用的函数以 @JavascriptInterface进行注解从而避免漏洞攻击
  2. Android 4.2版本之前采用拦截prompt()进行漏洞修复。 详见

searchBoxJavaBridge_接口

在Android 3.0以下,Android系统会默认通过searchBoxJavaBridge_的Js接口给 WebView 添加一个JS映射对象:searchBoxJavaBridge_对象。

解决方案

删除默认添加的"searchBoxJavaBridge_"。

mWebView.removeJavascriptInterface("searchBoxJavaBridge_");  

accessibility 和 accessibilityTraversal

此漏洞原理与searchBoxJavaBridge_接口远程代码执行相似,均为未移除不安全的默认接口,不过此漏洞需要用户启动系统设置中的第三方辅助服务,利用条件较复杂。

解决方案

与searchBoxJavaBridge_的解决方案类似:可以调用removeJavascriptInterface(“accessibility”) 和removeJavascriptInterface(“accessibilityTraversal”) 方法移除这两个默认接口。

WebView跨域访问漏洞

如果一个Activity可以被其他应用调起,例如声明了android:exported="true",相关WebView又开启了file域访问,同时未对file 域的路径进行严格限制所致。攻击者通过URL Scheme 的方式,可远程打开并加载恶意HTML文件,远程获取APP中包括用户登录凭证在内的所有本地敏感数据。

涉及到三个方法:

  • setAllowFileAccess

    设置是否允许WebView使用File协议,默认设置为true,即允许在File域下执行任意JavaScript代码。

  • setAllowFileAccessFromFileURLs

    设置是否允许通过 file url 加载的 Js代码读取其他的本地文件。

  • setAllowUniversalAccessFromFileURLs

    设置是否允许通过 file url 加载的 Javascript 可以访问其他的源(包括http、https等源)。

解决方案

1.file域访问为非功能需求时,手动配置setAllowFileAccessFromFileURLs或setAllowUniversalAccessFromFileURLs两个API为false。(Android4.1版本之前这两个API默认是true,需要显式设置为false)

2.若需要开启file域访问,则设置file路径的白名单,严格控制file域的访问范围,具体如下:

(1)固定不变的HTML文件可以放在assets或res目录下,file:///android_assetfile:///android_res 在不开启API的情况下也可以访问;

(2)可能会更新的HTML文件放在/data/data/(app) 目录下,避免被第三方替换或修改;

(3)对file域请求做白名单限制时,需要对“…/…/”特殊情况进行处理,避免白名单被绕过。
3.避免App内部的WebView被不信任的第三方调用。排查内置WebView的 Activity是否被导出、必须导出的Activity是否会通过参数传递调起内置的WebView等。

4.建议进一步对APP目录下的敏感数据进行保护。客户端APP应用设备相关信息(如IMEI、IMSI、Android_id等)作为密钥对敏感数据进行加密。使攻击者难以利用相关漏洞获得敏感信息。

WebView组件忽略SSL证书验证错误漏洞

Android WebView组件加载网页发生证书认证错误时

  • 0
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值