Keyhole – การสร้างไลเซนส์ Windows Store ด้วยตัวเอง
(massgrave.dev)- 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 licenseclipsvc.dll: บริการใน user mode ที่จัดการไลเซนส์แอปclipc.dll: API สำหรับให้แอปพลิเคชันโต้ตอบกับ CLiPclipwinrt.dll: API สำหรับแอป UWP ที่ใช้ Windows Runtimeclipsp.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 ความคิดเห็น
ความคิดเห็นบน Hacker News
งั้นหมายความว่าตอนนี้ถ้ารู้รายละเอียดเพิ่ม ก็สามารถดาวน์โหลดเกม Xbox จาก Microsoft Store ได้ฟรีโดยตรงใช่ไหม?
แปลว่าตอนนี้ Xbox อยู่ในสภาพที่ถูกแฮ็กจนหมดจดพอๆ กับ PS Vitaแล้วหรือ?
แต่เสียดายว่าใช้ไม่ได้กับคนที่เปิดอัปเดตอัตโนมัติบน Xbox เพราะซอฟต์แวร์ระบบเวอร์ชันล่าสุดน่าจะมีเคอร์เนลเวอร์ชันที่สูงกว่าที่เอ็กซ์พลอยต์ collateral-damage รองรับ
น่าจะดีถ้าสามารถขอไลเซนส์เพื่อติดตั้งแอป Lego Boost for Windows 10ที่เคยอยู่ใน Windows Store จนถึงปี 2020 ได้
เท่าที่เข้าใจ ถ้ามีไลเซนส์ก็ยังดาวน์โหลดได้อยู่ แต่จะไม่เปิดให้ผู้ใช้ใหม่ใช้อีกแล้ว
ถ้าอ่านไม่ผิด Microsoft ก็น่าจะจำกัดขอบเขตการใช้งานของคีย์เซ็นไลเซนส์ชั่วคราวได้ ดังนั้นช่วงเวลาที่จะสร้างไลเซนส์ถาวรได้อาจเหลือไม่มาก
แบบนี้ใช้เพื่อเปิดใช้งานส่วนขยาย HEVCโดยไม่ต้องมีบัญชี Microsoft ได้ไหม? เรื่องที่ไม่สามารถจัดการสิทธิบัตรด้วยไลเซนส์แบบเหมารวมนี่น่าหงุดหงิดมาก
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
เรื่องแบบนี้ตลอดหลายสิบปีที่ผ่านมาเป็นหนึ่งในช่องทางการแจกจ่ายและสื่อสารของ Windowsที่ได้ผลที่สุด
น่าแดกดันที่ผมน่าจะใช้มันอย่างจริงจังเพื่อเล่นเกม Guitar Heroที่มีแผ่นแท้อยู่แล้วบนฮาร์ดแวร์แท้ เกมติดตั้งอยู่แล้วแต่ไม่มี “ไลเซนส์” ให้เล่นถ้าในไดรฟ์ DVD ที่พังไม่มีแผ่นคาอยู่
ที่แดกดันกว่านั้นคือ ต่อให้มันใช้งานได้ public key ของคอนโซลอาจอยู่ในรายการเพิกถอนจนทำให้อ่านไฟล์เซฟเกมของผมไม่ได้ แต่ก็อ้อมได้ด้วยการเซ็นไฟล์ CON ใหม่โดยใช้ค่าเริ่มต้น 0
หรือเดี๋ยวอาจมีความแดกดันชั้นที่สามตามมาอีก ทั้งหมดนี้ดูคุ้นตามาก สุดยอดจริงๆ
โดยเนื้อแท้แล้วบั๊กนี้เกือบจะเป็นเหมือนแพลตฟอร์ม pivot ย้อนหลังที่รอวันที่อินพุตที่ไม่ผ่านการทำให้สะอาดกับการหลุดออกจากบริบทจะมาบรรจบกันโดยบังเอิญ
ภายนอกมันดูเหมือนแค่การสลับสติกเกอร์ดิจิทัลธรรมดาๆ แต่เพราะ Microsoft ใช้ความสำเร็จของตัวเองเป็นคานงัดมากเกินไป และปฏิเสธการเปลี่ยนแปลงที่ทำให้ของเดิมพังเพราะต้องรักษา backward compatibility กับหนี้เทคนิคของตัวเอง ความผิดพลาดบางอย่างเลยแม้จะเล็กก็มีผลกระทบใหญ่และคงอยู่อย่างถาวร
ถ้าแอนติไวรัสบล็อกหน้านี้ ลองดูที่นี่ได้: https://archive.is/90XGW
Clip นี่มีมาตั้งแต่ก่อนXbox Oneอีกไม่ใช่เหรอ?
พออ่านบทความ โดยเฉพาะส่วนที่บอกว่าเอนจินนี้ถูกคัดลอกมาจากเอนจิน DRM ของ Xbox แบบ copy-paste ยังมีใครเชื่ออีกไหมว่า Pluton ถูกทำมาเพื่อความปลอดภัยของผู้ใช้ปลายทางจริงๆ ในเมื่อมันก็ยกมาจาก Xbox เหมือนกัน? สุดท้ายแล้วมันก็เพื่อให้ Microsoft มี DRM ที่บังคับใช้บนพีซีได้ไม่ใช่หรือ?
อ้างอิงเพิ่มเติม Pluton เข้าไปอยู่ในชิปโน้ตบุ๊ก Intel รุ่นใหม่แล้ว และอยู่กับ AMD มาสักพักด้วย กว่า Windows จะเริ่มบังคับใช้จะอีกนานแค่ไหน?
ในฐานะแอดมิน Microsoft คนในบริษัทจึงชอบการตั้งค่าที่ล็อกทุกอย่างเต็มที่แบบ Win11, Intune อะไรทำนองนั้น แต่สำหรับผม แก่นของ Windows ไม่ใช่แบบนั้น มันคือเครื่องมือจัดการที่ยอดเยี่ยมกับ backward compatibility
Pluton ก็คงจะกลายเป็น TPM อีกตัวหนึ่ง เอาเข้ามา แล้วรอ 5 ปีก่อนค่อยบังคับใช้ Microsoft มีเวลาอยู่แล้ว
แต่ถึงอย่างนั้น คุณก็ยังติดตั้ง Linux บนพีซีที่ขายมาพร้อม Windows ได้ ยังติดตั้งซอฟต์แวร์ third-party ที่ไม่ได้มาจาก Store บน Windows ได้ และยังดูหนังเถื่อนที่โหลดจากทอร์เรนต์ได้
ถ้ารับได้กับการที่เปลี่ยนภาพพื้นหลังเดสก์ท็อปไม่ได้ คุณก็ยังรัน Windows แบบไม่ลงทะเบียนหรือไม่จ่ายเงินได้อยู่
Microsoft มีโอกาสได้ประโยชน์ไหม? แน่นอน แต่แค่นั้นยังไม่พอจะหักล้างแรงจูงใจด้านความปลอดภัยของผู้ใช้ที่แท้จริง หรือประโยชน์ที่ผู้ใช้ปลายทางจะได้รับ
“ข้อมูลหลังบล็อกลายเซ็นจะไม่ถูกตรวจสอบเลย และยังสามารถเขียนทับข้อมูลที่มาก่อนหน้าได้ด้วย ถ้าบล็อกชนิดเดียวกันถูกเก็บไว้ด้วยกัน บล็อกสุดท้ายจะเขียนทับบล็อกทั้งหมดก่อนหน้า ดังนั้นถ้าคุณอยากแก้ข้อมูลไลเซนส์ ก็แค่สร้างบล็อกนั้นแล้วใส่ไว้หลังบล็อกลายเซ็น”
น่าตกใจจริงๆ
00ตัวแรกที่ตรงกันหรือเปล่า