Warum kann ein Programm mit dem Namen "C: \ Program" andere Programme beeinflussen?

15

Heute erschien aus heiterem Himmel eine aufgerufene Datei Programim Stammverzeichnis von C:\. Wenn Sie sich beim System anmelden, wird in einem Popup die folgende Meldung angezeigt:

Dateiname Warnung

Auf Ihrem Computer befindet sich eine Datei oder ein Ordner mit dem Namen "C: \ Programme", die bzw. der dazu führen kann, dass bestimmte Anwendungen nicht richtig funktionieren. Das Umbenennen in "C: \ Program1" würde das Problem lösen. Möchten Sie es jetzt umbenennen?

Obwohl die Nachricht selbsterklärend ist, frage ich mich, warum diese Datei einen so großen Einfluss haben könnte. In der Tat starteten einige der Programme (vielleicht alle, die ich nicht überprüft habe) C:\Program Files...überhaupt nicht. Ich kann verstehen, wie eine solche Datei erstellt werden kann (zum Beispiel C:\Program Files\Something..., wenn ich versuche, in einen Ordner zu schreiben, aber ohne Anführungszeichen), aber ich verstehe kaum, wie sich dies auf andere Programme auswirken kann.

Konrad Kokosa
quelle
1
Sind Sie sicher, dass diese Nachricht von Windows generiert wurde?
Ramhound
1
Ja, doppelt überprüft von Process Exploer, es war ein Dialog von explorer.exe
Konrad Kokosa
2
Klingt skizzenhaft, es sollten keine Programme (außerhalb einiger weniger) installiert werden, die nicht Program Files* für den typischen Verbraucher geeignet sind. Aber ich würde denken, es liegt daran, dass ein schlechtes Matching für eine Suche dies anstelle von finden könnte Program Files.
Nerdwaller

Antworten:

26

Es hat einen so großen Einfluss auf eine seit langem bekannte Schwachstelle in der Win32-API.

Programme werden in Win32 über den CreateProcess()Systemaufruf erzeugt. Es kann auf verschiedene Arten verwendet werden. Leute, die aus Unix-, Linux- oder OS / 2-Umgebungen kommen, denken normalerweise, dass sie zwei separate Argumente für das Programm (Image-Datei) und den Befehls-Tail für die Übergabe an den neuen Prozess benötigen, da Dateinamen und Argumente Vektoren / Befehls-Tails sind zwei verschiedene Dinge in den APIs dieser Betriebssysteme. Tatsächlich kann der Systemaufruf jedoch in einer alternativen Form aufgerufen werden, wobei Programmname und Argumente in einer großen Zeichenfolge zusammengefasst werden. CreateProcess()versucht, den Dateinamen des Programms vom Befehlsende zu trennen.

Das Problem ist , dass es das tut durch progressives Aufspalten der Zeichenfolge entzwei bei jedem aufeinanderfolgenden Leerzeichen, bis der linke Teil eine Datei oder ein Verzeichnis übereinstimmt. Viele Win32 - Programme werden versuchen , Strings passieren wie C:\Program Files\Contoso\TakeOver.exe StackExchange.coman den Systemaufruf. Dadurch wird das richtige Programm laufen - C:\Program Files\Contoso\TakeOver.exe- mit der richtigen Befehl tail - StackExchange.com- , bis der Punkt , dass einige offensichtlich gefährliche Person entlang kommt und erstellt eine C:\ProgramDatei wie Sie getan haben.

Zu diesem Zeitpunkt versucht der Systemaufruf, die Programmimagedatei C:\Programmit dem Befehlsende auszuführen Files\Contoso\TakeOver.exe StackExchange.com. Der Himmel hilft dir, wenn C:\Programes sich tatsächlich um ein ausführbares Programm-Image handelt.

Dies ist eine allgemeine Schwachstelle und gilt für alle Programmdateinamen, die Leerzeichen enthalten, sowie für alle Programme, die One Big String verwenden, um andere Programme zu erzeugen. Aber der häufigste Fall, der davon betroffen ist, sind alle Programme, unter denen es läuft, C:\Program Files\und eine große Anzahl von Win32-Programmen, die den One Big String-Ansatz verwenden.

Es ist viel zu spät, um die Win32-API zu ändern. Vor einem Jahrzehnt war es zu spät. Und Microsoft kann nicht alle Programme ändern, die von anderen Personen geschrieben wurden , die eine große Zeichenfolge anstelle von zwei an übergeben CreateProcess(). Daher überprüft Microsoft bei der Benutzeranmeldung, C:\Programob eine Warnung vorhanden ist, und zeigt sie an.

Und wie Sie sehen, enthält das Win32-Dokument von Microsoft eine große "Sicherheitswarnung", die den Entwicklern mitteilt, keine Programme mit dem seit einigen Jahren bekannten One Big String-Ansatz zu schreiben .

Weitere Lektüre

JdeBP
quelle
6
Hervorragende Antwort! Als Entwickler werde ich als Nächstes offensichtlich einen Dummy erstellen C:\Program.exe, der alle seine Befehlszeilenparameter protokolliert. Wir werden sehen, wer es nutzt!
Konrad Kokosa
1
Aus diesem Grund erlauben die standardmäßigen Sicherheitseinstellungen seit XP nicht, dass Dateien im Stammverzeichnis von Nicht-Administratoren erstellt werden.
Kinokijuf