1 पॉइंट द्वारा GN⁺ 2024-08-08 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • Create-A-Park सेव फ़ाइल में gap name प्रोसेसिंग के दौरान मौजूद strcpy buffer overflow, original Xbox, Xbox 360, PS2, GameCube जैसे कई प्लेटफ़ॉर्म पर सेव फ़ाइल और नेटवर्क exploits तक पहुंचा
  • THPS4 के original Xbox वर्ज़न में 31-character limit वाली string को boundary check के बिना 32-byte stack buffer में copy किया जाता था, जिससे return address overwrite किया जा सकता था; save file header और executable data segment का उपयोग करके shellcode चलाया गया
  • THPS3 में वही input stack के बजाय heap को corrupt करता था, इसलिए custom allocator और vtable path से गुजरने वाली ROP chain की जरूरत पड़ी; THUG 1·2 Xbox versions में stack cookie के कारण gap name path बंद हो गया
  • THPS4 multiplayer में malicious host ने park file को client को भेजकर remote code execution और asynchronous file transfer किया; transfer के दौरान दिखी network memory leak को exploit के अंदर hot patch से bypass किया गया
  • Xbox 360 का Tony Hawk’s American Wasteland भी gap name overflow से ROP execution कर सकता है, लेकिन full hypervisor code execution केवल 4548 kernel के system call handler bug के साथ combine होने पर ही संभव है; source और patched save file GitHub पर public किए गए

शुरुआत: gap name और strcpy

  • 2016 में original Xbox के लिए नया save file hacking bug खोजने की प्रक्रिया में Tony Hawk’s Pro Skater 4 की custom park save file विश्लेषण का target बनी
  • THPS4 का Create-A-Park feature player को अपना skate park बनाने और jump section यानी gap को नाम देने देता है
    • gap name अधिकतम 31 characters और null terminator से बनी user-defined string है
    • अगर यह string strcpy जैसी function से process हो, तो यह memory corruption primitive बन सकती है
  • gap name को लंबी 0x41 repeated string से बदलकर बनाई गई malicious save file को Xbox पर copy कर load करने पर console crash हो गया, और instruction pointer 0x41414141 पर set हो गया
    • यह संकेत था कि gap name stack में copy होते हुए return address तक overwrite कर रहा था
  • IDA analysis से पता चला कि save file की gap list iterate करते समय save_file_gap_data के gap_name को stack पर मौजूद gap_description gapDesc में strcpy से copy किया जा रहा था
    • boundary check नहीं था, इसलिए null terminator मिलने तक copy जारी रहती थी
    • यह game version stack cookie के बिना compile किया गया था, इसलिए stack data और return address overwrite किए जा सकते थे

original Xbox THPS4: shellcode को executable area में ले जाना

  • original Xbox में modern devices की तरह arbitrary data execution रोकने वाला hardware DEP नहीं है, लेकिन बाद के kernels और games में कुछ soft DEP मौजूद है
    • तरीका यह है कि code segment selector address बदलकर केवल एक खास address से नीचे वाले हिस्से को executable बनाया जाए
    • stack और save file वाले heap allocations executable area के बाहर हैं
  • game executable का read-write data segment executable area के अंदर है, इसलिए code को वहां copy करके चलाने की strategy इस्तेमाल की गई
  • park name save file header में होता है, और player जब save file चुनता है तो UI display के लिए header के पहले 136 bytes executable file data segment के struct में copy किए जाते हैं
    • पूरे header को मनमर्जी से बदला नहीं जा सकता, लेकिन एक छोटा memcpy stub रखने के लिए जगह पर्याप्त है
  • THPS4 original Xbox exploit flow
    • save file load होने के बाद “Start Game” दबाने से पहले, पहले 136 bytes executable file data segment में copy हो जाते हैं
    • “Start Game” दबाने पर malicious gap name stack में copy होता है और return address shellcode copy stub address से overwrite हो जाता है
    • function return पर copy stub में jump होता है और save file buffer के बड़े payload को executable data segment में copy किया जाता है
    • copy के बाद payload पर jump करके arbitrary code execution हासिल किया जाता है

