1 คะแนน โดย GN⁺ 2024-09-08 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • Keyhole คือบั๊กหลบเลี่ยง DRM ที่ทำให้สามารถข้ามขั้นตอนการตรวจสอบไลเซนส์ของ CLiP และสร้างไลเซนส์สำหรับ แอป Microsoft Store รวมถึง Windows รุ่นใหม่ ๆ ได้
  • CLiP ใช้ ห่วงโซ่ความเชื่อถือ โดยตรวจสอบไลเซนส์ XML ที่ลงนามแล้วใน clipsvc.dll จากนั้นส่ง SPLicenseBlock ไปยัง clipsp.sys เพื่อให้เคอร์เนลตรวจสอบอีกครั้ง
  • ใน clipup.exe มี คีย์ ECDSA สำหรับลงนามไลเซนส์ XML อยู่โดยไม่มีการ obfuscate ทำให้ ClipSvc ยอมรับไลเซนส์ XML ที่ลงนามเองได้
  • ช่องโหว่จริงคือ ข้อมูลหลังบล็อกลายเซ็น ในบล็อกไลเซนส์ไม่ได้ถูกตรวจสอบ แต่ยังสามารถเขียนทับบล็อกก่อนหน้าที่มีชนิดเดียวกันได้ และไลเซนส์ Windows แบบ device-locked จำเป็นต้องใช้ไลเซนส์แอปแบบ device-locked
  • Cisco TALOS รายงานบั๊กเดียวกันนี้ต่อ Microsoft เมื่อวันที่ 8 เมษายน 2024 และหลังแก้ไขแล้ว parser จะ หยุดทันทีเมื่อพบบล็อกลายเซ็น และไม่ประมวลผลบล็อกที่ตามมา

ลักษณะของ Keyhole และเบื้องหลังการเปิดเผย

  • Keyhole เป็นบั๊กที่พบระหว่างการทำงานเพื่อเลี่ยงการตรวจสอบไลเซนส์ของ Windows โดยเป็นวิธีหลบเลี่ยง DRM ที่ทำให้สามารถให้ไลเซนส์แก่ แอป Microsoft Store หรือ Windows รุ่นใหม่ ๆ ได้
  • บั๊กบางส่วนถูกเก็บเป็นความลับเพื่อสงวนไว้ใช้เป็นวิธี activate หรือเครื่องมือทดสอบในอนาคต แต่เมื่อ CVE-2024-38184 ถูกเปิดเผยผ่าน Cisco TALOS รายละเอียดของ Keyhole จึงถูกเปิดเผยด้วย
  • บั๊กนี้ถูกค้นพบอย่างอิสระในช่วงเวลาใกล้เคียงกับที่มีการรายงานต่อ Microsoft

โครงสร้างการประมวลผลไลเซนส์ของ CLiP

  • CLiP (Client Licensing Platform) เป็นระบบที่นำมาใช้ใน Windows 10 โดยหลัก ๆ ใช้ทำ DRM ของแอป Microsoft Store และผสานเข้ากับการ activate Windows ด้วย
  • องค์ประกอบหลักใน Windows มีดังนี้
    • clipup.exe: ย้ายไลเซนส์ Windows 8 Store, genuine ticket และ product key ไปเป็น digital license
    • clipsvc.dll: บริการใน user mode ที่จัดการไลเซนส์แอป
    • clipc.dll: API สำหรับให้แอปพลิเคชันโต้ตอบกับ CLiP
    • clipwinrt.dll: API สำหรับแอป UWP ที่ใช้ Windows Runtime
    • clipsp.sys: ไดรเวอร์ใน kernel mode ที่ตรวจสอบไลเซนส์
  • เมื่อติดตั้งแอปที่ใช้ไลเซนส์ CLiP ไลเซนส์ XML ที่ลงนามแล้วจะถูกส่งไปยัง clipsvc.dll และหลังจากตรวจสอบลายเซ็น XML แล้ว ข้อมูลจะถูกบันทึกไว้ที่ %PROGRAMDATA%\Microsoft\Windows\ClipSVC\tokens.dat
  • จากนั้นบล็อกไลเซนส์ที่ลงนามแล้วจะถูกดึงออกจากแท็ก SPLicenseBlock ส่งต่อไปยัง clipsp.sys และหลังตรวจสอบแล้วจะถูกบันทึกในที่เก็บไลเซนส์ CLiP ที่ HKLM\SYSTEM\CurrentControlSet\Control\{7746D80F-97E0-4E26-9543-26B41FC22F79}
  • โดยปกติที่เก็บนี้ถูกป้องกันไม่ให้มองเห็น แต่สามารถเข้าถึงได้หากเปลี่ยนสิทธิ์

