Dlaczego program o nazwie „C: \ Program” może wpływać na inne programy?

16

Dzisiaj nieoczekiwanie Programpojawił się plik o nazwie root C:\, a podczas logowania do systemu wyskakujące okienko wyświetla komunikat:

Ostrzeżenie nazwy pliku

Na komputerze znajduje się plik lub folder o nazwie „C: \ Program”, który może powodować nieprawidłowe działanie niektórych aplikacji. Zmiana nazwy na „C: \ Program1” rozwiązałaby problem. Czy chcesz teraz zmienić nazwę?

Chociaż przesłanie samo się wyjaśnia, zastanawiam się, dlaczego ten plik może mieć tak duży wpływ? Rzeczywiście, niektóre programy (być może wszystkie, których nie sprawdziłem) znajdujące się w C:\Program Files...ogóle się nie uruchamiały. Rozumiem, w jaki sposób można utworzyć taki plik (na przykład próbuję pisać do folderu, C:\Program Files\Something...ale bez cudzysłowów), ale nie rozumiem, w jaki sposób może wpłynąć na inne programy.

Konrad Kokosa
źródło
1
Na pewno był to komunikat wygenerowany przez system Windows?
Ramhound
1
Tak, dwukrotnie sprawdzone w Process Exploer, było to okno dialogowe explorer.exe
Konrad Kokosa
2
Brzmi szkicowo, żadnych programów (poza kilkoma wybranymi) nie należy instalować nigdzie indziej niż Program Files* dla typowego konsumenta. Ale sądzę, że to dlatego, że zamiast tego można znaleźć złe dopasowanie do wyszukiwania Program Files.
nerdwaller

Odpowiedzi:

27

Ma tak duży wpływ z powodu znanej od dawna słabości interfejsu API Win32.

Programy są odradzane w Win32 za pośrednictwem CreateProcess()wywołania systemowego. Można go używać na kilka sposobów. Ludzie pochodzący z środowisk Unix, Linux lub OS / 2 zwykle będą myśleć o tym jako o przyjmowaniu dwóch osobnych argumentów dla spawnowania programu (pliku obrazu) i przekazywania komendy do nowego procesu, ponieważ nazwy plików i wektory argumentów / ogony poleceń to dwie osobne rzeczy w interfejsach API tych systemów operacyjnych. Ale w rzeczywistości wywołanie systemowe może być wywoływane w alternatywnej formie z nazwą programu i argumentami połączonymi w jeden duży ciąg. CreateProcess()spróbuje oddzielić nazwę pliku programu od komendy tail.

Problem polega na tym, że robi to poprzez stopniowe dzielenie łańcucha na dwoje przy każdym kolejnym znaku spacji, aż lewa część pasuje do pliku lub katalogu. Wiele programów Win32 będzie próbowało przekazać ciągi, takie jak C:\Program Files\Contoso\TakeOver.exe StackExchange.comwywołanie systemowe. Spowoduje to uruchomienie odpowiedniego programu - C:\Program Files\Contoso\TakeOver.exez odpowiednim ogonem polecenia StackExchange.com- do momentu, gdy pojawi się jakaś oczywiście niebezpieczna osoba i utworzy C:\Programplik tak jak ty.

W tym momencie wywołanie systemowe kończy się próbą uruchomienia pliku obrazu programu C:\Programz poleceniem tail Files\Contoso\TakeOver.exe StackExchange.com. Niebo pomoże ci, jeśli C:\Programw rzeczywistości jest obrazem wykonywalnego programu.

Jest to ogólna słabość i dotyczy każdej nazwy pliku programu zawierającej spacje w połączeniu z dowolnym programem używającym One Big String do odradzania innych programów. Ale najczęstszym przypadkiem, który jest dotknięty tą sytuacją , są wszystkie programy, które działają pod nimi C:\Program Files\i duża liczba programów Win32, które wykorzystują podejście One Big String.

Jest o wiele za późno, aby zmienić Win32 API. Dziesięć lat temu było za późno. Microsoft nie może zmienić wszystkich programów napisanych przez inne osoby, które przekazują jeden duży ciąg zamiast dwóch do CreateProcess(). Tak więc Microsoft sprawdza system Windows podczas logowania użytkownika, czy istnieje C:\Programi wyświetla ostrzeżenie, które widzisz.

Jak widać, w dokumentacji doco Microsoftu Microsoftu znajduje się duże ostrzeżenie „Bezpieczeństwo” informujące deweloperów, aby nie pisali programów przy użyciu metody One Big String, która istnieje już od kilku lat.

Dalsza lektura

JdeBP
źródło
6
Doskonała odpowiedź! Jako programista, następną rzeczą, którą zrobię, jest oczywiście utworzenie manekina, C:\Program.exektóry rejestruje wszystkie parametry wiersza poleceń. Zobaczymy, kto go używa!
Konrad Kokosa
1
Tak to jest, dlaczego domyślne ustawienia zabezpieczeń od XP nie pozwalają na tworzenie plików w katalogu głównym przez nie-administratorów.
kinokijuf