Android 安全检测漏洞及修复

本文介绍了在Android App上线前的安全检测漏洞及其修复方法,包括BroadcastReceiver组件的权限控制,避免android:debuggable和android:allowBackup带来的风险,修复WebView的相关漏洞,以及正确处理SSL证书校验。确保混合型App如Ionic/Cordova的安全性。

将Android App上线前送检,安全检测漏洞修复(目录仅对ionic/cordova类混合APP有效)

低风险


1. BroadcastReceiver组件暴露 导出的广播可以导致数据泄漏或者是越权。
如果组件不需要与其他app共享数据或交互,请将AndroidManifest.xml 配置文件中设置该组件为exported = “False”。如果组件需要与其他app共享数据或交互, 请对组件进行权限控制和参数校验。

中风险 


     1.android:debuggable 属性的设置可能会引起 被动态调试的风险。     
      在AndroidMainifest.xml中最好不设置android:debuggable属性置,而是由打包方式来决定其值。
如果设置了 android:debuggable=”true” 那么在正式打包时 把它设置成false;但是Android Studio提示需要设置上 tools:ignore="HardcodedDebugMode"
    2.android:allowBackup 属性的设置可能会引起用数据被任意备份的风险    
    开发者务必将 allowBackup 标志值设置为 false 来关闭应用程序的备份和恢复功能,以免造成信息泄露和财产损失。
<application
            android:allowBackup="false"
            android:debuggable="false">
        ......
 </application>


高风险


1.WebView组件系统隐藏接口未移除漏洞  
platforms/android/app/src/main/java/org/apache/cordova/inappbrowser/InAppBrowser.java文件 inAppWebView = new WebView(cordova.getActivity());下添加

      inAppWebView.removeJavascriptInterface("searchBoxJavaBridge_");
                 inAppWebView.removeJavascriptInterface("accessibility");
                 inAppWebView.removeJavascriptInterface("accessibilityTraversal");
               
2.android主机名/证书 弱校验风险
 platforms/android/app/src/main/java/com/skspruce/ism/mobile/cordova/CordovaPluginWifi.java 文件  public void getWebVersion(){ }内注释try里面的X509TrustManager函数,并设置 OkHttpClient client = new OkHttpClient.Builder()
            // .hostnameVerifier(DO_NOT_VERIFY).sslSocketFactory(sslContext.getSocketFactory(), trustManager)
            .build();
3.Android平台WebView控件跨域访问高危漏洞,同1:platforms/android/app/src/main/java/org/apache/cordova/inappbrowser/InAppBrowser.java文件 inAppWebView = new WebView(cordova.getActivity());下添加
      inAppWebView.getSettings().setAllowFileAccessFromFileURLs(false);
                 inAppWebView.getSettings().setAllowUniversalAccessFromFileURLs(false);
4.Webview绕过证书校验漏洞
platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemWebViewClient.java文件下 

if ((appInfo.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
                 // debug = true
                 handler.proceed();
               // Webview绕过证书校验漏洞,生产环境用handle.cancel();
              // handle.cancel();
    return;
}else{
    // debug = false
                handler.cancel();
                super.onReceivedSslError(view, handler, error);
}

CordovaPluginWifi.java 文件下

 import android.content.pm.ApplicationInfo;
将OkHttpClient client = new OkHttpClient.Builder().hostnameVerifier(DO_NOT_VERIFY).sslSocketFactory(sslContext.getSocketFactory(), trustManager).build();替换成:

 OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder();

            // Debug忽略HTTPS校验
            final String packageName = cordova.getActivity().getPackageName();
            final PackageManager pm = cordova.getActivity().getPackageManager();
            ApplicationInfo appInfo = pm.getApplicationInfo(packageName, PackageManager.GET_META_DATA);
            if ((appInfo.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
                clientBuilder = clientBuilder.hostnameVerifier(DO_NOT_VERIFY).sslSocketFactory(sslContext.getSocketFactory(), trustManager);
            }

            OkHttpClient client = clientBuilder.build();
 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值