Kerentanan Bootloader OnePlus 3/3T Memungkinkan Perubahan SELinux ke Mode Permisif di Fastboot

click fraud protection

Kerentanan serius pada bootloader OnePlus 3/3T memungkinkan penyerang mengubah status SELinux dari Penegakan menjadi Permisif! Baca terus untuk mengetahui lebih lanjut!

Itu OnePlus 3 dan itu OnePlus 3T adalah salah satu ponsel terbaik yang dapat Anda beli saat ini. Meskipun ponsel andalan yang akan datang pada tahun 2017 belum diumumkan kepada konsumen, namun karena ketidakhadiran mereka OnePlus 3/3T mendominasi performa dunia nyata dengan harga terjangkau.

Namun, jika kita ingin bersikap adil dalam menilai perangkat tersebut, kita perlu mengakui bahwa terlepas dari upaya terbaik OnePlus, OnePlus 3/3T bukannya tanpa kesalahan. Misalnya, kami sebelumnya telah melaporkan masalah keamanan seperti OnePlus membocorkan detail IMEI melalui jaringan saat Anda memeriksa pembaruan di ponsel Anda. Dan sekarang, kita mempunyai masalah keamanan lain yang perlu ditambahkan ke dalam daftar, masalah ini memiliki potensi konsekuensi yang lebih berbahaya.

Kerentanan pada bootloader OnePlus 3/3T membuka pintu bagi serangan berbahaya. Seperti yang ditemukan oleh Roee Hay dari Tim Riset Keamanan Aplikasi IBM X-Force dan 

terungkap pada platform IBM X-Force Exchange, kerentanan ini memungkinkan penyerang memanipulasi status SELinux pada perangkat, sehingga mengalihkannya ke mode permisif. Yang dibutuhkan penyerang hanyalah baik akses fisik ke perangkat, atau akses jarak jauh ke koneksi ADB ke perangkat.

SELinux, atau Linux yang Ditingkatkan Keamanan, adalah modul keamanan kernel Linux yang memungkinkan akses dan pengelolaan kebijakan keamanan. SELinux diperkenalkan ke Android dimulai dengan Android 4.3 dan disetel ke Menegakkan mode sebagai default sejak Android 4.4. Sistem kontrol akses wajib ini membantu menegakkan hak kontrol akses yang ada dan berupaya mencegah serangan eskalasi hak istimewa. Ini bertindak sebagai penghalang bagi kontrol tidak sah atas perangkat Anda, seperti aplikasi atau kerentanan yang bertujuan untuk mendapatkan akses root secara jahat. Mengatur SELinux ke Menegakkan secara default di Android berfungsi sebagai langkah pertama untuk melindungi pengguna normal dari serangan semacam itu.

Kerentanan ini cukup mudah untuk dieksploitasi - faktanya, ini tampaknya merupakan kekhilafan besar dari pihak OnePlus dan bukan seperti yang Anda bayangkan akan terlihat seperti eksploitasi biasa. Pertama, penyerang me-reboot OnePlus 3/3T ke mode 'fastboot' - jika Anda memiliki akses fisik, cukup tekan tombol Volume Naik saat boot, tetapi jika tidak, Anda dapat mengeluarkan perintah ADB adb reboot bootloader ke perangkat. Mode fastboot pada perangkat memperlihatkan antarmuka USB, yang seharusnya tidak memungkinkan perintah sensitif keamanan apa pun diselesaikan pada perangkat yang terkunci. Namun di OnePlus 3/3T, cukup mengeluarkan fastboot oem selinux permissive perintah melalui antarmuka fastboot mengubah mode SELinux dari Menegakkan ke Permisif.

fastboot oem selinux permissive
...
OKAY[ 0.045s]
finished. totaltime: 0.047s

...

OnePlus3:/ $ getenforce
Permissive
OnePlus3:/ $

Untuk lebih memperumit masalah, OnePlus 3 dan 3T tidak memiliki entri apa pun di 'Tentang Layar' untuk menyebutkan status SELinux perangkat saat ini. Korban akan tetap tidak menyadari keadaan perangkatnya yang telah disusupi jika mereka tidak menyaksikan eksploitasi tersebut digunakan secara aktif. Kurangnya entri status SELinux di 'Tentang Layar' tidak ada pada rilis Open Beta berbasis Android 6.0 serta ROM resmi Android 7.0.

