TL; DR: Ini adalah pertanyaan tentang langkah terakhir, dalam proses rooting portabel, yang berorientasi pada pengembang, yang bekerja di semua mesin Android. Itu bukan berdasarkan eksploitasi apa pun - itu adalah sesuatu yang secara hukum dan moral kita boleh lakukan, sebagai pengembang, ke mesin kita sendiri. Jika saya mendapatkan jawaban dan berhasil melakukan chroot di dalam Debian saya, saya akan membuat posting blog singkat yang merinci semua langkah dari proses ini untuk semua sesama pengembang yang ingin mengakses root ke tablet mereka - dan tidak ingin mempercayai asal yang meragukan. "one-click-root" yang melakukan yang Tuhan tahu-apa pada mesin mereka (anggota botnet?) ... Satu-satunya ketergantungan adalah sumber kernel mesin (yang secara hukum wajib diberikan oleh produsen) dan gambar partisi boot (boot.img
), yang merupakan 99% dari waktu di dalam pembaruan Over-the-air yang disediakan pabrikan, atau dapat diunduh secara individu sebagai gambar yang dapat di-flash sendiri.
Jadi, seminggu berlalu di mana saya menghabiskan semua waktu luang saya di tablet Android baru saya.
Dan saya hampir sepenuhnya berhasil - dalam menciptakan proses portabel, yang berorientasi pada pengembang, untuk mencapai root di tablet Android 5.0.2 saya.
Tapi ada satu hal yang hilang - Saya tidak bisa melakukan chroot (yang saya perlukan untuk menjalankan debootstrap
Debian -ed saya !)
Apa yang saya lakukan sejauh ini
- Pertama, saya melakukan patch kecil pada sumber-sumber kernel tablet saya (yang disediakan oleh produsen), dan kemudian mengkompilasi kernel saya sendiri - di mana saya menonaktifkan pemeriksaan untuk mengubah mode penegakan SELINUX . Secara khusus...
Dalam security/selinux/selinuxfs.c
:
...
if (new_value != selinux_enforcing) {
/* Commented out by ttsiodras.
length = task_has_security(current, SECURITY__SETENFORCE);
if (length)
goto out;
*/
audit_log(current->audit_context, GFP_KERNEL, AUDIT_MAC_STATUS,
"enforcing=%d old_enforcing=%d auid=%u ses=%u",
new_value, selinux_enforcing,
Saya kemudian mengubah gambar initrd saya
/default.prop
untuk mengandung:ro.secure=0
danro.debuggable=1
Karena pabrikan saya
initrd.img
melewatkannya, saya juga mengkompilasisu.c
dari https://android.googlesource.com/platform/system/extras/+/master/su/ dan menempatkan biner yang dihasilkan di bawah/sbin/su
, memastikannya disetel ke root SUID (chmod 04755 /sbin/su
) .
Setelah itu, saya mengemas kernel baru dan initrd baru, seperti yang saya jelaskan di Episode 2 dari posting saya sebelumnya - dan boot dari gambar saya sendiri:
adb reboot boot-loader ; fastboot boot myboot.img
Jadi, apakah Anda root?
Ya, awalnya tampaknya berhasil:
$ adb shell
shell@K01E_2:/ $ id
uid=2000(shell) gid=2000(shell) groups=1004(input),1007(log),1011(adb),
1015(sdcard_rw),1028(sdcard_r),3001(net_bt_admin),3002(net_bt),
3003(inet),3006(net_bw_stats)
context=u:r:shell:s0
shell@K01E_2:/ $ ls -l /sbin/su /sbin/_su
-rwxr-xr-x root root 131 2015-10-03 10:44 su
-rwsr-xr-x root root 9420 2015-10-03 01:31 _su
(the _su is the binary I compiled, set to SUID root, and "su" is
a script I wrote to tell "su" to add me to all these groups...)
shell@K01E_2:/ $ cat /sbin/su
#!/system/bin/sh
export PATH=/system/bin:$PATH
exec /sbin/_su 0,0,1000,1028,2000,2001,1004,1007,1011,1015,\
1028,3001,3002,3003,3006
Dan sekarang saya telah mencapai root:
shell@K01E_2:/ $ su
root@K01E_2:/ # id
uid=0(root) gid=0(root)
groups=1000(system),1004(input),1007(log),1011(adb),
1015(sdcard_rw),1028(sdcard_r),1028(sdcard_r),2000(shell),2001(cache),
3001(net_bt_admin),3002(net_bt),3003(inet),3006(net_bw_stats)
context=u:r:shell:s0
Saya 100% yakin saya root - bukan hanya karena id
mengatakannya, tetapi karena saya juga bisa melakukan hal-hal yang proses normal pasti tidak bisa:
root@K01E_2:/ # ls -l /dev/block/platform/msm_sdcc.1/by-name/boot
lrwxrwxrwx root root 2015-10-03 10:47 boot -> /dev/block/mmcblk0p16
root@K01E_2:/ # dd if=/dev/block/mmcblk0p16 of=/dev/null bs=1M
16+0 records in
16+0 records out
16777216 bytes transferred in 0.569 secs (29485441 bytes/sec)
Lihatlah, akhirnya aku bisa membaca partisi mentah dari tabletku!
Dan SELinux memang dalam mode "turun, anjing":
root@K01E_2:/ # getenforce
Permissive
Tapi ... masih ada hal-hal yang tidak bisa saya lakukan:
root@K01E_2:/ # mkdir /my_mnt
root@K01E_2:/ # mount -t ext4 /dev/block/mmcblk1p2 /my_mnt
mount: Operation not permitted
Yaitu, saya tidak bisa memasang partisi ke-2 EXT4-fs saya yang diformat dari kartu SD eksternal saya.
Saya juga tidak bisa melakukan chroot ke debootstrap
Debian saya yang cantik :
root@K01E_2:/ # chroot /data/debian/ /bin/bash
chroot() fail
Operation not permitted
Apakah karena SELinux?
Saya tidak tahu - Saya baru (sangat baru - berusia satu minggu) untuk SELinux. Saya berpikir bahwa ketika Anda menidurkannya ( getenforce
melaporkan "Permisif") itu tidak lagi mengganggu ...
Ternyata saya salah. Turun lubang kelinci kita pergi lagi ...
Mungkinkah karena konteks proses saya?
Ingat yang id
dikembalikan ... "uid = 0 (root) gid = 0 (root) ... konteks = u: r: shell: s0 "
Bisakah saya mengubah konteks itu? Menjadi root dan semuanya, bisakah saya menjauh shell
? Dan jika demikian, pindah ke apa?
Jawaban untuk pertanyaan pertama adalah runcon
:
shell@K01E_2:/ $ runcon u:r:debuggerd:s0 /sbin/su
root@K01E_2:/ # id
uid=0(root) gid=0(root)... context=u:r:debuggerd:s0
Baik. Tetapi konteks apa yang akan memungkinkan saya untuk mount
dan chroot
?
Membaca lebih banyak tentang SELinux, kembali ke mesin utama saya, saya mem-parsing /sepolicy
file pada root initrd.img
:
linuxbox$ $ sesearch -A sepolicy | grep chroot
allow init_shell init_shell : capability { chown sys_chroot ...
allow init init : capability { chown dac_read_search sys_chroot ...
allow kernel kernel : capability { chown dac_override sys_chroot ...
allow asus-dbug-d asus-dbug-d : capability { chown sys_chroot ...
...
OKE, sejumlah kemungkinan! Terutama yang kernel
tampaknya menjanjikan:
shell@K01E_2:/ $ runcon u:r:kernel:s0 /sbin/su
root@K01E_2:/ # id
uid=0(root) gid=0(root)... context=u:r:kernel:s0
root@K01E_2:/ # chroot /data/debian/ /bin/bash
chroot() fail
Operation not permitted
Menisik.
Siapa sih yang menghalangi saya dari chroot
ing?
Semua saran sangat disambut ...
sumber
fastboot boot my.img
. Saya percaya komunitas rooting menyebut ini rooting tertambat :-) Dan tentu saja saya bisa mem-flashnya - jika saya mau.