Apakah ada perangkat Google yang mendukung kemampuan di kernel default mereka?

14

Jika saya melakukan root tanpa sistem (tidak ada modifikasi yang dilakukan untuk /systemmempartisi) perangkat Nexus, apakah saya dapat mengatur kemampuan pada executable tanpa mengubah biner kernel yang asli?

Saya sering ingin mengatur file tanpa batasan dari terminal saya (harus CAP_DAC_READ_SEARCH) . Namun, saya juga ingin tidak menggunakan superuser.
Hal-hal yang diperlukan adalah alat untuk mengatur tutup di sepanjang dukungan kernel untuk menggunakannya (tidak bergantung pada hal-hal ruang pengguna lainnya) .

Masalahnya adalah, saya tidak memiliki perangkat seperti itu. Jadi saya tidak tahu apakah itu akan berhasil Nexus 5X Nexus 6P Nexus 9 Pixel C.

pengguna2284570
sumber
2
Saya juga tidak dapat menemukan emulator nexus…
user2284570
Saya ragu ... Karena Android menggunakan libc Bionic dan bukan pustaka GNU libc (glibc) standar, itu bahkan tidak dekat dengan POSIX. Anda mungkin dapat mengkompilasi kernel Anda sendiri dengan libc yang berbeda seperti CrystaX NDK, bukan Bionic, tapi saya tidak tahu apakah fitur-fitur itu juga ada di dalamnya.
acejavelin
@acejavelin: bagian userland hanya diperlukan untuk mengatur atribut diperluas yang berisi kemampuan. Yang lainnya adalah sisi kernel. Saya hanya memperhatikan /system/bin/pingperintah tidak setuid pada perangkat samsung asli saya, menyarankan CAP_NET_RAW. Namun, saya tidak akan me-root perangkat yang sebenarnya dan saya tidak tahu alat mana yang dapat saya gunakan untuk melihat informasi yang relevan, jadi saya tidak bisa memeriksa.
user2284570
Mengapa Anda tidak melakukan root pada perangkat Nexus? Ini dimaksudkan untuk itu dan tidak membatalkan garansi Anda. Sangat mudah untuk mengembalikan perangkat Nexus apa pun ke keadaan default, tidak berakar, dan terkunci, perangkat ini pada dasarnya tidak dapat dibrick.
acejavelin
@acejavelin: Saya tidak memiliki perangkat nexus ... Tujuan saya adalah penelitian keamanan dan hanya hadiah Google untuk perangkat itu sendiri. Jadi saya perlu tahu apakah kernel dari salah satu perangkat dalam dukungan pertanyaan saya menggunakan kapabilitas xattr. Apa yang saya lihat di tab galaksi saya mungkin hanya terkait samsung. Jika saya tidak melibatkan rooting dalam pertanyaan saya, mungkin ditutup sebagai tidak jelas .
user2284570

Jawaban:

1

Meskipun pertanyaannya sudah lama, pertanyaan itu terus muncul di atas pertanyaan (tag saya) yang Belum Dijawab . Jadi saya pikir saya harus menjawab ini :)

DUKUNGAN AOSP UNTUK KAPABILITAS:

Pertanyaan khusus tentang perangkat Google, saya belum pernah menggunakan perangkat Google. Namun yang dapat saya katakan dengan pasti adalah bahwa kemampuan Linux (proses) harus telah diaktifkan pada sebagian besar perangkat (jika tidak semua) berjalan serendah Android 1.6. Referensi ditemukan dalam initdan system_server, keduanya komponen yang sangat utama dari AOSP. Di Android 4.2, misalnya, installd- komponen inti lainnya - dibuat untuk berjalan dengan kemampuan yang menurun.

Kemampuan filesystem adalah salah satu Peningkatan Keamanan utama di Android 4.3 yang menghapus set-uid/ set-giddari binari seperti run-as, mengatur kemampuan file pada mereka. Ini menyebabkan perubahan revolusioner dalam perjalanan rooting Android.

Dukungan untuk kemampuan Ambient ditambahkan di Android 8 yang mencegah penggunaan kemampuan file:

Kemampuan file, pada gilirannya, menghadirkan risiko keamanan karena setiap proses yang mengeksekusi file dengan kemampuan file akan dapat memperoleh kemampuan itu.

Banyak initlayanan bergantung pada mereka misalnya storaged, termasuk saya sendiri sshddan dnscrypt-proxylayanan.

DUKUNGAN KERNEL UNTUK KAPABILITAS:

Datang ke bagian kernel, membangun kernel tanpa kemampuan bukanlah opsional:

Dari kernel 2.5.27 ke kernel 2.6.26, kapabilitas merupakan komponen kernel opsional, dan dapat diaktifkan / dinonaktifkan melalui opsi konfigurasi kernel CONFIG_SECURITY_CAPABILITIES .

