1 poin oleh GN⁺ 2024-03-11 | 1 komentar | Bagikan ke WhatsApp
  • iPhone pertama pada 2007 tidak bisa diaktifkan tanpa berlangganan AT&T di AS, dan iPhone Dev Team secara terbuka mencari cara agar perangkat bisa dipakai di operator lain hanya lewat perangkat lunak
  • Pekerjaan itu dirangkum ke dalam 6 tonggak: mendekripsi firmware, melewati aktivasi, mendapatkan hak tulis, membangun toolchain ARM/Mach-O, menjalankan aplikasi pihak ketiga, dan membuka kunci operator
  • Terobosan awal datang dari analisis ramdisk dan DMG terenkripsi di dalam .ipsw, serta memanfaatkan celah replay pada verifikasi aktivasi lockdownd untuk masuk ke layar utama
  • Hak tulis diperoleh dengan memuat ramdisk dan kernelcache dalam Recovery Mode lalu mengubah fstab dan Services.plist, sehingga alih-alih afcd terkunci di /root/Media, ia bisa menangani root filesystem
  • Unlock final diotomatisasi lewat anySIM, yang membuang, menambal, dan mengunggah ulang firmware baseband lalu menjalankan AT+CLCK="PN",0,"00000000"; Apple merespons pada 27 September 2007 dengan firmware v1.1.1

iPhone 2007 dan tujuan DevTeam

  • Apple merilis iPhone pada 29 Juni 2007, dengan harga saat itu $499 untuk model 4GB dan $599 untuk model 8GB
  • iPhone yang baru dikeluarkan dari boks berada dalam keadaan tidak aktif dan hanya menampilkan layar Connect to iTunes, dan pengguna harus mendaftar keanggotaan AT&T di iTunes
  • Bahkan setelah pendaftaran, perangkat tetap terkunci ke AT&T
  • Kanada tidak memiliki jadwal peluncuran iPhone awal, dan Apple baru mencapai kesepakatan dengan Rogers pada 11 Juli 2008 bersama iPhone 3G
  • iPhone Dev Team berkumpul dengan tujuan agar perangkat bisa dipakai di operator mana pun hanya lewat perangkat lunak, dan mereka sering mempublikasikan perkembangan di blog iphone.fiveforty.net
    • Pada 3 Juli 2007, ada 8 pembaruan yang diunggah dari pukul 00.00 hingga 21.00

6 tonggak DevTeam

  • Untuk memakai perangkat terkunci seperti smartphone biasa, langkah-langkah berikut diperlukan
    • Akses baca untuk memahami sistem: Break DMG Password
    • Keluar dari keadaan tidak aktif: Bypass Activation
    • Akses tulis untuk memodifikasi sistem: Get Write Access
    • Working Toolchain untuk membuat executable kustom
    • Unlock agar baseband dapat terhubung ke operator mana pun
    • Aplikasi untuk mengotomatisasi seluruh proses: Enable Third-Party Applications
  • Berdasarkan Wayback Machine, pada 6 Juli 2007, 2 dari 6 tonggak sudah selesai, dan perjalanan ini berakhir pada 12 September 2007
  • Pada halaman status yang di-crawl 25 September 2007, Decrypt Firmware, Bypass Activation, Get Write Access, Get Working Toolchain, Enable Third-party Applications, Unlock Phone semuanya ditandai selesai

