Nichts ist so erfolgreich wie eine Windows-Sicherheitslücke, deren Zeit gekommen ist. Welchen Zweck eine shared library (denn nichts anderes ist eine DLL) hat, die im lokalen Verzeichnis herumliegt, bleibt das Geheimnis von Microsoft. Für Entwickler mag das noch ganz praktisch sein, im Endprodukt ist es ein bisschen absurd. Und auch der Nutzen für Entwickler ist eher begrenzt, denn die wissen in der Regel, wie man seinen DLL-Suchpfad konfiguriert oder benutzen den guten alten C-Präprozessor, um sich eine Entwicklungsversion mit explizit angegebener absoluter Adresse der geladenen DLL zu bauen. Mann, Leute, dafür gibt es doch bedingte Kompilierung. Und dass die DLL dann sogar über Netzwerkpfade nachgeladen wird… au weia! Das ist mal wieder ein Problem, von dem fast alles betroffen ist, was an Anwendung verfügbar ist, es bietet etliche denkbare Angriffsszenarien und man kann darüber beliebigen Code ausführen.
Kommentare
Kommentieren
In der Archivversion kann nicht kommentiert werden.
Christian am 26.8.2010 um 14:27
Tja, das ist halt »Legacy«. Bereits in DOS (MS-DOS, IBM-DOS, DR-DOS, …) war das so und in DOS und Windows ist immer auch «.« (das aktuelle Verzeichnis) im Suchpfad %PATH% enthalten. Das unterscheidet sich von allen Unix die ich kenne, da muß man «.« explizit in $PATH aufnehmen.
Genauso spannend finde ich die Interpretation von Leerzeichen im Pfad. Wie soll Windows beispielsweise einen Programmaufruf C:\Dokumente und Einstellungen\Username\Programm.exe interpretieren?
Lustigerweise sucht Windows zuerst nach »C:\Dokumente.exe«, dann nach »C:\Dokumente und.exe« und danach erst nach dem kompletten Pfad. Ich habe mir extra ein C:\Dokumente.exe und C:\Program.exe (für C:\Program Files im englischen Windows) angelegt um sehen zu können, wer da alles schlampig programmiert. Da gibts übrigens auch nette Exploits, wenn beim Anlegen von Registry-Keys die Anführungszeichen vergessen wurden.
Nachtwächter am 26.8.2010 um 14:59
Hui, die ungequoteten Leerzeichen in einem Pfad sind ja ein schönes »Feature«, das kannte ich noch gar nicht.
Schade, dass ich hier gerade kein Windows rumliegen habe. Das würde ich zu gern mal ausprobieren. Wenn es klappt, weiß ich schon, was ich auf den Rechnern missliebiger Zeitgenossen ablegen könnte. Einfach eine Datei "C:\setup.exe", die ausgeführt wird, wenn der nächste im Benutzerverzeichnis oder auf dem Desktop gespeicherte Installer geklickt wird und nur eine extra abstrus formulierte Meldung in einer Message-Box ausgibt.
Aber Winhose wird doch hoffentlich beim Doppelkick im Explorer den Dateipfad quoten…
Das mit der DLL im Arbeitsverzeichnis finde ich aber so richtig erheiternd. Wenn ich jetzt ein böser Mensch wäre, denn würde ich einen dicken Torrent seeden, entweder mit beliebter Musik, mit Pornobildern oder vergleichbarem stets beliebten Inhalt. Und ja, mit richtigem Inhalt, sollen sich die Leute doch freuen. Mittendrin ein paar Ersatz-DLLs für die Windows-System-DLLs, die schön unauffällig bleiben, die gleichen Funktionen exportieren, die originalen DLLs mit absolutem Pfad nachladen und einfach nur weiterleiten – und nebenbei halt noch ein bisschen mehr tun. Das beste daran: Die DLLs bleiben im Windows-Explorer in der Standardeinstellung unsichtbar, so dass nicht einmal ein Verdacht aufkommt. Die Verbreitung erledigt das beliebte Web 2.0.
Und weil das auch über WebDAV geht… ach, so viele Möglichkeiten. Vermutlich werde ich in den nächsten Tagen bemerken, dass die Spammer auch ein neues Spielzeug gefunden haben, mit dem sie sich ein paar Bots machen können.
Christian am 29.8.2010 um 01:17
Der Explorer braucht bei nem Doppelklick nicht quoten, das macht der Funktionsaufruf des Betriebssystems automatisch. Praktisch ist das mit den fehlenden Quotes nur ein Problem von Registry Keys und Verknüpfungen. Nur ein paar dumme skriptgesteuerte Installer fallen auch noch drauf rein.
Für den Rechner von missliebigen Zeitgenossen hab ich noch was einfacheres
Stell Dir vor, in c:\windows\system32\ liegt cmd.exe (tut es). Und jetzt kommt aber noch (von einer bösen Seele angelegt) cmd.com dazu. Und einige Leute (ich zum Beispiel) rufen den Kommandointerpreter via Start->Ausführen->cmd auf. Was wird wohl gestartet?
Früher gab’s mal ein paar Viren die ausgenutzt haben, dass aus dem gleichen Verzeichnis immer com vor exe gestartet wird. Erst die Schadroutine ausgeführt und anschließend das echte exe nachstarten um nicht aufzufallen. Läuft u.a. unter dem Namen Companion-Viren. Und ist auch so ne Altlast von DOS.