macOS Kernel & System Extensions
XNU Çekirdeği
macOS'un çekirdeği XNU'dur, "X is Not Unix" anlamına gelir. Bu çekirdek temel olarak Mach mikroçekirdeği (daha sonra tartışılacak), ve Berkeley Yazılım Dağıtımı (BSD) unsurlarından oluşur. XNU ayrıca I/O Kit adlı bir sistem aracılığıyla çekirdek sürücülerine platform sağlar. XNU çekirdeği, Darwin açık kaynak projesinin bir parçasıdır, bu da kaynak kodunun serbestçe erişilebilir olduğu anlamına gelir.
Bir güvenlik araştırmacısı veya Unix geliştiricisi açısından bakıldığında, macOS, şık bir GUI'ye ve bir dizi özel uygulamaya sahip bir FreeBSD sistemiyle oldukça benzer hissedebilir. BSD için geliştirilen çoğu uygulama, Unix kullanıcıları için tanıdık olan komut satırı araçları macOS'ta herhangi bir değişiklik yapmadan derlenip çalıştırılabilir. Ancak, XNU çekirdeği Mach'ı içerdiğinden, geleneksel bir Unix benzeri sistem ile macOS arasında bazı önemli farklılıklar vardır ve bu farklılıklar potansiyel sorunlara neden olabilir veya benzersiz avantajlar sağlayabilir.
XNU'nun açık kaynak sürümü: https://opensource.apple.com/source/xnu/
Mach
Mach, UNIX uyumlu bir mikroçekirdektir. Temel tasarım prensiplerinden biri, çekirdek alanında çalışan kod miktarını en aza indirgemek ve dosya sistemi, ağ ve I/O gibi birçok tipik çekirdek işlevini kullanıcı düzeyi görevleri olarak çalıştırmaya izin vermektir.
XNU'da, Mach, işlemci zamanlama, çoklu görev, ve sanal bellek yönetimi gibi bir çekirdek genellikle ele aldığı birçok kritik düşük seviye işlemden sorumludur.
BSD
XNU çekirdeği ayrıca FreeBSD projesinden türetilen önemli miktarda kodu içerir. Bu kod, Mach ile birlikte çekirdeğin bir parçası olarak çalışır, aynı adres alanında. Ancak, XNU içindeki FreeBSD kodu, uyumluluğunu sağlamak için değişiklikler gerektiğinden, orijinal FreeBSD kodundan önemli ölçüde farklılık gösterebilir. FreeBSD, aşağıdaki gibi birçok çekirdek işlemine katkıda bulunur:
İşlem yönetimi
Sinyal işleme
Kullanıcı ve grup yönetimi de dahil olmak üzere temel güvenlik mekanizmaları
Sistem çağrısı altyapısı
TCP/IP yığını ve soketler
Güvenlik duvarı ve paket filtreleme
BSD ve Mach arasındaki etkileşimi anlamak karmaşık olabilir, farklı kavramsal çerçevelerinden dolayı. Örneğin, BSD, temel yürütme birimi olarak işlemleri kullanırken, Mach, iş parçacıklarına dayalı olarak çalışır. Bu uyumsuzluk, XNU'da, her BSD işlemini yalnızca bir Mach göreviyle ilişkilendirerek uzlaştırılır. BSD'nin fork() sistem çağrısı kullanıldığında, çekirdekteki BSD kodu, bir görev ve bir iş parçacığı yapısı oluşturmak için Mach işlevlerini kullanır.
Ayrıca, Mach ve BSD her biri farklı güvenlik modellerini sürdürür: Mach'ın güvenlik modeli port haklarına dayanırken, BSD'nin güvenlik modeli işlem sahipliğine dayanır. Bu iki model arasındaki farklılıklar bazen yerel ayrıcalık yükseltme güvenlik açıklarına neden olmuştur. Tipik sistem çağrılarından başka, kullanıcı alanı programlarının çekirdek ile etkileşimine izin veren Mach tuzağı da bulunmaktadır. Bu farklı unsurlar bir araya gelerek macOS çekirdeğinin çok yönlü, karmaşık mimarisini oluşturur.
I/O Kit - Sürücüler
I/O Kit, XNU çekirdeğindeki açık kaynaklı, nesne yönelimli bir cihaz sürücü çerçevesidir, dinamik olarak yüklenen cihaz sürücülerini yönetir. Çeşitli donanımı destekleyen modüler kodun çekirdeğe anında eklenmesine izin verir.
macOS IOKitIPC - Süreçler Arası İletişim
macOS IPC - Inter Process CommunicationKernelcache
Kernelcache, XNU çekirdeğinin ön derlenmiş ve ön bağlantılı bir sürümü ile temel cihaz sürücüleri ve çekirdek uzantılarını içeren bir dosyadır. Sıkıştırılmış bir formatta depolanır ve önyükleme sırasında belleğe açılır. Kernelcache, önyükleme süresini hızlandırarak, hazır çalışmaya hazır bir çekirdek ve önemli sürücülerin mevcut olmasını sağlayarak, önyükleme sırasında bu bileşenlerin dinamik olarak yüklenmesi ve bağlanması için harcanacak zaman ve kaynakları azaltır.
iOS'ta /System/Library/Caches/com.apple.kernelcaches/kernelcache
konumundadır, macOS'ta ise find / -name kernelcache 2>/dev/null
veya mdfind kernelcache | grep kernelcache
komutlarıyla bulunabilir.
Yüklenen çekirdek uzantılarını kontrol etmek için kextstat
komutunu çalıştırmak mümkündür.
IMG4
IMG4 dosya formatı, Apple'ın iOS ve macOS cihazlarında firmware bileşenlerini güvenli bir şekilde saklamak ve doğrulamak için kullandığı bir konteyner formatıdır (örneğin kernelcache). IMG4 formatı, bir başlık ve gerçek yük (örneğin bir çekirdek veya önyükleyici) gibi farklı veri parçalarını kapsayan birkaç etiket içerir. Format, cihazın bileşeni yürütmeye geçmeden önce bileşenin otantikliğini ve bütünlüğünü doğrulamasına olanak tanıyan kriptografik doğrulamayı destekler.
Genellikle aşağıdaki bileşenlerden oluşur:
Yük (IM4P):
Genellikle sıkıştırılmış (LZFSE4, LZSS, …)
İsteğe bağlı olarak şifrelenmiş
Manifesto (IM4M):
İmza içerir
Ek Anahtar/Değer sözlüğü
Geri Yükleme Bilgisi (IM4R):
APNonce olarak da bilinir
Bazı güncellemelerin tekrar oynatılmasını önler
İSTEĞE BAĞLI: Genellikle bulunmaz
Çekirdekcache'i açmak için:
Kernelcache Sembolleri
Bazen Apple, sembolleri içeren kernelcache yayınlıyor. Bazı firmware'leri sembollerle birlikte indirebilirsiniz, https://theapplewiki.com adresindeki bağlantıları takip ederek.
IPSW
Bunlar, https://ipsw.me/ adresinden indirebileceğiniz Apple firmware'leridir. Diğer dosyalar arasında kernelcache bulunacaktır. Dosyaları çıkarmak için sadece onu zip dosyasından çıkarmanız yeterlidir.
Firmware çıkarıldıktan sonra şöyle bir dosya elde edersiniz: kernelcache.release.iphone14
. Bu, IMG4 formatındadır ve ilginç bilgileri çıkarmak için şu aracı kullanabilirsiniz:
İşte çıkarılmış kernelcache için sembolleri kontrol edebilirsiniz: nm -a kernelcache.release.iphone14.e | wc -l
Bununla birlikte şimdi tüm uzantıları veya ilgilendiğiniz uzantıyı çıkarabiliriz:
macOS Kernel Uzantıları
macOS, Kernel Uzantılarını (.kext) yüklemeye karşı son derece kısıtlayıcıdır çünkü bu kodun çalışacağı yüksek ayrıcalıklardan dolayı. Aslında, varsayılan olarak neredeyse imkansızdır (bir bypass bulunmadıkça).
macOS Kernel ExtensionsmacOS Sistem Uzantıları
Kernel Uzantıları yerine macOS, çekirdek ile etkileşim için kullanıcı düzeyinde API'lar sunan Sistem Uzantılarını oluşturdu. Bu şekilde, geliştiriciler çekirdek uzantılarını kullanmaktan kaçınabilirler.
macOS System ExtensionsReferanslar
Last updated