Technische Analyse der Kerberos-Schwachstellen CVE-2022-33679 und CVE-2022-33647

Startseite » Blog » Technische Analyse der Kerberos-Schwachstellen CVE-2022-33679 und CVE-2022-33647

Geschrieben von Yoav Iellin und Dor Segal, Forscher bei Silverfort

Microsofts Patchday vom September 2022 enthielt zwei hochriskante Sicherheitslücken in Kerberos, die von Google Project Zero entdeckt wurden. Die beiden Sicherheitslücken nutzen die Möglichkeit, Kerberos dazu zu zwingen, seine Verschlüsselung von der standardmäßigen AES-Verschlüsselung auf das veraltete MD4-RC4 herunterzustufen. Sobald die Verschlüsselung heruntergestuft wird, kommen die beiden Schwachstellen ins Spiel und ermöglichen es einem Angreifer, Schwachstellen in der MD4-RC4-Verschlüsselung auszunutzen.

Der erste, CVE-2022-33679, ermöglicht es einem Angreifer, eine authentifizierte Sitzung im Namen des Opfers zu erhalten, was zur Ausführung willkürlichen Codes führen kann. Die zweite, CVE-2022-33647, erlaubt es einem Angreifer, der bereits einen Man-in-the-Middle-Angriff erfolgreich durchgeführt hat, beliebige Kerberos-Service-Tickets im Namen des Zielbenutzers auszustellen und so die gleichen Privilegien wie der Benutzer zu erlangen.

Es ist wichtig zu beachten, dass beide Schwachstellen zwar auf Schwachstellen in der alten MD4-RC4-Verschlüsselung abzielen, jede jedoch eine andere Schwachstelle ausnutzt, was zu unterschiedlichen Voraussetzungen und Angriffsszenarien führt.

Dieser Artikel enthält eine detaillierte technische Analyse und Erklärung zu CVE-2022-33679 und CVE-2022-33647.

CVE-2022-33679 – Schwachstellenanalyse

Die Verwundbarkeit CVE-2022-33679, für die kürzlich ein Proof of Concept bestand freigegeben, hängt davon ab, wie Kerberos seinen Sitzungsschlüssel verschlüsselt, und wird durch die Verwendung von Kerberos ermöglicht, wenn der veraltete RC4-MD4-Verschlüsselungstyp verwendet wird. Der Angriff besteht aus zwei Teilen: A) dem Anfordern eines neuen TGT-Tickets unter Verwendung des RC4-MD4-etype, gefolgt von B) einem Byte-für-Byte-Unterbrechen des Schlüsselstroms.

