1 Punkte von GN⁺ 2024-09-08 | 1 Kommentare | Auf WhatsApp teilen
  • Keyhole ist ein DRM-Bypass-Bug, der den Lizenzprüfungsablauf von CLiP umging und es ermöglichte, Lizenzen für Microsoft-Store-Apps und aktuelle Windows-Editionen zu erstellen
  • CLiP verwendet eine Vertrauenskette, bei der signierte XML-Lizenzen in clipsvc.dll geprüft werden und anschließend ein SPLicenseBlock an clipsp.sys übergeben wird, wo im Kernel eine erneute Prüfung erfolgt
  • In clipup.exe war ein ECDSA-Schlüssel zum Signieren von XML-Lizenzen ohne Obfuskation enthalten, sodass ClipSvc beliebig signierte XML-Lizenzen akzeptieren konnte
  • Die eigentliche Schwachstelle bestand darin, dass Daten hinter dem Signaturblock im Lizenzblock nicht geprüft wurden, aber frühere Blöcke desselben Typs überschreiben konnten; für device-locked Windows-Lizenzen war eine device-locked App-Lizenz erforderlich
  • Cisco TALOS meldete denselben Bug am 8. April 2024 an Microsoft; nach der Behebung beendet der Parser die Verarbeitung sofort beim Signaturblock und verarbeitet keine nachfolgenden Blöcke mehr

Charakter von Keyhole und Hintergrund der Veröffentlichung

  • Keyhole ist ein Bug, der bei Arbeiten zur Umgehung der Windows-Lizenzprüfung entdeckt wurde und als DRM-Bypass das Lizenzieren von Microsoft-Store-Apps oder aktuellen Windows-Editionen ermöglichte
  • Einige Bugs blieben unveröffentlicht, um sie für künftige Aktivierungsmethoden oder Testwerkzeuge aufzubewahren; nachdem CVE-2024-38184 über Cisco TALOS öffentlich wurde, wurden auch die Details zu Keyhole veröffentlicht
  • Dieser Bug wurde unabhängig entdeckt, etwa zur gleichen Zeit, zu der er an Microsoft gemeldet wurde

Struktur der Lizenzverarbeitung in CLiP

  • CLiP (Client Licensing Platform) ist ein mit Windows 10 eingeführtes System, das hauptsächlich DRM für Microsoft-Store-Apps implementiert und auch in die Windows-Aktivierung integriert ist
  • Die wichtigsten Komponenten in Windows sind:
    • clipup.exe: Migriert Windows-8-Store-Lizenzen, Genuine Tickets und Produktschlüssel zu digitalen Lizenzen
    • clipsvc.dll: Ein User-Mode-Dienst zur Verwaltung von App-Lizenzen
    • clipc.dll: Eine API, über die Anwendungen mit CLiP interagieren
    • clipwinrt.dll: Eine API für UWP-Anwendungen, die die Windows Runtime nutzen
    • clipsp.sys: Ein Kernel-Mode-Treiber zur Prüfung von Lizenzen
  • Wenn eine CLiP-lizenzierte App installiert wird, wird eine signierte XML-Lizenz an clipsvc.dll übergeben; nach Prüfung der XML-Signatur werden die Daten in %PROGRAMDATA%\Microsoft\Windows\ClipSVC\tokens.dat gespeichert
  • Anschließend wird aus dem Tag SPLicenseBlock der signierte Lizenzblock extrahiert und an clipsp.sys übergeben; nach der Prüfung wird er im CLiP-Lizenzspeicher HKLM\SYSTEM\CurrentControlSet\Control\{7746D80F-97E0-4E26-9543-26B41FC22F79} abgelegt
  • Dieser Speicher ist standardmäßig vor Anzeige geschützt, kann aber durch Ändern der Berechtigungen zugänglich gemacht werden

Der in clipup.exe verbliebene Signaturschlüssel

  • In clipup.exe war ein gültiger ECDSA-Schlüssel gespeichert, der zum Signieren von XML-Lizenzen verwendet werden konnte, und zwar ohne Obfuskation
  • Dieser Schlüssel wird ursprünglich genutzt, um temporäre Lizenzen an den Microsoft Store zu senden und digitale Lizenzen zu erhalten; ClipSvc akzeptierte denselben Schlüssel jedoch auch für App-Lizenzen
  • Dadurch konnten beliebige XML-Lizenzen signiert oder erneut signiert werden, sodass die User-Mode-Prüfung von ClipSvc umgangen und gewünschte Lizenzblöcke direkt an clipsp.sys übergeben werden konnten
  • Auf dieser Stufe war die Vertrauenskette auf User-Mode-Ebene außer Kraft gesetzt; die verbleibende Frage war, ob sich ClipSp täuschen ließ