Analisis .ipsw dan pembacaan filesystem

  • iTunes mengunduh arsip iPhone Software berekstensi .ipsw untuk pemulihan perangkat, dan file ini berformat zip
  • Di dalam iPhone1,1_1.0_1A543a_Restore.ipsw terdapat image pemulihan img2, folder Firmware terkait baseband, kernelcache yang merupakan kernel iOS, dan dua file DMG besar
    • Ukuran keseluruhan arsip pemulihan iOS sekitar 105MiB
  • DMG pertama, 694-5259-38.dmg, adalah ramdisk yang dipakai saat pemulihan dan tidak terenkripsi sehingga bisa di-mount dengan dd
  • Ramdisk itu bukan seluruh filesystem iOS, tetapi dari /private/etc/master.passwd bisa diketahui kata sandi untuk pengguna mobile yang menjalankan aplikasi dan root yang menjalankan proses lainnya
  • DMG kedua, 694-5262-39.dmg, adalah filesystem iOS yang dipakai saat berjalan normal dan terenkripsi
    • Kuncinya ditemukan di dalam /usr/sbin/asr pada ramdisk
    • Karena yang ditemukan adalah key, bukan passphrase, hdiutil tidak bisa dipakai, dan DevTeam menulis alat dekripsi sendiri bernama vfdecrypt.c
    • Setelah didekripsi, mereka memperoleh akses baca ke seluruh filesystem runtime

Melewati aktivasi

  • Aktivasi normal melibatkan iTunes, server Apple albert.apple.com, dan lockdownd di iPhone
    • iTunes mengumpulkan DeviceID, IMEI, dan ICCID dari perangkat
    • Ketiga nilai itu dibundel menjadi token dan dikirim ke server Apple
    • Server Apple menandatangani token dengan private key lalu mengirimkannya kembali
    • lockdownd yang menunggu lewat USB memverifikasi token dengan public key Apple
    • Jika token benar-benar berasal dari Apple dan cocok dengan info perangkat, status berubah menjadi Activated
  • PhoneActivationServer buatan dvdjon menambal iTunes agar mengakses server aktivasi lewat HTTP alih-alih HTTPS, lalu mengarahkan permintaan ke server miliknya sendiri
  • Kuncinya bukan membuat token bertanda tangan baru, melainkan memakai metode replay yang selalu mengembalikan signed token yang sama, hasil tangkapan dari aktivasi yang berhasil, tanpa memedulikan input
  • Menurut presentasi George Hotz, lockdownd tidak memeriksa apakah DeviceID, IMEI, dan ICCID di dalam respons cocok dengan nilai sebenarnya
  • DevTeam membuat CLI tools yang membaca signed token hardcoded dari plist dan mengirimkannya ke iPhone, lalu kemudian menyempurnakannya menjadi iPhoneInterface yang bisa bekerja tanpa iTunes

Hak tulis dan jailbreak

  • iPhone yang sudah diaktifkan bisa menerima file seperti musik dan foto lewat iTunes, tetapi proses pengunggah afcd terkunci dalam chroot jail di /root/Media
  • Hanya partisi pengguna yang di-mount sebagai baca/tulis (rw), sedangkan partisi sistem hanya-baca (r)
  • Tujuannya adalah keluar dari chroot jail dan membuat partisi sistem ikut bisa ditulis; dari sinilah istilah jailbreaking muncul
  • Boot iPhone terbagi menjadi mode normal dan Recovery Mode
    • Mode normal berjalan dari BootROM → LLB → iBoot → Kernel → Normal Mode, dan setiap tahap memverifikasi tanda tangan tahap berikutnya
    • Recovery Mode berhenti di tahap iBoot, lalu iTunes memuat ramdisk, kernelcache, dan lainnya ke RAM untuk masuk ke mode pemulihan
  • DevTeam menyelidiki cara iTunes menulis ke filesystem saat proses restore di dalam iTunesMobile.dll dan menemukan perintah seperti mount, umount, dan ditto
  • iPHUC adalah alat CLI yang berkomunikasi dengan perangkat dalam Recovery Mode lewat metode privat di iTunesMobile.dll
    • Pengguna memasukkan perangkat ke Recovery Mode
    • Ramdisk dikirim ke perangkat dan dimuat ke RAM
    • kernelcache dikirim lalu kernel diboot agar menunjuk ke ramdisk
    • Perangkat masuk ke Restore Mode
  • Prosedur jailbreak yang sebenarnya dilakukan dengan memodifikasi fstab dan Services.plist
    • Di fstab, partisi sistem diubah agar di-mount sebagai rw, bukan hanya-baca
    • Di Services.plist, dibuat layanan afcd kedua yang berbasis di /, bukan /root/Media
    • Setelah reboot, iTunes bisa melihat seluruh filesystem melalui afcd2, dan partisi sistem maupun pengguna sama-sama bisa dibaca/ditulis
  • Setelah itu, aktivasi dan akses tulis diotomatisasi lewat aplikasi desktop Mac OS X INdependence