คีย์ลงนามที่ยังคงอยู่ใน clipup.exe

  • ใน clipup.exe มี คีย์ ECDSA ที่ใช้งานได้สำหรับลงนามไลเซนส์ XML เก็บอยู่โดยไม่มีการ obfuscate
  • เดิมทีคีย์นี้ใช้สำหรับส่งไลเซนส์ชั่วคราวไปยัง Microsoft Store เพื่อรับ digital license แต่ ClipSvc กลับยอมรับคีย์เดียวกันนี้กับไลเซนส์แอปด้วย
  • ผลคือสามารถลงนามหรือเซ็นซ้ำไลเซนส์ XML ใด ๆ ได้ และข้ามการตรวจสอบใน user mode ของ ClipSvc เพื่อส่งบล็อกไลเซนส์ที่ต้องการไปยัง clipsp.sys โดยตรง
  • ในขั้นตอนนี้ ห่วงโซ่ความเชื่อถือ ระดับ user mode จึงถูกทำให้ใช้การไม่ได้ และประเด็นที่เหลือคือจะหลอก ClipSp ได้หรือไม่

การวิเคราะห์ ClipSp และการถอด obfuscation ของ Warbird

  • โค้ดจำนวนมากของ ClipSp ถูกซ่อนไว้ด้วย Warbird ซึ่งเป็นเครื่องมือ obfuscation เฉพาะของ Microsoft
  • ClipSp ครอบการเรียกโค้ดที่ถูก obfuscate ด้วยฟังก์ชันถอดรหัสและฟังก์ชันเข้ารหัส คล้ายกับวิธีที่ Warbird ทำงานในโปรแกรม user mode
  • สัญลักษณ์ของ clipsp.sys ที่อยู่บนเซิร์ฟเวอร์ Microsoft ช่วยในการวิเคราะห์ และสามารถตรวจสอบโค้ดที่ถูกซ่อนไว้ได้ด้วยการรันฟังก์ชันถอดรหัสแบบแมนนวล โดยอิงจากวิธีของ KiFilterFiberContext
  • การทำงานของ Warbird ใน user mode สามารถดูอ้างอิงได้จาก warbird-docs

รูปแบบบล็อกไลเซนส์และบั๊ก Keyhole

  • ข้อมูลไลเซนส์สำคัญใน CLiP อยู่ใน บล็อกไลเซนส์ และมีการบันทึกรูปแบบไว้ใน CikExtractor
  • บล็อกไลเซนส์ใช้รูปแบบ TLV (tag-length-value)
    • บล็อกย่อยแต่ละบล็อกมีชนิดข้อมูล ความยาวข้อมูล และข้อมูลจริง
    • ตัวอย่างเช่นชนิด 0xC9 หมายถึง License Information ส่วนความยาว 0xA หมายถึงข้อมูล 10 ไบต์
  • ท้ายบล็อกไลเซนส์จะมี บล็อกลายเซ็น ชนิด 0xCC อยู่เสมอ โดยบล็อกนี้บรรจุลายเซ็นของข้อมูลทั้งหมดก่อนหน้าและข้อมูลคีย์ที่ใช้ลงนาม
  • จากการทดลองพบว่าข้อมูลที่ต่อหลังบล็อกลายเซ็นไม่ได้ถูกตรวจสอบ และหากมีบล็อกชนิดเดียวกันหลายบล็อก บล็อกสุดท้ายจะเขียนทับบล็อกก่อนหน้า
  • ดังนั้นหากต่อท้ายข้อมูลไลเซนส์ใหม่หลังบล็อกลายเซ็น ก็สามารถเปลี่ยนข้อมูลไลเซนส์เดิมได้ และวิธีนี้ถูกตั้งชื่อว่า Keyhole

