DevTeam ने iPhone को कैसे अपने काबू में किया
(fabiensanglard.net)- 2007 का पहला iPhone अमेरिका में AT&T subscription के बिना activate नहीं होता था, और iPhone Dev Team ने सिर्फ software के जरिए उसे दूसरे carriers पर इस्तेमाल करने का तरीका सार्वजनिक रूप से खोजा
- इस काम को 6 milestones में समेटा गया: firmware decrypt करना, activation bypass करना, write access पाना, ARM/Mach-O toolchain बनाना, third-party apps चलाना, और carrier lock हटाना
- शुरुआती breakthrough
.ipswके अंदर मौजूद ramdisk और encrypted DMG का analysis, औरlockdowndactivation verification में replay flaw का इस्तेमाल कर Home screen तक पहुंचना था - write access Recovery Mode में ramdisk और kernelcache load करने के बाद
fstabऔरServices.plistबदलकर हासिल किया गया, जिससे/root/Mediaमें बंदafcdकी जगह root filesystem handle किया जा सके - final unlock baseband firmware को dump, patch और re-upload करने तथा
AT+CLCK="PN",0,"00000000"चलाने वाले anySIM से automate हुआ; Apple ने 27 सितंबर 2007 को firmware v1.1.1 से जवाब दिया
2007 का iPhone और DevTeam का लक्ष्य
- Apple ने 29 जून 2007 को iPhone लॉन्च किया, और उस समय कीमत 4GB मॉडल के लिए $499, 8GB मॉडल के लिए $599 थी
- बॉक्स से निकला iPhone inactive state में था और सिर्फ
Connect to iTunesscreen दिखाता था; user को iTunes में AT&T membership लेनी पड़ती थी - subscription के बाद भी device AT&T पर locked रहता था
- Canada में शुरुआती iPhone launch schedule नहीं था, और Apple ने 11 जुलाई 2008 को iPhone 3G के साथ Rogers से agreement किया
- iPhone Dev Team इस लक्ष्य के साथ इकट्ठा हुई कि device को सिर्फ software के जरिए किसी भी carrier पर इस्तेमाल किया जा सके, और iphone.fiveforty.net blog पर progress अक्सर public की
- 3 जुलाई 2007 को 00:00 से 21:00 तक 8 updates post किए गए
DevTeam के 6 milestones
- locked device को सामान्य smartphone की तरह इस्तेमाल करने के लिए ये steps जरूरी थे
- system समझने के लिए read access: Break DMG Password
- inactive state से निकलना: Bypass Activation
- system modify करने के लिए write access: Get Write Access
- custom executable बनाने के लिए Working Toolchain
- baseband को किसी भी carrier से connect करने योग्य बनाना: Unlock
- पूरे process को automate करने वाली app: Enable Third-Party Applications
- Wayback Machine के अनुसार 6 जुलाई 2007 तक 6 में से 2 milestones पूरे हो चुके थे, और यह journey 12 सितंबर 2007 को खत्म हुई
- 25 सितंबर 2007 को crawled status page में
Decrypt Firmware,Bypass Activation,Get Write Access,Get Working Toolchain,Enable Third-party Applications,Unlock Phonecompleted status में दिखाए गए
.ipsw analysis और filesystem read access
- iTunes device restore के लिए
.ipswextension वाला iPhone Software archive download करता था, और यह file zip format में थी iPhone1,1_1.0_1A543a_Restore.ipswके अंदरimg2recovery images, baseband-relatedFirmwarefolder, iOS kernelkernelcache, और दो बड़े DMG files थे- पूरे iOS restore archive का size लगभग 105MiB था
- पहला DMG
694-5259-38.dmgrestore में इस्तेमाल होने वाला ramdisk था और encrypted नहीं था, इसलिए उसेddसे mount किया जा सकता था - ramdisk पूरा iOS filesystem नहीं था, लेकिन
/private/etc/master.passwdमें app चलाने वाले usermobileऔर बाकी processes चलाने वालेrootके passwords देखने देता था - दूसरा DMG
694-5262-39.dmgnormal execution के समय इस्तेमाल होने वाला iOS filesystem था और encrypted था- key ramdisk के
/usr/sbin/asrमें मिली - यह passphrase नहीं बल्कि key थी, इसलिए
hdiutilइस्तेमाल नहीं किया जा सकता था; DevTeam ने अपना decryption toolvfdecrypt.cलिखा - decrypt करने के बाद runtime filesystem पूरे का read access मिल गया
- key ramdisk के
Activation bypass
- normal activation में iTunes, Apple server
albert.apple.com, और iPhone काlockdowndशामिल होते हैं- iTunes device का
DeviceID,IMEI,ICCIDcollect करता है - तीनों values को token में बांधकर Apple server को भेजता है
- Apple server अपनी private key से token sign करके वापस भेजता है
- USB पर इंतजार कर रहा
lockdowndApple public key से token verify करता है - अगर token Apple से आया हो और device info से match करे, तो state Activated में बदल जाती है
- iTunes device का
- dvdjon के
PhoneActivationServerने iTunes को patch किया ताकि वह HTTPS की जगह HTTP से activation server access करे, और requests को अपने server पर redirect किया - अहम बात signed token नया बनाना नहीं थी, बल्कि successful activation से capture किया गया वही signed token input से स्वतंत्र रूप से वापस लौटाने वाला replay तरीका था
- George Hotz की presentation के अनुसार
lockdowndresponse में मौजूदDeviceID,IMEI,ICCIDको actual values से match करके check नहीं करता था - DevTeam ने एक CLI
toolsबनाया जो plist से hardcoded signed token पढ़कर iPhone को भेजता था, और बाद में इसे iTunes के बिना काम करने वालेiPhoneInterfaceमें improve किया
Write access और jailbreak
- activated iPhone में iTunes से music और photos जैसी files upload की जा सकती थीं, लेकिन upload संभालने वाला process
afcd/root/Mediaमें chroot jail में बंद था - सिर्फ user partition read/write (
rw) के रूप में mount था, और system partition read-only (r) था - लक्ष्य chroot jail से बाहर निकलकर system partition तक write करने योग्य बनाना था, और यहीं से jailbreaking शब्द आया
- iPhone boot दो हिस्सों में बंटा था: normal mode और Recovery Mode
- normal mode BootROM → LLB → iBoot → Kernel → Normal Mode के रूप में आगे बढ़ता है, और हर stage अगले stage की signature check करती है
- Recovery Mode iBoot stage पर रुकता है, और iTunes ramdisk व kernelcache आदि को RAM में load कर restore mode में प्रवेश कराता है
- DevTeam ने
iTunesMobile.dllमें iTunes द्वारा restore के दौरान filesystem में write करने का तरीका investigate किया औरmount,umount,dittoजैसे commands पहचाने iPHUC,iTunesMobile.dllके private methods से Recovery Mode device से communicate करने वाला CLI tool था- user device को Recovery Mode में डालता है
- ramdisk device में transfer कर RAM में load किया जाता है
- kernelcache भेजकर kernel को ramdisk की ओर point करते हुए boot किया जाता है
- device Restore Mode में प्रवेश करता है
- actual jailbreak process
fstabऔरServices.plistmodify करके किया गयाfstabमें system partition को read-only की जगह rw के रूप में mount करने के लिए बदला गयाServices.plistमें/root/Mediaके बजाय/को base मानने वाली दूसरीafcdservice बनाई गई- reboot के बाद iTunes
afcd2के जरिए पूरा filesystem देख सकता था, और system व user partitions दोनों पर read/write संभव हो गया
- बाद में activation और write access को Mac OS X desktop app INdependence से automate किया गया
Toolchain और third-party apps
- toolchain और third-party app execution की process पर public जानकारी ज्यादा नहीं है, लेकिन कम से कम 12 लोग इस काम में शामिल थे
- 19 जुलाई 2007 को ARM target करने वाली binutils toolchain पूरी हो गई, जिससे DevTeam अपने बनाए programs iPhone पर चला सकी
- Nightwatch के
ARM/Mach-O Toolchainसे पहला independentHello Worldapplication compile हुआ और iPhone पर चला - GeoHotz ने बताया कि Apple के बाहर Mach-O और ARM का combination पहले नहीं था और उसे खुद लिखना पड़ा
- toolchain का एक और लक्ष्य
iTunesMobile.soके private functions expose करने वालेMobileTerminal.hको reconstruct करना था, ताकि iTunes चलाए बिनाafcसे communicate किया जा सके - कुछ presentations कहती हैं कि kernel
execlसे पहले executable signature check करता है, लेकिन निष्कर्ष यह है कि पहले iPhone में ऐसा नहीं था और संभवतः यह v1.1.1 में introduce हुआ
Baseband unlock और anySIM
- iPhone दो हिस्सों में बंटा था: iOS चलाने वाला smartphone हिस्सा और phone/modem की भूमिका निभाने वाला baseband हिस्सा
- दोनों systems के पास अलग-अलग RAM, CPU, storage, firmware और oscillator थे
- दोनों
/dev/tty.basebandपर mounted UART line से AT commands exchange करते थे
- unlock के लिए जरूरी AT command शुरू से ही ज्ञात था
AT+CLCK="PN",0,"xxxxxxxx"xxxxxxxxNetwork Control Key यानी NCK है, और माना जाता था कि यह हर device के लिए unique है- attempts 3–10 बार तक limited थे, जिसके बाद firmware AT&T पर hard-lock हो सकता था
- baseband में भी BootROM और trust chain थी, और signature verification लागू था
- MuscleNerd ने समझाया कि baseband में DFU/Recovery Mode जैसा safety net नहीं है, इसलिए NOR या image से गलत छेड़छाड़ करने पर device permanent रूप से brick हो सकता है
- जुलाई 2007 में DevTeam ने
.ipswके अंदर baseband को reverse engineer किया, और ramdisk में/usr/local/bin/bbupdaterभी analyze कर नया baseband upload करने के commands समझे - पहला CLI
iUnlockdumped firmwarenorऔरICE03.12.06_G.flsजैसी कई files मांगता था - बाद में ज्यादा simple
anySIMapp आई, जिसे phone पर डालकर एक button से चलाया जा सकता था anySIMइस क्रम में काम करती है/dev/tty.basebandखोलकर modem parameters set करती है- 4MiB size का baseband, यानी NOR,
/tmpमें dump करती है - baseband को RAM में load करती है
- ramdisk से आया
ICE03.12.06_G.flssecpack load करती है - RAM में baseband command patch करती है ताकि कोई भी NCK unlock allow कर दे
- patched baseband को फिर upload करती है
AT+CLCK="PN",0,"00000000"औरAT+CLCK="PN",2चलाती है
-0x400 trick
- patched baseband firmware को normally signature check pass नहीं करना चाहिए था, इसलिए upload fail होना चाहिए था
- bypass ने minus 0x400 offset का इस्तेमाल किया
- GeoHotz ने समझाया कि शुरुआती
0x400bytes signature verify होने तक इस्तेमाल नहीं होते, इसलिए0x400bytes पहले से write शुरू कर देना काफी था - बाद में Hacker News readers की explanation के अनुसार baseband नया firmware maximum
0x800byte chunks में receive करता है- पूरा 4MiB RAM में store करके checksum check करने और flash में write करने वाली structure नहीं थी
- received bytes तुरंत flash में लिखे जाते थे, लेकिन पहले
0x400bytes ही RAM में buffer होते थे - upload खत्म होने पर baseband checksum check करता था
- fail होने पर buffered पहले
0x400bytes flash में write नहीं होते और discard कर दिए जाते
-0x400method पहले original firmware location से0x400bytes पहले garbage data लिखता है, फिर 4MiB firmware भेजता है- checksum fail होता है और garbage
0x400bytes discard हो जाते हैं - लेकिन बाकी नया firmware पहले ही सही location पर flash हो चुका होता है
- checksum fail होता है और garbage
Completion और उसके बाद का cat-and-mouse game
- full software unlock instructions 12 सितंबर 2007 को public किए गए
- साथ में continent-wise success cases public किए गए, जिनमें Canada का case भी शामिल था
- Apple ने तेजी से 27 सितंबर 2007 को iPhone firmware v1.1.1 release किया
- DevTeam की progress status bar
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पर reset हो गई - यहीं से Apple और iPhone hacking community के बीच cat-and-mouse game शुरू हुआ और आगे भी जारी रहा
1 टिप्पणियां
Hacker News टिप्पणियां
header नहीं है, इसलिए यह code execution तक नहीं जाता और safe रहता है; आखिर में पूरे signature को verify किया जाता है, और अगर वह pass हो जाए तो header लिखकर पूरी image को valid बना दिया जाता है
यहां trick यह है कि जहां लिखना है, उससे 0x400 bytes पहले garbage 0x400 bytes लिखे जाएं। यह हिस्सा header माना जाता है, इसलिए सिर्फ buffer होता है और वास्तव में लिखा नहीं जाता, जबकि transfer data का बाकी हिस्सा इच्छित जगह पर सचमुच लिखा जाता है। बाद में signature verification fail हो जाता है, और वे शुरुआती 0x400 bytes जो असल में चाहिए भी नहीं थे, लिखे नहीं जाते—यानी काम सफल
data लिखने से पहले लगाए गए -0x400 shift को भी अगर कोई और समझा दे, तो बात पूरी तरह साफ हो जाएगी
Seek(fd, 0xA0020000 - 0x400);से उस जगह से 0x400 पहले seek किया जाता है जहां data लिखना है, औरSendWrite(fd, foo, 0x400, false);से लिखे जाने वाले पहले 0x400 bytes को zero से भर दिया जाता हैइसके बाद
SendWrite(fd, fw, fwsize, true);से बाकी bytes को असली data से भरा जाता है औरSendEndSecpack(fd);call किया जाता है। iPhone 0x400 bytes के बाद का data, यानी पूरा data जिसे लिखना था, copy करता है और फिर signature verification की कोशिश करता है, जो fail हो जाती है। अगर signature verification सफल होता, तो zero छोड़े गए पहले 0x400 bytes भी उसी समय copy हुए होतेमुझे लगता है कि PSP को unlock करने वाला PDF या TIFF exploit भी शायद उसी ने संभाला था। वह शायद South America में कहीं, शायद किसी university में काम करते हुए रहता था, लेकिन मुझे बस इतना ही पता है
वह वाकई मजेदार दौर था और बहुत कुछ सीखने को मिला। हालांकि George Hotz ने Japanese documents तक access में मदद करने वाले कुछ लोगों की safety को, ऐसा न करने की बार-बार की requests के बावजूद, खतरे में डाल दिया; यह बहुत frustrate करने वाला था और आखिरकार dev team के project छोड़ने की वजह यही बनी
lockdowndद्वारा Apple public key से verify करके status को “Activated” में बदलना—यह structure आज के OAuth का precursor जैसा लगता है/root/Mediadirectory को/पर symbolic link करनायह link upgrade के दौरान भी बना रहा, और बाद में firmware update करने पर
rootfsतक access मिल गया। उस समय नाम iOS नहीं, iPhone OS थाcar manufacturers के साथ भी ऐसा ही है। कोई नया product या नया platform आए तो उसके शुरुआती कुछ model years नहीं खरीदना बेहतर है
आम तौर पर “S” base model की तुलना में minor upgrade दिखाने वाला marker था