Verwertungsprozess:

  1. Rufen Sie das TGT-Ticket ab, indem Sie das AS-REQ-Paket an den KDC-Server senden. die Anforderung muss nach dem RC4-MD4-Verschlüsselungstyp fragen. Damit der Angriff gelingt, müssen die beiden folgenden Voraussetzungen erfüllt sein:
    1. Downgraden Sie Kerberos ausdrücklich die Verschlüsselung von seinem Standard-AES auf dem schwächeren RC4-MD4. Dies macht den Angriff möglich, da sein Schlüssel nur 8 Bytes ohne IV oder Salt ist.  
    2. Das Objekt des Benutzerobjekts „Keine Kerberos-Vorauthentifizierung erforderlich“ ist aktiviert. Dies ermöglicht den Erhalt eines TGT mit einem verschlüsselten Sitzungsschlüssel, ohne dass das Kennwort des Benutzers bekannt sein muss. Vor Beglaubigung ist ein Mechanismus, bei dem der Client den aktuellen Zeitstempel mit dem eingegebenen Passwort verschlüsselt und ihn an den KDC sendet, wo er die Integrität des Passworts überprüft, bevor er einen Sitzungsschlüssel und ein TGT generiert. Aufgrund der Flagge „Keine Kerberos-Vorauthentifizierung erforderlich“ kann der KDC direkt angegriffen werden und erfordert keine spezielle Angriffstechnik wie Man In The Middle.
  2. Nachdem der Angreifer erfolgreich ein verschlüsseltes Ticket erhalten hat, besteht das AS-REP-Paket aus einem verschlüsselten TGT-Sitzungsschlüssel, der 40 Bit lang ist. Mit dem veralteten Verschlüsselungstyp RC4-MD4 kann der Angreifer sein Wissen über den festen Beginn des verschlüsselten Pakets nutzen, um 45 Bytes des Schlüsselstroms zu extrahieren.
  3. Jetzt kann der Angreifer diesen Schlüsselstrom verwenden, um erneut zu verschlüsseln und ein TGT-Ticket vom KDC mit einer maßgeschneiderten Vorauthentifizierung anzufordern, die verwendet wird, um zu überprüfen, ob der Schlüsselstrom korrekt ist, und den Rest des folgenden 40-Bit-TGT-Sitzungsschlüssels zu brechen Byte für Byte. Dies geschieht durch den Missbrauch von zwei Schwachstellen im ASN.1-Protokoll, das für die Kerberos-Codierung verwendet wird, um die begrenzte Kontrolle des Angreifers über die Feldgröße vor der Authentifizierung auszunutzen:
    1. Der KDC-Parser ignoriert NUL-terminierte Zeichenfolgen am Ende des Objekts. Dadurch können wir am Ende des KerberosTime-Objekts ein NUL-Zeichen hinzufügen. Dies funktioniert für das Erraten eines einzelnen Bytes, aber wir müssen noch weitere vier Einsen erraten.
    2. Der KDC-Parser validiert die Länge der codierten Längen nicht. Die Länge von ASN.1-Strings wird durch 1–4 Bytes dargestellt, und der KDC-ASN.1-Parser erzwingt nicht den kürzesten Weg. Daher können wir unsere Zeitstempel-Stringlänge beliebig mit einer Größe von 1-4 Bytes darstellen. Dies bedeutet, dass wir die Länge des Klartextes noch weiter vergrößern und das NUL-Byte an die nächste Position verschieben und das nächste Byte des Schlüsselstroms erraten können.
  4. Schließlich kann der Angreifer den Zeitstempel neu verschlüsseln und jede Vermutung validieren, indem er eine AS-REQ mit verschlüsselter Vorauthentifizierung sendet und erhält eine Fehlermeldung, wenn das verschlüsselte Vorauthentifizierungsdatum falsch ist. Falls die Vorauthentifizierung erfolgreich war, kann der Angreifer ein weiteres Byte aus dem Schlüsselstrom entdecken, da es bis zu 256 Rateoptionen für jedes Byte gibt. Durch Wiederholen dieses Vorgangs können alle erforderlichen Schlüsselstrombytes abgerufen werden, um den im ursprünglichen Ticket gespeicherten Sitzungsschlüssel zu entschlüsseln.

Der erhaltene Sitzungsschlüssel gibt dem Angreifer die Möglichkeit, im Namen des Zielbenutzers ein Ticket für einen beliebigen SPN anzufordern.

Ablauf des Brechens des ersten Bytes des AS-REQ-Sitzungsschlüssels mit CVE-2022-33679. Es sollten verbleibende Bytes folgen
Fortsetzung des Angriffsflusses, Brechen des letzten Bytes und Abrufen eines neuen TGT unter Verwendung des defekten Sitzungsschlüssels
Bildnachweis: POC von James Forshaw und Rubeus von GhostPack

CVE-2022-33647 Technische Analyse

Zum Glück für den Angreifer funktioniert die Schwachstelle CVE-2022-33647 im Gegensatz zu CVE-2022-33679 mit Vorauthentifizierung. Dies ist wichtig, da die Vorauthentifizierung standardmäßig für jedes erstellte Objekt in aktiviert ist Active Directory. Die Hauptvoraussetzung für diesen Angriff ist ein Man-in-the-Middle zwischen dem Client und dem Domänencontroller (dieser Angriffstyp ist weit verbreitet und es gibt viele Möglichkeiten, ihn zu erreichen, wie DNS-Spoofing, ARP-Poisoning usw.). Der MITM wird verwendet, um den Client zu zwingen, die Verschlüsselung auf MD4-RC4 herunterzustufen.

Ausbeutungsfluss

Wenn die erste AS-Anforderung vom Client gesendet wird, antwortet das KDC mit der Meldung „Vorauthentifizierung erforderlich“. Der Angreifer kann jedoch die Antwort des KDC ändern, da in dieser Phase der Authentifizierung keine Überprüfung erfolgt. Wir werden die vom KDC unterstützte Verschlüsselung wie in der Abbildung gezeigt auf RC4-MD4 ändern. Als Ergebnis sendet der Client (wenn RC4 aktiviert ist) ein AS_REQ mit Pre-Auth unter Verwendung des MD4-RC4-Algorithmus.