ขอบเขตที่ทำได้และข้อจำกัด

  • วิธีนี้ทำให้สามารถสร้างไลเซนส์ของรายการที่ขายใน Microsoft Store จากไลเซนส์ Microsoft Store อื่นได้
  • เนื่องจากแอปฟรีก็มีไลเซนส์อยู่มาก จึงอยู่ในสภาพที่สามารถสร้างไลเซนส์สำหรับรายการที่ต้องการได้จำนวนมาก
  • อย่างไรก็ตาม ไลเซนส์แบบ device-locked ไม่สามารถสร้างจากไลเซนส์แบบ device-unlocked ได้
  • Windows digital license เป็นแบบ device-locked ดังนั้นหากต้องการสร้างไลเซนส์ Windows จำเป็นต้องใช้ไลเซนส์แอปแบบ device-locked เช่น Roblox
  • ด้วยวิธีนี้ งานที่ก่อนหน้านี้ทำไม่ได้ เช่น การ activate Enterprise LTSC ด้วย digital license หรือการ activate เซิร์ฟเวอร์ KMS ปกติด้วย generic key ก็สามารถทำได้

ลำดับการทำซ้ำที่เปิดเผยและวิธีแก้ไข

  • ขั้นตอนการสร้างไลเซนส์ Windows ได้แก่ ติดตั้งแอปแบบ device-locked, ดักไลเซนส์ที่มาจาก https://licensing.mp.microsoft.com/v7.0/licenses/content, ถอดรหัสไลเซนส์และแยกบล็อก, เพิ่มข้อมูลใหม่, ทำแพ็กเกจ XML และลงนาม, คัดลอกไปยัง C:\ProgramData\Microsoft\Windows\ClipSVC\Install\Migration, แล้วรีสตาร์ท ClipSvc หรือรัน clipup -p
  • TALOS-2024-1964 ของ Cisco TALOS รายงานบั๊กเดียวกันนี้ต่อ Microsoft เมื่อวันที่ 8 เมษายน 2024
  • บั๊กนี้อาจดูเหมือนเป็นเพียงปัญหา DRM ธรรมดา แต่ Keyhole อาจเป็นจุดเริ่มต้นไปสู่ บั๊กที่ร้ายแรงกว่าของ ClipSp จึงถูกรวมไว้ในขอบเขตการเปิดเผยของ TALOS
  • parser บล็อกไลเซนส์ที่แก้ไขแล้วจะ หยุดทันทีเมื่อพบบล็อกลายเซ็น และไม่ประมวลผลบล็อกหลังลายเซ็น การเปลี่ยนแปลงนี้ทำให้ Keyhole ถูกปิดกั้น

เอกสารที่เปิดเผยและความเกี่ยวข้องกับ Xbox One

  • หลังเปิดเผย Keyhole ได้มีการเผยแพร่ โค้ดสร้างไลเซนส์ Keyhole และ ชุดไบนารี CLiP ที่มีสัญลักษณ์รวมอยู่เพื่อช่วยในการวิเคราะห์
  • โค้ดส่วนใหญ่ของ ClipSp ถูกพบว่านำมาจากระบบ DRM ของ Xbox One
  • ใน Xbox One มีชิป SP หรือ secure processor ที่อิงกับ TPM ของพีซีรุ่นใหม่ โดยหน้าที่หลักคือบังคับใช้ code signing และตรวจสอบไลเซนส์
  • รูปแบบไลเซนส์ XML ของ CLiP และบล็อกไลเซนส์แบบ TLV ส่วนใหญ่เป็นรูปแบบที่นำมาจากระบบ DRM ของ Xbox One
  • Xbox SP ก็มีบั๊ก parser แบบเดียวกับ ClipSp แต่เนื่องจากแยก parse บล็อกข้อมูลกับบล็อกที่เกี่ยวกับลายเซ็นออกจากกัน Keyhole จึงไม่ทำงานบน Xbox

