OpenCore'u gerçekten özel kılan şey ise Hackintosh topluluğunda oldukça nadir olmasına rağmen bu kadar güvenli yapılmış olması. Bu makalede OpenCore'un büyük güvenlik özelliklerine değineceğiz.
  • FileVault
    • Apple'ın yerleşik disk şifrelemesi
  • Vault
    • OpenCore'un yarı güvenli önyüklemesi, OpenCore'un bellek kopyası için kullanılır yani istenmeyen bir değişiklik yok
  • ScanPolicy
    • OpenCore'un disk yönetimi, OpenCore'un önyükleme menüsünde hangi tür disklerin görüneceğini belirler
  • OpenCore Parola Ayarlama
    • OpenCore önyükleme menüsüne parola ekleyebilirsiniz
  • Apple Secure Boot
    • Apple'ın, macOS çekirdeğindeki güvenli önyükleme varyantı.

FileVault​


FileVault, macOS'un yerleşik disk şifrelemesidir ve OpenCore'un desteği ile eski Clover sürücülerine nazaran önemli ölçüde iyileştirilmiştir.
Başlamak için aşağıdaki .efi sürücüsüne ihtiyacımız var:
  • OpenRuntime.efi
    • OpenUsbKbDxe.efi DuetPkg kullanıcılar için(UEFI desteği olmayan sistemler)
