Grüße an alle, die sich entschlossen haben, meinen neuen Artikel zur Schwachstellenanalyse zu lesen. Letztes Mal habe ich in einer kurzen Serie von drei Artikeln über Steam-Schwachstellen (
1 ,
2 und
3 ) gesprochen. In diesem Artikel werde ich auf die Schwachstellen eines ähnlichen Produkts eingehen - Origin, das auch ein Launcher für Spiele ist. Die entdeckten Sicherheitsanfälligkeiten wurden mit CVE-2019-19247 und CVE-2019-19248 nummeriert.

Dieses Mal wird es kein Spiel mit Banban Banana geben. Die Geschichte der Kommunikation mit der Sicherheitsabteilung von Electronic Arts Inc verlief zunächst professionell. Als ich kontaktiert wurde, gaben sie mir eine Registrierungsnummer, die Berichte wurden sorgfältig geprüft und bestätigt. Keine meiner E-Mails wurde ignoriert und für eine kleine Diskussion wurde ein Konfkall organisiert. Die Pflege dieser Berichte war für mich sehr einfach. Vielen Dank an Adrian Stone, Elise Murphy und andere EA-Mitarbeiter, die mit meinen Berichten gearbeitet haben.
Blogpost und
Sicherheitshinweis .
Nun zu den Schwachstellen. Ich habe im Windows Origin-Client zwei Sicherheitslücken gefunden, z. B. "Eskalation von Berechtigungen" (lpe - lokale Eskalation von Berechtigungen oder Eop - Eskalation von Berechtigungen). Mit dieser Art von Sicherheitsanfälligkeit kann jeder Windows-Benutzer mehr Rechte erhalten, als ursprünglich vom Administrator ausgestellt wurden. In diesem Fall handelt es sich um zwei "typische" Verbesserungen - von jedem Benutzer auf NT AUTHORITY \ SYSTEM (ein Konto mit maximalen Berechtigungen im Betriebssystem). Die erste Sicherheitsanfälligkeit ist ziemlich langweilig, daher werde ich sie im nächsten Abschnitt kurz beschreiben. Aber der zweite war ziemlich interessant, in ihrem Abschnitt werde ich Ihnen genau sagen, wie ich nach ihr gesucht habe.
CVE-2019-19248
Diese Sicherheitsanfälligkeit besteht aus zwei Teilen:
- Erstellen eines Ordners unter einem beliebigen Pfad (mit allen Zugriffsrechten);
- Verwenden Sie Klausel 1, um NT AUTHORITY \ SYSTEM-Berechtigungen zu erhalten.
Nun zum ersten Punkt im Detail:
Umgebungsvorbereitung
Es ist erforderlich, den Origin-Client zu schließen und den Origin-Client-Dienst zu beenden (theoretisch wird der Dienst selbst beendet, wenn Sie den Client schließen, aber nur für den Fall).
Für den Ordner "C: \ ProgramData \ Origin" lauten die Rechte "All-Full Access", wodurch wir seinen Inhalt vollständig löschen können.
Linkaufbau
Erstellen Sie jetzt ein paar Links. Die erste Verknüpfung ist vom Typ NTFS Reparse Point (NTFS Mount Point) - die Art der Verknüpfungen, die von Ordner zu Ordner verweisen: "C: \ ProgramData \ Origin" <-> "\ RPC Control". Zum Erstellen von Analysepunkten sind keine Administratorrechte erforderlich. Es ist nur erforderlich, dass der Quellordner leer ist und der Benutzer über Schreibrechte verfügt (im letzten Schritt deaktiviert, Rechte dort überprüft). "\ RPC Control" ist kein Ordner im Dateisystem, sondern eine spezielle Art von Ordner - ein Objektverzeichnis. Sie können es mit einem normalen Explorer nicht sehen, aber Sie können dort einen Analysepunkt durchführen, anscheinend aufgrund der in den Windows-Eingeweiden verwendeten allgemeinen Abstraktionen.
Jetzt erstellen wir den üblichen symbolischen Link "\ RPC Control \ CatalogCache" <-> "C: \ Path \ To \ Target \ Folder". Im Dateisystem ist das Erstellen symbolischer Links ohne Administratorrechte nicht zulässig, diese Regel gilt jedoch nicht für Objektverzeichnisse. Daher wird unser Link erfolgreich erstellt. Aufgrund einer Kombination dieser beiden Links werden Aufrufe von "C: \ ProgramData \ Origin \ CatalogCache" an "C: \ Path \ To \ Target \ Folder" umgeleitet.
Lesen Sie hier mehr über solche Links. Im selben Repository können
Sie Dienstprogramme zum Arbeiten mit Links
herunterladen .
Starten Sie
Führen Sie im letzten Schritt den Client aus. Zu Beginn seiner Arbeit wird er den "Origin Client Service" starten und versuchen, einen Ordner zu erstellen, in dem sich kein Ordner "C: \ ProgramData \ Origin \ CatalogCache" befindet. Durch das Navigieren durch Symlinks wird "C: \ Path \ To \ Target \ Folder" erstellt und diesem Ordner die Berechtigung "All-Full Access" erteilt.
Was war erforderlich, um in der ersten Einsatzstelle zu erhalten. Fahren wir mit der zweiten fort.
Der Vorgang zum Erstellen eines Ordners auf einem beliebigen Pfad
Hier kann man auf vielfältige Weise arbeiten.
Einfach und ziemlich zuverlässig ist es, den Ordner "C: \ Windows \ system32 \ LogonUI.exe.local" zu erstellen. "LogonUI.exe" (eine Anwendung, die unter NT AUTHORITY \ SYSTEM ausgeführt wird und für den Betrieb des Benutzerauswahlbildschirms und des Sperrbildschirms verantwortlich ist) lädt dank des Mechanismus der lokalen Umleitung ("dotlocal redirection") die Bibliothek von dort entlang des Pfads "C: \ Windows" \ system32 \ LogonUI.exe.local \ amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.17134.648_none_fb45a0e93062a6d2 \ comctl32.dll. " Im Allgemeinen ist der Mechanismus selbst ziemlich verbreitet, sodass er viele Ziele haben kann.
Ein langer, aber interessanter Weg besteht darin, den Hash des Administratorkennworts durch Spezialbetrug zu subtrahieren. Weitere Details
hier .
Total
Die Sicherheitslücke lässt sich recht einfach ausnutzen, Sie müssen nur ein wenig am zweiten Punkt arbeiten - finden Sie das Ziel und schreiben Sie eine geeignete DLL. Außerdem hat Matt Nelson diese Sicherheitsanfälligkeit gemeldet, und sein Schreiben finden Sie
hier .
CVE-2019-19247
Dies ist eine meiner bevorzugten Sicherheitslücken. Es zeigt, wie sorgfältig Sie mit der verwendeten Kryptografie umgehen müssen.
Alles begann damit, dass ich das Spiel über Origin installiert habe. Alles verlief irgendwie zu reibungslos - ein paar Klicks und nach ein paar Minuten Download kann das Spiel gestartet werden. Nicht sofort, aber ich verstand, was los war: Das Spiel wurde unter dem Pfad "C: \ Programme \ GameName" installiert, stellte jedoch keine einzige Frage über die Benutzerkontensteuerung. Ich überprüfte schnell die Rechte, alles war Standard - ein gewöhnlicher Benutzer konnte nicht in "C: \ Programme" schreiben. Ein bisschen mehr Forschung und ich fand heraus, dass das Spiel nicht vom Origin-Client selbst "vorgeschrieben" wird, sondern vom Origin-Client-Service.
Ich fing an, Annahmen darüber zu treffen, wie der Kunde Informationen an den Dienst überträgt, um zu prüfen, ob etwas ausgenutzt werden kann.
Die Methode der Informationsübertragung erwies sich als einfach - eine Named Pipe. Dies erfuhr ich aus den Installationsprotokollen - im Klartext wurde angezeigt, dass die OriginClientService-Pipe Befehle zum Arbeiten mit Dateien und Ordnern akzeptierte.
IDA geöffnet, Client dort hochgeladen.
* in IDA ausgeführte Arbeiten: 1 *Ziemlich schnell stellte ich fest, dass Befehle im Allgemeinen in Textform an die Pipe gesendet wurden. In der Nähe fand ich eine Befehlsliste und schickte ohne weiteres einen Befehl vom Typ "copy" C: \ test \ payload.dll "" C: \ Windows \ pwn.dll "an die Pipe. In Erwartung eines schnellen Ergebnisses überprüfe ich den Ordner „C: \ Windows“ und finde nichts Neues darin. Aber es gibt etwas Neues in den Protokollen - einige Worte über die Tatsache, dass der Client an der Pipe die Verifizierung der digitalen Signatur nicht bestanden hat.
IDA geöffnet, Service dort hochgeladen.
* bei IDA durchgeführte Arbeiten: 2 *Ich fand heraus, dass Teams sowieso von niemandem erwartet werden. Beim Anschließen an eine Rohrleitung prüft der Dienst, wer mit ihr verbunden ist. Die Prozess-PID wird aus der Verbindung extrahiert, der Pfad zur ausführbaren Datei wird aus der PID extrahiert, die Signatur wird auf Richtigkeit überprüft und von EA ausgegeben.
Töne klingen, aber nicht genug. Sie können die legale "Origin.exe" (Client-ausführbare Datei) nehmen und sie irgendwo in Ihren Ordner kopieren. Platzieren Sie eine DLL aus der Importliste "Origin.exe" in diesem Ordner. Beispielsweise wurde version.dll gestartet. Ich nannte diesen Ansatz "Reverse DLL Injection": In einer regulären DLL-Injection kopieren wir die DLL in die EXE-Datei, aber jetzt haben wir das Gegenteil getan. Ich schreibe schnell eine Proxy-DLL für version.dll, füge Code hinzu, indem ich den Befehl an die Pipe sende. Die Nutzlast wird noch nicht kopiert. Wir lesen die Protokolle - "Was bedeutet es, der Befehl konnte nicht entschlüsselt werden!?". Ich habe die Verschlüsselung übersprungen.
IDA geöffnet, Client dort hochgeladen.
* Arbeiten in IDA: 3, Signatur-Bypass: 1 *Da der Client in seiner gewohnten Arbeit verschlüsselte Befehle sendet, kann ich das. Dort habe ich gesucht, dann habe ich gesucht, das Ergebnis ist: AES-Verschlüsselung, Initialisierung eines konstanten Vektors, der Schlüssel wird aus der Datei gelesen. Wir kopieren dieses Stück und IDA praktisch in den Code, kompilieren, überprüfen. Wieder nichts. Aber die Protokolle liefern wieder nützliche Informationen - Sie können keine Programmdateien als Zielpfad angeben.
IDA geöffnet, Service dort hochgeladen.
* Arbeit in IDA: 4, Signatur-Bypass: 1, Verschlüsselungs-Bypass: 1 *Es gibt also Prüfungen, um einen Befehl zu erhalten, bei dem sich herausstellt, dass Dateien nicht überall kopiert werden können. Und Pfade mit "\ .. \" können nicht geschrieben werden. Wir schauen, was andere Teams sind.
Arbeiten mit der Registry - es gibt wieder viele Einschränkungen. Aber das Starten von Dateien sieht interessant aus. Zumindest sind die Schecks nicht besonders sichtbar. Bearbeiten Sie den Code und senden Sie den Befehl "ExecuteProcess" C: \ test \ payload.exe ". Nun, du verstehst ... nichts.
Protokolle sprechen wieder über die Signatur. Oh, wir haben es schon gewonnen. Wir geben im Code an, dass wir unsere kopierte Origin.exe aufgerufen haben, um unsere Proxy-DLL erneut zu laden, jedoch mit Systemrechten. Fügen Sie Überprüfungen hinzu und starten Sie die Konsole. Wir starten und die Konsole mit den Rechten NT AUTHORITY \ SYSTEM erscheint - endlich hat alles geklappt.
* Arbeit in IDA: 4, Signatur-Bypass: 2, Verschlüsselungs-Bypass: 1 *Sie müssen also einen Neustart durchführen, einen letzten Lauf durchführen und die Konsole trotzdem mit den höchsten Rechten bewundern. Neustart, Kontrolle und ... nichts. Wie so Es hat einfach funktioniert.
Die Diagnose zeigt, dass der Origin-Client-Dienst nicht gestartet wurde, daher starte ich ihn. Aber es fängt nicht an. Genauer gesagt, es beginnt, schließt aber sofort. Ich starte den Origin-Client und der Dienst wird normal gestartet. Danach funktioniert der Exploit wieder korrekt. Es wäre möglich, dort anzuhalten, aber das ist nicht meine Art - ich möchte, dass der Exploit vollständig funktioniert.
IDA geöffnet, Service dort hochgeladen.
* Arbeit in IDA: 5, Bypass-Signatur: 2, Bypass-Verschlüsselung: 1 *Es stellt sich heraus, dass beim Start überprüft wird, mit welchen Parametern der Dienst gestartet wurde. Da ist nichts direkt Interessantes. Base64 aus der verschlüsselten PID des Prozesses, dessen Datei durch die Signatur überprüft wird. Es klingt kompliziert, aber wir haben Verschlüsselung und Signatur bereits umgangen. Wir schreiben Code und ein vollständiger Exploit ist fertig.
Total
Der Exploit funktioniert. Die Arbeit wurde in IDA durchgeführt: 5-mal, Bypass-Signatur: 3-mal, Verschlüsselungs-Bypass: 2-mal.
Fazit
Behobene Sicherheitslücken: Entwickler von EA haben einen speziellen eingeschränkten Betriebsmodus für den Client eingeführt, der die Arbeit mit Origin-Ordnern und -Pipes erheblich einschränkt.
Timeline-Schwachstellen:
1. April 2019 : Meldung eines Schwachstellenberichts mit Pipe;
7. April 2019 : Senden eines Schwachstellenberichts mit einem beliebigen Ordner;
... SEHR VIELE BRIEFE (ich habe 40 gezählt) ...
10. Dezember 2019 : Vereinbarte Offenlegung.
Ich danke Ihnen allen für Ihre Aufmerksamkeit und wünsche Ihnen die gleichen Sicherheitsagenten.
Dieser Artikel in Englisch.