1 पॉइंट द्वारा GN⁺ 2024-09-08 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • Keyhole एक DRM bypass bug था जिसने CLiP के license verification flow को bypass करके Microsoft Store apps और नए Windows editions के लिए licenses बनाना संभव कर दिया था
  • CLiP एक trust chain इस्तेमाल करता है, जिसमें signed XML license को clipsvc.dll में verify करने के बाद SPLicenseBlock को clipsp.sys को पास किया जाता है, जहां kernel में फिर से जांच होती है
  • clipup.exe में XML license signing के लिए ECDSA key बिना obfuscation के मौजूद थी, जिससे ClipSvc मनमाने ढंग से signed XML licenses स्वीकार कर सकता था
  • असली vulnerability यह थी कि license block के signature block के बाद का data verify नहीं होता था, फिर भी वह उसी type के पिछले block को overwrite कर सकता था; device-locked Windows license के लिए device-locked app license चाहिए था
  • Cisco TALOS ने यही bug 8 अप्रैल 2024 को Microsoft को report किया था, और fix के बाद parser signature block मिलते ही तुरंत terminate हो जाता है और उसके बाद आने वाले blocks process नहीं करता

Keyhole की प्रकृति और disclosure की पृष्ठभूमि

  • Keyhole Windows license checks को bypass करने के काम के दौरान मिला bug था, जो Microsoft Store apps या नए Windows editions को license देने की DRM bypass विधि बनाता था
  • कुछ bugs को भविष्य के activation methods या testing tools के लिए private रखा गया था, लेकिन CVE-2024-38184 के Cisco TALOS के जरिए सार्वजनिक होने के बाद Keyhole की जानकारी भी सार्वजनिक की गई
  • यह bug लगभग उसी समय स्वतंत्र रूप से खोजा गया था, जब इसे Microsoft को report किया गया

CLiP की license processing structure

  • CLiP(Client Licensing Platform) Windows 10 में पेश किया गया system है, जो मुख्य रूप से Microsoft Store app DRM implement करता है और Windows activation के साथ भी integrated है
  • Windows के भीतर मुख्य components ये हैं
    • clipup.exe: Windows 8 Store licenses, genuine tickets, और product keys को digital licenses में migrate करता है
    • clipsvc.dll: app licenses manage करने वाली user-mode service
    • clipc.dll: applications को CLiP के साथ interact करने के लिए API
    • clipwinrt.dll: Windows Runtime इस्तेमाल करने वाली UWP applications के लिए API
    • clipsp.sys: licenses verify करने वाला kernel-mode driver
  • CLiP-licensed app install होने पर signed XML license clipsvc.dll को दिया जाता है, और XML signature verification के बाद data %PROGRAMDATA%\Microsoft\Windows\ClipSVC\tokens.dat में store होता है
  • इसके बाद SPLicenseBlock tag से signed license block extract करके clipsp.sys को भेजा जाता है, और verification के बाद CLiP license store HKLM\SYSTEM\CurrentControlSet\Control\{7746D80F-97E0-4E26-9543-26B41FC22F79} में store होता है
  • यह store default रूप से दिखाई न दे, इस तरह protected होता है, लेकिन permissions बदलने पर access किया जा सकता है

clipup.exe में बची हुई signing key

  • clipup.exe में XML licenses sign करने के लिए इस्तेमाल हो सकने वाली valid ECDSA key बिना obfuscation के stored थी
  • यह key मूल रूप से Microsoft Store को temporary license भेजकर digital license प्राप्त करने के लिए इस्तेमाल होती है, लेकिन ClipSvc app licenses के लिए भी वही key स्वीकार करता था
  • नतीजतन, मनमाने XML licenses को sign या re-sign किया जा सकता था, और ClipSvc के user-mode checks को bypass करके इच्छित license block सीधे clipsp.sys को भेजा जा सकता था
  • इस stage पर user-mode level की trust chain निष्प्रभावी हो जाती थी, और बचा हुआ सवाल यह था कि क्या ClipSp को धोखा दिया जा सकता है

