DevTeam iPhone’u Nasıl Ele Geçirdi
(fabiensanglard.net)- 2007’deki ilk iPhone, ABD’de AT&T aboneliği olmadan etkinleştirilemiyordu ve iPhone Dev Team, yalnızca yazılımla başka operatörlerde kullanmanın yolunu açık biçimde aradı
- Çalışma; firmware’in çözülmesi, etkinleştirmenin atlatılması, yazma izninin elde edilmesi, ARM/Mach-O toolchain kurulması, üçüncü taraf uygulamaların çalıştırılması ve operatör kilidinin kaldırılması olmak üzere 6 kilometre taşıyla özetleniyor
- İlk kırılma noktası,
.ipswiçindeki ramdisk ve şifreli DMG analizleri ilelockdowndetkinleştirme doğrulamasındaki yeniden oynatma açığından yararlanarak ana ekrana erişmekti - Yazma izni, Recovery Mode’da ramdisk ve kernelcache yüklendikten sonra
fstabveServices.plistdeğiştirilerek;/root/Mediaiçine hapsedilmişafcdyerine kök dosya sisteminin yönetilmesiyle elde edildi - Nihai unlock, baseband firmware’inin dump edilip patch’lenerek yeniden yüklenmesi ve
AT+CLCK="PN",0,"00000000"komutunun çalıştırılmasını sağlayan anySIM ile otomatikleştirildi; Apple ise 27 Eylül 2007’de firmware v1.1.1 ile karşılık verdi
2007 iPhone’u ve DevTeam’in hedefi
- Apple, iPhone’u 29 Haziran 2007’de piyasaya sürdü; o dönemde fiyatı 4GB model için $499, 8GB model için $599 idi
- Kutudan çıkan iPhone, yalnızca
Connect to iTunesekranını gösteren etkinleştirilmemiş durumdaydı ve kullanıcının iTunes üzerinden AT&T üyeliğine kaydolması gerekiyordu - Kayıttan sonra bile cihaz AT&T’ye kilitli kalıyordu
- Kanada için başlangıçta bir iPhone çıkış takvimi yoktu; Apple, Rogers ile 11 Temmuz 2008’de iPhone 3G ile birlikte anlaşmaya vardı
- iPhone Dev Team, cihazı yalnızca yazılımla herhangi bir operatörde kullanılabilir hâle getirmeyi hedefleyerek bir araya geldi ve ilerlemeyi iphone.fiveforty.net blogunda sık sık paylaştı
- 3 Temmuz 2007’de gece yarısından 21:00’e kadar 8 güncelleme yayımlandı
DevTeam’in 6 kilometre taşı
- Kilitli cihazı sıradan bir akıllı telefon gibi kullanmak için şu adımlar gerekiyordu
- Sistemi anlamak için okuma erişimi: Break DMG Password
- Etkinleştirilmemiş durumdan çıkış: Bypass Activation
- Sistem değişiklikleri için yazma erişimi: Get Write Access
- Özel çalıştırılabilir dosyalar üretmek için Working Toolchain
- Baseband’in herhangi bir operatöre bağlanmasını sağlamak için Unlock
- Tüm süreci otomatikleştirecek uygulama: Enable Third-Party Applications
- Wayback Machine’e göre 6 Temmuz 2007’de 6 kilometre taşından 2’si tamamlanmıştı; yolculuk 12 Eylül 2007’de sona erdi
- 25 Eylül 2007’de taranan durum sayfasında
Decrypt Firmware,Bypass Activation,Get Write Access,Get Working Toolchain,Enable Third-party Applications,Unlock Phonetamamlanmış olarak görünüyordu
.ipsw analizi ve dosya sistemini okuma
- iTunes, cihaz geri yükleme için
.ipswuzantılı iPhone Software arşivi indiriyordu; bu dosya zip biçimindeydi iPhone1,1_1.0_1A543a_Restore.ipswiçindeimg2kurtarma imajları, baseband ile ilgiliFirmwareklasörü, iOS çekirdeği olankernelcacheve iki büyük DMG dosyası vardı- Tam iOS geri yükleme arşivinin boyutu yaklaşık 105MiB idi
- İlk DMG olan
694-5259-38.dmg, geri yükleme sırasında kullanılan ramdisk idi ve şifreli olmadığındanddile mount edilebiliyordu - Ramdisk, iOS’un tüm dosya sistemi değildi; ancak
/private/etc/master.passwdüzerinden uygulamaları çalıştıranmobilekullanıcısının ve kalan süreçleri çalıştıranrootkullanıcısının parolalarını görmeyi sağladı - İkinci DMG olan
694-5262-39.dmg, normal çalışma sırasında kullanılan iOS dosya sistemiydi ve şifreliydi- Anahtar, ramdisk içindeki
/usr/sbin/asriçinde bulundu - Bu bir passphrase değil anahtar olduğu için
hdiutilkullanılamıyordu; DevTeam kendi çözme aracıvfdecrypt.c’yi yazdı - Çözüldükten sonra çalışma zamanı dosya sisteminin tamamına okuma erişimi elde edildi
- Anahtar, ramdisk içindeki
Etkinleştirmeyi atlatma
- Normal etkinleştirmede iTunes, Apple sunucusu
albert.apple.comve iPhone’dakilockdowndrol alıyordu- iTunes cihazın
DeviceID,IMEI,ICCIDdeğerlerini topluyordu - Bu üç değeri bir token hâline getirip Apple sunucusuna gönderiyordu
- Apple sunucusu token’ı özel anahtarıyla imzalayıp geri döndürüyordu
- USB üzerinden bekleyen
lockdownd, token’ı Apple’ın açık anahtarıyla doğruluyordu - Token Apple’dan gelmişse ve cihaz bilgileriyle eşleşiyorsa durum Activated olarak değişiyordu
- iTunes cihazın
- dvdjon’un
PhoneActivationServerı, iTunes’u HTTPS yerine HTTP üzerinden etkinleştirme sunucusuna erişecek şekilde patch’ledi ve istekleri kendi sunucusuna yönlendirdi - Esas nokta, yeni bir imzalı token oluşturmadan, başarılı bir etkinleştirmeden yakalanmış aynı signed token’ı girdiden bağımsız olarak geri döndüren yeniden oynatma yöntemiydi
- George Hotz’un sunumuna göre
lockdownd, yanıttakiDeviceID,IMEI,ICCIDdeğerlerinin gerçek değerlerle eşleşip eşleşmediğini kontrol etmiyordu - DevTeam, plist’ten hardcoded signed token okuyup iPhone’a gönderen CLI
toolsgeliştirdi; daha sonra bunu iTunes olmadan çalışaniPhoneInterfacee dönüştürdü
Yazma izni ve jailbreak
- Etkinleştirilmiş iPhone, iTunes üzerinden müzik ve fotoğraf gibi dosyaların yüklenmesine izin veriyordu; ancak yüklemeden sorumlu süreç
afcd,/root/Mediaiçinde bir chroot jail’e hapsedilmişti - Yalnızca kullanıcı bölümü okuma/yazma (
rw) olarak mount edilmişti; sistem bölümü ise salt okunur (r) durumdaydı - Amaç, chroot jail’den çıkıp sistem bölümüne de yazabilmekti; jailbreaking terimi de buradan çıktı
- iPhone boot süreci normal mod ve Recovery Mode olarak ikiye ayrılıyordu
- Normal mod BootROM → LLB → iBoot → Kernel → Normal Mode şeklinde ilerliyor; her aşama bir sonraki aşamanın imzasını doğruluyordu
- Recovery Mode, iBoot aşamasında duruyor; iTunes ramdisk ve kernelcache gibi bileşenleri RAM’e yükleyerek geri yükleme moduna geçiriyordu
- DevTeam,
iTunesMobile.dlliçinde iTunes’un geri yükleme sırasında dosya sistemine nasıl yazdığını inceleyerekmount,umount,dittogibi komutları tespit etti iPHUC,iTunesMobile.dll’in özel metotlarıyla Recovery Mode’daki cihazla iletişim kuran bir CLI aracıydı- Kullanıcı cihazı Recovery Mode’a alıyordu
- Ramdisk cihaza gönderilip RAM’e yükleniyordu
- Kernelcache gönderiliyor ve çekirdek ramdisk’i gösterecek şekilde boot ediliyordu
- Cihaz Restore Mode’a giriyordu
- Asıl jailbreak işlemi
fstabveServices.plistdeğişiklikleriyle yapıldıfstabiçinde sistem bölümünün salt okunur değil rw olarak mount edilmesi sağlandıServices.plistiçine/root/Mediayerine/temel alınan ikinci birafcdservisi eklendi- Yeniden başlatmadan sonra iTunes,
afcd2üzerinden tüm dosya sistemini görebiliyordu; hem sistem hem kullanıcı bölümleri okunup yazılabilir hâle geldi
- Daha sonra etkinleştirme ve yazma erişimi, Mac OS X masaüstü uygulaması INdependence ile otomatikleştirildi
Toolchain ve üçüncü taraf uygulamalar
- Toolchain ve üçüncü taraf uygulamaları çalıştırma süreci hakkında kamuya açık bilgi fazla değil; ancak en az 12 kişi bu işe katıldı
- 19 Temmuz 2007’de ARM’i hedefleyen binutils toolchain tamamlandı ve DevTeam’in kendi yazdığı programları iPhone’da çalıştırması mümkün oldu
- Nightwatch’ın
ARM/Mach-O Toolchaini ile ilk bağımsızHello Worlduygulaması derlenip iPhone’da çalıştırıldı - GeoHotz, Apple dışında Mach-O ve ARM kombinasyonunun daha önce olmadığını, bunu kendilerinin yazması gerektiğini açıkladı
- Toolchain’in bir diğer hedefi,
iTunesMobile.soiçindeki özel fonksiyonları açığa çıkaranMobileTerminal.hdosyasını yeniden oluşturarak iTunes’u çalıştırmadanafcile iletişim kurmaktı - Bazı sunumlar çekirdeğin
execlöncesinde çalıştırılabilir dosya imzasını kontrol ettiğini söylese de, ilk iPhone’un bunu yapmadığı ve bunun v1.1.1’de eklenmiş göründüğü sonucuna varılıyor
Baseband unlock ve anySIM
- iPhone, iOS’un çalıştığı akıllı telefon bölümü ile telefon/modem işlevini üstlenen baseband bölümü olarak ikiye ayrılıyordu
- İki sistemin de kendi RAM’i, CPU’su, depolaması, firmware’i ve osilatörü vardı
- İkisi,
/dev/tty.basebandüzerine mount edilmiş UART hattı üzerinden AT komutları alışverişi yapıyordu
- Unlock için gerekli AT komutu baştan beri biliniyordu
AT+CLCK="PN",0,"xxxxxxxx"xxxxxxxx, Network Control Key olan NCK idi ve her cihaza özgü olduğu düşünülüyordu- Deneme sayısı 3–10 ile sınırlıydı; sonrasında firmware AT&T’ye hardlock olabiliriydi
- Baseband’de de BootROM ve güven zinciri vardı; imza doğrulaması uygulanıyordu
- MuscleNerd, baseband’de DFU/Recovery Mode gibi bir güvenlik ağı bulunmadığını; NOR’a veya imaja yanlış müdahale edilirse cihazın kalıcı olarak bozulabileceğini açıkladı
- Temmuz 2007’de DevTeam,
.ipswiçindeki baseband’i tersine mühendislikle inceledi; ramdisk içindeki/usr/local/bin/bbupdaterı da analiz ederek yeni baseband yükleme komutlarını belirledi - İlk CLI
iUnlock, dump edilmiş firmwarenorveICE03.12.06_G.flsgibi birden çok dosyaya ihtiyaç duyuyordu - Daha sonra daha basit
anySIMuygulaması çıktı; telefona yüklendikten sonra tek düğmeyle çalıştırılabiliyordu anySIMşu sırayla çalışıyordu/dev/tty.basebandaçılıp modem parametreleri ayarlanıyordu- 4MiB boyutundaki baseband, yani NOR,
/tmpiçine dump ediliyordu - Baseband RAM’e yükleniyordu
- Ramdisk’ten çıkan
ICE03.12.06_G.flssecpack yükleniyordu - RAM içindeki baseband komutu patch’lenerek herhangi bir NCK’nin unlock’a izin vermesi sağlanıyordu
- Patch’lenmiş baseband yeniden yükleniyordu
AT+CLCK="PN",0,"00000000"veAT+CLCK="PN",2çalıştırılıyordu
-0x400 hilesi
- Patch’lenmiş baseband firmware’inin normalde imza kontrolünden geçememesi ve yüklemenin başarısız olması gerekirdi
- Atlatma yöntemi minus 0x400 offset’ini kullanıyordu
- GeoHotz, ilk
0x400byte’ın imza doğrulanana kadar kullanılmadığını; bu yüzden yazmaya0x400byte öncesinden başlamanın yeterli olduğunu açıkladı - Daha sonra Hacker News okurlarının açıklamalarına göre baseband yeni firmware’i en fazla
0x800byte’lık parçalar hâlinde alıyordu- Tüm 4MiB’i RAM’de saklayıp ardından checksum kontrolü yaparak flash’a yazan bir yapı değildi
- Alınan byte’lar hemen flash’a yazılıyordu; ancak yalnızca ilk
0x400byte RAM’de buffer’lanıyordu - Yükleme bitince baseband checksum’ı kontrol ediyordu
- Başarısız olursa buffer’lanmış ilk
0x400byte flash’a yazılmadan atılıyordu
-0x400yöntemi, önce özgün firmware konumundan0x400byte önce çöp veri yazıp ardından 4MiB firmware’i göndermeye dayanıyordu- Checksum başarısız oluyor ve çöp
0x400byte atılıyordu - Ancak kalan yeni firmware doğru konuma zaten flash’lanmış oluyordu
- Checksum başarısız oluyor ve çöp
Tamamlanma ve sonrasındaki kedi-fare oyunu
- Tam yazılımsal unlock talimatları 12 Eylül 2007’de yayımlandı
- Bununla birlikte kıtalara göre başarı örnekleri de yayımlandı; Kanada örneği de bunlar arasındaydı
- Apple, 27 Eylül 2007’de iPhone firmware v1.1.1’i hızla yayımladı
- DevTeam’in ilerleme çubuğu
Decrypt 1.1.1,Get Write Access 1.1.1,Activate 1.1.1,Unlock 1.1.1,Enable Third-party Applications 1.1.1olarak sıfırlandı - O andan itibaren Apple ile iPhone hacking topluluğu arasındaki kedi-fare oyunu başladı ve sonrasında da sürdü
1 yorum
Hacker News yorumları
Başlık olmadığı için kod çalıştırmaya geçilmez ve bu yüzden güvenlidir; en sonda tüm imzanın doğrulaması geçerse başlık yazılarak tüm imaj geçerli hale getirilir
Buradaki hile, istenen yazma konumundan 0x400 bayt önce önce çöp 0x400 bayt yazmaktır. Bu kısım başlık olarak değerlendirilip sadece tamponlanır ve gerçekte yazılmaz; kalan aktarım verisi ise istenen konuma gerçekten yazılır. Sonrasında imza doğrulaması başarısız olur ve aslında istenmeyen ilk 0x400 bayt da yazılmadığı için işlem başarılı sayılır
Veri yazmadan önce uygulanan -0x400 kaydırmasını biri daha açıklarsa konu tamamen netleşecek gibi
Seek(fd, 0xA0020000 - 0x400);ile verinin yazılacağı yerden 0x400 önceye gidiliyor veSendWrite(fd, foo, 0x400, false);ile yazılmak istenen ilk 0x400 bayt sıfırlarla dolduruluyorArdından
SendWrite(fd, fw, fwsize, true);ile kalan baytlar gerçek veriyle dolduruluyor veSendEndSecpack(fd);çağrılıyor. iPhone, 0x400 bayttan sonraki veriyi yani aslında yazılmak istenen tüm veriyi kopyalayıp ardından imza doğrulamasını deniyor ve başarısız oluyor. İmza doğrulaması başarılı olsaydı sıfır bırakılan ilk 0x400 bayt da o anda kopyalanacaktıSanırım PSP’nin kilidini açan PDF ya da TIFF exploit’leri de onun işiydi. Güney Amerika’da bir yerde, muhtemelen üniversitede çalışıp yaşıyordu ama bildiklerim bununla sınırlı
Gerçekten çok eğlenceli bir dönemdi ve çok şey öğrendim. Ancak George Hotz, yapmaması yönündeki tekrar eden rica ve uyarılara rağmen, Japonca belgelere erişim konusunda yardımcı olan bazı kişilerin güvenliğini riske attı; bu çok sinir bozucuydu ve sonunda dev team’in projeden ayrılmasının nedeni de buydu
lockdowndtarafından Apple açık anahtarıyla doğrulanıp durumun “Activated” olarak değiştirilmesi, bugünkü OAuth’ın bir öncülü gibi geliyor/root/Mediadizinini/için sembolik link yapmaktiBu link yükseltme sırasında da korunuyordu ve sonrasında firmware güncellemesi yapınca
rootfs’ye erişim sağlanabiliyordu. O zamanlar adı iOS değil iPhone OS’tuOtomobil üreticilerinde de benzeri vardır. Yeni bir ürünün ya da yeni bir platformun ilk birkaç model yılını satın almamak genelde daha iyidir
Genelde “S”, temel modele kıyasla küçük bir yükseltmeyi ifade eden bir işaretti