Apple Silicon yongalı Mac için başlatma işlemi
Apple Silicon yongalı bir Mac açıldığında, iPhone’daki ve iPad’deki başlatma işlemine çok benzer bir başlatma işlemi gerçekleştirir.
Yonga, güven zincirinin ilk adımında Boot ROM’daki kodu çalıştırır. Apple Silicon yongalı bir Mac’teki macOS güvenli başlatma yalnızca işletim sistemi kodunu doğrulamakla kalmaz, aynı zamanda yetkili kullanıcılar tarafından ayarlanmış güvenlik politikalarını ve hatta kext’leri de (önerilmemesine rağmen desteklenir) doğrular.
LLB (Düşük Düzeyli Başlatma Yükleyicisi) başlatıldıktan sonra imzaları doğrular ve depolama, ekran, sistem yönetimi ve Thunderbolt denetleyicileri gibi SoC içinde bulunan çekirdekler için sistem eşli firmware’i yükler. LLB, Secure Enclave işlemcisi tarafından imzalanan bir dosya olan LocalPolicy’yi yüklemekten de sorumludur. LocalPolicy dosyası, kullanıcının sistem başlatma için seçtiği konfigürasyonu ve çalıştırma sırasında güvenlik politikalarını açıklar. LocalPolicy, tüm diğer başlatma nesneleri ile aynı veri yapısı biçimine sahiptir ancak merkezi bir Apple sunucusu tarafından imzalanmak yerine (yazılım güncellemeleri gibi) yalnızca belirli bir bilgisayarın Secure Enclave’i içinde kullanılabilen bir gizli anahtar tarafından yerel olarak imzalanır.
LLB, daha önceki LocalPolicy’lerin yeniden gönderilmesini önlemeye yardımcı olmak için Secure Enclave bağlantılı güvenli saklama alanı bileşeninde bir yeniden göndermeyi önleme değeri aramalıdır. Bunu yapmak için Secure Enclave Boot ROM’u kullanır ve LocalPolicy’deki yeniden göndermeyi önleme değerinin güvenli saklama alanı bileşenindeki yeniden göndermeyi önleme değeri ile eşleştiğinden emin olur. Bu, daha düşük güvenlik için ayarlanmış olabilecek eski bir LocalPolicy’nin güvenlik yükseltildikten sonra sisteme yeniden uygulanmasını önlemeye yardımcı olur. Sonuçta Apple Silicon yongalı Mac’lerde güvenli başlatma, işletim sistemi sürümlerinin geri döndürülmesine karşı korumakla kalmaz eski güvenlik politikası sürümlerinin yüklenmesine karşı da korur.
LocalPolicy dosyası, işletim sisteminin Tam, Azaltılmış veya Sıkı Olmayan güvenlik seçeneklerinden hangisi ile ayarlandığını algılar.
Tam Güvenlik: Sistem iOS ve iPadOS gibi davranır ve yalnızca yükleme zamanında kullanılabilen en son sürüm olarak bilinen yazılımlarla başlatılmasına izin verir.
Azaltılmış Güvenlik: LLB, işletim sistemi ile birlikte paketlenen “genel” imzalara güvenmeye yönlendirilir. Bu, sistemin macOS’in daha eski sürümlerini çalıştırmasına izin verir. macOS’in daha eski sürümlerinde onarılmamış güvenlik açıkları kaçınılmaz olarak mevcut olduğundan bu güvenlik modu Azaltılmış olarak tanımlanır. Bu aynı zamanda çekirdek genişletmelerini (kext’ler) başlatmayı desteklemek için gereken güvenlik politikası düzeyidir.
Sıkı Olmayan Güvenlik: Sistem, iBoot ve ötesi için genel imza doğrulamasını kullanma açısından Azaltılmış Güvenlik olarak davranır ancak iBoot’a LocalPolicy’yi imzalamak için kullanılan anahtarın aynısı ile Secure Enclave tarafından imzalanmış bazı başlatma nesnelerini de kabul etmesini söyler. Bu politika düzeyi, kendi özel XNU çekirdeklerini oluşturan, imzalayan ve başlatan kullanıcıları destekler.
LocalPolicy, seçilen işletim sisteminin Tam Güvenlik modunda çalıştığını LLB’ye belirtir; LLB, iBoot için kişiselleştirilmiş imzayı değerlendirir. Azaltılmış Güvenlik veya Sıkı Olmayan Güvenlik modunda çalışıyorsa genel imzayı değerlendirir. Herhangi bir imza doğrulama hatası, onarım seçeneklerinin sunulması amacıyla sistemin recoveryOS ile başlatılmasına neden olur.
LLB işlemi iBoot’a aktardıktan sonra Secure Neural Engine, Always On Processor ve diğer firmware’ler için olanlar gibi macOS eşli firmware’i yükler. iBoot, LLB’den kendisine aktarılan LocalPolicy bilgilerine de bakar. LocalPolicy bir Yardımcı Çekirdek Koleksiyonu (AuxKC) olması gerektiğini belirtiyorsa iBoot bunu dosya sisteminde arar, LocalPolicy ile aynı anahtar kullanılarak Secure Enclave tarafından imzalandığını doğrular ve özetinin LocalPolicy’de saklanan özetle eşleştiğini doğrular. AuxKC doğrulanırsa Başlatma Çekirdeği Koleksiyonu’nu ve AuxKC’yi içeren tam bellek bölgesini Sistem Yardımcı İşlemcisi Bütünlük Koruması (SCIP) ile kilitlemeden önce iBoot bunu Başlatma Çekirdeği Koleksiyonu ile belleğe yerleştirir. Politika bir AuxKC olması gerektiğini belirtiyor ama bulunamıyorsa sistem o olmadan macOS ile başlatmayı sürdürür. iBoot, çekirdeğin bağlayacağı dosya sisteminin bütünlüğünün tamamen doğrulanıp doğrulanmadığını denetlemek için imzalı sistem disk bölümünün kök özetini doğrulamaktan da sorumludur.