NullMoth Driver Update

Emre Demir

PADAVAN
2 Eyl 2023
164
88
251
Nullmoth'un 2.3.7 Nvidia Driveriyle beraber gelen yeni değişikliker ve hata düzeltmeleri

Bir güvenlik güncellemesi. 2.3.6 sürümündeki tüm özelliklere ek olarak aşağıdaki güvenlik açıklarını ve hataları giderir.

2.3.6 kullanıyorsanız doğrudan bu sürüme geçebilirsiniz: install.sh dosyasını çalıştırıp Mac'inizi bir kez yeniden başlatmanız yeterli.

Güvenlik
Bu sürümde, sürücü Apple ve NVIDIA'nın kendi grafik sistemleri için yayımladığı güvenlik düzeltmelerinde ele alınan açık türlerine göre denetlenerek tespit edilen bir dizi güvenlik açığı kapatılmıştır. Bu açıkların birçoğu makinedeki herhangi bir program tarafından kullanılabiliyordu. Bunlardan biri ise bir web sayfası üzerinden tetiklenebiliyordu.

- Hatalı bir uyumluluk penceresi, video arabelleğinin sınırları dışına yazılmasına neden olabiliyordu. Bit akışındaki uyumluluk penceresi (conformance window) için herhangi bir sınır kontrolü yapılmıyordu. Pencerenin genişliği görüntünün genişliğini aştığında, görüntünün görünür genişliği negatif bir değere dönüşüyordu. Bu değer daha sonra kopyalama uzunluğu olarak kullanılıyordu. Hem H.264 hem de HEVC kod çözücüleri artık görüntünün sınırlarına sığmayan pencereleri reddediyor. Bu kod çözücüler video oynatan tüm programlarda kullanıldığından, saldırı amaçlı bir video web sayfasından, e-posta ekinden veya önizleme aracılığıyla sisteme ulaşabilir.

- Framebuffer sürücüsü, çekirdek adreslerini tüm programlara ifşa ediyordu. Sürücünün yazdığı her izleme satırı, ayrıcalık gerektirmeden okunabilen bir sistem kayıt özelliğine (registry property) kaydediliyordu. Bu satırlarda çekirdek kodunun adresleri, heap bellek adresleri ve GPU fiziksel adresleri bulunuyordu. Bunlar, bir saldırganın daha ileri düzey saldırılar gerçekleştirebilmesi için ihtiyaç duyduğu kritik bilgilerdi. Artık nvfbtrace önyükleme parametresi özellikle belirtilmediği sürece izleme kapalıdır ve hiçbir günlük satırında adres yazdırılmaz.

- GPU firmware dosyaları yalnızca yükleyicinin yazabildiği bir dizine taşındı. Firmware daha önce herhangi bir kullanıcının yazabildiği ortak bir klasörden okunuyordu ve içeriği doğrulanmıyordu. Artık /Library/NullMoth/nvfw dizininde tutuluyor. Bu dizinin sahibi root kullanıcısıdır ve grup ile diğer kullanıcılar için yazma izni kaldırılmıştır. Firmware dosyaları, kurulum paketinde bulunan özet değerleri (digest) üzerinden doğrulanıyor ve dosya boyutları sınırlandırılıyor. Yükleyici, kendisinin oluşturmadığı bir firmware dizinini kabul etmiyor.

- Bir istemcinin kapatılması sırasında, devam eden kendi işlemiyle çakışma yaşanabiliyordu. İstemci kapatılırken bellek aralıklarının listesi serbest bırakılabiliyor, ancak aynı liste hâlâ bir bellek eşlemesi oluşturmak için kullanılıyor olabiliyordu. Artık her istemcinin işlemleri ve kapatma süreci aynı kilit altında yürütülüyor. Kapatılma durumu atomik olarak ayarlanıyor ve bellek aralıkları istemci kapatıldığı anda değil, istemci nesnesi tamamen serbest bırakıldığında temizleniyor.

- Ekran kartı bellek eşlemesi yalnızca o karta ait bellek aralıkları içinde yapılabiliyor. Böylece bir çağıran, sürücüye rastgele bir fiziksel adres vererek bu adresin eşlenmesini sağlayamıyor.