ClipSp analysis और Warbird deobfuscation

  • ClipSp का बहुत सा code Microsoft के proprietary obfuscation tool Warbird से छिपाया गया था
  • ClipSp obfuscated code calls को decryption function और encryption function से wrap करता है, जो user-mode programs में Warbird के काम करने के तरीके जैसा है
  • Microsoft servers पर मौजूद clipsp.sys symbols analysis में मददगार रहे, और KiFilterFiberContext की method के आधार पर decryption function को manually run करके hidden code देखा जा सका
  • Warbird के user-mode behavior के लिए warbird-docs reference के तौर पर इस्तेमाल किया जा सकता है

License block format और Keyhole bug

  • CLiP में महत्वपूर्ण license information license block में होती है, और इसका format CikExtractor में documented है
  • License block TLV(tag-length-value) format इस्तेमाल करता है
    • हर sub-block में data type, data length, और actual data होता है
    • उदाहरण के लिए type 0xC9 License Information है, और length 0xA का मतलब 10 bytes data है
  • License block के अंत में हमेशा type 0xCC का signature block होता है, जिसमें पिछले सभी data की signature और signing में इस्तेमाल key की जानकारी होती है
  • Experiments में पता चला कि signature block के बाद जोड़ा गया data verify नहीं होता था, और अगर एक ही type के कई blocks हों तो आखिरी block पहले वाले block को overwrite कर देता था
  • इसलिए signature block के बाद नया license data जोड़कर मौजूदा license information बदली जा सकती थी, और इसी method को Keyhole नाम दिया गया

संभावित scope और constraints

  • यह method Microsoft Store पर बिकने वाले items के licenses को दूसरे Microsoft Store license से बनाना संभव बनाता था
  • Free apps में भी licenses काफी होते हैं, इसलिए इच्छित items के लिए कई licenses बनाए जा सकते थे
  • लेकिन device-locked license को device-unlocked license से नहीं बनाया जा सकता था
  • Windows digital license device-locked होता है, इसलिए Windows license बनाने के लिए Roblox जैसे device-locked app license की जरूरत थी
  • इससे Enterprise LTSC को digital license से activate करना, या generic key से normal KMS server activate करना जैसे काम भी संभव हो गए थे, जो पहले असंभव थे

Public reproduction flow और fix का तरीका

  • Windows license बनाने का flow इस तरह था: device-locked app install करना, https://licensing.mp.microsoft.com/v7.0/licenses/content से आने वाले license को intercept करना, license decode करना और block extract करना, नया data जोड़ना, XML packaging और signing करना, C:\ProgramData\Microsoft\Windows\ClipSVC\Install\Migration में copy करना, और ClipSvc restart करना या clipup -p run करना
  • Cisco TALOS की TALOS-2024-1964 ने यही bug 8 अप्रैल 2024 को Microsoft को report किया था
  • यह bug साधारण DRM issue जैसा दिख सकता है, लेकिन Keyhole ClipSp के ज्यादा गंभीर bug तक पहुंचने का entry point बन सकता था, इसलिए इसे TALOS disclosure scope में शामिल किया गया
  • Fixed license block parser signature block मिलते ही तुरंत terminate हो जाता है और signature के बाद आने वाले blocks process नहीं करता; इस change से Keyhole block हो गया

Public materials और Xbox One से संबंध

  • Keyhole disclosure के बाद Keyhole license generation code और analysis में मदद के लिए symbols सहित CLiP binaries collection public किए गए
  • ClipSp के code का बड़ा हिस्सा Xbox One DRM system से copy किया गया माना जाता है
  • Xbox One में modern PC के TPM पर आधारित SP, यानी secure processor chip है, जिसकी मुख्य भूमिका code signing enforcement और license verification है
  • CLiP का XML license format और TLV-based license blocks का अधिकांश हिस्सा Xbox One DRM system से आया हुआ रूप है
  • Xbox SP में भी ClipSp जैसा parsing bug है, लेकिन वह data blocks और signature-related blocks को अलग-अलग parse करता है, इसलिए Keyhole Xbox पर काम नहीं करता