signature bypass और habibi key

  • original Xbox पर code execution मिलने के बाद signature checks को disable करके unsigned executable चलाना होता है
  • payload मौजूदा 007 Agent Under Fire softmod installer save file के payload पर आधारित बनाया गया
    • kernel functions और data addresses खोजता है, और executable signature verification में इस्तेमाल होने वाली RSA public key का address ढूंढता है
    • machine state register की write protection disable करता है और RSA public key को habibi key से patch करता है
    • save file में शामिल helper executable चलाता है; testing के दौरान nyan cat executable का उपयोग किया गया
  • habibi key pair एक RSA key है जिसे 2000s की शुरुआत में original Xbox Linux hacking group ने बनाया माना जाता है
    • kernel की RSA signature check को बिना शर्त pass कराने के बजाय, public key को अपनी key से बदलकर Linux loader चलाने का तरीका था
    • यह उस save file से pirated content चलने से रोकने के लिए चुना गया था, लेकिन बाद में अन्य groups ने persistent hack installation के लिए exploit files public कर दीं
  • habibi public key modulus की खास बात यह है कि Microsoft RSA public key से उसका फर्क सिर्फ 4 bytes का है
    • exponent को 3 में बदलना चाहिए ऐसा लगता है, लेकिन मौजूदा shell code payloads exponent नहीं बदलते
    • यह ठीक-ठीक कैसे काम करता है, यह निश्चित नहीं है
  • habibi key method कई Xbox kernel versions के साथ compatibility के कारण चुना गया
    • signature verification function को हमेशा true में patch करने के लिए kernel version-specific instruction pattern matching चाहिए
    • habibi key में आसानी से मिल जाने वाली memory पर सिर्फ 4-byte patch करना होता है

वेरिएंट विश्लेषण: THPS3, THUG, THAW

  • Tony Hawk’s Pro Skater 3

    • THPS3 में भी Create-A-Park और gap name थे, लेकिन malicious save file लोड होने के तुरंत बाद यह crash नहीं हुआ
    • गेम के अंदर skate करना संभव था, और “quit game” चुनने पर console crash हुआ
    • gap name को stack में नहीं, बल्कि heap में copy किया गया था, और overflow ने अगली heap allocation के allocation header को overwrite कर दिया
    • जब अगली allocation free हुई, तो header के pointers उस vtable तक पहुँचे जिसमें cleanup routine function pointer था
    • THPS3 ने THPS4 की तरह save file header को executable data segment में copy नहीं किया था, और save file data भी non-executable heap memory में था
    • pAllocOwner pointer को overwrite करके cleanup function pointer load होने की जगह को control किया गया, और stack pivot के जरिए save file memory की ROP chain का उपयोग किया गया
    • ROP chain ने कुछ ही gadgets से heap के shellcode को executable data segment में copy किया और वहाँ jump किया
    • इसके बाद, THPS4 के लिए generic “hack xbox kernel” payload की तरह habibi key patch और unsigned executable execution किया गया
  • Tony Hawk’s Underground 1 & 2

    • THUG में gap name की fuzzing करने पर access violation के बजाय Buffer overrun detected! message के साथ full bug check हुआ
    • executable में stack cookie check मौजूद है
    • stack cookie return address से पहले रखा जाने वाला random value होता है, और function return से पहले यह check करता है कि value बदली है या नहीं
    • return address को overwrite करने के लिए cookie value जानना जरूरी है, लेकिन gap name path में इसे leak करने का कोई तरीका नहीं है
    • gap name buffer के बाद और stack cookie से पहले corrupt किए जा सकने वाले variables थे, लेकिन वे जल्द ही game code द्वारा overwrite हो गए, इसलिए exploit के लिए उपयोगी नहीं थे
    • SEH exploitation की भी जाँच की गई, लेकिन stack cookie check से पहले बचे code में exception trigger करने का कोई तरीका नहीं था, और उस समय SEH chain को walk करने वाला exception handler भी registered नहीं था
    • THUG2 के Xbox version में भी इसी कारण gap name-based exploit संभव नहीं है
    • हालांकि अन्य strcpy bugs और heap-based exploit किए जा सकने वाले bugs मौजूद हैं
    • PlayStation 2, PC, और शायद GameCube versions stack cookie के बिना compile किए गए थे, इसलिए gap name buffer से exploit संभव है
  • Tony Hawk’s American Wasteland

    • THAW, THUG 1·2 के बाद का game था, इसलिए stack cookie होने की उम्मीद थी, लेकिन Xbox version stack cookie के बिना compile हुआ था
    • यह gap name buffer overflow के लिए vulnerable था, और exploit लगभग THPS4 जैसा ही बनाया गया