Dan:

Di kernel sebelum Linux 2.6.33, kapabilitas file adalah fitur opsional yang dapat dikonfigurasi melalui opsi CONFIG_SECURITY_FILE_CAPABILITIES . Sejak Linux 2.6.33, opsi konfigurasi telah dihapus dan kemampuan file selalu menjadi bagian dari kernel.

Versi kernel umum tertua pada repositori Android adalah 2.6.39 yang mencakup dukungan untuk kemampuan file juga.

Dukungan untuk kemampuan sistem file di sisi kernel pasti telah tertunda dari beberapa OEM tetapi mereka harus beralih, karena jika tidak fungsionalitas akan rusak. Misalnya surfaceflinger( komposer permukaan Android ) tidak akan berfungsi tanpa kemampuan file sejak Android 7.1.

Mainline Linux kernel 4.3 telah ditambal di Sep'15 untuk kemampuan Ambient (proses), di- backport ke Android kernel 3.18 dan 4.1 di 2016. Jadi mereka tentu saja merupakan bagian dari kernel.

KESIMPULAN:

Pada distro Linux, sangat sedikit program yang memanfaatkan kemampuan Linux. Meskipun ada pam_cap, sebagian besar (atau semua?) Distro masih menggunakan set-uidpada su, sudo, ping, mount, passwddan sebagainya. Tetapi pada kemampuan Android sangat terintegrasi dalam kerangka dan layanan inti. Menghapusnya membutuhkan pengeditan ratusan atau mungkin ribuan baris dalam AOSP dan sumber kernel. Tidak masuk akal bahwa OEM (terutama Google, yang mengembangkan AOSP dan kernel Linux yang dimodifikasi untuk Android) tidak menggunakan fitur keamanan bebas biaya ini ketika sudah tersedia di kernel Android. Ini adalah fitur murni yang terkait OS, tidak memerlukan dukungan perangkat keras tambahan. Jadi, telepon apa pun dari produsen mana pun harus memiliki kapabilitas yang didukung.


PERTANYAAN:

Apakah saya dapat mengatur kemampuan pada executable tanpa mengubah biner kernel asli?

Ya, Anda harus.

Hal-hal yang diperlukan adalah alat untuk mengatur tutup ...

Saya telah menggunakan capsh, getcap, setcap, getpcapsdari libcapdan netcap, pscapdari libcap-ngtanpa masalah. Tapi saya lebih suka kemampuan Ambient, itu mudah dikonfigurasikan dan tidak bergantung pada fitur sistem file seperti Atribut yang Diperpanjang seperti dalam hal kemampuan file. Anda juga dapat menggunakan listxattr, getxattr, setxattrdan removexattralat-alat dari xattr_syscall_wrappermemanipulasi security.capabilityatau xattr lain secara langsung.

Dari komentar Anda:

Saya hanya memperhatikan /system/bin/pingperintah itu tidak ada setuiddi perangkat Samsung asli saya, menyarankanCAP_NET_RAW

Ping Android tidak memiliki set-uidmaupun CAP_NET_RAW. Ini menciptakan soket non-RAW khususIPPROTO_ICMP yang - tidak seperti IPPROTO_RAW- tidak memerlukan hak istimewa.


REFERENSI LEBIH LANJUT:

Selain 10+ referensi yang diberikan di atas, berikut adalah beberapa bagian lain dari kode AOSP yang mendukung dan memanfaatkan kemampuan Linux:

  • Komponen inti: Bionic libc, init, trusty(OS)
  • Komponen eksternal: libcap ,libcap-ng
  • Daemon / jasa: zygote (apps bercabang dan system_server), hostapd, wpa_supplicant, dnsmasq, logd, netd( NetLinkmanajer, DNS swasta), debuggerd(test), sdcarddaemon, performanced, incidentd, mtpd, traced_probes(perfetto), racoon(IPSec), wificond, sejumlah daemon HAL termasuk rild.
  • Executable: reboot (init), dumpstate, tcpdump, strace, iputils( ping, traceroutedll)
  • Minijail: Alat dan perpustakaan kotak pasir khusus yang berputar di sekitar kemampuan. adbdmemanfaatkan perpustakaan ini untuk menjatuhkan hak istimewa.
  • SELinux menggunakan capabilitykelas untuk memberikan / menolak kemampuan ke domain.

Ini menyimpulkan bahwa Android sangat tergantung pada kemampuan Linux, itu bukan fitur yang jarang digunakan .


TERKAIT:

Irfan Latif
sumber
Tidak menjawab apa pun. Semua yang Anda nyatakan dikenal. Inti pertanyaannya adalah karena itu sedikit digunakan adalah apakah perangkat bermerek Google memasukkannya.
user2284570