1 điểm bởi GN⁺ 2024-09-08 | 1 bình luận | Chia sẻ qua WhatsApp
  • 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ển SPLicenseBlock sang clipsp.sys để kiểm tra lại trong kernel
  • Trong clipup.exe có 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ụng
    • clipc.dll: API để ứng dụng tương tác với CLiP
    • clipwinrt.dll: API cho ứng dụng UWP dùng Windows Runtime
    • clipsp.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ới clipsp.sys, và sau khi xác minh sẽ được lưu trong kho giấy phép CLiP HKLM\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.exe có 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.sys trê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 0xC9 là License Information, độ dài 0xA nghĩ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ào C:\ProgramData\Microsoft\Windows\ClipSVC\Install\Migration, rồi khởi động lại ClipSvc hoặc chạy clipup -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 Keyholebộ 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

 
GN⁺ 2024-09-08
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 à?

    • Đúng. Có vẻ là phần bị bỏ qua nhiều nhất trong bài, nhưng có lẽ cũng là phần thú vị nhất
      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ợ
    • Hoàn toàn lạc đề, nhưng việc dùng ký hiệu yên/nhân dân tệ làm dấu chú thích thật sự rất thú vị. Không biết có lịch sử nào mình đã bỏ lỡ không, hay chỉ là dùng tùy ý
  • Ướ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ế

    • Không cần exploit này. Chỉ cần dùng media player không cần gói codec của MS là được, nhưng nếu đó không phải là lựa chọn thì:
      1. Vào https://store.rg-adguard.net
      2. Dán https://apps.microsoft.com/detail/9n4wgh0z6vhq
      3. Đổi ring sang "Retail"
      4. Tải file có phần mở rộng "appxbundle"
      5. Cài đặt. Ở bước này có thể phải bật chế độ nhà phát triển, mình không nhớ chính xác
    • Link tải file cài HEVC có chữ ký chính thức của Microsoft cũng có thể tìm thấy trên massgrave.dev[0]. Tài nguyên thật sự rất tuyệt
      0: https://massgrave.dev/unsupported_products_activation#hevc-v...
    • Không cần trả tiền. Chỉ cần link trực tiếp là đủ
      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
    • Rốt cuộc cần để làm gì? Codec HEVC được kèm trong gói driver của nhà sản xuất GPU mà
  • 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

    • Không đúng với phần lớn phần mềm khác
  • 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

    • Trong một hệ sinh thái kiểu XML > TLV > chuỗi kết thúc bằng null / UTF-16 cho đầu vào người dùng, chỉ cần bất kỳ đâu có lỗi off-by-one hoặc đầu vào độc hại từ người dùng chưa được kiểm chứng, ngôi nhà bằng lá bài của nợ kỹ thuật có thể sụp thành bãi mìn leo thang đặc quyền, thực thi mã từ xa và di chuyển ngang. Dù vậy đây không phải chuyện nhỏ
      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

    • Những antivirus nào làm vậy?
  • 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?

    • Mình chưa từng tin chuyện đó. Tệ nhất là phải giải thích điều này cho những người uống Kool-Aid kiểu Microsoft
      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
    • Từ khi TPM được đưa vào, hơn 10 năm nay người ta vẫn nói như vậy
      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
    • Có thể là ngây thơ, nhưng mình vẫn tin. Hoài nghi là cần thiết, nhưng bác bỏ hoàn toàn chỉ dựa trên suy đoán cũng là một kiểu suy luận sai
      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

    • Không biết đây có phải sai lầm mật mã tệ nhất kể từ vụ Nintendo Wii dùng strncmp để kiểm tra hash rồi dừng ở byte 00 đầu tiên khớp không