THPS4 network RCE: save file के बिना client hacking

  • save file exploit के लिए memory card की जरूरत थी, इसलिए कम entry barrier वाले attack surface के रूप में multiplayer LAN game चुना गया
    • Create-A-Park से बनाए गए park को LAN multiplayer में इस्तेमाल करने पर host save file को network पर भेजता है और client उसे load करता है
    • यह assumption बनाया गया कि malicious park file भेजकर client console को hack किया जा सकता है
  • host खुद को hack न कर ले, इसलिए game executable को modify करके strcpy bug रोका गया, और additional functions के लिए code segment भी जोड़ा गया
  • शुरुआत में client host से connect होकर normal तरीके से skate कर सकता था, लेकिन payload execute नहीं हुआ, और buffer overflow भी trigger नहीं हुआ
    • client memory में park file data exploit file से अलग तरह से modified था
    • host ने park file load करने के बाद उसे memory से फिर save किया और परिणाम client को भेजा, जिससे exploit data खराब हो गया
  • संबंधित function call को NOP करने पर client ने malicious park file प्राप्त की और compromise हो गया, जिससे LED का रंग बदल गया
  • network path में save file header data segment में copy नहीं होता, इसलिए THPS4 local exploit का shellcode copy stub इस्तेमाल नहीं किया जा सकता
    • THPS3 जैसी ROP chain से shellcode को executable memory में copy किया गया

THUG source code की खोज और network code का उपयोग

  • secondary payload executable को network के जरिए client तक पहुँचाना था, लेकिन local save file exploit की तरह save game folder में file साथ में नहीं रखी जा सकती थी
  • burned CD या local network address से executable load करने के तरीके भी जाँचे गए, लेकिन अपनाए नहीं गए
    • Xbox winsock implementation default रूप से secure socket connection का उपयोग करता है, इसलिए Python script से Xbox security layer को reproduce करना पड़ता
  • park save file से जुड़ी सामग्री खोजते समय Sk4Ed_Dead string search से GitHub पर thug repository मिली
    • यह homebrew tool नहीं, बल्कि Tony Hawk’s Underground का पूरा game source code निकला
    • यह THPS4 खुद तो नहीं था, लेकिन codebase काफी similar था, इसलिए networking code और hooks लिखने में इसका उपयोग हुआ
  • source code में park file loading code और strcpy bug वाली exact line मौजूद थी
    • Visual Studio project file को reconstruct करके और कुछ compiler errors ठीक करके final game asset से चलने योग्य build बनाया जा सका
    • यह final version से पूरी तरह identical नहीं, लेकिन बहुत करीबी code लगता है
  • लक्ष्य simple RCE से आगे बढ़कर यह हो गया कि match से जुड़े console पर चुपचाप RCE हासिल किया जाए, unsigned code execution संभव किया जाए, और फिर game के दौरान secondary executable transfer किया जाए

execution recovery और asynchronous file transfer

  • client जब game खेलता रहे, उसी दौरान payload transfer चलाने के लिए shell code execution के बाद game execution flow recovery जरूरी है
  • ROP chain को बदला गया ताकि stack pivot से पहले existing stack pointer save करे, और shell code execution के बाद बाद में उसे restore करे
    • इसके बाद shell code को executable memory में copy करके jump किया गया
  • game का networking system message ID और handler function register करता है, और received message के ID से matching handler को call करता है
  • unused message ID register करके simple file transfer protocol implement किया गया
    • client connect होने पर MSG_ID_PAYLOAD_REQUEST host को भेजकर transfer शुरू करता है
    • host MSG_ID_PAYLOAD_DATA messages से payload data भेजता है
    • client को PAYLOAD_MSG_ID_END मिलने पर transfer complete हो जाता है

15 साल पुराना memory leak और hot patch

  • file transfer के दौरान client console null pointer dereference से crash हुआ
  • network data allocator ने NULL return किया, और networking memory pool के free bytes 0 हो गए
  • THUG source code में message data buffer को free करने वाला code था, लेकिन THPS4 shipped build में यह fix नहीं था
    • stream_desc का p_data buffer हर message पर release नहीं हो रहा था, जिससे networking memory pool खत्म हो गया
    • सामान्य multiplayer play में, जब तक कोई बहुत देर तक न रुके, शायद यह समस्या नहीं आती
  • exploit ने client code को hook करके p_desc->p_data buffer को सही free function से release करने के लिए hot patch किया
  • hot patch के बाद host और client console पर file transfer सफल रहा, और client ने nyan-cat executable run किया
    • tunneling app का उपयोग करके दूसरे क्षेत्र के दोस्त के console पर भी वही exploit remotely test किया गया