1 टिप्पणियां

 
GN⁺ 2024-09-08
Hacker News की रायें
  • तो इसका मतलब है कि अब बस details पता कर लें तो Microsoft Store से Xbox games सीधे मुफ्त में डाउनलोड किए जा सकते हैं?
    यानी क्या Xbox फिलहाल PS Vita जितना पूरी तरह hack हो चुका है?

    • हाँ। लगता है पोस्ट में यह सबसे ज़्यादा नज़रअंदाज़ हुआ हिस्सा है, लेकिन शायद यही सबसे दिलचस्प भी है।
      हालांकि Xbox पर auto update चालू रखने वालों के लिए दुर्भाग्य से यह लागू नहीं होता। लगता है नए system software में collateral-damage exploit द्वारा supported kernel version से ऊँचा kernel version शामिल है।
    • बिल्कुल अलग बात, लेकिन footnote marker के तौर पर yen/yuan symbol इस्तेमाल करना काफ़ी दिलचस्प है। सोच रहा हूँ कि कोई history छूट गई है या बस randomly इस्तेमाल किया गया है।
  • अच्छा होगा अगर Windows Store में 2020 तक मौजूद Lego Boost for Windows 10 app install करने का license भी मिल सके।
    मेरी समझ के मुताबिक, अगर license हो तो इसे अभी भी download किया जा सकता है, लेकिन नए users के लिए अब उपलब्ध नहीं है।

  • अगर मैंने ठीक पढ़ा है, तो Microsoft temporary license signing key का scope कम कर सकता है, इसलिए permanent licenses generate कर पाने की अवधि शायद लंबी नहीं होगी।

  • क्या इससे Microsoft account के बिना HEVC extension activate किया जा सकता है? यह बहुत झुंझलाहट भरा है कि patents को blanket license से handle नहीं किया जा सकता।

    • इस exploit की ज़रूरत नहीं है। ऐसा media player इस्तेमाल करें जिसे MS codec pack की ज़रूरत न हो, लेकिन अगर वह option नहीं है तो:
      1. https://store.rg-adguard.net पर जाएँ
      2. https://apps.microsoft.com/detail/9n4wgh0z6vhq paste करें
      3. ring को "Retail" में बदलें
      4. "appxbundle" extension वाली file download करें
      5. install करें। इस step पर developer mode चालू करना पड़ सकता है, ठीक से याद नहीं।
    • official Microsoft-signed HEVC installer file का download link massgrave.dev[0] पर भी मिल सकता है। सच में बहुत बढ़िया resource है।
      0: https://massgrave.dev/unsupported_products_activation#hevc-v...
    • पैसे देने की ज़रूरत नहीं। बस direct link चाहिए।
      ms-windows-store://pdp?productId=9N4WGH0Z6VHQ
      ms-windows-store://pdp?productId=9PMMSR1CGPWG
      ms-windows-store://pdp?productid=9MVZQVXJBQ9V
      ms-windows-store://pdp?productid=9N4D0MSMP0PT
      ms-windows-store://pdp?productid=9N95Q1ZZPMH4
    • आखिर इसकी ज़रूरत ही क्यों है? HEVC codec GPU manufacturer के driver package के साथ ही आता है।
  • इस तरह की चीज़ें कई दशकों तक Windows distribution और communication channel के तौर पर सबसे प्रभावी रही हैं।

    • ज़्यादातर दूसरे software पर यह लागू नहीं होता।
  • विडंबना यह है कि शायद मैं इसे सच में original hardware पर physical disc वाले Guitar Hero games खेलने के लिए गंभीरता से इस्तेमाल करूँगा। game installed है, लेकिन जब तक खराब DVD drive में disc फँसी न हो, खेलने का “license” नहीं है।
    इससे भी बड़ी विडंबना यह है कि अगर यह काम भी करे, तो console की public key revocation list में होने की वजह से शायद मेरे game save files पढ़ न पाए। CON file को default 0 से दोबारा sign करके इससे बचा जा सकता है।
    तीसरी विडंबना भी शायद जल्द आए। यह सब बहुत जाना-पहचाना लग रहा है। बेहद शानदार।

    • XML > TLV > null-terminated strings / user input के लिए UTF-16 जैसे ecosystem में, कहीं भी off-by-one error या unvalidated malicious user input आ जाए, तो technical debt का card house privilege escalation, remote code execution और lateral movement की minefield में ढह सकता है। हालांकि यह मामूली बात नहीं है।
      यह bug असल में उस दिन के लिए एक retroactive pivot platform जैसा है, जब unfiltered input और context escape संयोग से जुड़ जाते हैं।
      ऊपर से यह बस digital sticker swapping जैसा दिखता है, लेकिन Microsoft ने सफलता का ज़रूरत से ज़्यादा leverage किया है, और backward compatibility तथा अपने technical debt के कारण breaking changes से इनकार किया है, इसलिए कुछ mistakes छोटी होते हुए भी बड़ा और स्थायी impact डालती हैं।
  • अगर antivirus page block कर रहा है, तो यहाँ देखें: https://archive.is/90XGW

    • कौन से antivirus ऐसा कर रहे हैं?
  • क्या Clip Xbox One से भी पहले से मौजूद नहीं था?

  • article पढ़कर, खासकर यह हिस्सा कि यह engine Xbox DRM engine से copy-paste किया गया था, क्या अब भी कोई मानता है कि Pluton end-user security के लिए है, जबकि Pluton भी Xbox से copy होकर आया है? आखिर में क्या यह Microsoft के लिए PC पर enforceable DRM रखने का तरीका नहीं है?
    संदर्भ के लिए, Pluton अब latest Intel laptop chips में भी आ गया है, और AMD में तो कुछ समय से था। Windows को इसे require करने में कितना समय लगेगा?

    • मैंने कभी ऐसी बात पर भरोसा नहीं किया। सबसे बुरा है Microsoft-style Kool-Aid पीने वालों को यह समझाना।
      मैं Microsoft admin हूँ, इसलिए company के लोग Win11, Intune जैसी maximum lockdown configurations पसंद करते हैं। मेरे लिए Windows का सार यह नहीं है, बल्कि अच्छे admin tools और backward compatibility है।
      Pluton भी एक और TPM बनेगा। इसे roll out करेंगे, 5 साल wait करेंगे, फिर mandatory कर देंगे। Microsoft के पास समय है।
    • TPM आने के बाद से लोग 10 साल से ज़्यादा समय से यही कहते आ रहे हैं।
      फिर भी Windows preinstalled बिकने वाले PC पर अब भी Linux install किया जा सकता है, Store के बाहर से मिला third-party software भी Windows पर install किया जा सकता है, और torrents से download की गई pirated movies भी देखी जा सकती हैं।
      अगर desktop image न बदल पाना ठीक है, तो unregistered या unpaid Windows भी चला सकते हैं।
    • शायद यह भोला लग सकता है, लेकिन मैं अभी भी भरोसा करता हूँ। skepticism ज़रूरी है, लेकिन सिर्फ़ अटकलों के आधार पर पूरी तरह खारिज करना भी अपनी तरह की faulty reasoning है।
      क्या Microsoft को इससे संभावित फायदा हो सकता है? बिल्कुल। लेकिन इससे real user-security motivation और end users को मिलने वाले benefits negate नहीं होते।
  • “signature block के बाद वाले data की बिल्कुल जाँच नहीं होती, और वह पहले आए data को overwrite भी कर सकता है। अगर एक ही type के blocks साथ में stored हों, तो आखिरी block पिछले सभी blocks को overwrite कर देता है। इसलिए अगर license data बदलना हो, तो बस वह block बनाकर signature block के बाद डाल देना है”
    सच में हैरान करने वाला।

    • सोच रहा हूँ कि Nintendo Wii द्वारा hash verification में strncmp इस्तेमाल करने और पहले matching 00 byte पर रुक जाने वाली घटना के बाद यह सबसे खराब cryptography mistake है या नहीं।