Toolchain dan aplikasi pihak ketiga

  • Tidak banyak informasi yang dipublikasikan tentang proses toolchain dan eksekusi aplikasi pihak ketiga, tetapi setidaknya 12 orang terlibat dalam pekerjaan ini
  • Pada 19 Juli 2007, binutils toolchain yang menargetkan ARM telah selesai sehingga DevTeam bisa menjalankan program buatan mereka sendiri di iPhone
  • Dengan ARM/Mach-O Toolchain buatan Nightwatch, aplikasi Hello World independen pertama berhasil dikompilasi dan dijalankan di iPhone
  • GeoHotz menjelaskan bahwa kombinasi Mach-O dan ARM sebelumnya tidak ada di luar Apple, sehingga harus ditulis sendiri
  • Tujuan lain dari toolchain ini adalah merekonstruksi MobileTerminal.h, yang mengekspos fungsi privat iTunesMobile.so, agar bisa berkomunikasi dengan afc tanpa menjalankan iTunes
  • Beberapa presentasi mengatakan kernel memeriksa tanda tangan executable sebelum execl, tetapi iPhone pertama tidak melakukannya, dan rangkumannya menyebut fitur itu tampaknya diperkenalkan pada v1.1.1

Unlock baseband dan anySIM

  • iPhone terbagi menjadi bagian smartphone yang menjalankan iOS dan bagian baseband yang berfungsi sebagai telepon dan modem
    • Kedua sistem memiliki RAM, CPU, penyimpanan, firmware, dan osilator masing-masing
    • Keduanya saling bertukar perintah AT melalui jalur UART yang di-mount di /dev/tty.baseband
  • Perintah AT yang diperlukan untuk unlock sudah diketahui sejak awal
    • AT+CLCK="PN",0,"xxxxxxxx"
    • xxxxxxxx adalah NCK atau Network Control Key, yang diyakini unik untuk setiap perangkat
    • Jumlah percobaan dibatasi 3 hingga 10 kali, setelah itu firmware bisa hard-lock ke AT&T
  • Baseband juga memiliki BootROM dan rantai kepercayaan sendiri, dan verifikasi tanda tangan diterapkan
  • MuscleNerd menjelaskan bahwa baseband tidak memiliki jaring pengaman seperti DFU/Recovery Mode, sehingga kesalahan pada NOR atau image dapat merusak perangkat secara permanen
  • Pada Juli 2007, DevTeam melakukan reverse engineering pada baseband di dalam .ipsw dan juga menganalisis /usr/local/bin/bbupdater di ramdisk untuk mengetahui perintah pengunggahan baseband baru
  • CLI pertama, iUnlock, memerlukan beberapa file seperti firmware hasil dump nor dan ICE03.12.06_G.fls
  • Setelah itu muncul aplikasi anySIM yang lebih sederhana, sehingga cukup diunggah ke ponsel lalu dijalankan dengan satu tombol
  • anySIM bekerja dengan urutan berikut
    • Membuka /dev/tty.baseband dan mengatur parameter modem
    • Membuang baseband berukuran 4MiB, yaitu NOR, ke /tmp
    • Memuat baseband ke RAM
    • Memuat secpack ICE03.12.06_G.fls dari ramdisk
    • Menambal perintah baseband di RAM agar NCK apa pun dapat mengizinkan unlock
    • Mengunggah ulang baseband yang sudah ditambal
    • Menjalankan AT+CLCK="PN",0,"00000000" dan AT+CLCK="PN",2

