Android设备ROOT检测与绕过

移动安全 2年前 (2023) admin
1,120 0 0

0x00 背景

Android系统应用的安全很大程度上是依赖于其底层Linux内核的进程隔离机制(Android沙箱)来保证的。在这个机制中,应用程序拥有自己的用户ID(UID)、组ID(GID),有着严格的限制文件系统权限。然而,在Linux系统中,root用户具有系统中所有的权限。沿用了Linux权限模型的Android系统中,root也是具备最高级别的管理权限,可以访问和修改系统中几乎所有的文件。比如处理合约手机预装流氓软件、 访问其他应用程序的数据 ,当然也可以利用漏洞 绕过加密区获取指纹等敏感数据 等等。所以,对于安全要求较高的应用程序,尽可能判断出设备是否处于root状态并使用不同的安全策略是很有必要的。

0x01 ROOT检测浅析

目前常用的基本检测方法有以下几种:

  • 检测文件是否存在
/system/bin/su
/system/xbin/su
/sbin/su
/system/su
/system/bin/.ext/.su
/system/usr/we-need-root/su-backup
/system/xbin/mu
  • 使用which命令查看是否存在su

  • 尝试执行suid命令,看能否成功执行,并且查看UID是否为root;

  • 查看/system/app/ 下是否存如下root后常用软件

Superuser
Busybox
.tmpsu
Titanium
busybox
chainfire
daemonsu
greenify
noshufou
rootcloak
substrate
supersu
superuser
titanium
xposed
(以上应用版本不同,可能对应名称不用,推荐使用grep匹配部分关键词如super等);
  • 查看Android属性
    • 查看系统/system/build.prop信息中的ro.build.tagsro.build.type是否为test-keys来判断系统是否为测试版;
    • 检查ro.debuggablero.secure 两个属性是否为true,为true的话APP所运行环境很可能是Root环境;

部分国产手机的定制系统,本身就留有/system/bin/su,针对以上的判定需要加上下面这一条:

  • 若su文件存在,可以查看文件的可执行权限,已root的文件权限为: -rwxrwxrwx,其中文件所有者具有可执行权限;

  • 检查一下install-recovery.sh有没有去起一些看起来很奇怪的进程;

  • 查看system分区有没有具有SUID的文件

  • 查看特定目录是否可写:

    /data
    /
    /system
    /system/bin
    /system/sbin
    /system/xbin
    /vendor/bin
    /sys
    /sbin
    /etc
    /proc
    /dev
  • /data是否可读。包含着所有已安装APP的数据文件,默认不可读取;

  • 主动申请root权限;

  • 检查市面主流的模拟器;

  • 检测frida、xposed等Hook框架的特征;

  • Cyanogenmod ROM已经把superuser包含在了com.android.settings中,这就需要列出settings包中的activities来检测

除此之外,可以从作弊、风控等其他维度作为补充信息,比如:

  • 一些设备常规信息,比如电量状态,USB状态,屏幕亮度,地理位置,WI-FI,SIM卡信息,IP、MAC等
  • Log、SDK、设备指纹、用户画像连坐等

0x02 ROOT检测绕过

ROOT方式分为两种:

  • 不完全 root
  • 完全 root

目前获取Android root 权限常用方法是通过各种系统漏洞,替换或添加SU程序到设备,获取Root权限,而在获取root权限以后,会装一个程序用以提醒用户是否给予程序最高权限,可以一定程度上防止恶意软件,通常会使用Superuser或者 SuperSU ,这种方法通常叫做不完全Root

完全Root是指,替换设备原有的ROM,以实现取消secure设置。

如何绕过Root检测机制呢?

  1. 对应用下手,干预应用的Root检测行为;
  2. 对系统下手,隐藏系统自身Root相关的特征;

我们可以借助jadx等逆向工具对应用源码进行分析,Hook相关的实现函数绕过;也可以获取AOSP源码,通过定制ROM来隐藏Root的特征。

  • Hook:目前主流的Hook框架有fridaxposed,可以用frida的可见框架RMS进行注入。相对来说,通过Hook的方式来绕过Root检测机制操作比较简单、方便,但Hook本身会受到很多的约束。一方面,受限于应用自身的加固手段,可能难以定位ROOT检测的实现函数;另一方面,Hook框架自身也会具备一些易于被检测到的特征。
  • 定制ROM:定制ROM的手段有很多种,可以通过对官方包进行解包、修改后重打包。推荐的方式是获取AOSP源码,自己编译后制作ROM包。这样可以实现更高程度的定制化,与基于现有包修改的方式相比该方式的操作空间更大,但是同样的编译成本、修改难度也更大。
  • 热修复:热修复就是日常工作中常听到的打补丁。热修复实现的本质就是将修复bug后的代码生成的dex放置在该数组的头部。

0x03 结论

APP除了添加检测设备是否root的功能外,还需增加加强代码混才行。

总的来说,目前主流的Root检测就是对Root之后的手机独有的一些特征进行验证,如特征文件是否存在、是否存在越权、关键属性是否被修改等等

在APP中做root检测的效果很有限。对于一个已经root的设备,对方具有绝对高的权限,可能会将supersu改名,然后修改su源码调用改名后的supersu,甚至于将su改名,再修改其他依赖的代码,而我们或许连最基本的设备信息都无法获取。在制定安全策略及功能开发的时候,应把设备全部当做root设备来考虑,从最开始就做好安全防护。

Android设备ROOT检测与绕过


原文始发于微信公众号(小宝的安全学习笔记):Android设备ROOT检测与绕过

版权声明:admin 发表于 2023年3月2日 下午7:01。
转载请注明:Android设备ROOT检测与绕过 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...