Mengapa su binary tidak bisa disalin begitu saja (tolong jawab teknisnya)

18

Saya telah melakukan root pada beberapa perangkat Samsung dan "tujuan" yang mendasarinya adalah untuk mendapatkan subiner /system/xbindan menginstal Superuser.apk .

Pertanyaan saya adalah mengapa kita harus melompati semua simpai ini untuk me-root ponsel (instal pemulihan kustom dan flash ROM yang sudah di-root atau memanfaatkan instalasi saat ini)? Tidak bisakah seseorang mengunduh su yang telah dikompilasi, memindahkannya ke kartu SD, dan menjalankannya melalui adb? Hal yang tampaknya membuat ROM "pre-rooted" adalah bahwa ia memiliki Superuser dan binary su di jalur sistem masing-masing. Saya tidak mengerti mengapa hal itu sangat penting sehingga harus dijalankan/system/xbin .

pengguna974896
sumber

Jawaban:

24

Binary su membutuhkan eksekusi dan set bit perizinan setuid. Yang pertama diperlukan agar file dapat dieksekusi dan yang kedua adalah file itu secara otomatis berjalan dengan hak pemilik file (set id pengguna, atau setuid. Dalam hal ini pemiliknya adalah root. Baca lebih lanjut di sini ).

File pada penyimpanan eksternal tidak memiliki bit izin yang dapat dieksekusi dan setuid diatur dan tidak dapat diberikan tanpa hak root. Perhatikan juga bahwa kartu SD dipasang dengan flag 'noexec' untuk mencegah eksekusi secara umum untuk boot:

shell@android:/sdcard $ ./su
/system/bin/sh: ./su: can't execute: Permission denied
126|shell@android:/sdcard $ chmod 4755 su
Unable to chmod su: Operation not permitted
10|shell@android:/sdcard $ mount | grep /mnt/sdcard
/dev/block/mmcblk0p1 /mnt/sdcard vfat [...],noexec,[...]

Itu pada dasarnya mengapa Anda tidak bisa hanya menyalin suke kartu SD dan kemudian menjalankannya untuk memberi Anda root.

eldarerathis
sumber
Jadi itu satu-satunya hal yang mencegah rooting, fakta bahwa / sdcard tidak dapat dieksekusi dan Anda tidak dapat chmod? Setelah su berada di lokasi yang tepat di mana ia dapat dieksekusi emas Anda. Saya akan berpikir akan ada lapisan keamanan untuk mencegah seseorang dari hanya menjalankan su. Di server dan kotak debian saya tidak bisa menjalankan su sebagai pengguna biasa, saya diminta kata sandi. Saya kira asumsinya adalah bahwa jika seseorang dapat menginstal su, mereka dapat menimpa file bayangan untuk mengubah kata sandi?
user974896
3
@ user974896: Yah tidak ada tempat lain bagi pengguna non-sistem untuk membuatnya dapat dieksekusi, dan Android bahkan tidak punya passwdatau shadowfile. Anda benar-benar membutuhkan root untuk diletakkan sudi lokasi yang dapat dieksekusi, itulah sebabnya metode rooting melibatkan eksploitasi eskalasi hak istimewa atau masuk ke pemulihan kustom (di mana semua taruhan pada dasarnya tidak aktif).
eldarerathis
Iya. Ini jawabannya.
Android Quesito
3
@ user974896: selain / sdcard yang dipasang noexec, panggilan sistem setuid hanya dapat dipanggil ketika bit izin suid diatur dalam executable, dan panggilan sistem chown dan chmod hanya akan memungkinkan root untuk mengatur bit setuid file. dimiliki oleh root (secara efektif, hanya root yang dapat membuat executable yang dapat berjalan dengan hak akses root). Siapa pun dapat memanggil su, tetapi kecuali jika penelepon diizinkan melakukannya di basis data Superuser (atau di Linux tradisional, di passwd / shadow database), panggilan itu tidak akan berhasil. Hanya aplikasi Superuser (dan proses istimewa) yang dapat memodifikasi basis data Superuser.
Lie Ryan
3
@ user974896: Ini, sebagai tambahan dari sistem keamanan normal di Android di mana setiap aplikasi dalvik berjalan sebagai penggunanya sendiri, berarti bahwa aplikasi yang hanya aplikasi dalam daftar putih Superuser dapat meningkat sendiri untuk di-root tanpa diminta, semua orang akan ditolak (jika itu dalam daftar hitam), atau akan menyebabkan Pengguna Super meminta izin kepada pengguna.
Lie Ryan
5

