1 ポイント 投稿者 GN⁺ 2024-09-08 | 1件のコメント | WhatsAppで共有
  • Keyhole は、CLiP のライセンス検証フローを回避して Microsoft Store アプリ と最新の Windows エディション向けライセンスを作成できてしまう DRM 回避バグだった
  • CLiP は、署名付き XML ライセンスを clipsvc.dll で検証した後、SPLicenseBlockclipsp.sys に渡してカーネルで再確認する 信頼チェーン を使用している
  • clipup.exe には XML ライセンス署名用の ECDSA キー が難読化なしで含まれており、任意に署名した XML ライセンスを ClipSvc が受け入れてしまっていた
  • 実際の脆弱性は、ライセンスブロックの 署名ブロック後方のデータ が検証されないにもかかわらず、同じ型の先行ブロックを上書きできる点にあり、device-locked Windows ライセンスには device-locked アプリライセンスが必要だった
  • Cisco TALOS は同じバグを 2024 年 4 月 8 日に Microsoft へ報告しており、修正後はパーサーが 署名ブロックに遭遇した時点で直ちに終了 し、後続ブロックを処理しない

Keyhole の性質と公開の背景

  • Keyhole は Windows ライセンス検査の回避作業中に発見されたバグで、Microsoft Store アプリ または最新の Windows エディションにライセンスを付与できてしまう DRM 回避手法だった
  • 一部のバグは将来のアクティベーション手法やテストツールとして残すため非公開にされていたが、CVE-2024-38184Cisco TALOS を通じて公開されたことで、Keyhole の内容も公開された
  • このバグは、Microsoft に報告された時期とほぼ同じ頃に独立して発見されていた

CLiP のライセンス処理構造

  • CLiP(Client Licensing Platform)は Windows 10 で導入されたシステムで、主に Microsoft Store アプリ DRM を実装し、Windows のアクティベーションとも統合されている
  • Windows 内の主要コンポーネントは以下の通り
    • clipup.exe: Windows 8 Store ライセンス、正規チケット、プロダクトキーをデジタルライセンスへ移行する
    • clipsvc.dll: アプリライセンスを管理するユーザーモードサービス
    • clipc.dll: アプリケーションが CLiP と相互作用するための API
    • clipwinrt.dll: Windows Runtime を使う UWP アプリケーション向け API
    • clipsp.sys: ライセンスを検証するカーネルモードドライバー
  • 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 には、XML ライセンス署名に使用できる有効な ECDSA キー が難読化されずに保存されていた
  • このキーは本来、Microsoft Store に一時ライセンスを送ってデジタルライセンスを受け取るために使われるが、ClipSvc はアプリライセンスでも同じキーを受け入れていた
  • その結果、任意の XML ライセンスに署名または再署名でき、ClipSvc のユーザーモード検査を回避して、任意のライセンスブロックを clipsp.sys に直接渡せてしまった
  • この段階でユーザーモードレベルの 信頼チェーン は無力化され、残る争点は ClipSp を欺けるかどうかだった

ClipSp の解析と Warbird 難読化解除

  • ClipSp の多くのコードは、Microsoft 独自の難読化ツール Warbird によって隠されていた
  • ClipSp は難読化コード呼び出しを復号関数と暗号化関数で囲んでおり、その動作はユーザーモードプログラムでの Warbird の挙動に似ている
  • Microsoft サーバー上にあった clipsp.sys のシンボルが解析に役立ち、KiFilterFiberContext の手法 をもとに復号関数を手動実行することで、隠されたコードを確認できた
  • Warbird のユーザーモードでの動作は 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 デジタルライセンスは device-locked であるため、Windows ライセンスを作るには Roblox のような device-locked アプリライセンスが必要だった
  • これにより、Enterprise LTSC をデジタルライセンスでアクティベートしたり、generic key で正規 KMS サーバーを有効化したりするなど、以前は不可能だった作業も可能になった

公開された再現フローと修正方式

  • Windows ライセンスを作成する流れは、device-locked アプリのインストール、https://licensing.mp.microsoft.com/v7.0/licenses/content から来るライセンスの傍受、ライセンスのデコードとブロック抽出、新規データの追加、XML のパッケージ化と署名、C:\ProgramData\Microsoft\Windows\ClipSVC\Install\Migration へのコピー、ClipSvc の再起動または clipup -p の実行へと続く
  • Cisco TALOS の TALOS-2024-1964 は、同じバグを Microsoft に 2024 年 4 月 8 日に報告していた
  • このバグは単なる DRM 問題に見えるかもしれないが、Keyhole が ClipSp のより深刻なバグ へ到達する入口になり得るため、TALOS の公開範囲に含まれた
  • 修正後のライセンスブロックパーサーは、署名ブロックに遭遇した時点で直ちに終了 して署名後のブロックを処理せず、この変更によって Keyhole は防がれた

公開資料と Xbox One との関係

  • Keyhole 公開後、Keyhole ライセンス生成コード と、解析を助けるシンボル入りの CLiP バイナリ集 が公開された
  • ClipSp のコードのかなりの部分は Xbox One DRM システムからコピーされたものとみられる
  • Xbox One には最新 PC の TPM に基づく SP、すなわち secure processor チップがあり、主な役割はコード署名の強制とライセンス検証である
  • CLiP の XML ライセンス形式と TLV ベースのライセンスブロックの大半は、Xbox One DRM システムから持ち込まれた形式である
  • Xbox SP にも ClipSp と同様のパースバグはあるが、データブロックと署名関連ブロックを別々にパースするため、Keyhole は Xbox では動作しない

