Verwundbarkeiten


Kurz: SuRun bis 1.0.2.9 bzw 1.0.2.103 Beta konnten (genau so, wie machmichadmin, SuDown und RunAs) benutzt werden, hier steht, wie und warum.

In diesem Beitrag wird ein Werkzeug mit Quelltexten veröffentlicht, das automatisch Benutzernamen und deren Passworte erkennt und das ausnutzt, um eine Konsole mit diesen Daten zu starten.

SuRun Benutzer sollten ein Update auf SuRun 1.0.3.0 bzw. die aktuelle Beta machen um diese Verwundbarkeit zu schließen.

Lang:

Um Programme automagisch administrativ zu starten hat SuRun bis zur vorletzten Beta ein IShellExecuteHook Interface benutzt. So wurden SuRun von Windows fast alle Benutzer-Programme vorgelegt, bevor sie ausgeführt wurden und SuRun konnte seelenruhig entscheiden, was zu tun ist.

Die Sache hatte jedoch einen Haken.

Wenn der Hook deaktiviert war oder sich jemand vor SuRun einklinkte, war nix mit gehobenen Rechten. 😥

Deshalb habe ich in den letzten Tagen mit „Import Address Table (IAT) Hooking“ experimentiert.

💡 Innerhalb eines Windows Prozesses werden Aufrufe von Funktionen, die in DLLs implementiert sind (Importe) über Tabellen gehandhabt. Die jeweilige DLL wird in den Speicher des Prozesses geladen. Dann werden die Tabellen mit den Importierten Funktionen des Moduls auf die geladene DLL „verbogen“ und alles läuft prima. Es gibt also Tabellen mit den Adressen importierter DLL Funktionen, kurz IAT.

Dieses einfache Prinzip lässt sich auch „nutzen“.

Das ist gar nicht sooo schwer. Man sucht sich eine bekannte Funktion, wie z.B. CreateProcessWithLogonW. Dann baut man eine Funktion in sein Programm, die genau so aufgerufen wird, wie z.B.: BOOL WINAPI CreateProcWithLogonW(LPCWSTR, LPCWSTR, LPCWSTR, DWORD, LPCWSTR, LPWSTR, DWORD, LPVOID, LPCWSTR, LPSTARTUPINFOW, LPPROCESS_INFORMATION);

Jetzt sucht man in allen geladenen Dlls des Prozesses in dem man läuft nach der Original-Funktion und „verbiegt“ die zu sich selbst.

Wenn Ein Thread des Prozesses nun CreateProcessWithLogonW aufzurufen glaubt, wird stattdessen CreateProcWithLogonW aufgerufen.

So man dann kontrollieren, was geschehen soll. 😎

SuRun Beta ab Version 1.0.2.104 benutzt diesen Trick auch, um u.A. CreateProcess abzufangen. So kann SuRun erkennen, ob der Prozess administrativ gestartet werden soll bzw. muss.

Windows injiziert SuRunExt.dll in alle laufenden Prozesse, die ein Fenster haben und SuRunExt.dll installiert dann die entsprechenden IAT-Hooks.

Zum Test dieser Technik habe ich mir ein Werkzeug geschrieben.

Nachdem es halbwegs funktionierte, habe ich es verändert, um die Systemsicherheit zu testen.

Ruft ein Prozess mit injizierter IATHook.dll (z.B. Explorer.exe) CreateProcessWithLogonW auf, übergibt IATHook.dll zunächst alles der originalen Funktion mit einer Ausnahme: Der neue Prozess wird schlafend („suspended“) erstellt.

Meldet Windows die erfolgreiche Erstellung des Prozesses, startet IATHook.dll mit den selben Daten für Name und Passwort eine Windows Console.

Das geht alles ohne jegliche Privilegien, sogar als Gast!

Jeder Benutzer, der eine USB-Kamera ansteckt und nach Aufforderung die Daten eines Administrators eingibt, sollte das Tool mal ausprobieren.

Auch ein früheres SuRun konnte so als Sprungbrett missbraucht werden. Da SuRun bisher immer als Benutzerprogramm gestartet wurde, dass den Service kontaktiert und dann CreateProcessWithLogonW aufruft, war es für IAT-Hooks anfällig. Damit konnte man zwar den Start des Programms nicht fernsteuern, aber man konnte parallel ein zweites Programm mit Administrator-Rechten starten!

Wie umgeht SuRun das jetzt?

Klickt der Benutzer ok, lädt der SuRun-Dienst ein neues SuRun.exe im Kontext des Benutzers schlafend in den Speicher. Dann schreibt der Dienst Benutzernamen, Password etc. direkt in das neue Programm und startet es. Das neue SuRun ruft sofort ohne grafisches Interface CreateProcessWithLogonW auf und beendet sich.

Der Dienst deaktiviert für die Startdauer auch die AppInit_Dlls.

Dadurch wird es hoffentlich schwer möglich, das frische SuRun zu infizieren und CreateProcessWithLogonW abzufangen.

Download:

IATHook Quelltext und ausführbare Dateien: IATHook.zip

3 Reaktionen zu “Verwundbarkeiten”

  1. Rolf Schatten

    Hallo,

    ich habe bisher immer mit MachMichAdmin von der c’t gearbeitet und bin zufällig auf SuRun gestoßen.
    Zunächst wollte ich die IAT-Hooks mit dem zur Verfügung gestellten Werkzeut ausprobieren.
    Leider stürzt die Testsoftware direkt ab.
    Anschließend stürzt auch jede neu gestartete Software ab.

    Ich nutze WinXP SP3 Deutsch, alle Updates installiert ohne Admin-Rechte.

    Viele Grüße
    Rolf Schatten

  2. Kay

    Hallo Rolf,

    ich habe das zu Hause probiert und keine Probleme gehabt. (XPpro SP3 de)
    Allerdings verwende ich weder HIPS noch Virenscanner.
    Wenn Du so etwas verwendest, vielleicht ist das mit der IATHook-Demo inkompatibel.

    Falls SuRun 1.2 bei Dir läuft:
    Ich habe die IATHook-Demo hier im Blog an die aktuellen SuRun Quellen angepasst. Dort werden nur Module gehookt, die auch wirklich CreateProcessWithLogonW aufrufen.

    Vielleicht geht das dann bei Dir 🙂

    Grüße,

    Kay

  3. Rolf Schatten

    Hallo Kay,

    danke für die schnelle Antwort!
    Ich habe Virenscanner, Firewall etc. beendet, danach funktionierte die Demo einwandfrei.
    SuRun hatte ich noch nicht installiert. Ich wollte mir erst mal die Demo im Zusammenhang mit MachMichAdmin ansehen.
    Nach dem nächsten Reboot übernimmt aber SuRun die Aufgabe von MachMichAdmin!

    Viele Grüße und vielen Dank
    Rolf

Einen Kommentar schreiben

Time limit is exhausted. Please reload the CAPTCHA.