Rooting melibatkan mengeksploitasi kelemahan tergantung pada versi android, karenanya " lewati semua simpai untuk me-root ponsel "

Ini ayam dan telur!

Untuk mengeksploitasi root, Anda memerlukan daemon adb tidak aman (yaitu kemampuan untuk melakukan remount /system) pada handset, dan untuk memiliki adb tidak aman, Anda perlu root! DAN juga, Anda memerlukan bootloader yang tidak dikunci.

Lihatlah satu exploit bernama zergRush yang ditemukan di github; fungsi yang menarik disebut di do_fault()mana upaya dilakukan untuk "memecahkan" stack-frame volddaemon dengan menghubungkan ke pipa yang dimiliki olehnya, dan menyebabkannya crash dengan menulis-over-stack penunjuk tumpukan untuk menunjuk ke disalin versi shell boomshyang kemudian dijalankan /data/local/tmp.

Setelah membaca sumbernya, Anda sekarang akan menyadari, mengapa menyalin subiner tidak cukup untuk memiliki handset "root" dan mengapa simpai harus dilompati. Dan juga, karena bit yang dapat dieksekusi pada level sistem file untuk SDcard diblokir, jadi jangan pergi ke sana - itu ada untuk alasan yang jelas! :)

t0mm13b
sumber
Terima kasih atas tautan yang akan saya baca nanti. Jadi, bahkan jika sdcard chmodded 777 dari pabrik saya masih tidak bisa menjadi root hanya dengan mengunduh dan menjalankannya?
user974896
1
benar! Tidak pergi! Tidak membuat perbedaan sedikitpun dan karena ROM yang terinstal pabrik akan chmodmemproteksi lá, Anda memerlukan root untuk mencapai hal itu - dengan izin SDcard untuk melakukannya! :)
t0mm13b
1
Nah apa yang membuat su begitu istimewa jika ada di / system / xbin? Jika Anda memasukkan shell adb (atau menjalankan aplikasi sebagai pengguna normal), Anda adalah pengguna yang tidak terprivasi. Mengapa mengeksekusi su ketika berada di / system / xbin membuat Anda melakukan root alih-alih menjalankannya di chmod 777 / sdcard kami secara teoritis?
user974896
/system/xbinadalah direktori di mana utilitas busybox masuk, dan ... di handset yang di-root, mengeluarkan ini echo $PATHakan menghasilkan / sbin: / vendor / bin: / system / sbin: / system / bin: / system / xbin <- perhatikan! Itu di jalan! Untuk mendapatkannya di sana, Anda perlu root sehingga banyak situasi ayam-dan-telur ...: D
t0mm13b
Ya, saya tahu di situlah defaultnya. Yang saya maksud adalah apa yang istimewa tentang menjalankannya di sana. Mengapa mengeksekusi ./su di / sdcard /, / data /, atau direktori yang tidak di-root yang diperlukan tidak berfungsi dengan anggapan pabrik mengirim ROM dengan direktori yang di-chmod pada 777. Apa yang saya maksudkan pada dasarnya adalah satu-satunya hal yang menghentikan seseorang untuk mengunduh. dan menjalankan ./su adalah kenyataan bahwa direktori di mana pengguna non-root dapat melakukan ini tidak dapat dieksekusi atau ada gambar yang lebih besar.
user974896