Detail teknis tentang Integritas Aliran Kontrol
“Ketersediaan sejumlah besar fungsi pointer di kernel membantu popularitas pola serangan ini. Bahkan jika penyerang tidak dapat memasukkan kode yang dapat dieksekusi sendiri, bagian sewenang-wenang dari kode kernel yang ada dapat dieksekusi untuk menyelesaikan eksploitasi mereka.
LLVMCFI berupaya untuk memitigasi serangan ini dengan membatasi target panggilan yang valid dan memaksa kepanikan kernel ketika mendeteksi pelanggaran CFI. Tanda centang ditambahkan sebelum setiap cabang tidak langsung untuk mengonfirmasi bahwa alamat target menunjuk ke fungsi yang valid dengan tanda tangan yang benar. Hal ini mencegah cabang tidak langsung melompat ke lokasi kode arbitrer dan bahkan membatasi fungsi yang dapat dipanggil. Penyerang masih dapat mengubah penunjuk fungsi, jika bug mengizinkan akses. Namun CFI LLVM membatasi 55% panggilan tidak langsung pada maksimal 5 kemungkinan target dan 80% pada maksimal 20 target. Untuk menentukan semua target panggilan yang valid untuk setiap cabang tidak langsung, kompiler perlu melihat semua kode kernel sekaligus.
Penggunaan LTO (Optimasi Waktu Tautan) memungkinkan hal ini. CFI LLVM memerlukan penggunaan LTO, di mana kompiler menghasilkan bitcode khusus LLVM untuk semua C unit kompilasi, dan linker yang sadar LTO menggunakan backend LLVM untuk menggabungkan bitcode dan mengkompilasinya menjadi kode asli.
Selain mengizinkan penggunaan Keuangan, LTO mencapai kinerja runtime yang lebih baik melalui analisis seluruh program dan optimalisasi lintas modul.
TipisLTO hampir mengejar peningkatan kinerja LTO. Dalam mode ThinLTO, seperti halnya LTO biasa, Dentang memancarkan bitcode LLVM setelah fase kompilasi. Bitcode ThinLTO ditambah dengan ringkasan modul yang ringkas. Selama langkah tautan, hanya ringkasan yang dibaca dan digabungkan ke dalam indeks ringkasan gabungan, yang mencakup indeks lokasi fungsi untuk pengimporan fungsi lintas modul selanjutnya. Setelah itu, analisis keseluruhan program yang cepat dan efisien dilakukan pada indeks ringkasan gabungan. ThinLTO memungkinkan proses penautan multi-utas, yang mengurangi waktu kompilasi.
Karena CFI mengganggu eksekusi program ketika mengenai kelas bug tertentu, CFI juga diklasifikasikan sebagai alat pencari bug, seperti yang disebutkan sebelumnya, ketika digunakan dalam mode permisif. CFI permisif akan menampilkan pelanggaran CFI di log kernel, tanpa memaksa kernel panik. Kernel inti 4.9 (perangkat generasi Pixel 3) dan 4.14 (perangkat generasi Pixel 4) memiliki beberapa jenis fungsi ketidakcocokan yang mengakibatkan pelanggaran Keuangan, yang telah ditangani oleh Google dalam patchset yang tersedia di kernel/common repo.
Namun, karena sifat ekosistem Android, ketidakcocokan ini kemungkinan besar juga ditemukan pada kode khusus pabrikan SoC (dalam hal ini, Qualcomm) atau OEM (OnePlus). Beberapa pelanggaran CFI dalam kode Qualcomm yang berbeda dengan kernel 4.19 telah diperbaiki pada kernel Kirisakura untuk OnePlus 8 Pro (contoh: 1, 2, 3).
Menjalankan kernel dalam CFI permisif juga mengungkapkan pelanggaran CFI dalam kode yang terkait dengan driver OnePlus (komit yang relevan dapat ditemukan Di Sini Dan Di Sini). Kernel Kirisakura untuk OnePlus 8 Pro berjalan dengan penerapan CFI, melindungi penggunanya dari serangan penggunaan kembali kode semacam ini."
Baca selengkapnya
Penggemar DIY (yaitu penyelamat komponen PC lama). Sebagai pengguna setia Android sejak masa Eclair, Skanda juga suka mengikuti tren perkembangan terkini di dunia komputasi papan tunggal.