अंतिम original Xbox नेटवर्क exploit फ्लो

  • client एक दुर्भावनापूर्ण host console से connect करता है और नेटवर्क के जरिए “Hack Xbox” park file प्राप्त करता है
  • client जब park file को parse करता है, तब buffer overflow होता है, stack का return address overwrite हो जाता है और ROP chain शुरू होती है
  • ROP chain full shell code payload को executable memory क्षेत्र में copy करके jump करती है
  • shell code गेम execution पर लौटने से पहले जरूरी hook और patch सेट करता है और player को match में spawn करता है
  • जब player गेम के अंदर skate कर रहा होता है, host executable file को client को भेजता है और client HDD में save करता है
  • file transfer पूरा होने के बाद shell code client kernel को habibi key उपयोग की स्थिति में patch करता है और भेजे गए secondary executable को boot करता है
  • LED का रंग न बदला जाए, तो किसी दूसरे application के अचानक boot होने तक user के लिए progress को नोटिस करना मुश्किल होता है

Xbox 360: THAW और 4548 kernel

  • Xbox 360 के लिए Tony Hawk’s American Wasteland भी gap name buffer overflow के प्रति vulnerable है
  • लक्ष्य नए kernel version पर console को exploit करना था, लेकिन नए hypervisor bug के बिना यह संभव नहीं था
  • इसके बजाय THAW के strcpy bug और मौजूदा 4548 kernel system call handler bug को मिलाकर Xbox 360 का पहला software-only exploit बनाया जा सका
  • Xbox 360 के मौजूदा King Kong hack में modified shader file का उपयोग करके kernel memory में arbitrary write किया जाता था और system call handler bug को exploit किया जाता था
    • इस तरीके में modified King Kong disc इस्तेमाल करने के लिए console खोलना और DVD drive firmware को modify करना पड़ता था
    • game save bug ROP chain शुरू करने के लिए एक अलग entry point हो सकता है

Xbox 360 save file signature और development console की भूमिका

  • Xbox 360 game save file पर हर console के unique RSA key pair से signature किया जाता है
    • हर console के key store में game save signature के लिए इस्तेमाल होने वाली cryptographic key होती है
  • दूसरे console पर save file verify हो पाने की वजह यह है कि RSA public key save file header में शामिल होती है
    • यह public key खुद एक दूसरे RSA key pair से signed होती है, जो केवल Microsoft के पास है
    • कोई भी public key header में डालकर verification पास नहीं किया जा सकता
  • मनमाने ढंग से modified save file को किसी दूसरे console पर इस्तेमाल करने के लिए किसी एक Xbox 360 console का decrypted key store चाहिए
  • Xbox 360 hacking की शुरुआत development console और SDK leak से हुई थी
    • executable code encrypted था, इसलिए बाहर से code inspect नहीं कर पाने पर bug ढूंढना संभव नहीं था
    • development console और SDK executable code decrypt, boot chain, hypervisor, और game code reverse engineering के लिए जरूरी जानकारी देते हैं

4548 system call handler bug

  • Xbox 360 में hypervisor real mode और kernel mode होते हैं
    • hypervisor real mode सबसे privileged mode है
    • kernel mode में OS और game चलते हैं
  • CPU में L2 cache के बगल में memory encryption और hashing संभालने वाली cryptography unit होती है
    • kernel mode में hypervisor page encrypted + hashed स्थिति में दिखता है, और उसे मनमाने ढंग से overwrite करने पर hypervisor access के समय console halt हो जाता है
  • real mode में 64-bit physical address के ऊपरी 32 bit encryption और hashing control के लिए इस्तेमाल होते हैं
    • 0x80000000.00000000 mask apply करने पर encryption और hashing को ignore करते हुए memory access संभव होता है
    • जहां kernel mode hypervisor को physical address दे सकता है, वहां ऊपरी 32 bit को जरूर clear करना होता है
  • सामान्य system call handler slwi instruction से system call ordinal को 2 bit left shift करता है और result के ऊपरी 32 bit छोड़कर सिर्फ 32-bit offset इस्तेमाल करता है
  • 4548 kernel का system call handler slwi के बजाय sldi इस्तेमाल करता है
    • sldi 64-bit में operate करता है, इसलिए r0 के ऊपरी 32 bit भी table index offset calculation में शामिल होते हैं
    • ordinal range check केवल r0 के निचले 32 bit पर लागू होता है
    • उदाहरण के लिए 0x20000000.0000003F range check पास करते हुए 0x80000000.000000FC offset बनाता है, जिससे unprotected memory access कराया जा सकता है
  • माना जाता है कि यह बदलाव developer द्वारा जानबूझकर किया गया modification होने के बजाय शायद compiler bug था

