- tachy0n, iOS 13.0~13.5 için yayımlanmış son 0day jailbreak exploit örneğidir
- Bu hata,
lio_listio sistem çağrısında Lightspeed olarak adlandırılan bir yarış durumu (race condition) olup, çekirdek LPE (yetki yükseltme) zafiyetinin istismarıdır
- Spice ve unc0ver dahil çeşitli jailbreak projelerinde bu zafiyetin gerçekten kullanıldığı örnekler bulunur; yazı, zafiyetin istismar yöntemi ile bellek yönetimi sorunlarını hedef alan hack tekniklerini açıklar
- Apple, bu exploit yayımlandıktan sonra yama ve regresyon testleri uyguladı; ayrıca daha güçlü çekirdek nesnesi ayrımı (Zone, kheap vb.) ve pointer koruma özelliklerini büyük ölçüde güçlendirdi
- Sonrasında iOS 14'ten itibaren jailbreak ve çekirdek exploit ortamı temelden değişti; artık kamuya açık çekirdek exploit bulunmayan bir duruma gelindi
0. Giriş
- tachy0n, iOS 13.0'dan 13.5'e kadar geçerli olan eski bir exploi̇ttir
- 23 Mayıs 2020'de unc0ver v5.0.0 içinde 0day olarak yayımlandı ve Apple yalnızca 1 hafta içinde acil yama çıkardı
- Söz konusu zafiyet daha önce 1day olarak kullanılmış olduğundan, exploit tekniği açısından anlamlı bir örnek olarak değerlendirilir
- Bu yazı, zafiyetin kaynağını ve nasıl keşfedildiğini ayrıntılı biçimde açıklar
1. Lightspeed
- Bu zafiyet, Synacktiv'in duyurduğu Lightspeed hatasıdır (CVE-2020-9859 vb.);
lio_listio syscall'ında asenkron I/O bağlamı belleği serbest bırakılırken yarış durumu sorunu oluşur
- Bellekte double free koşulu oluşturmak için I/O işlemlerinin zamanlaması ayarlanır; iki kez nesne serbest bırakma üzerinden aynı bellek alanında birden fazla nesnenin üst üste bindirilmesiyle kullanılabilir
- Çekirdekteki
kalloc.16 zone'undaki dinamik bellek tahsis yapısı exploit için kullanılır
- Özünde, başarı olasılığını artırmak için yarışın birçok kez tekrarlanması yöntemidir
2. Spice
- Bu exploit geçmişte team Jake Blair tarafından geliştirilen Spice jailbreak'inde kullanıldı
racoon ve uygulamada farklı exploit varyantları uygulanmıştı; ana hedef mach port sahteciliği idi
- iOS 11.x döneminde PAN (Protection Against Null dereference) atlatması kolaydı ve çekirdek infoleak ile sandbox escape ile birleştirilen çeşitli hack teknikleri denendi
racoon tarafında IOKit erişim kısıtı nedeniyle OSUnserializeXML kullanılarak çekirdekte ilgili zone için (spray) hedef nesneler oluşturuldu
- sysctl_procargsx, çekirdekte başlatılmamış bellek sızıntısı, sandbox politikaları gibi ayrıntı farkları ve sonraki teknik gelişmeler de anlatılır
3. unc0ver
- unc0ver uygulanırken exploit yapısı, A8~A13 dahil geniş bir SoC yelpazesinde çalışacak şekilde tasarlandı
- OSData nesnelerinin iç içe geçmesi ve overlap izlenir; doğru anda istenen nesne serbest bırakılıp yeniden tahsis edilerek bellek alanı denetlenir
- IOMemoryDescriptor gibi çekirdek nesneleri kullanılarak kullanıcının denetlediği veri tampon adresi açığa çıkarılır ve çekirdekten doğrudan okuma/yazma gerçekleştirilir
- iOS 13 çekirdek bellek tahsisçisi politikalarındaki zayıflıklar, zone_require atlatması gibi yöntemlerle uygun biçimde kullanılır
- Exploit'in genel yapısının ayrıntılı uygulaması, yayımlanmış GitHub deposu olan
tachy0n içinde görülebilir
4. Sonraki etkiler
- 0day exploit'in yayımlanması, güvenlik topluluğu ve Apple içinde büyük yankı uyandırdı
- Gerçek exploit yayımlandıktan yalnızca 4 saat sonra Project Zero ve Synacktiv tarafından ayrıntılı analiz ve karşı önlemler geliştirildi
- Apple, yamadan sonra bu zafiyet için XNU'ya resmi regresyon testleri ekledi; böylece daha temel bir güvenlik stratejisini güçlendirme yönüne geçti
- iOS 14'ten itibaren allocation alanı ayrımı, secure object guard, PAC (pointer authentication code), kheap yapısı vb. büyük değişiklikler getirilerek exploit geliştirme zorluğu ciddi biçimde artırıldı
- Artık exploit stratejisinin kendisi daha önemli hale geldi ve kamuya açık bilgi ile özel araştırma arasındaki fark büyüdü; iOS 17~18 içinse kamuya açık çekirdek exploit hiç yok
5. Sonuç
- Bu, iOS güvenliği ve jailbreak alanının 5 yıl içinde dramatik biçimde değiştiğini açıkça gösteren bir örnektir
- Jailbreak/exploit topluluğunun, araştırmacıların ve Apple'ın teknik yöneliminin nasıl değiştiğine dair içgörü sunar
- IL'in paylaşıldığı ve meydan okunduğu dönem artık geride kaldı; iOS 14 sonrasında exploit bilgisinin paylaşımı belirgin biçimde azaldı
Referans ve iletişim
2 yorum
Apple’ın donanımı harika olabilir ama yazılımı kullanıcıyı tasmalı tutma niyetiyle dolu.
Kendi yapıp derlediğiniz bir uygulamayı yalnızca kendi cihazınızda çalıştırmak isteseniz bile 100 dolarlık bir abonelik gerekiyor.
Küçük ve orta ölçekli açık kaynak uygulamaları kullanıp kendisi derleyerek kullanan bir geliştiriciyseniz,
Apple cihazlarında açık istismar edip jailbreak yaparak sideload etmektense doğrudan Android kullanmak daha rahat.
Hacker News yorumları
SockPuppet'ın geçmişte iOS 12 döneminde de jailbreak için kullanıldığından ve Project Zero'dan Ned Williamson'ın bunu Apple'a bildirmesiyle iOS 12.3'te yamalandıktan sonra iOS 12.4'te yeniden ortaya çıktığından bahsediliyor
Muhtemelen Apple XNU'yu ayrı bir branch olarak fork'ladığı için ilgili yamayı atladı; asıl büyük sorun ise bu tür yeni/eski açıklar için temelde hiç regresyon testi yapılmamış olması
Ben de bilinen birkaç 1-day açığı için bizzat regresyon testini otomatikleştirip çalıştırdım ve hemen başarıyla açık buldum
Linux, FreeBSD, OpenWRT, OpenSSH gibi çeşitli açık kaynak projelerinde de yeni sürümlerde eski açıklar için regresyon testleri çalıştırılıp çalıştırılmadığını merak ediyorum
Her açığı otomatik bir biçimde yazıp CI içinde kaynak ayırarak çalıştırma imkânı varsa, bunun getirisi fazlasıyla yüksek olur diye düşünüyorum
20 yıl önce üniversite dönemimde Mozilla'da gönüllü QA yaparken yüzlerce regresyon testi vakası vardı
Çoğu render/layout ve JS engine hatasıydı; minimal bir test case oluşturunca bunu doğrudan CI pipeline'ına eklemek mümkündü
Hataların kendisi kaçınılmaz olabilir ama daha önce düzeltilmiş bir hatanın yeniden ortaya çıkması zaman ve para israfının en kötüsü; kaliteye önem veren kurumlar mutlaka regresyon testine ciddi yatırım yapar
Ne yazık ki QA'i görmezden gelen ya da bunu sadece dış kaynakla çözmeye çalışan, düzgün şekilde önemsemeyen birçok kurum da var
Apple'ın jailbreak ile ilgili regresyon testi olmamasını anlamıyorum
Mozilla gibi yerlerde uzun zamandır Tinderbox ve Bugzilla gibi araçlarla harika QA ve CI/CD ortamları kurulmuştu; DevOps kavramı ortaya çıkmadan önce bile bunun yaygın olduğunu sanıyordum ama aslında öyle olmadığını sonradan fark ettim
Binlerce test case vardı; sanırım Sqlite'tı
Bir patch'i backport etmezseniz, o testin de birlikte backport edilmemesi ihtimalinin yüksek olduğu ekleniyor
Sonuçta Conway's law güvenlik ile özellik geliştirme arasında da aynen geçerli
Bu yüzden build/release sürecinde regresyon testleri iyi kurulmuş kurumlarda bile, iç organizasyon yapısı nedeniyle güvenlikle ilgili meselelerin arada kaynaması olası
istihbarat kurumlarının (G10, Rusya, Çin, Kuzey Kore vb.) ve birçok özel grubun elbette açıklar için bu şekilde regresyon testleri yapıyor olduğu görüşü dile getiriliyor
Bir arkadaşınızla yabancı dilde konuşurken bir anda beyin cerrahisi ya da nükleer fizik gibi son derece uzmanlık isteyen bir konuya geçildiğinde zihnin boşalmasına benzetiliyor
Geçmişte bir çelik fabrikası onarımıyla ilgili konuşmayı tercüme etmeye çalıştığım anı aklıma geldi
Jailbreak'in ortadan kaybolmuş olmasına üzülüyorum; jailbreak'li iPad'imi özellikle faydalı bir şey için kullanmamış olsam da, başlı başına eğlenceliydi
Bugün olsa tethering uygulaması, UTM ve JIT çözümü kurmak isterdim
SideStore umut verici görünüyor ve denemek istiyorum ama Apple hesabım geçmişte ücretli geliştirici hesabıydı ve 10 uygulama ID'sinin süresi dolmadığı için bu tür uygulamaları yüklememde kısıtlama var
Ya yeni bir hesap açmam ya da yeniden ödeme yapmam gerekiyor
Jailbreak olmadan iPhone'u ana telefon olarak kullanmak için hiçbir nedenim yoktu; sonunda Android'e geçtim
O sıralarda Android temel özellikler açısından epey yetişmişti
Aracı bir broker üzerinden mi gidilmesi gerektiği, resmî bir e-posta ya da kanal olup olmadığı, yoksa bunun sadece ilk seviye destek içinde kaybolma riski taşıyıp taşımadığı soruluyor
Yazıda da belirtildiği gibi, özel topluluklarda açıklar hâlâ tutuluyor ve Apple yamalamaya devam ediyor
Sadece kamuya açık jailbreak'ler azalmış durumda