1件のコメント

 
GN⁺ 2024-09-08
Hacker News のコメント
  • つまり、あとは細部を解明すれば Microsoft Store から Xbox ゲームを無料で直接ダウンロードできるということ?
    要するに Xbox は現時点で PS Vita 並みに完全にハックされた状態ということなのか?

    • そう。記事でいちばん見落とされている部分のように思うけど、もしかすると最も興味深い部分でもある
      ただし、Xbox で自動更新を有効にしている人には残念ながら当てはまらない。最新のシステムソフトウェアには、collateral-damage エクスプロイトが対応しているものより高いカーネルバージョンが含まれているようだ
    • 完全に余談だけど、脚注の記号に 円/元記号を使っているのがとても興味深い。何か見落としている歴史的経緯があるのか、それとも単に適当に使っただけなのか気になる
  • Windows Store に 2020 年まであった Lego Boost for Windows 10 アプリをインストールできるライセンスも取得できるといいのだが
    私の理解では、ライセンスがあればまだダウンロードできるが、新規ユーザーにはもう提供されていない

  • 正しく読めているなら、Microsoft は 一時ライセンス署名キーの適用範囲を狭められるはずなので、永続ライセンスを生成できる期間は長くない可能性が高い

  • これで Microsoft アカウントなしに HEVC 拡張機能を有効化できるのだろうか? 特許を包括ライセンスで処理できないのが本当に苛立たしい

    • このエクスプロイトは不要。MS のコーデックパックを必要としないメディアプレーヤーを使えばよいが、それが選択肢でないなら:
      1. https://store.rg-adguard.net に移動
      2. https://apps.microsoft.com/detail/9n4wgh0z6vhq を貼り付ける
      3. ring を "Retail" に変更
      4. 拡張子が "appxbundle" のファイルをダウンロード
      5. インストールする。この段階で開発者モードを有効にする必要があるかもしれないが、正確には覚えていない
    • 公式の Microsoft 署名付き HEVC インストーラーのダウンロードリンクは 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 ドライブにディスクが入っていないとプレイする「ライセンス」がない状態になる
    さらに皮肉なのは、これが動作したとしても、コンソールの公開鍵が失効リストに載っていて自分のゲームセーブファイルを読めないかもしれない点だ。CON ファイルをデフォルト値 0 で再署名すれば回避はできる
    3 つ目の皮肉もそのうち出てくるかもしれない。これらすべてが本当に見覚えのあるものに見える。実に素晴らしい

    • XML > TLV > ヌル終端文字列 / ユーザー入力用 UTF-16 のようなエコシステムでは、どこであれ オフバイワンエラーや検証されていない悪意あるユーザー入力が入り込むと、技術的負債でできたカードハウスが、権限昇格、リモートコード実行、横方向移動の地雷原へと崩れ落ち得る。ただし、些細な話ではない
      このバグは本質的に、サニタイズされていない入力とコンテキスト脱出が偶然結びつく日のための 遡及的なピボットプラットフォームに近い
      表面的には単なるデジタルステッカーの差し替えに見えるが、Microsoft が成功を過度にレバレッジし、後方互換性と自社の技術的負債のために破壊的変更を拒み続けてきたせいで、ある種のミスは些細でも影響が大きく永続化する
  • ウイルス対策ソフトがページをブロックしているなら、こちらで見ればよい: https://archive.is/90XGW

    • どのウイルス対策ソフトがそうするの?
  • Clip は Xbox One よりも前からあったのでは?

  • 記事を読んで、特にこのエンジンが Xbox DRM エンジンからコピペされたという部分を見ると、Pluton も Xbox からコピーしてきたものなのに、まだエンドユーザーのセキュリティのためだと信じている人はいるのだろうか? 結局、Microsoft が PC 上で強制可能な DRM を持つためではないのか?
    ちなみに Pluton は最新の Intel ノート PC 向けチップにも入っており、AMD にはしばらく前から入っていた。Windows がこれを必須にするまで、どれくらいかかるだろうか?

    • そんなものを信じたことはない。最悪なのは、Microsoft 流の Kool-Aidを飲んでいる人たちにこれを説明することだ
      私は Microsoft 管理者なので、会社の人たちは Win11 や Intune のような最大限ロックダウンする構成を好む。私にとって Windows の本質はそういうものではなく、優れた管理ツールと後方互換性だ
      Pluton もまた別の TPM になるだろう。導入して 5 年待ってから義務化する。Microsoft には時間がある
    • TPM が導入されてから 10 年以上、人々はずっとそう言い続けてきた
      それでも、Windows がプリインストールされて販売された PC にいまだに Linux をインストールできるし、Store 以外から入手したサードパーティーソフトウェアも Windows にインストールできるし、Torrent でダウンロードした海賊版映画も見られる
      デスクトップの壁紙を変更できないことを受け入れられるなら、登録も支払いもしていない Windows も実行できる
    • 甘いのかもしれないが、まだ信じている。懐疑は必要だが、推測だけで完全に退けるのも、それはそれで誤った推論だ
      Microsoft が潜在的に利益を得られるか? もちろんだ。だが、それが本物のユーザーセキュリティ上の動機や、エンドユーザーに返ってくる利点を否定するわけではない
  • 「署名ブロックの後ろにあるデータはまったく検査されず、場合によっては前に出てきたデータを上書きすることさえできる。同じ種類のブロックが一緒に保存されている場合、最後のブロックがそれ以前のすべてのブロックを上書きする。だからライセンスデータを変更したいなら、そのブロックを作って署名ブロックの後ろに置くだけでよい」
    本当に驚きだ

    • Nintendo Wii がハッシュ検証に strncmp を使っていて、最初に一致する 00 バイトで止まっていた件以来、最悪の暗号学的ミスなのか気になる