`
aineice
  • 浏览: 6884 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

Android系统的Root权限获取与检测

阅读更多
  一、Android安全机制介绍
  Android安全架构是基于Linux多用户机制的访问控制。应用程序在默认的情况下不可以执行其他应用程序,包括读或写用户的私有数据(如联系人数据或email数据),读或写另一个应用程序的文件。
  一个应用程序的进程就是一个安全的沙盒。它不能干扰其它应用程序,除非显式地声明了“permissions”,以便它能够获取基本沙盒所不具备的额外的能力。它请求的这些权限“permissions”可以被各种各样的操作处理,如自动允许该权限或者通过用户提示或者证书来禁止该权限。应用程序需要的那些“permissions”是静态的在程序中声明,所以他们会在程序安装时被知晓,并不会再改变。
  每一个Android应用程序都会在安装时就分配一个独有的Linux用户ID,这就为它建立了一个沙盒,使其不能与其他应用程序进行接触。这个用户ID会在安装时分配给它,并在该设备上一直保持同一个数值。所有的Android应用程序必须用证书进行签名认证,而这个证书的私钥是由开发者保有的。该证书可以用以识别应用程序的作者。Android应用程序允许而且一般也都是使用self-signed证书。证书是用于在应用程序之间建立信任关系,而不是用于控制程序是否可以安装。签名影响安全性的最重要的方式是通过决定谁可以进入基于签名的permisssions,以及谁可以share 用户IDs。通过这样的机制,每个应用都是相互隔离的,实现了一定的安全,但去除root用户。
  二、Android Root原理及方法
  目前获取Android root 权限常用方法是通过各种系统漏洞,替换或添加SU程序到设备,获取Root权限,而在获取root权限以后,会装一个程序用以提醒用户是否给予程序最高权限,可以一定程度上防止恶意软件,通常会使用Superuser或者 SuperSU ,这种方法通常叫做“不完全Root”。而 “完全ROOT”是指,替换设备原有的ROM,以实现取消secure设置。通过ADB可以直接将SU程序放入到系统。
  首先分析Android自带su源代码,由于源码较多,下面摘录最重要几行。
  int main(int argc, char **argv){
  /* Until we have something better, only root and the shell can use su. */
  myuid = getuid();
  if (myuid != AID_ROOT && myuid != AID_SHELL) {fprintf(stderr,"su: uid %d not allowed to su\n", myuid);return 1;}
  if (execvp(argv[2], exec_args) < 0) {}
  /* Default exec shell. */
  execlp("/system/bin/sh", "sh", NULL);}
  可以看出只允许getuid()为AID_ROOT 和AID_SHELL 的进程可以继续执行,否则直接返回,这就决定了只有当前用户为root 和shell 才能运行su。接下来执行execvp(argv[2], exec_args),su 并没有通过fork 去创建一个新的进程,而是直接把自己启动一个新的进程,此时原先执行的程序实际上由su 来创建的。通常情况下,执行su 并不会带参数,于是它会执行execlp("/system/bin/sh", "sh", NULL);
  通过命令行查看此程序权限 ls –l /bin/su
  -rwsr-xr-x 1 root root 36864 2010-01-27 01:09 /bin/su
  由上可以看到,su 的所有者和所有组都是root,并且其设置了SUID 和SGID。因此下面介绍Linux中实际用户ID 和有效用户ID概念:
  实际用户ID 和实际用户组ID:标识我是谁。也就是登录用户的uid 和gid。有效用户ID 和有效用户组ID:进程用来决定我们对资源的访问权限。一般情况下,有效用户ID 等于实际用户ID,有效用户组ID 等于实际用户组 ID。当设置-用户-ID
  (SUID)位设置,则有效用户ID 等于文件的所有者的uid,而不是实际用户ID;同样,如果设置了设置-用户组 -ID(SGID)位,则有效用户组ID 等于文件所有者的gid,而不是实际用户组ID。由此可以得出,当一个其他用户或者用户组的进程来执行su 的时候,正常情况下会因为用户ID 不是root 而被拒绝。但是,如果它能够跳过检查UID 这一步,即能够使自己的进程获得和su 相同的root 的权限。
  这样就可以看出Android系统的破解的根本原理就是替换掉系统中的su 程序,因为系统中的默认su 程序需要验证实际用户权限(只有root 和 shell 用户才有权运行系统默认的su 程序,其他用户运行都会返回错误)。而破解后的su 将不检查实际用户权限,这样普通的用户也将可以运行su 程序,也可以通过su 程序将自己的权限提升。
  三、检测Android Root原理
  Root过程分两部分,首先在重要image的头上添加了标识字串,可以检机器上这些字串是否存在,如果不存在,则怀疑这些image已经被重新烧过;另外对于不烧写第三ROM的root,可以开机添rootcheck service来检测是否存在“su”可执行文件,如果检测到有,则该进程会写字串到pro_info 分区中,工具应用可以检测在该区域是否有此字串来判读手机是否被root。考虑的pro_info 分区中信息相对敏感,对pro_info 中偏移了2M 来记录此信息,尽量减少对pro_info 信息的影响。
  Image 头标识信息:
  Image 名称, 位置(相对image 头的偏移) 字串 sizeUboot 0x100 109f10eed3f021e3 16BBoot image 0x100 109f10eed3f021e3 16BSystem iamge 0x100 109f10eed3f021e3 16B“su”标识信息:
  识长16B,为109f10eed3f021e3。因为通常user 版本没su 这个文件,如果有说明是被破解时拷贝进入。代码可放置于:system/extras/xiaoyan/rootdetect.c编译时会编译成Rootdetect,并加入到init.rc 中,在Android系统启动时执行,设备厂商可以通过特定工具读取Pro_info分区的标识来判读设备是否被Root。
  手机应用程序可以到指定目录(system/bin/, system/xbin/ ,sbin/)找su 文件,不过,基于安全考虑,正式版这几个目录对用户不可见。因此需要提供一种方式,让用户更直观获取系统是否被root的信息。将原先的Rootdetect服务进程进行延伸,一旦确认su程序异常,将被root的信息写入到/data/rootedflag,供启动后应用读取。这里注意到文件权限是644,就是-rw-r--r--, 防止被其他用户篡改里面的内容。
  四、结论
  通过对Android安全机制和常见Root方法的研究,结合Android存在的安全问题,提出了一种适用于Android平台的Root检测的机制。同时,设备厂商也可以采用这种方法,检测已售设备是否被破解。应用开发者也可以借助检测工具爱内测(http://www.ineice.com/)对APP进行安全检测,也确保手机应用程序安全。
分享到:
评论

相关推荐

    Android系统Root权限获取与检测.pdf

    绍了Android系统Root权限的获取方法以及检测Root状态的相关技术。Android系统是基于Linux内核构建的,其安全模型依赖于Linux的沙箱机制(Sandbox),每个应用程序都在自己的进程中运行,具有特定的用户ID(UID)和组...

    Android系统Root权限获取与检测

    够获取基本沙盒所不具备的额外的能力。它请求的这些权限 “permissions”可以被各种各样的操作处理,如自动允许该权限 或者通过用户提示或者证书来禁止该权限。应用程序需要的那 些“permissions”是静态的在程序中...

    Android应用程序请求root权限代码

    - **如何检测设备是否已被root**:可以通过检查某些root标志文件(如`/system/app/Superuser.apk`)是否存在来判断设备是否已获取root权限。 - **root权限的风险**:虽然root权限可以带来更多的自由度和功能,但同时...

    android手机root检测

    标题提到的"android手机root检测"是指检查Android设备是否已经获取了root权限的过程。这个过程对于应用开发者和安全专家来说尤其重要,因为他们需要确保其应用不会在被root的设备上运行,因为这可能会导致数据泄露或...

    android 2.3.7 root权限合集

    在Android 2.3.7版本中,获取root权限可以让用户对设备进行更深度的定制,比如安装需要超级用户权限的应用、修改系统文件、优化性能或者删除预装应用等。以下将详细介绍如何通过给定的资源来获取root权限。 首先,...

    android root 权限测试app

    在Android系统中,"root权限"是指获得手机操作系统最底层的访问权限,允许用户执行对系统文件和设置的更改,通常这些更改在普通用户模式下是不允许的。这个"android root 权限测试app"可能是为了帮助开发者或者高级...

    rk-android9.0-root补丁(rootservice方式).rar

    【标题】"rk-android9.0-root补丁(rootservice方式).rar"指的是针对Rockchip处理器平台的Android 9.0系统进行root权限获取的补丁包,采用了一种名为"RootService"的方法。RootService是一种在Android系统中实现...

    测试root权限

    Root权限,简单来说,就是获取到Android操作系统的超级用户权限,允许用户访问和修改系统核心文件,执行对系统有深远影响的操作。这在进行高级设置、优化性能、安装特定应用或者修复某些问题时非常有用。 在Android...

    获取root:anroid 获取root权限

    在Android系统中,"获取root权限"是指获得设备的最高管理员权限,这允许用户对操作系统进行深度修改,包括但不限于删除预装应用、优化系统性能、安装自定义内核以及访问通常受限制的系统文件。然而,这也伴随着安全...

    Android获取ROOT权限的实例代码

    总之,获取和检测Android设备的ROOT权限是一个涉及多个层面的过程,包括检查系统文件、执行shell命令、处理异常和遵循安全规范。在实际应用中,开发者应该谨慎评估是否真的需要ROOT权限,以及如何在安全和功能之间...

    SuperOneClick android Root 权限绿色工具

    在Android操作系统中,Root权限是指获得系统最高级别的管理权限,类似于Windows系统中的管理员权限。这种权限允许用户访问并修改系统级别的文件和设置,包括但不限于系统核心、服务以及预装应用。SuperOneClick是一...

    安卓手机root权限文件

    总的来说,安卓手机root权限文件涉及到的是Android系统的底层操作,它可以为用户带来更自由的设备定制体验,但也伴随着潜在的风险。理解并谨慎使用root权限,才能真正发挥其优势,避免可能的问题。

    全志A33-开放ROOT权限

    在Android系统中,ROOT权限是指获取到设备的超级用户权限,允许用户对系统进行深度定制和优化,比如安装需要超级用户权限的应用、删除预装软件或者修改系统设置。在Android 4.4系统上获取全志A33的ROOT权限是一项...

    I9305 Root权限获取

    **I9305 Root权限获取** 在Android操作系统中,root权限是指用户获得对设备的最高控制权,能够访问和修改系统级别的文件和设置。对于三星Galaxy S3(型号I9305)的用户来说,获取root权限意味着可以自定义手机功能...

    Android模拟器root工具

    7. **验证root权限**:安装一个root检测应用,如"Root Checker",检查模拟器是否已获得root权限。如果显示已root,那么恭喜你,你的模拟器现在拥有了root权限。 通过以上步骤,你可以有效地对Android模拟器进行root...

    Android 4.0 root 工具

    对于Android 4.0(冰淇淋三明治)系统的设备,root权限的获取对于开发者和高级用户来说至关重要,因为它允许他们深入系统层面进行定制和优化。以下是对Android 4.0 root工具的详细解释: 1. **Root的意义** - **...

    最强安卓5.1.1--root神器MagiskManager.zip最强安卓5.1.1--root神器MagiskManager

    【描述】中的“最强安卓5.1.1--root神器MagiskManager”进一步强调了MagiskManager在为Android 5.1.1设备获取Root权限方面的强大功能。Root神器通常指的是那些在Root过程中表现优秀,且相对安全的工具,...

    一键获取ROOT权限 Gingerbreak

    【一键获取ROOT权限 Gingerbread】是一款专为Android设备设计的工具,主要用于帮助用户获取设备的ROOT权限。在Android系统中,ROOT权限相当于操作系统级别的管理员权限,允许用户对系统进行深度定制和修改,包括安装...

    华为c8650获取root权限升级包

    - **验证Root状态**:安装完成后,使用Root检测应用验证是否成功获取Root权限。 5. **注意事项** - **安全风险**:Root后,手机更易受到病毒和恶意软件的攻击,务必安装可靠的安全软件。 - **系统稳定性**:Root...

    rootbeer,简单易用的根检查android库和示例应用程序.zip

    在Android开发中,root权限是一个敏感话题,因为它们允许用户获取对设备底层系统的完全访问权,这可能导致安全性和隐私问题。`rootbeer`库的存在,使得开发者能够快速有效地识别那些潜在的安全风险,从而为用户提供...

Global site tag (gtag.js) - Google Analytics