- Doku ve arabellek bölgelerinin sınırları artık toplama yerine çıkarma yöntemiyle denetleniyor. x + width işlemi 32 bitlik aritmetikte taşmaya uğrayabiliyordu. Bu nedenle adres alanının üst sınırına yakın bir konumdan başlayan bölge, sınır denetimini geçebiliyor ve GPU kopyalama işlemine geçersiz bir ofsetle ulaşabiliyordu. Okuma işlemlerinde bu durum, dokunun dışındaki bellekten veri döndürülmesine de yol açabiliyordu. Artık kopyalama işleminin desteklediği aralığa sığmayan 64 bitlik alanlar, farklı ve geçerliymiş gibi görünen bir bölgeye daraltılmak yerine doğrudan reddediliyor.

- Gölgelendirici (shader) kodu, derleyici tarafından okunmadan önce sınır denetiminden geçiriliyor. Okuyucunun reddettiği bir modül artık yine de derleyiciye gönderilmiyor. Shader kütüphaneleri, oyun içerikleri, modlar veya indirilmiş dosyalar gibi kaynaklardan gelebilen ve program tarafından sağlanan verilerdir.

- Çekirdek bellek eşleme tablosuna erişim artık eşzamanlılık açısından güvenli. İki farklı eşleme aynı tablo yuvasını alabiliyor, bir eşleme serbest bırakılırken de başka bir işlem o kaydı okuyor olabiliyordu. Tablo işlemleri artık uygun şekilde sıralanıyor.

- Yükleyici artık paket içeriğini doğrulanmış özel bir kopyadan kuruyor. Önceden paket doğrulanıyor, ancak dosyalar dakikalar sonra aynı klasörden kopyalanıyordu. Bu klasöre yazabilen bir işlem, doğrulama ile kurulum arasında bir çekirdek uzantısını değiştirebiliyordu. Katkıları için Aniruddh Sahay'a teşekkürler. Hızlandırıcı uzantısı da artık özgün klasör yerine doğrulanmış kopyadan alınıyor. Ayrıca paketin kendi sembolik bağlantıları göreli yollar kullanacak şekilde düzenlendi; böylece paket dışındaki konumlara işaret etmiyorlar.

- Görüntüleme motoruna açılan bir kullanıcı alanı erişim yolu kapatıldı. İki sürücü çağrısı, root yetkisine sahip bir işlemin, içindeki işaretçileri çekirdek adresleri olarak kabul edilen bir görüntüleme oturumu açmasına izin veriyordu. Sürücüyle birlikte gelen hiçbir bileşen bu çağrıları kullanmadığından, artık her ikisi de unsupported (desteklenmiyor) hatası döndürüyor. Katkıları için Aniruddh Sahay'a teşekkürler.

- Sıradan programlar tarafından tetiklenebilen daha küçük ölçekli sınır denetimi açıkları da giderildi. Bunlar arasında sistem aramalarına iletilen düzlem indeksi, firmware okuma uzunluğu, argüman kodlayıcısının GPU adresine dönüştürdüğü ofset, taşmaya uğrayabilen sistem belleği eşleme uzunluğu ve çekirdeğin kendi kaydı yerine çağıranın sağladığı tanımlayıcılara güvenen adres çözümleme işlemi bulunuyor.

Hata Düzeltmeleri
- macOS 26'da uygulama simgeleri ve Liquid Glass efektleri artık doğru şekilde çiziliyor. Önceden simgelerin bazı bölümleri eksik görünüyordu: App Store simgesinde A harfi, Takvim'de üst başlık, Fotoğraflar'da çiçek yaprakları, Safari'de pusula ibresi eksikti. Sistem Ayarları'nda ise simgeler hiç görünmüyordu.

Sorunun nedeni, sistemin simge ve cam efektlerinde, bir fonksiyon sabiti (function constant) arkasına bağlanmış görünür bir fonksiyon kullanmasıydı. Sürücü, bu fonksiyonun grafik iş hattının (pipeline) hazır olmasını gerektirip gerektirmediğine shader derleyicisinin hata mesajlarını inceleyerek karar veriyordu. Ancak 2.3.6 sürümünde derleyici bu fonksiyonları artık doğrudan reddetmediği için hata mesajlarının biçimi değişmişti. Sürücü beklediği metni bulamayınca ilgili shader'ı tamamen atlıyordu.

