Keyhole – Tự tạo giấy phép Windows Store
(massgrave.dev)- Keyhole là một lỗi vượt DRM từng cho phép né luồng xác minh giấy phép của CLiP để tạo giấy phép cho ứng dụng Microsoft Store và các phiên bản Windows mới nhất
- CLiP sử dụng chuỗi tin cậy: xác minh giấy phép XML đã ký trong
clipsvc.dll, rồi chuyểnSPLicenseBlocksangclipsp.sysđể kiểm tra lại trong kernel - Trong
clipup.execó chứa khóa ECDSA dùng để ký giấy phép XML mà không bị làm rối, nên ClipSvc có thể chấp nhận giấy phép XML được ký tùy ý - Lỗ hổng thực sự nằm ở chỗ dữ liệu phía sau khối chữ ký trong khối giấy phép không được xác minh nhưng vẫn có thể ghi đè một khối cùng loại ở phía trước; còn giấy phép Windows bị khóa theo thiết bị cần giấy phép ứng dụng cũng bị khóa theo thiết bị
- Cisco TALOS đã báo cáo cùng lỗi này cho Microsoft vào ngày 8/4/2024, và sau khi sửa, parser kết thúc ngay khi gặp khối chữ ký, không xử lý các khối theo sau
Bản chất của Keyhole và bối cảnh công bố
- Keyhole là một lỗi được phát hiện trong quá trình tìm cách vượt qua kiểm tra giấy phép Windows, là phương pháp vượt DRM từng cho phép cấp giấy phép cho ứng dụng Microsoft Store hoặc các phiên bản Windows mới nhất
- Một số lỗi được giữ kín để bảo tồn làm phương pháp kích hoạt hoặc công cụ kiểm thử trong tương lai, nhưng khi CVE-2024-38184 được công bố thông qua Cisco TALOS, nội dung về Keyhole cũng được công khai
- Lỗi này được phát hiện độc lập vào khoảng thời gian tương tự khi nó được báo cáo cho Microsoft
Cấu trúc xử lý giấy phép của CLiP
- CLiP (Client Licensing Platform) là hệ thống được giới thiệu trong Windows 10, chủ yếu dùng để triển khai DRM cho ứng dụng Microsoft Store và cũng được tích hợp với kích hoạt Windows
- Các thành phần chính trong Windows gồm:
clipup.exe: chuyển giấy phép Windows 8 Store, genuine ticket và product key sang giấy phép sốclipsvc.dll: dịch vụ user-mode quản lý giấy phép ứng dụngclipc.dll: API để ứng dụng tương tác với CLiPclipwinrt.dll: API cho ứng dụng UWP dùng Windows Runtimeclipsp.sys: driver kernel-mode xác minh giấy phép
- Khi một ứng dụng có giấy phép CLiP được cài đặt, giấy phép XML đã ký được chuyển tới
clipsvc.dll; sau khi xác minh chữ ký XML, dữ liệu được lưu vào%PROGRAMDATA%\Microsoft\Windows\ClipSVC\tokens.dat - Sau đó, khối giấy phép đã ký được trích xuất từ thẻ
SPLicenseBlock, chuyển tớiclipsp.sys, và sau khi xác minh sẽ được lưu trong kho giấy phép CLiPHKLM\SYSTEM\CurrentControlSet\Control\{7746D80F-97E0-4E26-9543-26B41FC22F79} - Kho này mặc định được bảo vệ để không hiển thị, nhưng có thể truy cập nếu thay đổi quyền
Khóa ký còn sót trong clipup.exe
- Trong
clipup.execó lưu một khóa ECDSA hợp lệ có thể dùng để ký giấy phép XML mà không hề bị làm rối - Khóa này vốn dùng để gửi giấy phép tạm thời tới Microsoft Store nhằm nhận giấy phép số, nhưng ClipSvc cũng chấp nhận cùng khóa đó cho giấy phép ứng dụng
- Kết quả là có thể ký hoặc ký lại giấy phép XML tùy ý, vượt qua kiểm tra user-mode của ClipSvc và chuyển trực tiếp khối giấy phép mong muốn tới
clipsp.sys - Ở bước này, chuỗi tin cậy ở cấp user-mode bị vô hiệu hóa, và vấn đề còn lại là liệu có thể đánh lừa ClipSp hay không
Phân tích ClipSp và gỡ làm rối Warbird
- Nhiều phần mã của ClipSp được che giấu bằng Warbird, công cụ làm rối độc quyền của Microsoft
- ClipSp bọc các lời gọi tới mã bị làm rối bằng hàm giải mã và hàm mã hóa, tương tự cách Warbird hoạt động trong chương trình user-mode
- Symbol của
clipsp.systrên máy chủ Microsoft đã hỗ trợ việc phân tích; dựa trên phương pháp của KiFilterFiberContext, có thể chạy thủ công hàm giải mã để xem mã bị ẩn - Có thể tham khảo cách Warbird hoạt động ở user-mode tại warbird-docs
Định dạng khối giấy phép và lỗi Keyhole
- Trong CLiP, thông tin giấy phép quan trọng nằm trong khối giấy phép, và định dạng này được ghi lại trong CikExtractor
- Khối giấy phép dùng định dạng TLV (tag-length-value)
- Mỗi khối con có kiểu dữ liệu, độ dài dữ liệu và dữ liệu thực tế
- Ví dụ kiểu
0xC9là License Information, độ dài0xAnghĩa là dữ liệu 10 byte
- Cuối khối giấy phép luôn có khối chữ ký kiểu
0xCC, chứa chữ ký của toàn bộ dữ liệu phía trước và thông tin khóa dùng để ký - Kết quả thử nghiệm cho thấy dữ liệu được nối sau khối chữ ký không được xác minh, và nếu có nhiều khối cùng kiểu thì khối cuối cùng sẽ ghi đè các khối trước đó
- Vì vậy, chỉ cần nối dữ liệu giấy phép mới sau khối chữ ký là có thể thay đổi thông tin giấy phép hiện có; cách này được đặt tên là Keyhole
Phạm vi khả dụng và hạn chế
- Phương pháp này từng cho phép tạo giấy phép cho các mục bán trên Microsoft Store từ một giấy phép Microsoft Store khác
- Vì ngay cả ứng dụng miễn phí cũng có nhiều giấy phép, trạng thái lúc đó là có thể tạo nhiều giấy phép cho mục mong muốn
- Tuy nhiên, giấy phép bị khóa theo thiết bị không thể được tạo từ giấy phép không khóa theo thiết bị
- Giấy phép số của Windows bị khóa theo thiết bị, nên để tạo giấy phép Windows cần giấy phép ứng dụng bị khóa theo thiết bị như Roblox
- Nhờ đó, những việc trước đây không thể làm cũng trở nên khả thi, như kích hoạt Enterprise LTSC bằng giấy phép số hoặc kích hoạt máy chủ KMS hợp lệ bằng generic key
Luồng tái hiện đã công bố và cách sửa
- Luồng tạo giấy phép Windows gồm: cài đặt ứng dụng bị khóa theo thiết bị, chặn giấy phép đến từ
https://licensing.mp.microsoft.com/v7.0/licenses/content, giải mã giấy phép và trích xuất khối, thêm dữ liệu mới, đóng gói và ký XML, sao chép vàoC:\ProgramData\Microsoft\Windows\ClipSVC\Install\Migration, rồi khởi động lại ClipSvc hoặc chạyclipup -p - TALOS-2024-1964 của Cisco TALOS đã báo cáo cùng lỗi này cho Microsoft vào ngày 8/4/2024
- Lỗi này có thể trông giống một vấn đề DRM đơn thuần, nhưng vì Keyhole có thể trở thành điểm vào dẫn tới lỗi nghiêm trọng hơn trong ClipSp, nó được đưa vào phạm vi công bố của TALOS
- Parser khối giấy phép đã được sửa để kết thúc ngay khi gặp khối chữ ký, không xử lý các khối sau chữ ký; thay đổi này chặn Keyhole
Tài liệu công khai và mối liên hệ với Xbox One
- Sau khi Keyhole được công bố, mã tạo giấy phép Keyhole và bộ sưu tập binary CLiP có kèm symbol để hỗ trợ phân tích đã được phát hành
- Một phần đáng kể mã của ClipSp được xác định là sao chép từ hệ thống DRM của Xbox One
- Xbox One có chip SP, tức secure processor, dựa trên TPM của PC hiện đại; vai trò chính của nó là cưỡng chế ký mã và xác minh giấy phép
- Định dạng giấy phép XML của CLiP và phần lớn khối giấy phép dựa trên TLV được lấy từ hệ thống DRM của Xbox One
- Xbox SP cũng có lỗi parsing giống ClipSp, nhưng vì nó parse khối dữ liệu và khối liên quan đến chữ ký riêng biệt nên Keyhole không hoạt động trên Xbox
1 bình luận
Các ý kiến trên Hacker News
Vậy tức là giờ chỉ cần tìm ra chi tiết là có thể tải trực tiếp game Xbox miễn phí từ Microsoft Store sao?
Nói cách khác, hiện tại Xbox đã bị hack hoàn toàn như PS Vita rồi à?
Tuy nhiên đáng tiếc là không áp dụng cho những ai bật tự động cập nhật trên Xbox. Có vẻ phần mềm hệ thống mới nhất chứa phiên bản kernel cao hơn mức mà exploit collateral-damage hỗ trợ
Ước gì cũng có thể lấy được license để cài ứng dụng Lego Boost for Windows 10, vốn còn trên Windows Store đến năm 2020
Theo mình hiểu thì nếu có license thì vẫn tải được, nhưng không còn cung cấp cho người dùng mới nữa
Nếu mình đọc đúng, Microsoft có thể thu hẹp phạm vi áp dụng của khóa ký license tạm thời, nên có khả năng khoảng thời gian tạo được license vĩnh viễn sẽ không dài
Cái này có thể kích hoạt phần mở rộng HEVC mà không cần tài khoản Microsoft không? Thật bực vì không thể xử lý bằng một license trọn gói cho bằng sáng chế
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
Những chuyện kiểu này trong suốt nhiều thập kỷ là kênh phân phối và truyền thông của Windows hiệu quả nhất
Trớ trêu là mình có lẽ sẽ nghiêm túc dùng cái này để chơi game Guitar Hero có đĩa vật lý trên phần cứng chính hãng. Game đã được cài, nhưng nếu không có đĩa kẹt trong ổ DVD bị hỏng thì coi như không có “license” để chơi
Trớ trêu hơn nữa là, ngay cả khi cách này hoạt động, khóa công khai của console có thể đã nằm trong danh sách thu hồi nên có thể không đọc được file lưu game của mình. Có thể né bằng cách ký lại file CON về giá trị mặc định 0
Có khi sắp có điều trớ trêu thứ ba nữa. Tất cả chuyện này trông thật quen thuộc. Cực kỳ xuất sắc
Về bản chất, bug này giống một nền tảng pivot hồi tố dành cho ngày mà đầu vào chưa được làm sạch và việc thoát ngữ cảnh tình cờ kết hợp với nhau
Nhìn bề ngoài chỉ như tráo một miếng dán số, nhưng vì Microsoft đã tận dụng thành công quá mức, đồng thời từ chối các thay đổi phá vỡ do tương thích ngược và nợ kỹ thuật của chính họ, nên một số sai sót dù nhỏ vẫn có tác động lớn và trở nên lâu dài
Nếu antivirus chặn trang thì xem ở đây: https://archive.is/90XGW
Clip chẳng phải đã có từ trước Xbox One khá lâu rồi sao?
Đọc bài, đặc biệt là phần engine này được copy-paste từ engine DRM của Xbox, liệu còn ai tin Pluton là để bảo mật người dùng cuối không, khi nó cũng được sao chép từ Xbox? Rốt cuộc chẳng phải là để Microsoft có DRM có thể cưỡng chế trên PC sao?
Nhân tiện, Pluton cũng đã có trong các chip laptop Intel mới nhất, và đã có trong AMD một thời gian. Còn bao lâu nữa thì Windows sẽ yêu cầu thứ này?
Vì là quản trị viên Microsoft nên người trong công ty thích các cấu hình khóa chặt tối đa như Win11, Intune. Với mình bản chất của Windows không phải những thứ đó, mà là công cụ quản trị tốt và khả năng tương thích ngược
Pluton cũng sẽ trở thành một TPM khác. Họ sẽ triển khai, chờ 5 năm rồi bắt buộc dùng. Microsoft có thời gian
Dù thế, bạn vẫn có thể cài Linux lên PC bán kèm Windows, vẫn có thể cài phần mềm bên thứ ba tải từ ngoài Store vào Windows, và vẫn xem được phim lậu tải từ torrent
Nếu không ngại việc không đổi được hình nền desktop, bạn vẫn có thể chạy Windows chưa đăng ký hoặc chưa trả tiền
Microsoft có thể hưởng lợi tiềm năng không? Tất nhiên. Nhưng điều đó không phủ nhận động cơ bảo mật người dùng thật sự và lợi ích mang lại cho người dùng cuối
“Dữ liệu sau khối chữ ký hoàn toàn không được kiểm tra, thậm chí còn có thể ghi đè dữ liệu xuất hiện trước đó. Khi các khối cùng loại được lưu cùng nhau, khối cuối cùng sẽ ghi đè tất cả khối trước. Vì vậy nếu muốn thay đổi dữ liệu license, chỉ cần tạo khối đó và đặt sau khối chữ ký là xong”
Thật đáng kinh ngạc