Xbox 360 exploit संरचना

  • kernel mode में encrypted hypervisor memory view को overwrite करने पर आम तौर पर console halt हो जाता है, लेकिन अगर system call handler से ऊपरी protection bit सेट किए गए address से function pointer पढ़वाया जाए, तो वह fault के बिना overwrite की गई value पढ़ सकता है
  • exploit के चरण
    • shell code को memory में load करके physical address हासिल करना
    • kernel memory manager variable बदलकर encrypted hypervisor memory view को writable address range के रूप में expose करना
    • hypervisor system call function pointer को mtctr r4; bctr instruction sequence के address से overwrite करना
    • r0 में malicious ordinal डालना, और r4 में shell code physical address पर 0x80000000.00000000 mask OR किया हुआ value डालना
    • system call instruction execute कराना, ताकि hypervisor overwrite किया गया function pointer पढ़े और mtctr r4; bctr के जरिए shell code पर jump करे
  • THAW save file exploit PowerPC ROP chain का इस्तेमाल करता है
    • Ida-Sploiter IDA plugin को modify करके PowerPC gadget search support जोड़ना
    • पूरा exploit 24 ROP gadget से बना है
  • THAW Xbox 360 का पूरा flow
    • gap name buffer overflow से return address को पहले ROP gadget से overwrite करना
    • stack pointer को save buffer के अंदर मौजूद ROP chain पर pivot करना
    • MmAllocatePhysicalMemoryEx से hypervisor shell code के लिए physical memory allocate करना
    • memcpy से shell code copy करना और MmGetPhysicalAddress से physical address हासिल करना
    • encrypted hypervisor memory view को writable बनाते हुए map करना
    • system call function address को mtctr r4; bctr sequence से overwrite करना
    • malicious system call ordinal और shell code physical address के साथ syscall execute करना
    • hypervisor code execution हासिल करने के बाद LED color बदलना और executable RSA signature check को patch करना
    • kernel mode ROP chain पर वापस आकर ObCreateSymbolicLink से HDD folder को map करना और XLaunchNewImage से unsigned secondary payload execute करना
  • इस तरीके से किसी भी Xbox 360 OS version पर THAW के strcpy bug के जरिए ROP execution हासिल किया जा सकता है, लेकिन full hypervisor code execution सिर्फ 4548 kernel पर ही संभव है
    • अगर कोई नया hypervisor bug मिल जाए, तो इस entry point के साथ जोड़कर इसे और नए kernel version पर भी लागू किया जा सकता है

2024 में सार्वजनिक रिलीज और अतिरिक्त platform porting

  • 2024 में Tony Hawk exploits को व्यवस्थित करके सार्वजनिक किया गया
  • वही strcpy bug Tony Hawk series के 5 iterations और कई console व handheld platforms में मौजूद है
  • PlayStation 2

    • THPS4 network RCE exploit को PlayStation 2 version पर port किया गया
    • PCSX2 या कोई दूसरा console इस्तेमाल करके, सिर्फ THPS4 disc होने पर network के जरिए console hack किया जा सकता है
    • exploit network के जरिए uLaunchElf भेजता है और transfer पूरा होने पर उसे execute करता है
    • इसके बाद USB stick जैसे दूसरे media से FreeMcBoot या FreeHDBoot installer load किया जा सकता है
    • PS2 save game exploit की उपयोगिता कम है
    • अगर memory card में files copy करने का तरीका है, तो सीधे FreeMcBoot install किया जा सकता है
    • Amazon से 15 डॉलर में FreeMcBoot memory card खरीदा जा सकता है, या phat console और network adapter पर FreeHDBoot इस्तेमाल किया जा सकता है
  • GameCube

    • THPS4 save game exploit को GameCube version पर port किया गया
    • network RCE या दूसरे save game exploit versions port नहीं किए गए
    • GameCube memory card में files copy करना आसान नहीं है, और pre-hacked save file वाला memory card eBay पर 50 डॉलर से ज्यादा में बिकता रहा है
    • GameCube version के Tony Hawk game में network support नहीं है, इसलिए network adapter होने पर भी network exploit इस्तेमाल नहीं किया जा सकता
    • पहले से कई game save exploits मौजूद हैं और कोई persistent software hack नहीं है, इसलिए कई users modchip चुनते हैं
  • Windows

    • THUG PRO के लिए game save exploit भी बनाया गया था, और 7 साल पहले bug report भेजी गई थी, लेकिन उस समय इसे fix करने में रुचि नहीं थी
    • Windows पर exploit से कोई value नहीं मिलती, इसलिए इसे public नहीं किया गया
    • PC के लिए Tony Hawk games में वही strcpy bug है और वे exploitable हैं
    • network play में exploit किया जा सकने वाला एक और strcpy bug भी है
    • ASLR को forcefully enable करने और Administrator के रूप में run न करने की सिफारिश की जाती है

