Perché un programma chiamato "C: \ Program" può influenzare altri programmi?


16

Oggi di punto in bianco un file chiamato è Programapparso sulla radice di C:\, e quando si accede al sistema, un popup mostra un messaggio:

Avviso nome file

Sul computer è presente un file o una cartella denominata "C: \ Program" che potrebbe impedire il corretto funzionamento di determinate applicazioni. Rinominandolo in "C: \ Program1" si risolverebbe il problema. Vuoi rinominarlo ora?

Mentre il messaggio si spiega da solo, mi chiedo perché questo file possa avere un'influenza così grande? In effetti, alcuni dei programmi (forse tutti, non ho controllato) che si C:\Program Files...trovavano non stavano avviando affatto. Riesco a capire come è possibile creare tale file (ad esempio, cercando di scrivere nella cartella C:\Program Files\Something...ma senza virgolette), ma capisco a malapena come può influire su altri programmi.


1
Sei sicuro che si tratti di un messaggio generato da Windows?
Ramhound,

1
Sì, ricontrollato da Process Exploer, era una finestra di dialogo di explorer.exe
Konrad Kokosa,

2
Sembra impreciso, nessun programma (al di fuori di alcuni selezionati) dovrebbe essere installato ovunque tranne che Program Files* per il consumatore tipico. Ma penso che sia perché una corrispondenza errata per una ricerca potrebbe trovare questo invece di Program Files.
nerdwaller,

Risposte:


27

Ha un'influenza così grande a causa di una debolezza nota da tempo nell'API Win32.

I programmi vengono generati in Win32 tramite la CreateProcess()chiamata di sistema. Può essere utilizzato in diversi modi. Le persone che provengono da sfondi Unix, Linux o OS / 2 di solito lo considerano come prendere due argomenti separati per la generazione del programma (file immagine) e la coda dei comandi per passare al nuovo processo, perché i nomi dei file e gli argomenti vettori / code dei comandi sono due cose separate nelle API di tali sistemi operativi. Ma in effetti la chiamata di sistema può essere invocata in una forma alternativa con il nome del programma e gli argomenti uniti in un'unica grande stringa. CreateProcess()proverà a separare il nome file del programma dalla coda dei comandi.

Il problema è che lo fa dividendo progressivamente la stringa in due ad ogni carattere di spazio successivo, fino a quando la parte sinistra corrisponde a un file o una directory. Molti programmi Win32 proveranno a passare stringhe come C:\Program Files\Contoso\TakeOver.exe StackExchange.comalla chiamata di sistema. Questo eseguirà il programma giusto - C:\Program Files\Contoso\TakeOver.exe- con la giusta coda di comando - StackExchange.com- fino al punto in cui una persona ovviamente pericolosa arriva e crea un C:\Programfile proprio come hai fatto tu.

A quel punto, la chiamata di sistema finisce per provare a eseguire il file di immagine del programma C:\Programcon la coda di comando Files\Contoso\TakeOver.exe StackExchange.com. Heaven ti aiuta se C:\Programin realtà è un'immagine di programma eseguibile.

Questa è una debolezza generale e si applica a qualsiasi nome di file di programma contenente spazi in combinazione con qualsiasi programma che utilizza One Big String per generare altri programmi. Ma il caso più comune colpito da questo è tutti i programmi che vivono sotto C:\Program Files\e un gran numero di programmi Win32 che usano l'approccio One Big String.

È troppo tardi per modificare l'API Win32. Era troppo tardi un decennio fa. E Microsoft non può cambiare tutti i programmi scritti da altre persone che passano una stringa grande anziché due CreateProcess(). Pertanto, Microsoft esegue il controllo di Windows, all'accesso dell'utente, per l'esistenza di C:\Programe visualizza l'avviso che viene visualizzato.

E, come puoi vedere, c'è un grande avvertimento "Sicurezza" nel doco di Microsoft Win32 che dice agli sviluppatori di non scrivere programmi usando l'approccio One Big String, che è lì da alcuni anni.

Ulteriori letture


6
Risposta eccellente! Come sviluppatore, la prossima cosa che farò è ovviamente creare un manichino C:\Program.exeche registra tutti i parametri della sua riga di comando. Vedremo chi lo usa!
Konrad Kokosa,

1
Quindi questo è il motivo per cui le impostazioni di sicurezza predefinite dal XP non consentono la creazione di file nella root non amministratori.
Kinokijuf,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.