Heute erschien aus heiterem Himmel eine aufgerufene Datei Program
im 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.
quelle
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önnteProgram Files
.Antworten:
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.com
an 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 eineC:\Program
Datei wie Sie getan haben.Zu diesem Zeitpunkt versucht der Systemaufruf, die Programmimagedatei
C:\Program
mit dem Befehlsende auszuführenFiles\Contoso\TakeOver.exe StackExchange.com
. Der Himmel hilft dir, wennC:\Program
es 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:\Program
ob 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
quelle
C:\Program.exe
, der alle seine Befehlszeilenparameter protokolliert. Wir werden sehen, wer es nutzt!