Cache kepercayaan
Salah satu objek yang disertakan di rantai Boot Aman adalah cache kepercayaan statis, catatan tepercaya semua biner Mach-O yang dikontrol ke volume sistem yang ditandatangani. Setiap Mach-O diwakili oleh hash direktori kode. Untuk pencarian yang efisien, hash ini diurutkan sebelum disisipkan ke cache kepercayaan. Direktori kode adalah hasil operasi penandatanganan yang dilakukan oleh codesign(1)
. Untuk memberlakukan cache kepercayaan, SIP harus tetap diaktifkan. Untuk menonaktifkan pemberlakuan cache kepercayaan di Mac dengan Apple silicon, boot aman harus dikonfigurasi ke Keamanan Permisif.
Saat biner dieksekusi (baik sebagai bagian dari pemunculan proses baru atau pemetaan kode yang dapat dieksekusi ke proses yang ada), direktori kodenya diekstrak dan di-hash. Jika hash hasil ditemukan di cache kepercayaan, pemetaan yang dapat dieksekusi yang dibuat untuk biner akan diberi izin hak platform—yaitu, pemetaan dapat memiliki hak dan mengeksekusi tanpa verifikasi lebih lanjut untuk pengesahan tanda tangannya. Ini berbanding terbalik dengan Mac berbasis Intel, di mana hak platform diteruskan ke konten sistem operasi oleh sertifikat Apple yang menandatangani biner. (Sertifikat ini tidak membatasi hak apa yang dapat dimiliki oleh biner.)
Biner non-platform (misalnya, kode pihak ketiga yang disahkan) harus memiliki rantai sertifikat yang sah untuk mengeksekusi, dan hak yang mungkin dimiliki dibatasi oleh profil yang menandatangani yang diterbitkan ke pengembang oleh Apple Developer Program.
Semua biner yang dikirim dalam macOS ditandatangani dengan pengenal platform. Di Mac dengan Apple silicon, pengenal ini digunakan untuk menandakan bahwa meskipun biner ditandatangani oleh Apple, hash direktori kodenya harus ada di cache kepercayaan untuk dieksekusi. Di Mac berbasis Intel, pengenal platform digunakan untuk melakukan pencabutan biner yang ditargetkan dari perilisan macOS yang lebih lama; pencabutan yang ditargetkan ini membantu mencegah biner tersebut agar tidak dieksekusi di versi yang lebih baru.
Cache kepercayaan statis sepenuhnya mengunci kumpulan biner ke versi macOS yang diberikan. Perilaku ini membantu mencegah biner yang ditandatangani Apple dengan sah dari sistem operasi yang lebih lama agar tidak diperkenalkan ke sistem operasi yang lebih baru agar penyerang dapat memperoleh keuntungan.
Kode platform yang dikirim ke luar sistem operasi
Apple mengirimkan beberapa biner—misalnya, Xcode dan tumpukan alat pengembangan—yang tidak ditandatangani dengan pengenal platform. Meski begitu, biner masih diizinkan untuk dieksekusi dengan hak platform di Mac dengan Apple silicon dan Mac dengan keping T2. Karena perangkat lunak platform ini dikirim secara terpisah dari macOS, perangkat lunak tidak tunduk pada perilaku pencabutan yang diberlakukan oleh cache kepercayaan statis.
Cache kepercayaan yang dapat dimuat
Apple mengirimkan paket perangkat lunak tertentu dengan cache kepercayaan yang dapat dimuat. Cache ini memiliki struktur data yang sama dengan cache kepercayaan statis. Meskipun hanya terdapat satu cache kepercayaan statis—dan kontennya dijamin selalu terkunci ke cakupan hanya baca setelah inisialisasi awal kernel selesai—cache kepercayaan yang dapat dimuat ditambahkan ke sistem pada runtime.
Cache kepercayaan ini disahkan melalui mekanisme yang sama dengan yang mengesahkan firmware boot (penyesuaian menggunakan layanan penandatanganan tepercaya Apple) atau sebagai objek yang ditandatangani secara global (yang tanda tangannya tidak mengikat objek ke perangkat tertentu).
Contoh dari cache kepercayaan yang disesuaikan adalah cache yang dikirim dengan image disk yang digunakan untuk melakukan diagnostik bidang di Mac dengan Apple silicon. Cache kepercayaan ini disesuaikan, bersamaan dengan image disk, dan dimuat ke kernel komputer Mac subjek saat di-boot ke mode diagnostik. Cache kepercayaan memungkinkan perangkat lunak dalam image disk untuk dijalankan dengan hak platform.
Contoh dari cache kepercayaan yang ditandatangani secara global yang dikirim dengan pembaruan perangkat lunak macOS. Cache kepercayaan ini mengizinkan potongan kode dalam pembaruan perangkat lunak—otak pembaruan—untuk dijalankan dengan hak platform. Otak pembaruan melakukan pekerjaan apa pun untuk menyiapkan pembaruan perangkat lunak yang tidak dapat dilakukan sistem host dalam cara yang konsisten di semua versi.