
Güven önbellekleri
Güvenli başlatma zincirine dahil edilen nesnelerden biri statik güven önbelleğidir. Bu önbellek, imzalı sistem disk bölümünde bir araya getirilmiş tüm Mach-O ikili öğelerinin güvenilir bir kaydıdır. Her Mach-O, bir kod dizini özeti ile gösterilir. Aramanın verimli olması için bu özetler güven önbelleğine eklenmeden önce sıralanır. Kod dizini, codesign(1)
tarafından gerçekleştirilen imzalama işleminin sonucudur. Güven önbelleğinin zorunlu tutulması için SIP’in etkin kalması gerekir. Apple Silicon yongalı bir Mac’te güven önbelleği zorunluluğunu etkisizleştirmek için güvenli başlatmanın Sıkı Olmayan Güvenlik’e ayarlanması gerekir.
Bir ikili dosya çalıştırıldığında (ister yeni bir işlem oluşturmanın ister çalıştırılabilir kodu var olan işleme eşlemenin bir parçası olarak) kod dizini seçilip çıkarılır ve özetlenir. Sonuçta oluşan özet güven önbelleğinde bulunursa ikili dosya için yaratılan çalıştırılabilir eşlemelere platform ayrıcalıkları verilir; bir başka deyişle bu eşlemeler yetki anahtarlarına sahiptir ve imzanın güvenilirliğine ilişkin başka bir doğrulama olmadan çalışır. Buna karşılık Intel tabanlı bir Mac’te platform ayrıcalıkları, ikili dosyaları imzalayan Apple sertifikası tarafından işletim sistemi içeriğine iletilir. (Bu sertifika, ikili dosyanın sahip olabileceği yetki anahtarlarını kısıtlamaz.)
Platform dışı ikili dosyaların (örneğin onaylanmış üçüncü parti kodların) çalışması için geçerli bir sertifika zincirlerinin olması gerekir ve sahip oldukları yetki anahtarları Apple Developer Program tarafından geliştiriciye verilen imzalama profiliyle kısıtlanır.
macOS ile gelen tüm ikili dosyalar bir platform tanıtıcısı ile imzalanır. Apple Silicon yongalı bir Mac’te bu tanıtıcı, ikili dosya Apple tarafından imzalanmış olsa bile çalıştırılabilmesi için kod dizini özetinin güven önbelleğinde bulunması gerektiğini belirtir. Intel tabanlı bir Mac’te platform tanıtıcısı, macOS’in eski bir sürümüne ait ikili dosyaların hedeflenerek iptalini gerçekleştirmek için kullanılır; bu hedeflenerek iptal etme işlemi bu ikili dosyaların yeni sürümlerde çalışmasını engellemeye yardımcı olur.
Statik güven önbelleği, macOS’in belirli bir sürümüne ait ikili dosya grubunu tamamen kilitler. Bu davranış, eski işletim sistemlerine ait, Apple tarafından uygun bir şekilde imzalanmış ikili dosyaların yeni işletim sistemlerinde yerlerini alıp saldırganlara avantaj kazandırmasını engellemeye yardımcı olur.
İşletim sisteminin dışında gelen platform kodları
Apple, bir platform tanıtıcısıyla imzalanmamış bazı ikili dosyalar da (örneğin Xcode ve birçok geliştirici aracı) sunar. Buna rağmen bu dosyaların, Apple Silicon yongalı bir Mac’te ve T2 yongalı bir Mac’te platform ayrıcalıklarıyla çalıştırılmasına hâlâ izin verilir. Bu platform yazılımı macOS’ten bağımsız olarak geldiği için statik güven önbelleği tarafından dayatılan iptal davranışlarına tabi değildir.
Yüklenebilir güven önbellekleri
Apple belirli yazılım paketlerini yüklenebilir güven önbellekleriyle sunar. Bu önbellekler, statik güven önbelleğiyle aynı veri yapısına sahiptir. Yalnızca bir statik güven önbelleği olmasına ve içeriğinin çekirdeğin başlangıçtaki ilklendirmesi tamamlandıktan sonra her zaman salt okunur aralıkta olacağı garanti edilmesine karşın yüklenebilir güven önbellekleri çalıştırma sırasında sisteme eklenir.
Bu güven önbelleklerinin kimlikleri, başlatma firmware’i kimliğini doğrulamayla aynı mekanizma kullanılarak (Apple’ın güvenilir imzalama servisini kullanarak kişiselleştirme) veya genel olarak imzalanmış nesneler olarak (imzalarıyla belirli bir aygıta bağlı olmayanlar) doğrulanır.
Kişiselleştirilmiş güven önbelleğinin bir örneği, Apple Silicon yongalı bir Mac’te alan tanılarını gerçekleştirmek için kullanılan disk görüntüsüyle gelen önbellektir. Bu güven önbelleği disk görüntüsüyle birlikte kişiselleştirilir ve söz konusu Mac bilgisayarı tanı modunda başlatılmışken bilgisayarın çekirdeğine yüklenir. Güven önbelleği, disk görüntüsündeki yazılımın platform ayrıcalığıyla çalışmasına izin verir.
Genel olarak imzalanmış güven önbelleğinin bir örneği macOS yazılım güncellemeleriyle birlikte gelen önbellektir. Bu güven önbelleği, yazılım güncellemesindeki bir kod yığınının (güncellemenin beyni) platform ayrıcalığıyla çalışmasına izin verir. Güncellemenin beyni, sunucu sistemin çeşitli sürümlerde tutarlı bir şekilde gerçekleştiremediği yazılım güncellemelerini yürütmek için gereken işleri gerçekleştirir.