Artık sürücü, derleyicinin hata metinlerini incelemek yerine fonksiyonun başvurduğu diğer fonksiyonları sorguluyor. Apple Silicon üzerinde elde edilen görüntülerle karşılaştırıldığında, altı simgeden beşinde 65.536 piksel başına yalnızca 45–71 piksel farklılık görülüyor. 2.3.6 sürümünde bu değer 4.562–18.192 piksel arasındaydı.

Güncellemeden sonra simgeler hâlâ hatalı görünüyorsa sisteminizi bir kez daha yeniden başlatın. Böylece sistemin simgeleri yeniden çizmesi sağlanır.

- Pencere sürükleme işlemleri daha akıcı hâle getirildi. Sürücü önceki bir komutun tamamlanmasını beklerken yeni bir komut arabelleği (command buffer) gönderildiğinde, bu yeni komut ancak bekleme sona erdikten sonra GPU'ya ulaşıyordu. Bu durum, pencere yöneticisi ile GPU'nun sırayla çalışmasına ve akıcılığın düşmesine neden oluyordu.

Katkıları için watchthelight'a teşekkürler. 165 Hz yenileme hızına sahip bir ekranda pencere sürükleme performansı saniyede 35–63 kare olarak ölçüldü.

- Yükleyici, sürücü yükseltmesi sırasında GPU firmware dosyalarının yedeğini almıyordu. Firmware'in konumu değiştirildiği için yedekleme işlemi yalnızca yeni dizini kontrol ediyor, eski konumdaki dosyaları gözden kaçırıyordu. Hem kaldırıcı (uninstaller) hem de yeni sürücü başlatılamadığında çalışan otomatik geri dönüş mekanizması bu yedeğe bağlıydı. Dolayısıyla yükseltme sonrasında önceki sürüme geri dönülürken firmware geri yüklenemiyor, Mac'in ekranı tamamen karanlık kalabiliyor ve kurtarma işlemi zorlaşıyordu.

Artık yedekleme işlemi, yeni konumda dosya bulamadığında eski konumu da kontrol ediyor.

- Klasik H.264 kod çözücüsü de diğer kod çözücü gibi artık kaynak kodundan derleniyor. Dağıtılan iki kod çözücü kütüphanesi yalnızca GPU'nun görüntü verilerini belleğe yerleştirme düzeni (untiling layout) açısından farklılık gösteriyor. Önceden klasik sürüm, derlenmiş kütüphanedeki belirli bir komutun sabit bir ofsette değiştirilmesiyle oluşturuluyordu. Bu yöntem nedeniyle kaynak kodunda yapılan düzeltmeler klasik sürüme hiçbir zaman yansımıyordu. Artık her iki sürüm de kaynak kodundan oluşturuluyor.
 
BootLoader
OC 1.0.8
Laptop Modeli
2020 MacBook Pro 4 Thunderbolt 3 Ports / 16GB ram & 500GB SSD
Anakart Modeli
MSI MPG Z490 Gaming PLUS
İşlemci Modeli
I9 10900
Grafik Kartı
Intel UHD630 & 2xRTX3060TI
Ses Kartı Modeli
ALCS1200A
Ağ Aygıtları
Realtek RTL8125
Disk ve RAM
2x16 32GB 3200 MHz DDR4 & 960GB SSD (Tahoe) & 240GB SSD (Windows 11) & 128GB SSD (Sequoia)
  • Like
Tepkiler: turko35408

Benzer konular

✖
AD Engelleyici Tespit Edildi

Anlıyoruz, reklamlar can sıkıcı!

Elbette, reklam engelleme yazılımı reklamları engelleme konusunda harika bir iş çıkarsa da, web sitemizin faydalı özelliklerini de engeller. En iyi site deneyimi ve bize destek olmak için lütfen AdBlocker’ınızı devre dışı bırakın.

AD Reklam Engelleyiciyi Devre Dışı Bıraktım    Hayır teşekkürler