Ab diesem Zeitpunkt hat der Angreifer zwei Möglichkeiten:

  1. Brute-Force-Erzwingen des 5-Byte-Sitzungsschlüssels, der möglicherweise nicht so effizient ist und lange dauern kann.
  2. Die andere Option nutzt die Kenntnis der Klartextdaten – die Vorauthentifizierung. In Kebreros kann der MITM-Gegner eine genaue Schätzung des Zeitstempels der Klartext-Vorauthentifizierung haben, der vom Client in der AS-Anforderung erstellt wurde. Dem Verschlüsselungsmechanismus fehlt ein Initialisierungsvektor oder eine Nonce, und er ignoriert den Schlüsselnutzungswert. Infolgedessen wird derselbe Schlüsselstrom in verschiedenen Teilen des Authentifizierungsaustauschs verwendet. Der größte Teil des Schlüsselstroms verwendet also denselben RC4-Schlüsselstrom. Die Vorauthentifizierung enthält einen verschlüsselten Zeitstempel, sodass der Angreifer mit unserem Wissen über die aktuelle Zeit einen Teil des Schlüsselstroms entdecken kann. Wenn der Angreifer Glück hat, wird derselbe Schlüsselstrom verwendet, um 4 Bytes des TGT-Sitzungsschlüssels in der AS-Antwort zu entschlüsseln. Das letzte Byte überlappt mit dem kleinsten Byte des Zeitstempels, das Mikrosekunden darstellt, die dem Angreifer unbekannt sind. Das letzte Byte wird bei einem Brute-Force-Angriff gegen eine erreichte TGS-Anfrage des Opfers gebrochen, wie unten beschrieben.

ASN.1 Serialisierung Vergrößern

Die ASN.1 DER-Codierung ist ein Tag-, Längen- und Wertcodierungssystem für jedes Element. Der Zeitstempel der Vorauthentifizierung wird mit dieser Methode codiert. Die Struktur des verschlüsselten Zeitstempels besteht aus einer Sequenz mit zwei Elementen. Das erste, ein GeneralizedTime-Objekt (KerberosTime) in einem Zulu-Format. Das zweite Element ist eine Ganzzahl, die die Mikrosekunden darstellt.

Jedes Element hat sein eigenes Tag und seine eigene Länge nach dem Wert. Aus diesem Grund können wir 10 konstante Bytes identifizieren, die alle Tags und Längen darstellen.

  • 30 -> Sequenz-Tag
  • 1A – (int) 26 (Länge der gesamten Struktur)
  • A0 – 1. Element-Tag
  • 11 – Elementlänge
  • 18 – Zeitmarke verallgemeinern
  • 0F – (int) Wertlänge (15)
  • A1 – 2. Element-Tag
  • 05 – (int) Elementlänge
  • 02 – Typenschild INTEGER
  • 03 – (int) Wertlänge

Die Gesamtzahl der konstanten Bytes beträgt 10, wir werden weitere 15 Bytes Länge hinzufügen, um den Zeitstempel zu erraten. Die letzten drei Bytes sind das Mikrosekundenelement, das nicht effizient zu erraten ist. Schließlich geben zusätzliche 24 Bytes mit Nullen vor dem verschlüsselten Teil einen Schlüsselstrom von 49 Bytes aus. Der TGT-Sitzungsschlüssel befindet sich zwischen Byte 46 bis 50 der AS-Antwort. Das letzte fehlende Keystream-Byte kann gegen ein abgefangenes Dienstticket des Opfers brutal erzwungen werden.

Patch

Diese Sicherheitslücken wurden von Microsoft im September-Sicherheitsupdate geschlossen. Das Update deaktivierte den Verschlüsselungstyp RC4-MD4 (-128) zusammen mit dem Verschlüsselungstyp RC4-HMAC-OLD (-133). Nach dem Patch erhalten zukünftige AS-REQ/TGS-REQ, die einen dieser beiden Verschlüsselungstypen verwenden, den Fehler „Nicht unterstützter Verschlüsselungstyp“.

https://msrc.microsoft.com/update-guide/vulnerability/CVE-2022-33679

Zusätzliche Angaben

https://bugs.chromium.org/p/project-zero/issues/detail?id=2310&q=label%3ACVE-2022-33647 – Analyse von James Forshaw

Stoppen Sie Identitätsbedrohungen jetzt