分类 ROOT 下的文章

试着提权一些设备

最近收了个古早的安卓平板,由于配置还行,尚感觉堪用。但由于系统自带垃圾软件太多,故想办法直接ROOT了它
基于CVE-2017-8890编写ARM32移植及构造ROP Chain

设备信息

SoC:QCOM MSM8974
RAM:2GB
Flash:64GB
Android版本:4.4.4
Linux版本:3.4.0
软件版本:V13R29B(可能兼容:V11R27F/V12R28B)

截图

由于该设备仅用于娱乐用途,故未安装SuManager,在此使用给Settings添加语言作为ROOT成功之范例
F03GRoot_ChineseSettings

注意

由于富士通使用私有的LSM进行保护内核功能,请在使用exp提权之后,直接insmod LSM_Disabler.ko,如Shell无任何返回(于Dmesg会返回<!><LSM_Disabler>SUCCESS),再执行rmmod lsm_disabler即可完整解除保护
F03GRoot_CmdDemo

感谢

thinkycx提供的CVE-2017-8890Exploit代码以及实现思路

下载

Exp
LSM_Disabler

仅供调试及研发测试使用

KYOCERA/KYL22/4.2.2/103.0.2500/3.4.0/Mon Apr 7 03:30:16 JST 2014

Function NameStartNOP
kclsm_initC01D9F90C0D19FB0
kclsm_path_chrootC02EE5A8C02EE5D0
kclsm_sb_pivotrootC02EE5E0C02EE608
kclsm_sb_mountC02EE618C02EE720
kclsm_ptrace_tracemeC02EE73CC02EE780
kclsm_kernel_setup_load_infoC02EE790C02EE824
kclsm_path_mknodC02EE83CC02EE958
kclsm_sb_umountC02EE96CC02EEA80
kclsm_ptrace_access_checkC02EEAA4C02EEB14
kclsm_dentry_openC02EEB24C02EEC8C
kclsm_sysfs_initC0D19FC0C0D1A014

前言

日系机因为其畸形的运营商主导加拉帕戈斯制度,导致一般消费者要更新换代手机要付出的金钱并不是很多,很多二手手机流入日本本土中古市场以及回收商。又由于日本离我国很近,这些机子大多流入了国内。在x鱼上,因其良好的性价比,销量还算不错。但因为其差强人意的系统,很多人购买后都想root来提升易用度,可是日系机的防护一概很严格,有些人滥用方法,导致变砖。同时,也避免高谈阔论的伪大神的出现,所以作为倒腾过日系御三家各种平台的root的人类,必须得站出来解释一下!
不管怎么说,夏普京瓷富士通这三家公司都非常热衷于加强手机的安全性,这虽然对一般用户的确是好事,但是对于开发者以及爱倒腾的人来说,这便是个很严重以及很恶心的问题
直接关于日系设备的root的资料其实并不多,主要在2ch以及国内和东欧的付费维修商手上,但是可用的exploit其实有非常多(日系机更ASPL频率不算特别高),只要加以利用并且加上自己的改动,即可拿来使用
另外,在夏普京瓷富士通三家公司中,夏普的有效ROOT资料最多,同时夏普的LSM以及eMMC写保护也是御三家最复杂的,如果你可以自行ROOT掉夏普,则其他两家的ROOT也会变得简单,毕竟大同小异。

Root的基本概要

这个指南大概是给小白们看的普及文章,所以我尽可能从最基本的部分开始写起。Android设备的root,简单来说就是在/system/xbin目录下放一个叫做su的可执行文件,或者修改内核里面的init。就像在Windows中,改动C:\WINDOWS\System32一个道理。
当然你想普通的把文件复制进/system/xbin,那是不可能的,因为/system在正常情况下,是只读的。但是我们可以通过临时ROOT,来让System挂载为可写。
但是厂商的程序员也不是傻子,肯定老早想到了有人会用临时ROOT来往重要分区写数据,所以他们很早就在设备上有了应对方案。比如夏普的miyabi内核安全模块,富士通的fjsec内核安全模块,京瓷的kclsm和selinux_kc内核安全模块。更有甚者,直接在eMMC控制器做写保护,甚至加入厂商自定义的eMMC控制器解除写保护指令。
这样的话,一般的提权顶多给个#,接下来就没有任何操作可以执行了,由于不能写入System,现在的设备也都强制开启安全启动以及内核签名校验,也不能对bootloader或内核动手脚,重启后连#都会消失,这时候,你可能会感觉各种方面好像被完全给堵死了。接下来就来谈谈绕过以及各大LSM的坑。
在我个人的经验来说,御三家的ROOT难度依次为夏普(7.1之前)>富士通>京瓷(7.1之前)>京瓷(7.1之后)>夏普(7.1之后)

