WIKI

12.10 外部加载Dex检测

(1)描述

动态加载的DEX文件存储在被其他应用任意读写的目录中(sdcard),如果没有对外部所加载的DEX文件做完整性校验,应用将会被恶意代码注入,从而执行的是恶意代码。

(2)风险等级

(3)影响范围

所有

(4)检测方法

检测类型:静态分析

关键:public DexClassLoader (String dexPath, String optimizedDirectory, String libraryPath, ClassLoader parent)

首先获取所有调用了DexClassLoader函数的路径,然后对每个路径下的代码片段进行检查,判断有没有调用Environment.getExternalStorageDirectory().toString()该方法。两个条件同时满足,则判定该路径下的代码片段有风险。

(5)修复建议

ü  将所需要动态加载的DEX/APK文件放置在APK内部或应用私有目录中

ü  使用加密网络协议进行下载加载的DEX/APK文件并将其放置在应用私有目录中

ü  对不可信的加载来源进行完整性校验

(6)样例参考

http://www.wooyun.org/bugs/wooyun-2010-09299

(7)参考资料

http://www.droidsec.cn/%E5%A4%96%E9%83%A8%E5%8A%A8%E6%80%81%E5%8A%A0%E8%BD%BDdex%E5%AE%89%E5%85%A8%E9%A3%8E%E9%99%A9%E6%B5%85%E6%9E%90/