OpenCore'u, VirtualSMC.efi ile kullanmayın, halihazırda dahili olarak mevcut. Ancak VirtualSMC.kext'i kullanmanız hala gereklidir.
config.plist ayarlamaları:
  • Misc -> Boot
    • PollAppleHotKeys > YES(Gerekli olmasa da yardımı dokunabilir)
  • Misc -> Security
    • AuthRestart > YES(FileVault 2 için Authenticated restart yani doğrulamalı yeniden başlatmayı aktifleştirir ve yeniden başlatmalarda şifre gerekmez. Güvenlik için riskli olabilir, o yüzden opsiyonel)
  • NVRAM -> Add -> 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14
    • Yüksek çözünürlüklü küçük ekranlar için UIScale > 02
  • UEFI -> Input
    • KeySupport > YES(Sadece OpenCore'un yerleşik girişini kullanırken, OpenUsbKbDxe kullanıcıları bundan kaçınmalı)
  • UEFI -> Output
    • ProvideConsoleGop > YES
  • UEFI -> ProtocolOverrides
    • FirmwareVolume > YES
    • HashServices > YES Broadwell ve daha eskileri(X99 da buna dahil), bu bozuk SHA-1 hash sorunu yaşayan sistemler için gereklidir.
  • UEFI -> Quirks
    • RequestBootVarRouting > YES
    • Aptio IV firmwarelerde(Broadwell ve daha eskisi) Still waiting for root device sorunu yaşıyorsanız ExitBootServicesDelay > 3000-5000
Tüm bunlarla beraber normal bir macte etkinleştirir gibi System Preferences -> Security & Privacy -> FileVault yolunu takip edip FileVault'u etkinleştirebilirsiniz.

Vault​


Vaulting/kasalamak nedir?

Vauilting/kasalama iki şeyin esasıdır, vault.plist ve vault.sig:
  • vault.plist: EFI klasörünüzün bir "snapshot"'ı
  • vault.sig: vault.plist'in doğrulanması
Bu, OpenCore için secure boot olarak görülebilir ve sizin izniniz dışında kimse tarafından değiştirilemez.

Vaulting'in detayları OpenCore.efi dosyamızın içine vault.plist'in 256 byte RSA-2048 signature/imzası ile sıkıştırılmasıdır. Bu anahtar compile işleminden önce OpenCoreVault.c'in içine veya halihazırda OpenCore.efi compile edildi ise sign.command ile sıkıştırılabilir.

nvram.plist'in, emule edilmiş NVRAM kullanan kullanıcıların bir başkası tarafından bazı NVRAM değişkenlerinin eklenip/çıkarılması riskinden dolayı vault edilemeyeceğini belirtelim.

config.plist ayarlamaları:
  • Misc -> Security -> Vault:
    • Basic: Sadece vault.plist olması yeterlidir, genellikle dosya sisteminin bütünlüğünü doğrulamak için kullanılır.
    • Secure: vault.plist ve vault.sig gerekir, vault.plist değişiklikleri yeni bir signature/imza gerektireceğinden dolayı en iyi güvenlik için kullanılır.
  • Booter -> ProtectSecureBoot: YES
    • Insyde firmware'lerde Secure Boot key/anahtarlını düzeltmek ve ihlalleri raporlamak için gereklidir.
Vault'u ayarlamak:
OpenCorePkg'ı indirin ve CreateVault klasörünü açın, içerisinde aşağıda listelenenleri bulacağız:
  • create_vault.sh
  • RsaTool
  • sign.command
Burada bizim işimize yarayacak olan sonuncusu: sign.command

Bu komutu çalıştırdığımız zaman Utilities klasörünün yanında bizim EFI klasörümüzü arayacaktır, bu sebeple ya kişisel EFI'mizi OpenCorePkg klasörüne taşıyacağız ya da Utilities klasörünü, kişisel EFI klasörümüze taşıyacağız:
vault.webp

Artık sign.command komutunu çalıştırmak için hazırız:
vault1.webp

Kurulum sonrası Vault'u devre dışı bırakma
Eğer yoğun hata ayıklama yapıyor veya Vault'u devre dışı bırakmaya ihtiyacın varsa, değiştirmen gereken ana şeyler:
  • OpenCore.efi dosyasının yeni bir kopyasını al,
  • Misc -> Security -> Vault değerini Optional olarak değiştir,
  • vault.plist ve vault.sig dosyalarını kaldır.

ScanPolicy​

Bu quirk bilinmeyen kaynakların taranmasını ve önyüklenmesini önlüyor. Bu değeri 0 olarak ayarlamak tüm kaynakları önyüklenebilir hale getirir ama özel bir ScanPolicy değeri hesaplamak size daha geniş esneklik ve güvenlik alanı sağlar.

ScanPolicy değerini hesaplamak için basitçe tüm hexadecimal değerleri ekliyorsunuz(hexadecimal hesaplayıcı ile, macOS hesap makinesinde ⌘+3 kombinasyonu ile erişebilirsiniz) Hepsi eklendikten sonra bu hexadecimal değeri ScanPolicy'e ekleyeceğiz(önce bunu decimal bir değere çevirmemiz gerekiyor, Xcode bunu yapıştırdığınız zaman otomatik olarak çeviriyor).

0x00000001 (bit 0) — OC_SCAN_FILE_SYSTEM_LOCK

  • Bu düzenlemenin tanımlamasına göre sadece bilinen dosya sistemlerinin taranmasını/görüntülenmesini sağlar. Sistem dosyası sürücüleri bu düzenlemenin farkında olmayabilir, istenmeyen sistem dosyalarını mount etmekten kaçınmak için en iyi yol, bu sürücülerin hiç yüklenmemesi. Bu, herhangi sistem dosyasının sahip olabileceği dmg dosyalarını mount etmeyi etkilemez. Bilindik sistem dosyaları OC_SCAN_ALLOW_FS_ ile önceden düzeltilmiştir.
0x00000002 (bit 1) — OC_SCAN_DEVICE_LOCK

  • Bu düzenlemenin tanımlamasına göre sadece bilinen aygıt tiplerinin taranmasını/görünmesini sağlar. Bu her zaman tünelleme protokolünü tespit edemez, bu yüzden bazı sistemlerde bunun mümkün olabileceğini belirtelim(ör. USB HDD'lerin, SATA olarak algılanması) Bu gibi durumlar bildirilmeli. Bilindik aygıt tipleri OC_SCAN_ALLOW_DEVICE_. ile önceden düzeltilmiştir.
0x00000100 (bit 8) — OC_SCAN_ALLOW_FS_APFS

  • APFS sistem dosyalarının taranmasını/görüntülenmesini sağlar.
0x00000200 (bit 9) — OC_SCAN_ALLOW_FS_HFS

  • HFS sistem dosyalarının taranmasını/görüntülenmesini sağlar.
0x00000400 (bit 10) — OC_SCAN_ALLOW_FS_ESP

  • EFI Sistem Bölüntüsü dosyalarının taranmasını/görüntülenmesini sağlar.
0x00010000 (bit 16) — OC_SCAN_ALLOW_DEVICE_SATA

  • SATA aygıtlarının taranmasını/görüntülenmesini sağlar.
0x00020000 (bit 17) — OC_SCAN_ALLOW_DEVICE_SASEX

  • SAS ve Mac NVMe aygıtlarının taranmasını/görüntülenmesini sağlar.
0x00040000 (bit 18) — OC_SCAN_ALLOW_DEVICE_SCSI

  • SCSI aygıtlarının taranmasını/görüntülenmesini sağlar.
0x00080000 (bit 19) — OC_SCAN_ALLOW_DEVICE_NVME

  • NVMe aygıtlarının taranmasını/görüntülenmesini sağlar.
0x00100000 (bit 20) — OC_SCAN_ALLOW_DEVICE_ATAPI

  • CD/DVD aygıtlarının taranmasını/görüntülenmesini sağlar.
0x00200000 (bit 21) — OC_SCAN_ALLOW_DEVICE_USB

  • USB aygıtlarının taranmasını/görüntülenmesini sağlar.
0x00400000 (bit 22) - OC_SCAN_ALLOW_DEVICE_FIREWIRE

  • FireWire aygıtlarının taranmasını/görüntülenmesini sağlar.
0x00800000 (bit 23) — OC_SCAN_ALLOW_DEVICE_SDCARD

  • Kart okuyucu aygıtlarının taranmasını/görüntülenmesini sağlar.
0x01000000 (bit 24) — OC_SCAN_ALLOW_DEVICE_PCI

  • PCI yoluna direkt bağlanmış aygıtların taranmasını/görüntülenmesini sağlar(ör. VIRTIO).
Varsayılan olarak ScanPolicy'in değeri 0x10F0103(17,760,515) yani aşağıdakilerin bir kombinasyonu:
  • OC_SCAN_FILE_SYSTEM_LOCK
  • OC_SCAN_DEVICE_LOCK
  • OC_SCAN_ALLOW_FS_APFS
  • OC_SCAN_ALLOW_DEVICE_SATA
  • OC_SCAN_ALLOW_DEVICE_SASEX
  • OC_SCAN_ALLOW_DEVICE_SCSI
  • OC_SCAN_ALLOW_DEVICE_NVME
  • OC_SCAN_ALLOW_DEVICE_PCI
Diyelim ki bu örneğe göre OC_SCAN_ALLOW_DEVICE_USB'ı eklemek istiyorsunuz:

0x00200000 + 0x10F0103 = 0x12F0103

Bunu decimal'e çevirdiğimizde ise değerimiz: 19,857,667


OpenCore parola ayarlama​


OpenCore 0.6.1 ve daha güncel sürümler ile, kullanıcılar kurulumlarindeki en iyi güvenliği elde etmek için SHA-512 şifre ayarlayabiliyor. Bu işlem kullanıcıların yüksek diyebileceğimiz işlemlerde şifre ekranı ile karşılaşmasını sağlıyor. Bunlar:
  • Önyükleme menüsünü gösterme
  • Varsayılan olmayan işletim sistemlerini ve araçları önyüklemek(ör. Başlangıç Diski veya Bootcamp aracı tarafından bilinmeyen)
  • NVRAM'ı resetlerken
  • Varsayılan olmayan modları önyüklerken(ör. Verbose veya kısayol tuşları ile Güvenli Mod)
OpenCore 0.6.7 ile beraber ocpasswordgen adlı araç, kullanıcıların şifre üretmesine yardımcı olmak için eklendi.

Başlamak için güncel bir OpenCore'u edinip ardından ocpasswordgen aracını, Utilities/ocpasswordgen/ yolunda çalıştıralım. Karşınıza şifre oluşturmanızı isteyen bir çıktı gelecek:
ocpwgen.webp

Bu örnek için şifre olarak Dortania'yı seçiyoruz. Ardından ocpasswordgen, config dosyamızda değiştirmemiz gereken 2 önemli değeri bize gösteriyor:
  • PasswordHash: Şifrenin Hash değeri
  • PasswordSalt: 2 kullanıcının aynı şifre ile aynı hash'e sahip olmamasını sağlar.
Sonra config dosyamızı açıp Misc -> Security kısmına bu değerleri ekleyelim:
  • Not: Ayrıca EnablePassword'u etkinleştirmeyi unutmayın.
ocpwgen1.webp

Bu değişiklikleri yaptıktan sonra, değişiklikleri kaydedip sistemi yeniden başlatabilirsiniz. Artık OpenCore'un menüsüne girdiğinizde, aşağıdaki çıktıyı almalısınız:
ocpwgen2.webp

Şifrenizi girdikten sonra normal önyükleme seçenekleri gelmeli:
  • Not: Şifreyi girerken ve menüye girerken bazı eski sistemler ve sanal makinelerin doğrulaması 30 saniye veya 30 saniyeden daha uzun sürebilir. Lütfen sabırlı olun.

ocpwgen3.webp



Apple Secure Boot​


  • Not: DmgLoading, SecureBootModel ve ApECID güncel bir OpenCore sürümü gerektirir.
  • Not 2: macOS Big Sur, düzgün bir Apple Secure Boot desteği için güncel bir OpenCore sürümü gerektirir.

Apple Secure Boot nedir?​

Apple Secure Boot'u en iyi şekilde anlamak için, Mac'lerin ve OpenCore'un güvenlik açısından önyükleme işleminin nasıl çalıştığına bakalım:
applesecureboot.webp

Görebileceğimiz üzere Apple Secure Boot ile birleştirilmiş birçok katman var:
  • OpenCore, boot.efi dosyasını(ör. boot.efi.j137ap.im4m), Apple tarafından imzalı olup bu Secure Boot modelinde kullanılabileceğine dair teyit eder.
    • Sıfır olmayan ApECID için OpenCore ayrıyeten ECID değerini doğrulayıp boot.efi dosyasına yazar(ör. boot.efi.j137ap.XXXXXXXX.im4m). Bu, başka bir sistemde aynı Secure Boot modeli kullanan tehlikeli bir sabit diskin, sizin sisteminizde kullanılmasını engeller.
  • boot.efi, kernelcache(çekirdek önbelleği)'in kurcalanmadığını teyit eder
  • apfs.kext ve AppleImage4, sistem yığını bellek kopyasının kurcalanmadığını teyit eder(sadece Big Sur ve daha güncel sürümler için uygulanabilir)
Tüm bu doğrulamalar için sistemi yeniden başlatmak gerekmez fakat en yüksek güvenliği isteyenler yeniden başlatabilir tabii. Şu anki içerikte firmware tabanlı Secure Boot kapsanmıyor ancak tüm Apple Secure Boot seçenekleri aşağıda detaylandırılmıştır.

DmgLoading​


Oldukça basit bir ayar olsa da Apple Secure Boot için önemlidir. Bu ayar sizlere OpenCore'da DMG'lerin yükleme ilkelerini ayarlamınızı sağlar. Varsayılan olarak Signed değerinin kullanılmasını öneriyoruz fakat en iyi güvenlik için Disabled değeri tercih edilebilir.

Misc -> Security -> DmgLoading için olası seçenekler:
DeğerAçıklama
AnyOpenCore'da tüm DMG'lerin yüklenmesine izin verir fakat eğer Apple Secure Boot etkin ise önyüklemede hataya sebep olur.
SignedSadece macOS yükleyicisi gibi Apple-imzalı DMG'lerin yüklenmesine izin verir
DisabledTüm harici DMG'lerin yüklenmesini devre dışı bırakır ancak dahili Recovery/Kurtarma etkin kalır.

SecureBootModel​


SecureBootModel, Apple Secure Boot donanım model ve ilkesini ve orijinalinde SMBIOS desteklemiyor olsa bile herhangi bir SMBIOS ile Apple'ın Secure Boot'unu aktifleştirmek için kullanılır. SecureBootModel'i aktifleştirmek Orta seviye güvenlik'e eşdeğerdir, tam güvenlik için bkz: ApECID

Şu anda Misc -> Security -> SecureBootModel için aşağıdaki seçenekler desteklenmekte:
DeğerSMBIOSEn düşük macOS sürümü
DisabledSecure Boot devre dışı kalacaktır, model yok.-
DefaultŞu anda x86legacy olarak ayarlı11.0.1 (20B29)
j137iMacPro1,1 (Aralık 2017)10.3.2 (17C2111)
j680MacBookPro15,1 (Temmuz 2018)10.13.6 (17G2112)
j132MacBookPro15,2 (Temmuz 2018)10.13.6 (17G2112)
j174Macmini8,1 (Ekim 2018)10.14 (18A2063)
j140kMacBookAir8,1 (Ekim 2018)10.14.1 (18B2084)
j780MacBookPro15,3 (Mayıs 2019)10.14.5 (18F132)
j213MacBookPro15,4 (Temmuz 2019)10.14.5 (18F2058)
j140aMacBookAir8,2 (Temmuz 2019)10.14.5 (18F2058)
j152fMacBookPro16,1 (Kasım 2019)10.15.1 (19B2093)
j160MacPro7,1 (Aralık 2019)10.15.1 (19B88)
j230kMacBookAir9,1 (Mart 2020)10.15.3 (19D2064)
j214kMacBookPro16,2 (Mayıs 2020)10.15.4 (19E2269)
j223MacBookPro16,3 (Mayıs 2020)10.15.4 (19E2265)
j215MacBookPro16,4 (Haziran 2020)10.15.5 (19F96)
j185iMac20,1 (Ağustos 2020)10.15.6 (19G2005)
j185fiMac20,2 (Ağustos 2020)10.15.6 (19G2005)
x86legacy11.0'deki T2 olmayan Macler(Sanal makineler için önerilir)11.0.1 (20B29)

SecureBootModel ile ilgili özel notlar
  • Maksimum güvenlik için ApECID ile kullanmayı planlıyorsanız varsayılan değer tavsiye edilmiyor. İleri zamanlarda varsayılan değer güncellenebileceğinden dolayı SMBIOS'unuza en yakın veya kullanmayı planladığınız macOS sürümlerinden doğru bir değeri kullanmanız tavsiye ediliyor.
    • Ek olarak varsayılan, x86legacy olarak ayarlı ve High Sierra'dan, Catalina'ya önyüklerken hataya sebep olur.
    • T2'ler haricinde normal Mac modelleri için x86legacy gerekli değil. Listedeki tüm değerler destekleniyor.
  • Önbelleğe alınmış sürücülerin listesi farklı olabilir bunun sonucunda Added veya Forced kernel drivers listelerini değiştirmek gerekir.
    • ie. IO80211Family cannot be injected in this case, as it is already present in the kernelcache
  • Bilinmeyen/imzasız ve bilinen birkaç çekirdek sürücüleri kullanılamaz.
    • Buna macOS 10.13 sürümündeki Nvidia Web Sürücüleri dahil.
  • macOS 11 gibi sızdırmazlığa sahip sistemlerde sistem yığın değişikliği yapmak işletim sisteminin önyüklenememesine sebep olabilir.
    • Eğer macOS'un APFS snapshots/bellek kopyalarını devre dışı bırakmayı planlıyorsanız buna ek olarak SecureBootModel'i de devre dışı bırakmayı unutmayın.
  • Önceden etkinleştirmemiz gerekmeyen Secure Boot, bazı önyükleme hatalarını tetikliyor olabilir.
    • Genellikle IgnoreInvalidFlexRatio ve HashServices kullanımı gerektirmeyen bazı APTIO IV sistemlerde görülür ancak öncelikli olarak Secure Boot bunları gerektirir.
  • Eski işlemcilerde(ör. Sandy Bridge'den eski) Apple Secure Boot'u etkinleştirmek sistemin 1 saniyeye kadar daha geç yüklenmesine sebep olabilir.
  • Apple Secure Boot'tan önce yayınlanan işletim sistemleri(ör. macOS 10.12 veya daha eskisi)'nde önyükleme, UEFI Secure Boot etkinleştirilene kadar devam eder.
    • Bunun sebebi tıpkı Microsoft Windows'taki gibi,Apple Secure Boot, sistemin uyumsuz olduğunu varsayarak firmware, durumu ele alır.
  • Sanal makinelerde Secure Boot desteği için x86legacy'i kullanabilirsiniz.
    • Bir başka modelin kullanımı için ForceSecureBootScheme'in etkinleştirilmesi gerekir.

ApECID​


ApECID, Apple Enclave tanımlayıcısı olarak kullanılır. Bu kişiselleştirilmiş Apple Secure Boot tanımlayıcıları kullanmamıza ve Apple'ın Secure Boot sayfasına göre SecureBootModel ile eşleştirildiğinde tam güvenlik elde etmemize olanak sağlar.

Kendi ApECID değerinizi oluşturmak için 64-bit integer çıktısı verecek kriptografik olarak güvenli bir generatora ihtiyaç duyacaksınız. Eğer sisteminizde Python 3 yüklü ise aşağıdaki çalıştırılabilecek bir örnek mevcut:
Kod:
python3 -c 'import secrets; print(secrets.randbits(64))'
Bu benzersiz 64-bit integer değerini config.plist dosyanızdaki Misc -> ApECID kısmına ekleyebilirsiniz.
ApECID'i ayarlamadan önce not etmemiz gereken birkaç şey var:
  • Non-zero/sıfır olmayan olarak ApECID sistemlerde sıfır kurulumlar, doğrulama için internet bağlantısı gerektirecektir.
  • Sonraki OpenCore sürümlerinde bu değerin değişmesi durumunda sorun yaşamamak adına SecureBootModel'in, varsayılan yerine tanımlanmış bir değere sahip olması gerekir.
  • Halihazırda kurulum yapmışsanız sistem yığınını kişiselleştirmeniz gerekiyor. Bunu yapabilmek için önce sisteminizi yeniden başlatıp daha sonra Recovery'e girmelisiniz. Ardından aşağıdaki komutu kullanın(Sisteminizdeki disk adını, Macintosh HD ile değiştirmeyi unutmayın):
    Kod:
    # Bu komutu ApECID değerini ayarladıktan sonra çalıştırın 
    # Recovery'de bu komutu çalıştırabilmek için internet bağlantısına sahip olmanız gerekir
    bless --folder "/Volumes/Macintosh HD/System/Library/CoreServices" --bootefi --personalize
macOS 10.15 veya daha eskisini yeniden yüklerken "Unable to verify macOS" hatası alabilirsiniz. Bu sorunu aşmak için kuruluma başlamadan önce Recovery'de aşağıdaki komutu Terminal ile çalıştırarak, macOS'un kişiselleştirmesine 2 MB bellek ayırmalısınız:
Kod:
disk=$(hdiutil attach -nomount ram://4096)
diskutil erasevolume HFS+ SecureBoot $disk
diskutil unmount $disk 
mkdir /var/tmp/OSPersonalizationTemp
diskutil mount -mountpoint /var/tmp/OSPersonalizationTemp $disk

İlgili konu​



Kaynak​


 
Tahoedeki file vault sorunu düzeldi mi acaba sistem parolayı kabul etmiyordu çünkü file vault açık olduğunda.