Android静态安全检测 -> 代码动态加载安全检测
代码动态加载安全检测 -DexClassLoader & PathClassLoader1. API继承关系java.lang.Objectjava.lang.ClassLoaderdalvik.system.BaseDexClassLoaderdalvik.system.DexClassLoader
·
代码动态加载安全检测 - DexClassLoader & PathClassLoader
一、API
1. 继承关系
【1】java.lang.Object
【2】java.lang.ClassLoader
【3】dalvik.system.BaseDexClassLoader
【4】dalvik.system.DexClassLoader
【5】dalvik.system.PathClassLoader
2. 主要方法
【1】DexClassLoader(String dexPath, String optimizedDirectory, String librarySearchPath, ClassLoader parent)
对应的参数:
【2】PathClassLoader(String dexPath, ClassLoader parent)
【3】PathClassLoader(String dexPath, String librarySearchPath, ClassLoader parent)
【4】参考链接
https://developer.android.com/reference/dalvik/system/DexClassLoader.html
https://developer.android.com/reference/dalvik/system/PathClassLoader.html
3. 示例
【1】DexClassLoader可以加载apk,jar或dex文件
【2】PathClassLoader只能加载已经安装到Android系统中的apk文件
【3】参考链接
http://blog.csdn.net/quaful/article/details/6096951
二、触发条件
1. 定位DexClassLoader/PathClassLoader初始化方法
【1】对应特征
Ldalvik/system/DexClassLoader->init(
Ldalvik/system/PathClassLoader;->init(
2. 动态加载的文件存放在外存
【1】对应特征
/sdcard
Landroid/os/Environment;->getExternalStorageDirectory(
三、漏洞原理
【1】使用DexClassLoader或PathClassLoader动态加载dex文件、apk文件、jar文件时,如果这些文件存储在可被其他应用读写的目录中(比如sdcard),同时没有对外部加载的文件进行完整性校验,导致应用可能会被恶意代码注入并执行
【2】更多内容
http://www.droidsec.cn/外部动态加载dex安全风险浅析/
四、修复建议
【1】将所需要动态加载的文件放置在apk内部,或应用私有目录中
【2】如果应用必须要把所加载的文件放置在可被其他应用读写的目录中(比如sdcard),建议对不可信的加载源进行完整性校验和白名单处理,以保证不被恶意代码注入
更多推荐
已为社区贡献32条内容
所有评论(0)