सार्वजनिक सामग्री

  • पूरा source code और patched game save files GitHub पर सार्वजनिक किए गए हैं
  • एक ही strcpy bug कई platforms पर save file exploit, network RCE और Xbox 360 software-only exploit entry point तक ले जाता है

1 टिप्पणियां

 
GN⁺ 2024-08-08
Hacker News टिप्पणियां
  • Habibi key में और दिलचस्प बात यह है कि public key modulus, Microsoft RSA public key से सिर्फ 4 bytes अलग है
    किसी random 2048-bit integer के trivial तरीके से factor हो जाने की संभावना काफ़ी होती है, और वास्तविक probability मुझे नहीं पता, लेकिन मोटे तौर पर इसे 2^-32 के आसपास माना जा सकता है
    शायद उन्होंने public modulus के 4 bytes को random तरीके से बदलने या increment करने, फिर करीब 1 millisecond तक factorization आज़माने और सफल होते ही रुक जाने वाला code इस्तेमाल किया होगा
    नतीजतन public modulus में कई छोटे factors होने की संभावना अधिक है, और RSA modulus आम तौर पर ठीक दो primes का product होता है, लेकिन जब तक वह e के साथ coprime है, factors ज़्यादा हों तब भी गणित काम करता रहता है

    • किसी random 2048-bit integer से शुरू करके lower bytes बदलकर उसे 3 से divisible बना देना ही काफी है। क्योंकि सिर्फ public key से काम है, यह आसान है, और अगर public key 3 से divisible हो, तो Fermat's little theorem का इस्तेमाल करके संभावित private key candidates में से अधिकांश को skip किया जा सकता है, जिससे ज़रूरी computation कई orders of magnitude कम हो जाता है
      अगर किस्मत से RSA implementation ठीक दो prime factors ही इस्तेमाल करने वाली हो, तो चूंकि हमें पहले से पता है कि एक factor 3 है, public key को 3 से divide करके दूसरा prime factor मिल जाता है
      Wikipedia के मुताबिक RSA public key structure में N एक बड़ा semiprime होना चाहिए और e, φ(N) के साथ coprime होना चाहिए, और जो व्यक्ति N को factor कर लेता है वह private key हासिल कर सकता है। Xbox hacking के संदर्भ में, अगर N को prime 3 से divisible बना दिया जाए, तो दूसरा prime N/3 होगा, यानी factorization सफल हो गया
      Habibi key से sign करने वाला code https://github.com/XboxDev/xbedump/blob/b8cd5cd0f8b1cbc4e64f... पर है। आख़िरी 4 bytes को 0x89, 0x9c, 0x90, 0x6b में बदलने के बाद इसे 3 से divide किया जाता है, और उस value से उपयुक्त private key बनाई जाती है
    • मेरे co-author के रूप में लिखे एक paper में यह समस्या कवर की गई है। विषय था कि क्या किसी damaged real public key, यहां भी 2048-bit key, के corresponding private key बनाई जा सकती है
      application यह था कि rowhammer से public key को damage किया जाए, फिर उसके factorization का इस्तेमाल करके नई corresponding private key बनाई जाए। यह SSH और GPG keys पर काम करता था, और practical बनाने के लिए ऐसे assumptions रखे गए थे जैसे key जिस page में है उसकी contents पता होना
      उपलब्ध computation time के अनुसार empirical success rate Figure 7 में है, analytical treatment Section 3 में, और असली method का विवरण Section 4.4 में है
      https://www.usenix.org/system/files/conference/usenixsecurit...
    • probability 2^-32 से कहीं, कहीं, कहीं ज़्यादा है। छोटे primes से जितना divide हो सके उतना divide करते रहिए, फिर बची हुई value पर Miller–Rabin जैसा तेज़ primality test चलाइए
      उदाहरण के लिए, 2 से 499 तक के primes से divide करके देखा, और अगर value 1 हो जाए तो success, नहीं तो Miller–Rabin को 20 बार चलाने वाला code — इससे random 2048-bit integer को पूरी तरह factor करने में मेरे environment में करीब 100 tries लगे
    • Chinese remainder theorem implementation में duplicate factors हों तो fail हो जाती है
  • यह उपलब्धि कितनी बेतुकी है, इसे बयान करना मुश्किल है
    Xbox 360 को Tony Hawk game के park name से softmod करना, और ऊपर से 24-stage ROP chain तक इस्तेमाल करना, कमाल है
    hypervisor के लिए छोटी-सी श्रद्धांजलि, concise और practical analysis, और तुरंत दिमाग़ में आया x360 botnet — सब मिलकर यह अब तक का ज़बरदस्त Xbox 360 nostalgia hit लगता है

  • “अगर किस्मत अच्छी रही तो strcpy होगा” वाला हिस्सा मज़ेदार है। असल में तो strncpy होना चाहिए था, और safety gear के समर्थन के लिए मशहूर Tony Hawk शायद ज़्यादा सुरक्षित string copy से जुड़ना पसंद करते

    • सही तरीका memcpy इस्तेमाल करना और destination buffer व source buffer दोनों का size जानना है
      अगर source, destination में fit नहीं होता, तो क्या उसे truncate करना ठीक है, पूरा operation रोकना है, या destination buffer को realloc करना है—ऐसी application-specific handling चाहिए। strncpy लगभग हमेशा गलत काम करता है
    • strncpy ज़्यादा सुरक्षित नहीं है। क्योंकि n तक पहुंचने पर यह unterminated string बना देता है
      मूल रूप से strncpy लगभग कभी इस्तेमाल नहीं करना चाहिए, यह struct dirent { unsigned short inode; char name[14]; }; जैसे fixed-size fields के लिए है
      ऐसे मामलों में भी padding bytes अक्सर nul की बजाय spaces होने चाहिए, और strncpy को standard library में होना ही नहीं चाहिए था
    • Windows C/C++ development में strsafe.h functions इस्तेमाल किए जा सकते हैं (https://learn.microsoft.com/en-us/windows/win32/api/strsafe/)
      C/C++ इस्तेमाल करते समय ये standard C functions से ज़्यादा आसान लगे, क्योंकि ये buffer बहुत छोटा होने या integer overflow जैसे common failure cases handle कर देते थे, और सभी functions failure code return करते थे जिससे error checking भी आसान थी
      इस मामले में strcpy की बजाय StringCchCopyW() या StringCbCopyW() बेहतर choice है
    • मैंने कभी पढ़ा था कि Tony Hawk पहले car चलाते हुए किसी skateboarder को देखते तो “olly करके दिखाओ” चिल्लाते, और अगर वह सफल हो जाता तो उसे नया helmet देते
  • यह exploit THUG PRO पर भी लागू होता है, यह थोड़ा अफसोसजनक है
    Tony Hawk series का competitive scene, THPS1+2 remake वाले थोड़े-से exception को छोड़कर, करीब 20 साल से लगभग dead था, और यह mod आज भी खेला जाता है
    mod खुद भी अब 10 साल से ज़्यादा पुराना है और लगता है original developers जा चुके हैं, इसलिए समझ आता है कि Ryan ने report किया तो कोई इसे fix करने की कोशिश क्यों नहीं कर रहा था। लेकिन अब यह mod PC की full privilege takeover risk की वजह से इस्तेमाल करना मुश्किल हो गया है
    उम्मीद है यह लेख किसी ऐसे व्यक्ति तक पहुंचे जो mod को patch करने की इच्छा रखता हो

    • अगर मेरे पास समय होता तो इसे आज़माना काफ़ी मज़ेदार लगता। पहले जब समय था, तब मैंने THUG1 source code को Windows पर लगभग playable बना दिया था
      वह source सिर्फ console version के लिए था, और Windows के लिए compile करने की धारणा Xbox Windows नहीं बल्कि tools के लिए थी, इसलिए कई चीज़ें पूरी तरह अलग तरीके से काम करती थीं
  • “So what's the habibi key?” टेक्स्ट से पहले जो सेक्शन हेडर आइकन जैसा दिखता है, वह असल में क्लिक करके खोलने वाला HTML details सेक्शन है, इसलिए दिलचस्पी हो तो उसे दबाकर देखना चाहिए
    मेरा सवाल यह है कि अगर यह बात सही है कि Habibi key का इस्तेमाल Linux console group में pirated content के उपयोग को रोकने के लिए खास तौर पर किया गया था, तो उससे जुड़ी private key कहाँ, कब और कैसे सार्वजनिक हुई या लीक हुई
    लेखक ने Microsoft key और Habibi key के 4-byte अंतर को patch करके “unsigned” executable चलाया—जो असल में Habibi private key से signed executable था—इसलिए साफ लगता है कि उनके पास private key थी

    • Habibi key Microsoft key को 3 से विभाज्य बनाने के लिए patch करके बनाई जाती है, इसलिए इसका factorization वास्तव में बहुत आसान है
      private key को public key से मामूली तौर पर recover किया जा सकता है, इसलिए सार्वजनिक होने या लीक होने जैसा कुछ खास था ही नहीं
      मूल रूप से यह 007: Agent Under Fire save file hack के अंदर छिपा एक छोटा cryptography CTF था, और वह save file hack खुद भी काफी obfuscated CTF जैसा था। लगता है इसमें pirated users को सबक सिखाने का इरादा और दूसरे reverse engineers के लिए challenge—दोनों थे
  • वाकई शानदार। मैंने थोड़ा PSX decompilation किया है, और वहाँ भी ऐसी बहुत-सी चीजें हैं
    दिलचस्प बात यह है कि memmove जैसी चीजें SDK library[0] के रूप में link होती हैं, लेकिन strcpy BIOS द्वारा दिया गया function है
    बाद के SDK versions में इसे library version से patch किया जा सकता था, लेकिन 1997 तक भी ऐसा नहीं था
    0 - https://github.com/Xeeynamo/sotn-decomp/blob/master/src/main...

    • पुराने console games को C+SDL2 और OpenGL 2.1 में reimplement किए हुए versions के रूप में देखना चाहूँगा
      अब N64 games decompilers के जरिए PC पर port हो रहे हैं, इसलिए उम्मीद बढ़ती है
      कोई कह सकता है, “इन games के तो पहले से PC versions हैं,” लेकिन अगर N64 game को recompile करके effects को shaders की जगह pure textures या और सरल effects में बदल दिया जाए, तो 2009 के low-end netbook जैसी धीमी devices पर भी ये लगभग हर जगह चल सकते हैं
      Super Mario 64 को 3DFX API पर port करने का उदाहरण भी है। जिन games में N64 framebuffer तक complex access होता है, उस microcode की नकल करने के लिए OpenGL 3.3 की जरूरत पड़ सकती है, लेकिन अगर engine Pentium III के बाद के hardware पर बहुत तेज चलता है, तो बाकी चीजें GL 2.1 acceleration से चलाकर कुछ हिस्सों को software में emulate करना मुश्किल नहीं होगा
  • इस तरह के exploit analysis मैंने कई रूपों में बहुत पढ़े हैं, और आगे 100 और पढ़ने को मिलें तो और भी खुशी होगी

  • यह console development में गलत security mindset दिखाने वाला अच्छा उदाहरण लगता है
    “Save data तो सिर्फ हम इस्तेमाल कर सकते हैं, इसलिए हमें केवल वही parse करना है जो हमने लिखा है” — यह सोच console दुनिया में आम है, लेकिन मूल रूप से गलत है, क्योंकि लोग artificial save data तैयार कर सकते हैं
    इससे अलग बात यह है कि console को user को दुश्मन नहीं मानना चाहिए, लेकिन अगर वे ऐसा करते ही हैं, तो game में भी उसी stance के मुताबिक security mindset होना चाहिए

    • अब यह कुछ हद तक हकीकत बन चुका है। मौजूदा consoles सभी save files को encrypt और sign करके account से बाँधते हैं, और ज्यादातर—Xbox के बारे में नहीं पता—save files को console और paid cloud storage के अलावा कहीं और copy नहीं करने देते
    • सामान्य computer के मामले में “console को user को दुश्मन नहीं मानना चाहिए” वाली बात से मैं 100% सहमत हूँ, लेकिन consoles के लिए बात थोड़ी अलग लगती है
      अगर users क्या कर सकते हैं इसे सीमित न किया जाए, तो online game cheating को कैसे रोका जा सकता है, यह समझ नहीं आता
  • Tony Hawk की तरफ से बचाव में कहें तो वह professional skater हैं, security analyst नहीं
    90s के आखिर और 2000s की शुरुआत में keyboard के सामने बिताया उनका सीमित समय buffer overruns audit करने में नहीं, बल्कि जल्द ही iconic series बनने वाले game में 900 McTwist को स्वाभाविक महसूस कराने में लगा होगा

  • बचपन में सुनी एक legend को verify करने का मौका मिला। 720 को पहली बार सफलतापूर्वक करने वाले Tony Hawk ही थे क्या?

    • https://en.wikipedia.org/wiki/Aerial_(skateboarding) के अनुसार, “720, यानी हवा में दो पूरे चक्कर लगाने वाला trick, skateboarding के सबसे दुर्लभ tricks में से एक है, और 1985 में Tony Hawk ने इसे पहली बार सफलतापूर्वक किया था; यह planned नहीं था”
      शायद इसका मतलब “recorded first” होगा, लेकिन अगर किसी ने पहले किया होता तो उसके बारे में खूब बात की गई होती, और जो इसे कर सकता था वह वैसे भी professional skater ही रहा होगा