Android Class Loading Hijacking
Android 类加载劫持
描述
Android Class Loading Hijacking 是一种安全漏洞,攻击者可以通过利用 Android 加载类的方式,在 Android 设备上执行恶意代码。这通常是通过欺骗 Android 系统加载恶意类而非预期类来实现的。攻击者随后可以利用此恶意类获取对敏感数据的未授权访问权限、操纵设备功能,甚至完全控制设备。此漏洞极其危险,因为可以在用户不知情的情况下被利用,并且会影响任何未对其类加载过程进行妥善安全处理的应用程序。
public final class DexClassLoaderCall {
private static final String TAG = DexClassLoaderCall.class.toString();
@Override
public String getDescription() {
return "Use of dex class load";
}
@Override
public void run() throws Exception {
/*
Dex class loading from external storage
*/
String apkFile = Environment.getExternalStorageDirectory().getAbsolutePath() + "/app.apk";
DexClassLoader classLoader1 = new DexClassLoader(
apkFile,
apkFile,
apkFile,
ClassLoader.getSystemClassLoader());
classLoader1.loadClass("a.b.c");
/*
Dex class loading from hard-coded sdcard path
*/
DexClassLoader classLoader2 = new DexClassLoader(
"/sdcard/test.apk",
"/sdcard/test.apk",
"/sdcard/test.apk",
ClassLoader.getSystemClassLoader());
classLoader2.loadClass("a.b.c");
}
}
建议
为了降低 Android Class Loading Hijacking 的风险,开发人员应当:
- 除非绝对必要,否则避免使用动态类加载方法。
- 确保加载的类来自受信任的来源。
- 确保加载的类不可被其他应用程序写入。
public final class DexClassLoaderCall {
private static final String TAG = DexClassLoaderCall.class.toString();
@Override
public String getDescription() {
return "Use of dex class load";
}
@Override
public void run() throws Exception {
Context context = getContext();
File apkFile = new File(context.getFilesDir(), "app.apk");
DexClassLoader classLoader1 = new DexClassLoader(
apkFile.getAbsolutePath(),
context.getCacheDir().getAbsolutePath(),
null,
context.getClassLoader());
classLoader1.loadClass("a.b.c");
DexClassLoader classLoader2 = new DexClassLoader(
context.getPackageCodePath(),
context.getCacheDir().getAbsolutePath(),
null,
context.getClassLoader());
classLoader2.loadClass("a.b.c");
}
}
链接
标准
- OWASP_MASVS_L2:
- MSTG_PLATFORM_9
- PCI_STANDARDS:
- REQ_2_2
- REQ_6_2
- REQ_6_3
- REQ_11_3
- SOC2_CONTROLS:
- CC_2_1
- CC_4_1
- CC_7_1
- CC_7_2
- CC_7_4
- CC_7_5
- HIPAA_CONTROLS:
- SECURITY251
- SECURITY212
- SECURITY213