Integritas alur kontrol kernel

Integritas alur kontrol (CFI) adalah mekanisme keamanan yang tidak mengizinkan perubahan pada grafik alur kontrol asli dari biner yang dikompilasi, sehingga mempersulit serangan tersebut secara signifikan.

Di Android 9, kami mengaktifkan penerapan CFI LLVM di lebih banyak komponen dan juga di kernel. CFI Sistem aktif secara default, tetapi Anda perlu mengaktifkan CFI kernel.

CFI LLVM memerlukan kompilasi dengan Link-Time Optimization (LTO). LTO mempertahankan representasi bitcode LLVM dari file objek hingga waktu penautan, yang memungkinkan compiler untuk lebih memahami pengoptimalan yang dapat dilakukan. Mengaktifkan LTO akan mengurangi ukuran biner akhir dan meningkatkan performa, tetapi meningkatkan waktu kompilasi. Dalam pengujian di Android, kombinasi LTO dan CFI menghasilkan overhead yang dapat diabaikan terhadap ukuran dan performa kode; dalam beberapa kasus, keduanya meningkat.

Untuk mengetahui detail teknis selengkapnya tentang CFI dan cara pemeriksaan kontrol maju lainnya ditangani, lihat dokumentasi desain LLVM.

Implementasi

Patch kCFI ada di semua versi kernel Android yang didukung. Opsi CONFIG_CFI_CLANG mengaktifkan kCFI dan ditetapkan secara default di GKI.

Pemecahan masalah

Setelah mengaktifkan, perbaiki error ketidakcocokan jenis yang mungkin ada dengan drivernya. Panggilan fungsi tidak langsung melalui pointer fungsi yang tidak kompatibel akan memicu CFI. Saat kegagalan CFI terdeteksi, kernel akan mencetak peringatan yang menyertakan fungsi yang dipanggil dan stacktrace yang menyebabkan kegagalan. Perbaiki hal ini dengan memastikan pointer fungsi selalu memiliki jenis yang sama dengan fungsi yang dipanggil.

Untuk membantu men-debug kegagalan CFI, aktifkan CONFIG_CFI_PERMISSIVE, yang mencetak peringatan, bukan menyebabkan kernel panic. Mode permisif tidak boleh digunakan dalam produksi.

Validasi

Saat ini, tidak ada pengujian CTS khusus untuk CFI. Sebagai gantinya, pastikan pengujian CTS lulus dengan dan tanpa CFI diaktifkan untuk memverifikasi bahwa CFI tidak memengaruhi perangkat.