Trik -0x400

  • Firmware baseband yang sudah ditambal seharusnya gagal diunggah karena tidak akan lolos pemeriksaan tanda tangan
  • Bypass dilakukan dengan memanfaatkan offset minus 0x400
  • GeoHotz menjelaskan bahwa 0x400 byte pertama tidak dipakai sebelum tanda tangan diverifikasi, jadi penulisan bisa dimulai 0x400 byte lebih awal
  • Menurut penjelasan pembaca Hacker News sesudahnya, baseband menerima firmware baru dalam chunk hingga 0x800 byte
    • Bukan dengan menyimpan seluruh 4MiB di RAM lalu memeriksa checksum sebelum menulis ke flash
    • Byte yang diterima langsung ditulis ke flash, tetapi 0x400 byte pertama saja yang dibuffer di RAM
    • Setelah unggahan selesai, baseband memeriksa checksum
    • Jika gagal, 0x400 byte pertama yang dibuffer tidak ditulis ke flash dan dibuang
  • Metode -0x400 bekerja dengan terlebih dahulu menulis data sampah 0x400 byte sebelum lokasi firmware asli, lalu mengirim firmware 4MiB sesudahnya
    • Checksum gagal sehingga 0x400 byte sampah dibuang
    • Namun sisa firmware baru sudah telanjur tertulis ke flash pada posisi yang benar

Penyelesaian dan permainan kucing-dan-tikus setelahnya

  • Panduan unlock perangkat lunak penuh dipublikasikan pada 12 September 2007
  • Bersamaan dengan itu dipublikasikan pula contoh keberhasilan dari berbagai benua, termasuk kasus di Kanada
  • Apple dengan cepat merilis iPhone firmware v1.1.1 pada 27 September 2007
  • Bilah status kemajuan DevTeam di-reset menjadi Decrypt 1.1.1, Get Write Access 1.1.1, Activate 1.1.1, Unlock 1.1.1, Enable Third-party Applications 1.1.1
  • Sejak titik itu, dimulailah permainan kucing-dan-tikus antara Apple dan komunitas peretas iPhone, dan itu terus berlanjut setelahnya

