1. 程序可被任意调试
原因:Manifest.xml中的android:debuggable=true,调试开关被打开。
修复:把true改成false。
并不是说false就不可以在不重打包的情况下被调试了,仍然可以通过定制boot.img 修改 prop里的ro.secure和ro.debuggable(https://bbs.pediy.com/thread-197334.htm),或者使用Xposed的HOOK插件xinstaller开启系统中所有应用的调试功能
题外话,xinstaler是如何开启系统所有应用的调试功能的呢?查看源码看看吧。
从上看出,是hook了android.os.Process.start,根据Process.java源码public static final ProcessStartResult start(final String processClass, final String niceName, int uid, int gid, int[] gids, int debugFlags, int mountExternal, int targetSdkVersion, String seInfo, String abi, String instructionSet, String appDataDir, String[] zygoteArgs)
可见xinstall的开启应用调试实际上是在进程启动的时候修改了debugFlags这个值
查考:http://gityuan.com/2016/03/26/app-process-create/
2. WebView开启debug模式(与Manifest无关)
原因:开启了webview的远程chrome调试模式WebView.setWebContentsDebuggingEnabled(true);
修复:删除该行代码。
关于如何用chrome进行webview的远程调试,请看: https://developer.chrome.com/devtools/docs/remote-debugging
如果我们调试需要开启webContentsDebuggingEnabled,Xposed能强制做到这一点。
//勾住webview所有构造器
XposedBridge.hookAllConstructors(WebView.class, new XC_MethodHook() {
@Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
// 打开webContentsDebuggingEnabled
XposedHelpers.callStaticMethod(WebView.class, "setWebContentsDebuggingEnabled", true);
}
}
复制代码
参考:https://www.jianshu.com/p/d6699cd4505e
3. 组件暴露(Activity、Service、ContentProvider、BroadcastReceiver)
原因:组件的属性exported被设置为true或是未设置exported值但IntentFilter不为空时,activity被认为是导出的,可通过设置相应的Intent唤起activity。
修复:如果组件不需要与其他App共享数据或交互,请将AndroidManifest.xml中设置该组件为exported="False"。如果组件需要与其他App共享数据或交互,请对组件进行权限控制和参数校验。使用android:protectionLevel="signature"验证调用来源。
4. intent scheme URLs攻击
原因: 在AndroidManifast.xml设置Scheme协议之后,可以通过浏览器打开对应的Activity。
修复:App对外部调用过程和传输数据进行安全检查或检验,配置category filter, 添加android.intent.category.BROWSABLE方式规避风险
参考:https://www.mbsd.jp/Whitepaper/IntentScheme.pdf
5. Webview启用访问文件数据
原因:Webview中使用setAllowFileAccess(true)
,App可通过webview访问私有目录下的文件数据
修复: 明确的用WebView.getSettings().setAllowFileAccess(false)
来禁止访问私有文件数据
6. https安全(略)
7. 开放Socket端口
原因:app绑定端口监听,建立连接后可接收外部发送的数据
修复:如无必要,只绑定本地ip127.0.0.1,并对接收的数据进行过滤验证
8. SD卡数据被第三方访问
原因:调用getExternalStorageDirectory,存储内容到SD卡可以被任意程序访问
修复:敏感信息存储到程序私有目录,并加密
9. 全局File可读写漏洞
原因:openFileOutput(String name,int mode)
方法创建内部文件时,将文件设置了全局的可读权限MODE_WORLD_READABLE、MODE_WORLD_WRITEABLE
修复:缺人是否存在敏感数据,去掉文件全局可读写属性
10. 私有文件泄露
原因:使用getSharedPreferences打开文件时第二个参数设置为MODE_WORLD_READABLE、MODE_WORLD_WRITEABLE
修复:设置为MODE_PRIVATE