Ada beberapa aplikasi untuk mengubah status SELinux menjadi Permisif seperti SELinuxModeChanger aplikasi. Mengalihkan SELinux melalui metode ini tidak memungkinkan status bertahan hingga reboot. Padahal kamu bisa memanfaatkan skrip untuk mempertahankan Permisif Status SELinux saat hard reboot. Kedua metode ini memerlukan akses root, yang berarti pengguna sudah mengetahui risiko yang dihadapinya. Namun perbedaan besarnya dengan mengubah mode SELinux menjadi Permisif menggunakan kerentanan di atas bukan hanya itu tetap ada saat reboot keras, hal itu terjadi tanpa memerlukan akses root.

Hingga saat ini, belum ada solusi untuk mengatasi kerentanan tersebut.


MEMPERBARUI:

Kami menghubungi Sultanxda, salah satu pengembang ROM khusus paling terkenal untuk perangkat OnePlus, untuk mengetahui apakah dia dapat membantu kami mempelajari lebih lanjut tentang masalah ini. Dia segera menggali kode untuk menemukan sumber root, inilah yang dia temukan:

Caranya adalah "fastboot oem selinux Perintah " yang berfungsi adalah menambahkan argumen tambahan ke baris perintah kernel saat mem-boot Linux. Argumen tambahan datang dalam bentuk "androidboot.selinux=", Di mana bisa menjadi "permisif". Di sinilah hal-hal menjadi lucu: "androidboot.Argumen " pada baris perintah kernel diurai oleh init. Dalam build produksi Android normal (build "pengguna"), argumen "androidboot.selinux" diabaikan sepenuhnya dan selinux selalu dipaksa untuk diterapkan. Jadi bug ini terdiri dari dua masalah:

  1. Pengguna dapat membuat bootloader melewati tanda yang biasanya membuat selinux permisif pada build ROM rekayasa/debugging
  2. OnePlus memodifikasi init Android untuk menghormati flag "androidboot.selinux" bahkan untuk pembuatan ROM produksi

Di sinilah init Android dikonfigurasi untuk mengabaikan tanda "androidboot.selinux" untuk build produksi: https://android.googlesource.com/platform/system/core/+/android-6.0.0_r41/init/Android.mk#7

Tanda ALLOW_DISABLE_SELINUX dalam kode sumber hanya disetel ke 1 untuk userdebug dan rekayasa build

(ROM saya tidak terpengaruh oleh ini karena saya membuat ROM dalam mode produksi (pengguna))

Jadi "androidboot.selinux" diabaikan begitu saja di ROM saya, "fastboot oem selinux " perintah tampaknya juga merupakan sesuatu yang dibuat oleh OnePlus, karena tidak ada perintah seperti itu di sumber bootloader publik CAF. Di luar dugaan saya, saya dapat memikirkan 4 cara untuk memperbaikinya bagi pengguna dengan bootloader yang tidak terkunci:

  1. Hex-edit bootloader untuk mengubah semua contoh string "selinux" menjadi sesuatu yang berbeda (seperti "sclinux") sehingga flag tidak akan dikenali oleh init Android
  2. Hex-edit biner init Android di OxygenOS untuk mengganti semua instance "androidboot.selinux" menjadi sesuatu yang berbeda (seperti "androidboot.sclinux") sehingga Android init tidak mengenalinya bendera androidboot.selinux
  3. Tambahkan peretasan ke driver baris perintah kernel yang mirip dengan bypass SafetyNet saya untuk menyembunyikan tanda "androidboot.selinux" dari init Android

Kami ingin mengucapkan terima kasih kepada Sultanxda atas waktu dan upayanya dalam membantu kami mencari tahu apa yang terjadi di balik layar. Kami juga telah menghubungi OnePlus, yang mengetahui situasi ini dan sedang menyelidiki masalah ini.


Kami berharap OnePlus secara terbuka mengakui masalah serius ini dan transparan dalam rencana mereka untuk memperbaikinya.