Analyse von ClipSp und Entschleierung von Warbird

  • Große Teile des ClipSp-Codes waren durch Warbird, Microsofts proprietäres Obfuskationswerkzeug, verborgen
  • ClipSp umschließt Aufrufe obfuskierten Codes mit Entschlüsselungs- und Verschlüsselungsfunktionen, ähnlich wie Warbird in User-Mode-Programmen arbeitet
  • Die auf Microsoft-Servern vorhandenen Symbole für clipsp.sys halfen bei der Analyse; anhand der Methode von KiFilterFiberContext konnten die Entschlüsselungsfunktionen manuell ausgeführt und der verborgene Code eingesehen werden
  • Informationen zur User-Mode-Funktionsweise von Warbird finden sich in warbird-docs

Lizenzblock-Format und der Keyhole-Bug

  • Die wichtigen Lizenzinformationen in CLiP befinden sich in Lizenzblöcken; das Format ist in CikExtractor dokumentiert
  • Lizenzblöcke verwenden das TLV-Format (Tag-Length-Value)
    • Jeder Unterblock enthält einen Datentyp, eine Datenlänge und die eigentlichen Daten
    • Beispielsweise bedeutet Typ 0xC9 License Information, Länge 0xA steht für 10 Byte Daten
  • Am Ende eines Lizenzblocks steht immer ein Signaturblock vom Typ 0xCC, der die Signatur aller vorangehenden Daten und Informationen zum für die Signatur verwendeten Schlüssel enthält
  • Experimente zeigten, dass hinter dem Signaturblock angehängte Daten nicht geprüft wurden und dass bei mehreren Blöcken desselben Typs der letzte Block die vorherigen überschreibt
  • Daher ließen sich vorhandene Lizenzinformationen ändern, indem hinter dem Signaturblock neue Lizenzdaten angehängt wurden; diese Methode erhielt den Namen Keyhole

Möglicher Umfang und Einschränkungen

  • Diese Methode ermöglichte es, Lizenzen für im Microsoft Store verkaufte Inhalte aus anderen Microsoft-Store-Lizenzen zu erstellen
  • Da auch viele kostenlose Apps Lizenzen haben, konnten zahlreiche Lizenzen für gewünschte Inhalte erzeugt werden
  • Device-locked Lizenzen ließen sich jedoch nicht aus device-unlocked Lizenzen erstellen
  • Digitale Windows-Lizenzen sind device-locked; um eine Windows-Lizenz zu erstellen, war daher eine device-locked App-Lizenz wie etwa Roblox erforderlich
  • Damit wurden auch zuvor unmögliche Vorgänge möglich, etwa Enterprise LTSC per digitaler Lizenz zu aktivieren oder mit einem Generic Key einen echten KMS-Server zu aktivieren

Öffentlich dokumentierter Reproduktionsablauf und Behebung

  • Der Ablauf zum Erstellen einer Windows-Lizenz besteht aus der Installation einer device-locked App, dem Abfangen der von https://licensing.mp.microsoft.com/v7.0/licenses/content kommenden Lizenz, dem Dekodieren der Lizenz und Extrahieren der Blöcke, dem Hinzufügen neuer Daten, dem Verpacken und Signieren als XML, dem Kopieren nach C:\ProgramData\Microsoft\Windows\ClipSVC\Install\Migration sowie dem Neustarten von ClipSvc oder dem Ausführen von clipup -p
  • TALOS-2024-1964 von Cisco TALOS meldete denselben Bug am 8. April 2024 an Microsoft
  • Dieser Bug mag wie ein simples DRM-Problem wirken, doch Keyhole konnte als Einstiegspunkt für einen schwerwiegenderen Bug in ClipSp dienen und wurde deshalb in den Veröffentlichungsumfang von TALOS aufgenommen
  • Der korrigierte Lizenzblock-Parser beendet die Verarbeitung sofort beim Signaturblock und verarbeitet keine Blöcke nach der Signatur mehr; diese Änderung blockiert Keyhole