1 komentar

 
GN⁺ 2024-03-11
Komentar Hacker News
  • Ini adalah cara yang umum dalam pembaruan firmware. 0x400 byte pertama adalah header yang harus diperiksa oleh loader tahap sebelumnya sebelum men-boot tahap ini, jadi data diterima dan bebas ditulis, tetapi headernya sendiri tidak ditulis
    Karena tidak ada header, ini aman karena tidak berlanjut ke eksekusi kode, dan di akhir seluruh tanda tangan diverifikasi; jika lolos maka header ditulis sehingga seluruh image menjadi valid
    Triknya di sini adalah menulis lebih dulu 0x400 byte sampah pada posisi 0x400 byte sebelum lokasi tulis yang diinginkan. Bagian ini diperlakukan sebagai header sehingga hanya dibuffer dan tidak benar-benar ditulis, sementara sisa data yang dikirim benar-benar ditulis ke lokasi yang diinginkan. Setelah itu verifikasi tanda tangan gagal, dan 0x400 byte pertama yang tadinya tidak diinginkan memang tidak ditulis, jadi berhasil
    • Bagian yang disebut “mode pemulihan” sepertinya saat itu disebut mode DFU. Itu singkatan dari “Device firmware update”, dan apakah waktu itu juga disebut “recovery” saya tidak terlalu yakin karena sudah lewat lebih dari 15 tahun
    • iZsh(https://x.com/izsh1911) mungkin juga tahu, tetapi saya sudah kehilangan kontak dengannya lebih dari 10 tahun lalu
  • Seperti tulisan Fabien pada umumnya, ini ditulis dengan baik dan sangat rinci. Saya ingat pernah melihat analisis terhadap mekanisme perlindungan iPhone ini saat itu, dan sejak itu memang perjalanannya sangat panjang
    Saya juga akan benar-benar paham kalau ada yang bisa menjelaskan lebih lanjut soal pergeseran -0x400 yang diterapkan sebelum penulisan data
    • Pergeseran -0x400 tampaknya bekerja kira-kira seperti ini
      Seek(fd, 0xA0020000 - 0x400); mencari 0x400 byte sebelum posisi tempat data seharusnya ditulis, lalu SendWrite(fd, foo, 0x400, false); mengisi 0x400 byte pertama yang ingin ditulis dengan nol
      Setelah itu SendWrite(fd, fw, fwsize, true); mengisi sisa byte dengan data yang sebenarnya dan memanggil SendEndSecpack(fd);. iPhone lalu menyalin data setelah 0x400 byte pertama, yaitu seluruh data yang memang ingin ditulis, kemudian mencoba memverifikasi tanda tangan dan gagal. Jika verifikasi tanda tangan berhasil, maka 0x400 byte pertama yang dibiarkan nol itu juga akan disalin saat itu
  • Untuk catatan sejarah, saya yang membuat iPHUC, dan nama itu saya buat saat berusia 19 tahun. Seseorang dengan nama samaran “nightwatch” adalah tokoh utama di balik jailbreak awal dan pencipta istilah “jailbreak”, dan sangat menyenangkan bekerja bersamanya
    Kalau tidak salah dia juga yang menangani PDF atau eksploit TIFF untuk membuka PSP. Seingat saya dia tinggal dan bekerja di suatu tempat di Amerika Selatan, mungkin di sebuah universitas, tetapi hanya itu yang saya tahu
    Itu masa yang sangat menyenangkan dan saya banyak belajar. Namun George Hotz membahayakan keselamatan beberapa orang yang membantunya mengakses dokumen berbahasa Jepang, meskipun sudah berulang kali diminta untuk tidak melakukannya, dan itu sangat membuat frustrasi serta pada akhirnya menjadi alasan dev team meninggalkan proyek tersebut
    • Saya jadi ingat ada seseorang yang membantu saya memahami arsitektur ARM dengan nama samaran “pineapple”. Saat itu ARM masih relatif baru, jadi karena itulah banyak nanas dipakai di UI awal. Mereka orang-orang yang sangat baik, sayang kami tidak terus menjaga kontak
    • Dalam batas yang bisa diceritakan tanpa risiko gugatan pencemaran nama baik, saya ingin mendengar lebih lanjut bagaimana George Hotz membahayakan keselamatan orang-orang
  • Menggabungkan DeviceID, IMEI, dan ICCID untuk membuat token, lalu mengirimkannya ke server Apple albert.apple.com agar ditandatangani dengan kunci privat Apple, kemudian lockdownd di perangkat memverifikasinya dengan kunci publik Apple dan mengubah status menjadi “Activated”, terdengar seperti pendahulu OAuth modern
  • Ah, masa-masa indah. Saat iPhone hacking itu mudah... atau lebih tepatnya jauh lebih mudah daripada sekarang
  • Saya penasaran diagram alurnya dibuat dengan alat apa. Kelihatannya berbasis teks dan bahkan mungkin lebih baik daripada mermaid
    • Saya memakai https://asciiflow.com
    • Kelihatannya seperti Monodraw. Beberapa hari lalu juga muncul lagi di HN
  • Sebagai kenangan, saya ada di kanal IRC saat rilis iPhone OS 1.1 memblokir jailbreak. Salah satu metode yang ditemukan waktu itu adalah downgrade ke 1.0.2, jailbreak ponselnya, lalu membuat direktori /root/Media yang dapat diakses dari iTunes menjadi symbolic link ke /
    Tautan ini tetap bertahan saat proses upgrade, dan setelah itu ketika melakukan pembaruan firmware kita bisa mengakses rootfs. Waktu itu namanya masih iPhone OS, belum iOS
  • Pada iPhone awal, huruf “S” tampaknya berarti security. Bisa dibilang itu konsekuensi karena mereka buru-buru merilis produk pertama
    Mirip juga dengan produsen mobil. Sebaiknya jangan membeli tahun model awal dari produk baru atau platform baru
    • Tidak pernah ada kesepakatan tentang arti huruf “S”, dan Apple juga tidak pernah menjelaskannya secara resmi. “Successor”, “Second”, dan “Speed” semuanya terdengar cukup masuk akal, tetapi tidak ada jawaban pastinya
      Biasanya “S” adalah penanda untuk upgrade kecil dibanding model dasarnya