Da quando nessun programma può ottenere i diritti di amministratore MS-DOS e MS-Windows?

1

Sono sicuro di aver letto che negli anni '80 con processus Intel a 8 bit, qualsiasi programma DOS eseguito con MS-DOS è stato eseguito in modalità amministrativa e poteva fare qualsiasi cosa che qualsiasi programma C potesse fare. Ora sono anche abbastanza sicuro che questo non è più il caso e mi chiedo se possiamo verificare o rispondere a queste affermazioni?

    
posta Niklas Rosencrantz 29.02.2016 - 18:07
fonte

3 risposte

1

Esistono due principali meccanismi di protezione che limitano i programmi eseguiti da un utente:

Alcuni sistemi a utente singolo (ad esempio Windows 95) implementano solo la protezione della memoria, senza ACL. La situazione inversa è impossibile; ACL non può essere implementato correttamente senza la protezione della memoria.

Entrambi i meccanismi sono stati introdotti da Microsoft in Windows NT 3.1 nel 1993.

    
risposta data 29.02.2016 - 18:36
fonte
9

Al momento di MS-DOS, o nelle derivate grafiche (fino a Windows ME incluso), non esisteva la nozione di "diritti amministrativi".

Ci sono due concetti distinti qui, che dovrebbero essere dettagliati. Il primo riguarda ciò che un processo è autorizzato a fare quando chiede gentilmente. Il secondo è quello che può fare se non è affatto bello.

In MS-DOS, ogni processo acquisisce il controllo esclusivo della macchina e può fare qualsiasi cosa desideri. Vede tutta la RAM, può parlare con tutto l'hardware e così via. Inoltre, non esiste uno scheduler, quindi un processo utilizza la CPU fino alla sua uscita. È possibile fare in modo che un processo si fermi, ma questo è in gran parte riservato un po 'di RAM e in attesa di controllo, solitamente, un interrupt hardware (i gestori del mouse hanno funzionato in quel modo).

Con Windows 3.1 in "386 extended mode" e le sue derivate Windows 95, 98 e Millenium (ME), diversi processi possono essere eseguiti contemporaneamente, e un pezzo del sistema operativo dà la CPU a uno o l'altro, senza chiedendo loro. Questo è chiamato multitasking preventivo . Ogni processo ha il suo spazio di memoria e la MMU intercetta i casi in cui un processo sta tentando di accedere alla memoria di un altro. Tuttavia, questo è solo per rilevare bug, non per sicurezza: tutti i processi possono comunque accedere direttamente all'hardware, e leggere e scrivere la memoria del kernel. Pertanto, non vi è alcuna nozione di "diritti amministrativi" che abbia senso in questi sistemi operativi, e nemmeno loro ci provano.

Nel lignaggio NT, a partire da NT 3.51 e poi NT 4, Windows 2000, XP e versioni successive, esiste una protezione della memoria effettiva e i processi non possono sfuggire al loro spazio indirizzo. Non possono parlare direttamente con l'hardware e non possono accedere alla memoria oltre a ciò che è stato loro assegnato esplicitamente. Ciò implica che quando devono fare qualcosa che superi i limiti del loro spazio di indirizzamento privato, che si tratti di leggere un file o di mostrare cose sullo schermo, devono chiedere al sistema operativo. E il sistema operativo si conformerà, o meno, in base alla propria nozione di diritti di accesso. Qualsiasi processo può quindi avere "diritti di amministratore" o meno; in caso contrario, un numero di operazioni verrà rifiutato con un errore di "accesso negato".

Questo vale anche per gli eseguibili MS-DOS. Sotto la linea di sistemi NT, gli eseguibili MS-DOS funzionano con un modello di indirizzamento a 16 bit, il che significa che "vedono" uno spazio di indirizzamento di circa un megabyte (1114096 byte, precisamente) in cui il sistema operativo emula una vecchia versione MS-DOS - il processo crede che sia solo nella macchina; ma quando accede ai file parlando con MS-DOS emulato, le chiamate vengono reindirizzate al normale kernel (32 bit), che deciderà se accettarle o meno, in base ai diritti di accesso concessi a MS-DOS processo, in particolare se è stato eseguito con diritti di amministratore o meno.

Si noti che l'esecuzione di codice a 16 bit in un sistema operativo a 32 bit richiede l'uso della modalità VM86 . Questa modalità è non supportata dalla moderna CPU x86 quando viene eseguita in modalità a 64 bit (nota anche come "modalità lunga"), pertanto l'esecuzione di processi MS-DOS a 16 bit non è supportata nelle versioni a 64 bit di Windows, a meno che non si aggiunga un ulteriore livello di emulazione della CPU come DOSBox .

Riepilogo: gli eseguibili a 16 bit non hanno diritti di amministratore automatici in DOS / Windows. Le vecchie versioni del sistema operativo non hanno tale nozione; su versioni Windows che supportano un concetto di diritti di amministrazione, un eseguibile a 16 bit avrà tali diritti solo se esplicitamente concesso, se può essere eseguito a tutti, il che non è più il caso con architetture a 64 bit.

    
risposta data 29.02.2016 - 18:38
fonte
2

Prima di tutto, le autorizzazioni non hanno nulla a che fare con "C". L'app può essere scritta su C, ASM, Pascal o C ++. Non importa.

Le moderne CPU Intel x86 hanno il nonno 8086. E 'stata utilizzata la 16 (non 8!) CPU utilizzata per il primo sistema operativo IBM-PC e MS-DOS.

Questo processore non ha fatto alcuna protezione. Qualsiasi programma lanciato su di esso ha avuto accesso a qualsiasi spazio di memoria e di I / O, quindi è possibile accedere all'hardware e alla RAM (incluso il sistema operativo stesso) per la scrittura da qualsiasi app. Non esistevano "diritti amministrativi".

A partire dall'80386, hanno creato la "modalità protetta" (beh, se era disponibile dal 80286, ma non è mai stata utilizzata lì). Quando in questa modalità, il processore distingue "applicazione utente" da "os / kernel". L'applicazione risiede nel "mondo virtuale" della "memoria virtuale" e quando legge della memoria, la CPU (con l'aiuto del sistema operativo) mappa la sua richiesta su una memoria reale e se l'app non ha accesso ad essa - si verifica un errore e l'app muore .

I sistemi operativi moderni associano "account utente" ad ogni processo in esecuzione e lo usano per limitare l'accesso al processo ad alcune delle loro API (come il debugging) o al filesystem. (btw, FileSystem usato da DOS chiamato FAT e non aveva alcuna informazione di permesso).

Ma qualsiasi CPU può funzionare in modalità di emulazione 8086 (la cosiddetta "modalità reale") senza alcuna protezione.

C'era anche il modello "virtuale 86" per emulare la modalità reale dalla modalità protetta, ma non è disponibile quando la CPU funziona in modalità lunga (x64).

    
risposta data 29.02.2016 - 18:38
fonte

Leggi altre domande sui tag