Veröffentlichte Materialien und Zusammenhang mit der Xbox One

  • Nach der Veröffentlichung von Keyhole wurden Code zur Erzeugung von Keyhole-Lizenzen sowie eine Sammlung von CLiP-Binaries mit Symbolen zur Unterstützung der Analyse veröffentlicht
  • Große Teile des ClipSp-Codes stammen offenbar aus dem DRM-System der Xbox One
  • Die Xbox One besitzt einen auf dem TPM moderner PCs basierenden SP, also einen Secure-Processor-Chip; seine Hauptaufgaben sind das Erzwingen von Codesignaturen und die Lizenzprüfung
  • Das XML-Lizenzformat von CLiP und der Großteil der TLV-basierten Lizenzblöcke wurden aus dem DRM-System der Xbox One übernommen
  • Auch im Xbox-SP gibt es einen Parsing-Bug wie in ClipSp; da Datenblöcke und signaturbezogene Blöcke dort jedoch getrennt geparst werden, funktioniert Keyhole auf der Xbox nicht

1 Kommentare

 
GN⁺ 2024-09-08
Hacker-News-Kommentare
  • Heißt das also, dass man, sobald man nur noch die Details herausfindet, Xbox-Spiele direkt kostenlos aus dem Microsoft Store herunterladen kann?
    Heißt das, dass die Xbox aktuell so vollständig gehackt ist wie eine PS Vita?

    • Ja. Das scheint mir der am meisten übersehene Teil des Artikels zu sein, vielleicht aber auch der interessanteste.
      Für Leute mit aktivierten automatischen Updates auf der Xbox gilt das leider nicht. Die neueste Systemsoftware scheint eine höhere Kernel-Version zu enthalten, als der collateral-damage-Exploit unterstützt.
    • Völlig anderes Thema, aber ich finde es sehr interessant, dass für die Fußnotenzeichen das Yen-/Yuan-Symbol verwendet wurde. Ich frage mich, ob mir da irgendeine Geschichte entgangen ist oder ob das einfach willkürlich gewählt wurde.
  • Es wäre schön, wenn man damit auch eine Lizenz für die Lego Boost for Windows 10 App bekommen könnte, die bis 2020 im Windows Store war.
    So wie ich es verstehe, kann man sie mit einer Lizenz noch herunterladen, aber neuen Nutzern wird sie nicht mehr angeboten.

  • Wenn ich das richtig gelesen habe, kann Microsoft den Geltungsbereich des temporären Lizenz-Signaturschlüssels einschränken, daher ist das Zeitfenster zur Erstellung permanenter Lizenzen möglicherweise nicht besonders groß.

  • Kann man damit die HEVC-Erweiterung ohne Microsoft-Konto aktivieren? Es ist so frustrierend, dass man die Patente nicht pauschal lizenzieren kann.

    • Dafür braucht man diesen Exploit nicht. Man kann natürlich einen Media Player verwenden, der das MS-Codec-Pack nicht braucht, aber falls das keine Option ist:
      1. Gehe zu https://store.rg-adguard.net
      2. Füge https://apps.microsoft.com/detail/9n4wgh0z6vhq ein
      3. Ändere den Ring auf "Retail"
      4. Lade die Datei mit der Erweiterung "appxbundle" herunter
      5. Installiere sie. In diesem Schritt musst du vielleicht den Entwicklermodus aktivieren, aber ich erinnere mich nicht mehr genau.
    • Einen Download-Link für die offiziell von Microsoft signierten HEVC-Installationsdateien findet man auch auf massgrave.dev[0]. Wirklich eine großartige Ressource.
      0: https://massgrave.dev/unsupported_products_activation#hevc-v...
    • Man muss nicht bezahlen. Man braucht nur die Direktlinks.
      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
    • Wozu braucht man das überhaupt? Der HEVC-Codec ist doch in den Treiberpaketen der GPU-Hersteller enthalten.
  • Solche Dinge sind seit Jahrzehnten die wirksamsten Vertriebs- und Kommunikationskanäle für Windows.

    • Für die meiste andere Software gilt das nicht.
  • Ironischerweise würde ich das wahrscheinlich tatsächlich ernsthaft nutzen, um Guitar-Hero-Spiele mit physischen Datenträgern auf originaler Hardware zu spielen. Das Spiel ist installiert, aber ohne eine Disc im kaputten DVD-Laufwerk habe ich keine „Lizenz“, um es zu starten.
    Die größere Ironie ist, dass die öffentlichen Schlüssel der Konsole möglicherweise auf einer Sperrliste stehen, sodass ich meine Spielstände selbst dann nicht lesen kann, wenn das funktioniert. Das lässt sich umgehen, indem man CON-Dateien erneut mit dem Standardwert 0 signiert.
    Vielleicht kommt bald noch eine dritte Ironie dazu. Das alles kommt mir sehr bekannt vor. Wirklich großartig.

    • In einem Ökosystem aus XML > TLV > nullterminierten Strings / UTF-16 für Benutzereingaben kann schon ein einziger Off-by-one-Fehler oder ungeprüfte bösartige Benutzereingabe irgendwo das Kartenhaus aus Technical Debt in ein Minenfeld aus Rechteausweitung, Remote Code Execution und lateraler Bewegung verwandeln. Aber das ist nichts Nebensächliches.
      Dieser Bug ist im Wesentlichen eher eine rückwirkende Pivot-Plattform für den Tag, an dem unbereinigte Eingaben und Context Escape zufällig zusammenkommen.
      Oberflächlich sieht das nur wie ein simples Austauschen digitaler Sticker aus, aber weil Microsoft seinen Erfolg zu stark hebelte und wegen Abwärtskompatibilität sowie eigener Technical Debt breaking changes verweigert hat, können manche Fehler trotz ihrer Kleinheit große Auswirkungen haben und dauerhaft bestehen bleiben.
  • Falls ein Virenscanner die Seite blockiert, kann man hier nachsehen: https://archive.is/90XGW

    • Welche Virenscanner machen das denn?
  • Gab es Clip nicht schon vor der Xbox One?

  • Wenn man den Artikel liest, vor allem die Stelle, dass diese Engine aus der Xbox-DRM-Engine kopiert und eingefügt wurde, glaubt dann wirklich noch jemand, dass Pluton für die Sicherheit der Endnutzer da ist, wo es doch ebenso von der Xbox übernommen wurde? Geht es Microsoft am Ende nicht einfach darum, auf dem PC durchsetzbares DRM zu haben?
    Zur Erinnerung: Pluton steckt inzwischen auch in neueren Intel-Laptop-Chips und war bei AMD schon länger dabei. Wie lange dauert es wohl noch, bis Windows das voraussetzt?

    • Das habe ich nie geglaubt. Das Schlimmste ist, das Leuten zu erklären, die den Microsoft-Kool-Aid trinken.
      Ich bin Microsoft-Admin, daher mögen die Leute im Unternehmen maximal abgeschottete Setups wie Win11, Intune und Ähnliches. Für mich ist das Wesen von Windows aber nicht das, sondern gute Verwaltungswerkzeuge und Abwärtskompatibilität.
      Pluton wird einfach ein weiteres TPM. Man führt es ein, wartet fünf Jahre und macht es dann zur Pflicht. Microsoft hat Zeit.
    • Das sagen Leute seit über zehn Jahren, seit TPM eingeführt wurde.
      Trotzdem kann man auf PCs, die mit Windows verkauft wurden, immer noch Linux installieren, unter Windows weiterhin Drittanbieter-Software installieren, die nicht aus dem Store stammt, und auch raubkopierte Filme aus Torrents ansehen.
      Wenn es einen nicht stört, dass man das Desktop-Hintergrundbild nicht ändern kann, kann man sogar ein nicht registriertes oder unbezahltes Windows laufen lassen.
    • Vielleicht bin ich naiv, aber ich glaube das bisher noch. Skepsis ist nötig, aber es ist auch eine Art Fehlschluss, etwas allein aufgrund von Vermutungen komplett abzutun.
      Kann Microsoft potenziell davon profitieren? Natürlich. Aber das widerlegt weder eine echte Motivation zur Benutzersicherheit noch die Vorteile, die am Ende den Nutzern zugutekommen.
  • „Die Daten hinter dem Signaturblock werden überhaupt nicht geprüft und können sogar davor liegende Daten überschreiben. Wenn Blöcke desselben Typs zusammen gespeichert werden, überschreibt der letzte Block alle vorherigen. Wenn man also die Lizenzdaten ändern will, muss man nur einen solchen Block erzeugen und hinter den Signaturblock setzen.“
    Wirklich erstaunlich.

    • Ich frage mich, ob das der schlimmste kryptografische Fehler seit der Nintendo Wii ist, die für die Hash-Prüfung strncmp verwendet hat und beim ersten passenden 00-Byte anhielt.