各大厂商的坑

SHARP
内核安全模块:
1.MIYABI保护mount/umount/pivotroot/symlink/chmod/chroot/setuid等内核函数
2.MIYABI保护sock通信部分,直接导致2017-8890类的Exploit无法使用
4.MIYABI除非编译内核时于defconfig内取消,否则无法完全关闭(即不具备SetEnforce功能)

于Android 8后移除了以上LSM

4.SELinux被硬编码为Enforcing
Kallsyms保护:
1.于运行时移除/proc/kallsyms导致无法查看符号表

于Android 6后移除了该功能

eMMC保护:
1.使用eMMC固件内模块保护了各个系统分区
2.CLEAR_WRITE_PROT标准解除写保护指令不可用,需使用CMD56(GEN_CMD)发送前置指令才可调用

使用UFS的机型目前暂无法确定,但依据内核开源,针对UFS的写保护依旧存在

FUJITSU
内核安全模块:
1.FJSEC保护Insmod/Rmmod以及对ko的白名单检查
2.FJSEC保护ptrace导致不可用
3.FJSEC保证所有系统进程安全(于编译时的白名单定义)
4.FJSEC拥有读写保护检测
5.FJSEC保护mount/umount/rmdir/mkdir/chown/chmod/rename/link/symlink/mknod/unlink/chroot等内核函数
6.FJSEC除非编译内核时于defconfig内取消,否则无法完全关闭(即不具备SetEnforce功能)
7.SELinux被硬编码为Enforcing
Bootloader:
1.OS如检测到Bootloader被解锁则开机后直接重启,无法进入系统

于F-04H DVT机测试

KYOCERA
内核安全模块:
1.SELinux合入KC改动,不具备SetEnforce功能
2.需在开机时候修改bootmode,才可Permissive

于Android 8后恢复原版SELinux

3.KCPDSM存在系统进程白名单

eMMC保护:
1.于Bootloader实现写保护重要分区,每次启动都会被复保护,但CLEAR_WRITE_PROT可用

最近闲着没事,花20元入了部日本老人机,型号是富士通F-12D,2013年的产品,是富士通触摸屏老人机らくらくスマートフォン系的一代目机,先列一下详细配置

详细配置
CPU:Qualcomm MSM7630_Surf 单核心1.4Ghz
RAM:1GB
ROM:4GB(用户分区:2.2GB)
屏幕:4.0寸 480x800
主摄像头:810万像素 AF
副摄像头:32万像素 FF
电池容量:1800mAh
安卓版本:4.0.4
Linux版本:3.0.8

Toolkit下载
下载

请注意软件版本号
F12D_About

提权到SYSTEM权限
1.打开USB调试,安装Toolkit里的system.apk(PS.记得在adb install后面加个-r,否则无法安装!)
2.桌面会出现以下图标
F12D_ApkInstalled
3.打开这个程序,你会发现我们成功的在终端模拟器里把权限提到了SYSTEM
F12D_SystemReady

植入临时root
1.发送Tookit内的mkdevsh和onload.sh到/data/local/tmp
2.chmod 777 mkdevsh和onload.sh
3.接着,在System权限的终端模拟器里执行onload.sh
F12D_Onload
4.如果上一步没有任何报错,在adb shell内执行/dev/sh
F12D_AdbRoot
成功的把权限提升到了root

永久root
现在已经临时root了,于是可以往system里写入su来永久root

# 挂载System为读写
mount -o rw,remount /system
# 复制SU到System分区
dd if=/data/local/tmp/su of=/system/xbin/su
# 修改组
chown root.root /system/xbin/su
# 修改权限
chmod 6755 /system/xbin/su
# 挂载System为只读
mount -o ro,remount /system
# 立即写入
sync;sync;sync
# 重启
reboot

收尾
1.安装SuperSU,选择一般方式更新su,稍等即可获取完整root权限
2.卸载提权程序
adb uninstall com.android.vpndialogs

完成

感谢
DoCoMo Arrows Me F-11Dで永久 rootを取る方法
HOWTO-ROOTING-AndroidのAPK署名の脆弱性を使ったroot化