文档章节

android绕过permission验证及fork进程权限提升

stormm
 stormm
发布于 2015/10/12 10:57
字数 532
阅读 2026
收藏 1

脱壳时写patch补丁时Native代码并没有太高的权限,以至于如文件IO、网络IO等基本的C函数都无法使用,提示权限不足。在网上搜索了资料大致进行以下几种尝试:

1、APK在安装时会在/data/system/packages.xml记录当前app需要申请的权限,如下:

 <package name="com.example.unpacker" codePath="/data/app/com.example.unpacker-1.apk" nativeLibraryPath="/data/app-lib/com.example.unpacker-1" flags="572998" ft="1504bc58f90" it="1504bad7c65" ut="1504bc5913e" version="1" userId="10078">
        <sigs count="1">
            <cert index="9" key="xxx" />
        </sigs>
        <perms>
            <item name="android.permission.ACCESS_WIFI_STATE" />
            <item name="android.permission.CHANGE_NETWORK_STATE" />
            <item name="android.permission.ACCESS_NETWORK_STATE" />
            <item name="android.permission.INTERNET" />
            <item name="android.permission.CHANGE_WIFI_STATE" />
        </perms>
        <signing-keyset identifier="1" />
    </package>

尝试将所有权限添加到此packages.xml里没有作用,测试失败,具体原因以后再看

2、直接绕过permission验证修改framework代码,相关参考http://www.cnblogs.com/GnagWang/archive/2011/03/21/1990507.html

ActivityManagerService.java (frameworks\base\services\java\com\android\server\am)中将checkPermission、checkCallingPermission、enforceCallingPermission函数返回值修改为PERMISSION_GRANTED,修改后编译framework.jar、framework2.jar、services.jar然后刷入机器测试发现此修改容易造成系统起不来,不稳定,具体原因以后再看;

3、修改zygote fork后的进程的权限,zygote fork进程最终会调用forkAndSpecializeCommon函数,在forkAndSpecializeCommon中会判断是不是启动systemserver进程还是其它app进程,其它进程的话permittedCapabilities和effectiveCapabilities将设置成0

文件名:/dalvik/vm/native/dalvik_system_Zygote.cpp

if (isSystemServer) {
        /*
         * Don't use GET_ARG_LONG here for now.  gcc is generating code
         * that uses register d8 as a temporary, and that's coming out
         * scrambled in the child process.  b/3138621
         */
        //permittedCapabilities = GET_ARG_LONG(args, 5);
        //effectiveCapabilities = GET_ARG_LONG(args, 7);
        permittedCapabilities = args[5] | (int64_t) args[6] << 32;
        effectiveCapabilities = args[7] | (int64_t) args[8] << 32;
} else {
        mountMode = args[5];
        permittedCapabilities = effectiveCapabilities = 0;   //其它app进程则允许权限和有将权限清o
        //将上一行修改为 permittedCapabilities = effectiveCapabilities = 125910048;
        StringObject* seInfoObj = (StringObject*)args[6];
        if (seInfoObj) {
            seInfo = dvmCreateCstrFromString(seInfoObj);
            if (!seInfo) {
                ALOGE("seInfo dvmCreateCstrFromString failed");
                dvmAbort();
            }
        }
        StringObject* niceNameObj = (StringObject*)args[7];
        if (niceNameObj) {
            niceName = dvmCreateCstrFromString(niceNameObj);
            if (!niceName) {
                ALOGE("niceName dvmCreateCstrFromString failed");
                dvmAbort();
            }
        }
    }

因此直接强制将app启动进程时的允许权限和有效权限全设置成固定的就可以实现权限绕过:

编译Libdvm.so拷贝到手机发现现在进程权限已经和system_server权限一样了。


© 著作权归作者所有

stormm
粉丝 32
博文 22
码字总数 14557
作品 0
昌平
运维
私信 提问
从NDK在非Root手机上的调试原理探讨Android的安全机制

最近都在忙着研究Android的安全攻防技术,好长一段时间没有写博客了,准备回归老本行中--Read the funcking android source code。这两天在看NDK文档的时候,看到一句话“Native debugging ...

中成才
2015/08/27
178
0
Android中的组件安全漏洞介绍和检测

第一部分 activity组件安全 首先我们介绍下我们常见的Android的activity组件: Activity是Android四大组件之一,它用于展示界面。Activity是一个应用程序组件,提供一个屏幕,用户可以用来交...

老鹰a
2018/06/29
0
0
Android开发_android权限

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhangty0223/article/details/9389879 访问登记属性 android.permission.ACCESSCHECKINPROPERTIES ,读取或写...

张腾元_Ternence
2013/07/20
0
0
【转】android 安全机制

1 Android 安全机制概述 Android 是一个权限分离的系统 。 这是利用 Linux 已有的权限管理机制,通过为每一个 Application 分配不同的 uid 和 gid , 从而使得不同的 Application 之间的私有...

深蓝苹果
2014/07/01
47
0
Android5.1.1源码 - zygote fork出的子进程如何权限降级

前言 如果不知道zygote是什么,或者好奇zygote如何启动,可以去看老罗的文章: Android系统进程Zygote启动过程的源代码分析 所有Android应用进程都是zygote fork出来的,新fork出来的应用进程...

阿里聚安全
2016/05/10
462
0

没有更多内容

加载失败,请刷新页面

加载更多

webGL和three.js的关系

本文转载于:专业的前端网站➤webGL和three.js的关系 如今浏览器的功能越来越强大,而且这些功能可能通过JavaScript直接调用。你可以用HTML5标签轻松地添加音频和视频,而且可以在HTML5画布上...

前端老手
12分钟前
3
0
Spring如何实现AOP,请不要再说cglib了!

1. 从注解入手找到对应核心类 最近工作中我都是基于注解实现AOP功能,常用的开启AOP的注解是@EnableAspectJAutoProxy,我们就从它入手。 上面的动图的流程的步骤就是: @EnableAspectJAutoPr...

温安适
14分钟前
13
0
Mybatis之ParameterHandler

mybatis-3.4.6.release. ParementerHandler是个接口,如下List-1 List-1 public interface ParameterHandler { Object getParameterObject(); void setParameters(PreparedStateme......

克虏伯
29分钟前
3
0
Spark sql的批处理物理计划BatchScanExec

BatchScanExec是batch类的物理计划,对应的逻辑计划是DataSourceV2Relation,是Datasource。 它的入参是Scan类,Scan类有两个重要方法,一个获取分区列表信息;另一个方法获取读取器工厂。 ...

守望者之父
33分钟前
10
0
for循环与while循环

循环结构三要素 a. 初始值 b. 循环条件 c. 改变条件 for循环 声明格式 for(表达式1;表达式2;表达式3){ 循环体语句 } 表达式1:用来循环的变量初始值。(开始值) 表达式2:用来判断循环的条件。...

Lenat
38分钟前
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部