1 ความคิดเห็น

 
GN⁺ 2024-09-08
ความคิดเห็นบน Hacker News
  • งั้นหมายความว่าตอนนี้ถ้ารู้รายละเอียดเพิ่ม ก็สามารถดาวน์โหลดเกม Xbox จาก Microsoft Store ได้ฟรีโดยตรงใช่ไหม?
    แปลว่าตอนนี้ Xbox อยู่ในสภาพที่ถูกแฮ็กจนหมดจดพอๆ กับ PS Vitaแล้วหรือ?

    • ใช่ ดูเหมือนว่านี่จะเป็นจุดที่ถูกมองข้ามมากที่สุดในบทความ แต่อาจเป็นส่วนที่น่าสนใจที่สุดก็ได้
      แต่เสียดายว่าใช้ไม่ได้กับคนที่เปิดอัปเดตอัตโนมัติบน Xbox เพราะซอฟต์แวร์ระบบเวอร์ชันล่าสุดน่าจะมีเคอร์เนลเวอร์ชันที่สูงกว่าที่เอ็กซ์พลอยต์ collateral-damage รองรับ
    • พูดนอกเรื่องนิด แต่การใช้สัญลักษณ์เยน/หยวนเป็นเชิงอรรถนี่น่าสนใจมาก สงสัยว่ามีประวัติอะไรที่ผมพลาดไป หรือแค่ใช้แบบสุ่มๆ
  • น่าจะดีถ้าสามารถขอไลเซนส์เพื่อติดตั้งแอป Lego Boost for Windows 10ที่เคยอยู่ใน Windows Store จนถึงปี 2020 ได้
    เท่าที่เข้าใจ ถ้ามีไลเซนส์ก็ยังดาวน์โหลดได้อยู่ แต่จะไม่เปิดให้ผู้ใช้ใหม่ใช้อีกแล้ว

    • ลองใช้ https://store.rg-adguard.net/ สำหรับดาวน์โหลดแอป แล้วจัดการไลเซนส์ด้วย keyhole หรือไม่ก็แตกไฟล์แล้วติดตั้งผ่านโหมดนักพัฒนาก็น่าจะได้
    • หรืออาจใช้ตัวนี้แทนได้: https://en.scratch-wiki.info/wiki/LEGO_BOOST_Extension
  • ถ้าอ่านไม่ผิด Microsoft ก็น่าจะจำกัดขอบเขตการใช้งานของคีย์เซ็นไลเซนส์ชั่วคราวได้ ดังนั้นช่วงเวลาที่จะสร้างไลเซนส์ถาวรได้อาจเหลือไม่มาก

  • แบบนี้ใช้เพื่อเปิดใช้งานส่วนขยาย HEVCโดยไม่ต้องมีบัญชี Microsoft ได้ไหม? เรื่องที่ไม่สามารถจัดการสิทธิบัตรด้วยไลเซนส์แบบเหมารวมนี่น่าหงุดหงิดมาก

    • ไม่ต้องใช้เอ็กซ์พลอยต์นี้ก็ได้ ใช้โปรแกรมเล่นสื่อที่ไม่ต้องพึ่ง MS codec pack ก็พอ แต่ถ้านั่นไม่ใช่ตัวเลือก:
      1. ไปที่ https://store.rg-adguard.net
      2. วาง https://apps.microsoft.com/detail/9n4wgh0z6vhq
      3. เปลี่ยน ring เป็น "Retail"
      4. ดาวน์โหลดไฟล์ที่มีนามสกุล "appxbundle"
      5. ติดตั้ง จำได้ไม่ชัดว่าในขั้นนี้อาจต้องเปิดโหมดนักพัฒนาด้วย
    • ลิงก์ดาวน์โหลดตัวติดตั้ง HEVC ที่เซ็นโดย Microsoft อย่างเป็นทางการหาได้จาก massgrave.dev[0] ด้วย เป็นแหล่งข้อมูลที่ยอดเยี่ยมมาก
      0: https://massgrave.dev/unsupported_products_activation#hevc-v...
    • ไม่ต้องจ่ายเงิน ขอแค่มีลิงก์ตรงก็พอ
      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ก็มากับแพ็กเกจไดรเวอร์ของผู้ผลิต GPU อยู่แล้ว
  • เรื่องแบบนี้ตลอดหลายสิบปีที่ผ่านมาเป็นหนึ่งในช่องทางการแจกจ่ายและสื่อสารของ Windowsที่ได้ผลที่สุด

    • แต่กับซอฟต์แวร์อื่นๆ ส่วนใหญ่ไม่เป็นแบบนั้น
  • น่าแดกดันที่ผมน่าจะใช้มันอย่างจริงจังเพื่อเล่นเกม Guitar Heroที่มีแผ่นแท้อยู่แล้วบนฮาร์ดแวร์แท้ เกมติดตั้งอยู่แล้วแต่ไม่มี “ไลเซนส์” ให้เล่นถ้าในไดรฟ์ DVD ที่พังไม่มีแผ่นคาอยู่
    ที่แดกดันกว่านั้นคือ ต่อให้มันใช้งานได้ public key ของคอนโซลอาจอยู่ในรายการเพิกถอนจนทำให้อ่านไฟล์เซฟเกมของผมไม่ได้ แต่ก็อ้อมได้ด้วยการเซ็นไฟล์ CON ใหม่โดยใช้ค่าเริ่มต้น 0
    หรือเดี๋ยวอาจมีความแดกดันชั้นที่สามตามมาอีก ทั้งหมดนี้ดูคุ้นตามาก สุดยอดจริงๆ

    • ในระบบนิเวศแบบ XML > TLV > สตริงจบด้วย null / UTF-16 สำหรับอินพุตผู้ใช้ ถ้ามีข้อผิดพลาด off-by-oneหรืออินพุตผู้ใช้มุ่งร้ายที่ไม่ถูกตรวจสอบหลุดเข้ามาจากตรงไหนก็ตาม ปราสาทไพ่ที่สร้างจากหนี้ทางเทคนิคก็อาจพังกลายเป็นทุ่งระเบิดของการยกระดับสิทธิ์ การรันโค้ดระยะไกล และการเคลื่อนที่ในระบบแบบด้านข้างได้ ไม่ใช่เรื่องเล็กเลย
      โดยเนื้อแท้แล้วบั๊กนี้เกือบจะเป็นเหมือนแพลตฟอร์ม pivot ย้อนหลังที่รอวันที่อินพุตที่ไม่ผ่านการทำให้สะอาดกับการหลุดออกจากบริบทจะมาบรรจบกันโดยบังเอิญ
      ภายนอกมันดูเหมือนแค่การสลับสติกเกอร์ดิจิทัลธรรมดาๆ แต่เพราะ Microsoft ใช้ความสำเร็จของตัวเองเป็นคานงัดมากเกินไป และปฏิเสธการเปลี่ยนแปลงที่ทำให้ของเดิมพังเพราะต้องรักษา backward compatibility กับหนี้เทคนิคของตัวเอง ความผิดพลาดบางอย่างเลยแม้จะเล็กก็มีผลกระทบใหญ่และคงอยู่อย่างถาวร
  • ถ้าแอนติไวรัสบล็อกหน้านี้ ลองดูที่นี่ได้: https://archive.is/90XGW

    • แอนติไวรัสตัวไหนทำแบบนั้นบ้าง?
  • Clip นี่มีมาตั้งแต่ก่อนXbox Oneอีกไม่ใช่เหรอ?

  • พออ่านบทความ โดยเฉพาะส่วนที่บอกว่าเอนจินนี้ถูกคัดลอกมาจากเอนจิน DRM ของ Xbox แบบ copy-paste ยังมีใครเชื่ออีกไหมว่า Pluton ถูกทำมาเพื่อความปลอดภัยของผู้ใช้ปลายทางจริงๆ ในเมื่อมันก็ยกมาจาก Xbox เหมือนกัน? สุดท้ายแล้วมันก็เพื่อให้ Microsoft มี DRM ที่บังคับใช้บนพีซีได้ไม่ใช่หรือ?
    อ้างอิงเพิ่มเติม Pluton เข้าไปอยู่ในชิปโน้ตบุ๊ก Intel รุ่นใหม่แล้ว และอยู่กับ AMD มาสักพักด้วย กว่า Windows จะเริ่มบังคับใช้จะอีกนานแค่ไหน?

    • ผมไม่เคยเชื่อเรื่องพวกนั้นเลย ที่แย่ที่สุดคือการอธิบายเรื่องนี้ให้คนที่ดื่ม Kool-Aid แบบฉบับ Microsoftฟัง
      ในฐานะแอดมิน Microsoft คนในบริษัทจึงชอบการตั้งค่าที่ล็อกทุกอย่างเต็มที่แบบ Win11, Intune อะไรทำนองนั้น แต่สำหรับผม แก่นของ Windows ไม่ใช่แบบนั้น มันคือเครื่องมือจัดการที่ยอดเยี่ยมกับ backward compatibility
      Pluton ก็คงจะกลายเป็น TPM อีกตัวหนึ่ง เอาเข้ามา แล้วรอ 5 ปีก่อนค่อยบังคับใช้ Microsoft มีเวลาอยู่แล้ว
    • คนพูดแบบนั้นกันมาตลอดกว่าสิบปีหลัง TPM ถูกนำมาใช้
      แต่ถึงอย่างนั้น คุณก็ยังติดตั้ง Linux บนพีซีที่ขายมาพร้อม Windows ได้ ยังติดตั้งซอฟต์แวร์ third-party ที่ไม่ได้มาจาก Store บน Windows ได้ และยังดูหนังเถื่อนที่โหลดจากทอร์เรนต์ได้
      ถ้ารับได้กับการที่เปลี่ยนภาพพื้นหลังเดสก์ท็อปไม่ได้ คุณก็ยังรัน Windows แบบไม่ลงทะเบียนหรือไม่จ่ายเงินได้อยู่
    • อาจจะดูไร้เดียงสา แต่ตอนนี้ผมยังเชื่ออยู่ ควรตั้งข้อสงสัยแน่ แต่การปัดทิ้งทั้งหมดเพียงเพราะการคาดเดาก็เป็นการอนุมานที่ผิดพลาดอีกรูปแบบหนึ่ง
      Microsoft มีโอกาสได้ประโยชน์ไหม? แน่นอน แต่แค่นั้นยังไม่พอจะหักล้างแรงจูงใจด้านความปลอดภัยของผู้ใช้ที่แท้จริง หรือประโยชน์ที่ผู้ใช้ปลายทางจะได้รับ
  • “ข้อมูลหลังบล็อกลายเซ็นจะไม่ถูกตรวจสอบเลย และยังสามารถเขียนทับข้อมูลที่มาก่อนหน้าได้ด้วย ถ้าบล็อกชนิดเดียวกันถูกเก็บไว้ด้วยกัน บล็อกสุดท้ายจะเขียนทับบล็อกทั้งหมดก่อนหน้า ดังนั้นถ้าคุณอยากแก้ข้อมูลไลเซนส์ ก็แค่สร้างบล็อกนั้นแล้วใส่ไว้หลังบล็อกลายเซ็น”
    น่าตกใจจริงๆ

    • สงสัยว่านี่เป็นความผิดพลาดทางคริปโตที่แย่ที่สุดนับตั้งแต่ Nintendo Wii ใช้ strncmp ตรวจสอบแฮชแล้วหยุดที่ไบต์ 00 ตัวแรกที่ตรงกันหรือเปล่า