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 init
dan 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-gid
dari 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 init
layanan bergantung pada mereka misalnya storaged
, termasuk saya sendiri sshd
dan dnscrypt-proxy
layanan.
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-uid
pada su
, sudo
, ping
, mount
, passwd
dan 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
, getpcaps
dari libcap
dan netcap
, pscap
dari libcap-ng
tanpa 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
, setxattr
dan removexattr
alat-alat dari xattr_syscall_wrapper
memanipulasi security.capability
atau xattr lain secara langsung.
Dari komentar Anda:
Saya hanya memperhatikan /system/bin/ping
perintah itu tidak ada setuid
di perangkat Samsung asli saya, menyarankanCAP_NET_RAW
Ping Android tidak memiliki set-uid
maupun 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
( NetLink
manajer, DNS swasta), debuggerd
(test), sdcard
daemon, performanced
, incidentd
, mtpd
, traced_probes
(perfetto), racoon
(IPSec), wificond
, sejumlah daemon HAL termasuk rild
.
- Executable:
reboot
(init), dumpstate
, tcpdump
, strace
, iputils
( ping
, traceroute
dll)
- Minijail: Alat dan perpustakaan kotak pasir khusus yang berputar di sekitar kemampuan.
adbd
memanfaatkan perpustakaan ini untuk menjatuhkan hak istimewa.
- SELinux menggunakan
capability
kelas untuk memberikan / menolak kemampuan ke domain.
Ini menyimpulkan bahwa Android sangat tergantung pada kemampuan Linux, itu bukan fitur yang jarang digunakan .
TERKAIT: