CVE-2022-30216 – Authentifizierungszwang beim „Server“-Dienst von Windows
von Ben Barnea
Zusammenfassung
Der Akamai-Forscher Ben Barnea fand eine wichtige Schwachstelle im Windows Server-Dienst, der die Kennung CVE-2022-30216 und ein Basiswert von 8,8 zugewiesen wurde.
Die Schwachstelle nutzt einen „Off-by-one“-Fehler in einem Sicherheitscallback-Verfahren aus, das der Server-Dienst implementiert.
Wir konnten bestätigen, dass die Schwachstelle in nicht gepatchten Windows 11- und Windows Server 2022-Computern besteht.
In Kombination mit einem NTLM-Relay-Angriff (New Technology LAN Manager) auf die Active Directory-Zertifikatdienste (AD CS) gibt die Schwachstelle einem Angreifer mit Domain-Anmeldedaten die Möglichkeit, remote Code auf dem Domänencontroller auszuführen.
Wir glauben auch, dass ein Angreifer in der Lage sein könnte, diese Technik zu verwenden, um die Zertifikatzuordnung eines Servers zu ändern und damit Server-Spoofing zu betreiben.
Die Schwachstelle wurde verantwortungsvoll an Microsoft weitergegeben und im Patch Tuesday für Juli behoben.
Wir stellen einen Proof of Concept der Schwachstelle in unserem Github-Repository zur Verfügung.
Einführung
In den letzten Monaten hat unser Team gründliche Recherchen hinsichtlich Microsofts Remote Procedure Calls (MS-RPC) durchgeführt. Vereinfacht gesagt wird ein RPC für eine effiziente Kommunikation zwischen Prozessen eingesetzt. Er basiert auf einem standardmäßigen Client-Server-Modell und ist derzeit eines der am häufigsten verwendeten Protokolle in Windows.
Einer der interessanteren Aspekte, die wir im MS‑RPC-Design identifiziert haben, ist der Sicherheitscallback, der den Zugriff auf RPC‑Server einschränkt und im Wesentlichen Schutz vor unerwünschten Nutzern (meist Remotenutzer) bietet. Viele RPC-Server implementieren einen Sicherheitscallback, wobei jeder Server über eigene Logik und Überlegungen verfügt.
Windows-Dienste nutzen RPC umfassend, um ihre Funktionen für Clients verfügbar zu machen. Das führte dazu, dass wir verschiedene Dienste und die zugrunde liegende Logik ihrer Sicherheitscallback-Implementierungen untersucht haben. In einem solchen Dienst – dem Server-Dienst – konnten wir einen Sicherheitsfehler finden, der Angreifern die Möglichkeit bietet, Server-Spoofing zu betreiben oder das Opfer zur Authentifizierung zu bewegen.
In diesem Blog werden wir die Aspekte von RPC, die wir untersucht haben, erläutern, die gemeinsam zu diesem neu entdeckten Fehler beitragen. Wir untersuchen, was der Fehler ist, wie er verwendet und wie er gemindert werden kann.
Was ist der Windows Server-Dienst?
Der Server-Dienst (auch LanmanServer genannt) ist ein Windows-Dienst, der für die Verwaltung von SMB-Freigaben verantwortlich ist. Freigaben sind Ressourcen – Dateien, Drucker und Verzeichnisbäume –, die über das Netzwerk von einem Common Internet File System-Server zugänglich gemacht werden. Im Wesentlichen ermöglichen es Netzwerkfreigaben Nutzern, andere Geräte im Netzwerk zu verwenden, um verschiedene alltägliche Aufgaben auszuführen.
Der Server-Dienst ermöglicht einem Remotecomputer, Freigaben über RPC über eine benannte Pipe (\\pipe\srvsvc) zu erstellen, zu konfigurieren, abzufragen und zu löschen. Für den Rest dieses Beitrags werden wir den Dienst als „srvsvc“ bezeichnen.
Eine Schwachstelle in srvsvc hat Auswirkungen, da der Dienst Kernfunktionen bietet und daher standardmäßig auf jedem Windows-Rechner ausgeführt wird.
SMB über QUIC
Ab Windows 10 20H2 hat Microsoft eine neue Funktion eingeführt: SMB über QUIC. Die Funktion ermöglicht den Zugriff auf SMB‑Freigaben über QUIC, ein neues Netzwerkprotokoll auf der Transportebene. QUIC soll eine zuverlässigere und sicherere Verbindung bieten und gleichzeitig häufige Internetprobleme wie Latenz und Paketverlust lösen.
Bei einer QUIC-Netzwerkinteraktion überprüft der Client als zusätzliche Sicherheitsmaßnahme die Identität des Servers, indem er das vom Server bereitgestellte Zertifikat überprüft. Mit dem Hinzufügen von SMB über QUIC wurde der Server-Dienst für die Verwaltung dieser Zertifikate verantwortlich.
Die gefundene Schwachstelle liegt in dieser Funktionalität. Um sie zu verstehen, müssen wir zunächst eine der Möglichkeiten untersuchen, wie RPC‑Server die Zugriffskontrolle durchführen.
Sicherheitscallbacks
Viele Windows-Dienste, darunter srvsvc, implementieren einen RPC‑Server, um die Kommunikation zwischen Prozessen zu ermöglichen und verschiedenen Clients Zugriff auf ihre Funktionen zu gewähren. RPC in Windows verwendet verschiedene Sicherheitsmechanismen; wir konzentrieren uns auf einen sogenannten Sicherheitscallback.
Ziel eines Sicherheitscallbacks ist es, den Zugriff auf eine RPC‑Schnittstelle zu beschränken. Der Callback wird vom RPC‑Serverentwickler implementiert und ermöglicht es jedem Entwickler, seine eigene Logik anzuwenden, um bestimmten Nutzern den Zugriff zu ermöglichen oder den Zugriff auf bestimmte Funktionen zu verhindern. In RPC werden die vom Server offengelegten Funktionen mithilfe von opnums (Operationsnummern) dargestellt, was wir in Kürze im Sicherheitscallback von srvsvc sehen werden.
Chronik eines Sicherheitscallbacks
Um den Fehler zu verstehen, müssen wir uns zunächst eine ältere Version des Sicherheitscallbacks von srvsvc ansehen, bevor die Funktion „SMB über QUIC“ hinzugefügt wurde:
Wie oben gezeigt, nutzt der srvsvc-Sicherheitscallback die folgende Logik:
- Wenn ein Remoteclient versucht, auf eine Funktion im Bereich von 64 bis 69 (einschließlich) zuzugreifen, wird der Zugriff verweigert.
- Wenn ein Remoteclient, bei dem es sich nicht um ein Clusterkonto handelt, versucht, auf eine Funktion im Bereich von 58 bis 63 (einschließlich) zuzugreifen, wird der Zugriff verweigert.
Im Wesentlichen werden also Remoteclients daran gehindert, auf diese speziellen Funktionen der Oberfläche zuzugreifen. Diese Bereichsprüfung weist darauf hin, dass die eingeschränkten Funktionen empfindlich sind und nur von erwarteten (lokalen) Prozessen aufgerufen werden sollten.
Mit dem Hinzufügen von SMB über QUIC hat Windows 10 20H2 dem srvsvc-Dienst vier neue Funktionen hinzugefügt:
- LocalrServerCertificateMappingGet
- LocalrServerCertificateMappingSet
- LocalrServerCertificateMappingEnum
- LocalrServerCertificateMappingRemove
Da es nicht wünschenswert war, dass diese Funktionen remote aufgerufen werden können, wurden sie in den Bereich der lokalen Funktionen aufgenommen – Funktionen, die der srvsvc-Sicherheitscallback für Remoteclients verbietet.
Und wie unten zu sehen, wurde der Bereich tatsächlich geändert, um die opnums für diese vier neuen Funktionen aufzunehmen, wodurch der erste lokale Bereich von 64–69 auf 64–73 erhöht und die Zugriffskontrolle des Sicherheitscallbacks auf diese Funktionen erweitert wurde. So weit, so gut.
In Windows 11 und Windows Server 2022 hat Microsoft eine neue Funktion namens LocalrServerCertificateMappingModify hinzugefügt:
Dieses Mal hat sich jedoch der Bereich der eingeschränkten Funktionen in dieser neueren Version nicht geändert, um die neu hinzugefügte Funktion aufzunehmen:
Zum Zeitpunkt des Hinzufügens dieser Funktion war sie also nicht durch den Sicherheitscallback abgedeckt und daher für Remote-RPC‑Clients zugänglich.
Möglichkeiten zur Ausnutzung
Durch den Aufruf dieser Funktion kann ein Angreifer die Konfigurationen der Zertifikatzuordnungen auf dem Server ändern. Eine Zertifikatzuordnung ist eine „symbolische Verknüpfung“ zwischen dem QUIC-Zertifikat eines Servers und einem Zertifikat im Zertifikatspeicher. Wir glauben, dass ein Angreifer diese Funktion verwenden kann, um seine eigene Zertifikatzuordnung hinzuzufügen und so ein Server-Spoofing durchzuführen. Beachten Sie, dass diese Funktion kein Zertifikat im Windows-Zertifikatspeicher hinzufügt oder ändert, sondern eine Zuordnung des vom QUIC-Server verwendeten Zertifikats zu einem Zertifikat im Windows-Speicher ändert.
Beim Versuch, die Auswirkungen der Schwachstelle zu beurteilen, haben wir festgestellt, dass die Struktur, die die Funktion erhält, den Speicherort des Zertifikats enthält:
Durch die Bereitstellung eines UNC‑Pfads als storeLocation-Variable kann ein Angreifer LocalrServerCertificateMappingModify dazu bringen, eine RPC‑Anfrage vom Opferserver an einen von ihm kontrolliertem Rechner auszulösen. Der Funktionsablauf, durch den die Anfrage ausgelöst wird, ist:
LocalrServerCertificateMappingModify → SsValidCertandUpdateCertinfo → CertOpenStore → _CertDllOpenSystemStoreProvW → EnumPhysicalStore → FormatSystemRegPath → RegConnectRegistryExW → BaseBindToMachine → Rpc_OpenPredefHandle → NdrClientCall3
Während der RPC‑Anfrage, die vom Server an unseren Rechner gesendet wird, führt der Server eine Authentifizierung beim Server des Angreifers durch. Der Angreifer kann nun die Anmeldedaten des Opfers nutzen, um einen NTLM-Relay-Angriff durchzuführen.
Durch Ausnutzung der Schwachstelle und Durchführung des NTLM-Relay-Ablaufs ist es uns gelungen, das PetitPotam-Angriffsszenario (den Missbrauchs der AD CS und die Übernahme des Domänencontrollers) zu replizieren.
Das Auslösen der Schwachstelle erfordert, dass der Angreifer Zugriff auf einen Computer in der Domain hat. Für das NTLM-Relay-Szenario muss die AD CS-Rolle hinzugefügt werden, zusammen mit einem ihrer Dienste, die für NTLM-Relay anfällig sind (Zertifizierungsstellen-Webregistrierung, Zertifikatregistrierungs-Webdienst).
Reparieren
Microsoft veröffentlichte am Patch Tuesday vom Juli einen Patch für diese Schwachstelle. Das Problem wurde wie folgt behoben:
Korrektur des Bereichs lokaler Funktionen im Sicherheitscallback, wodurch der Remotezugriff auf LocalrServerCertificateMappingModify verhindert wird
Hinzufügen einer Zugriffsprüfung in jeder der neu hinzugefügten lokalen Funktionen
Chronik der Veröffentlichung
26. April 2022: Es wurde ein Bericht an Microsoft gesendet
26. April 2022: Status von Neu auf Prüfung/Reproduktion geändert
9. Mai 2022: Status von Prüfung/Reproduktion auf Entwicklung geändert
12. Juli 2022: Patch wurde veröffentlicht
Minderung und Erkennung
Im Folgenden werden die Empfehlungen zur Minderung der NTLM-Relay-Bedrohung aufgeführt:
Oft beinhaltet ein NTLM-Relay-Angriff, bei dem die AD CS missbraucht werden, eine TGT‑Anfrage. Das Ereignisprotokoll (EventID 4768) enthält die IP‑Adresse des anfragenden Rechners. Schädliche TGT‑Anfragen können erkannt werden, wenn ein TGT von einem Computer, der selbst kein Domänencontroller ist, für einen Domänencontroller angefordert wird.
Ein Proof of Concept ist im Repository von Akamai Security Research verfügbar.
Zusammenfassung
Wenn neue Funktionen hinzugefügt werden, ist es wichtig, sich ihrer möglichen Konsequenzen bewusst zu sein – nicht nur in der Funktionalität selbst, sondern auch in der Art und Weise, wie sie für Nutzer zugänglich gemacht wird. In unserem Fall wurde SMB über QUIC in Windows hinzugefügt und neue Funktionen in den Server-Dienst eingeführt. Die Schwachstelle lag jedoch nicht in der Implementierung von SMB über QUIC, sondern vielmehr in der Art und Weise, wie eine ältere Funktion den Zugriff auf die jeweilige RPC‑Schnittstelle einschränkte.
Das Team von Akamai Security Research hat mehrere Forschungsarbeiten zu MS‑RPC durchgeführt, beginnend mit der Analyse einer RPC‑Laufzeit-Schwachstelle beim Patch Tuesday im April sowie einen Überblick über eine weitere CVE vom Mai. Ben Barnea und Ophir Harpaz stellten die Forschung zur Schwachstelle des Server-Dienstes auf der DEF CON 30 in Las Vegas vor.