¿Desde cuándo un programa no puede obtener los derechos de administrador de MS-DOS y MS-Windows?

1

Estoy seguro de haber leído que en la década de los 80 con el proceso Intel de 8 bits, cualquier programa DOS que se ejecutó con MS-DOS se ejecutó en modo administrativo y podría hacer cualquier cosa que cualquier programa C pudiera hacer. Ahora también estoy bastante seguro de que este ya no es el caso y me pregunto si podemos verificar o responder a estas afirmaciones.

    
pregunta Niklas Rosencrantz 29.02.2016 - 18:07
fuente

3 respuestas

1

Hay dos mecanismos de protección principales que restringen los programas ejecutados por un usuario:

Algunos sistemas de un solo usuario (por ejemplo, Windows 95) implementan solo protección de memoria, sin ACL. La situación inversa es imposible; ACL no se puede implementar correctamente sin protección de memoria.

Microsoft introdujo ambos mecanismos en Windows NT 3.1 en 1993.

    
respondido por el Dmitry Grigoryev 29.02.2016 - 18:36
fuente
9

En el momento de MS-DOS, o en los derivados gráficos (hasta e incluyendo Windows ME), no había ninguna noción de "derechos administrativos".

Aquí hay dos conceptos distintos, que deben ser detallados. La primera es sobre lo que se permite hacer un proceso cuando se pregunta bien. Lo segundo es lo que puede hacer si no es agradable en absoluto.

En MS-DOS, cada proceso toma el control exclusivo de la máquina y puede hacer casi cualquier cosa que desee. Ve toda la memoria RAM, puede hablar con todo el hardware, y así sucesivamente. Además, no hay un programador, por lo que un proceso utiliza la CPU hasta que sale. Es posible hacer que el proceso se prolongue, pero eso es principalmente reservar un poco de RAM y esperar a que se le otorgue el control, generalmente, una interrupción de hardware (los controladores del mouse funcionaron de esa manera).

Con Windows 3.1 en "modo extendido 386" y sus derivados Windows 95, 98 y Millenium (ME), varios procesos pueden ejecutarse simultáneamente, y una parte del sistema operativo entrega la CPU a uno u otro, sin preguntarles. Esto se denomina multitarea preventiva . Cada proceso tiene su propio espacio de memoria, y la MMU atrapa los casos en que un proceso intenta acceder a la memoria de otro. Sin embargo, esto es solo para detectar errores, no para seguridad: todos los procesos aún pueden acceder directamente al hardware, y leer y escribir en la memoria del kernel. Por lo tanto, no hay una noción de "derechos administrativos" que tengan sentido en estos sistemas operativos, y ni siquiera lo intentan.

En el linaje de NT, comenzando con NT 3.51, luego NT 4, Windows 2000, XP y versiones posteriores, existe una protección de memoria real y los procesos no pueden escapar de su espacio de direcciones. No pueden hablar directamente con el hardware y no pueden acceder a la memoria más allá de la que se les asignó explícitamente. Esto implica que cuando necesitan hacer algo que exceda los límites de su espacio de direcciones privadas, ya sea para leer un archivo o mostrar cosas en la pantalla, deben preguntar al sistema operativo. Y el sistema operativo cumplirá, o no, según su propia noción de derechos de acceso. Cualquier proceso puede tener "derechos de administrador" o no; si no lo hace, se rechazarán varias operaciones con un error de "acceso denegado".

Esto se aplica también a los ejecutables de MS-DOS. Bajo la línea de sistemas NT, los ejecutables de MS-DOS trabajan con un modelo de direccionamiento de 16 bits, lo que significa que "ven" un espacio de direcciones de aproximadamente un megabyte (1114096 bytes, precisamente) en el que el sistema operativo emula una versión antigua de MS-DOS - El proceso cree que está solo en la máquina; pero cuando accede a los archivos hablando con ese emulador de MS-DOS, las llamadas se enrutan al núcleo normal (de 32 bits), que decidirá si las acepta o no, según los derechos de acceso otorgados a la cuenta de MS-DOS. proceso, en particular si se ejecutó con derechos de administrador o no.

Tenga en cuenta que la ejecución de código de 16 bits en un sistema operativo de 32 bits requiere el uso del modo VM86 . Este modo es no admitido por la moderna CPU x86 cuando se ejecutan en modo de 64 bits (también conocido como "modo largo"), por lo que la ejecución de procesos MS-DOS de 16 bits no es compatible con las versiones de 64 bits de Windows, a menos que agregue una capa adicional de emulación de CPU como DOSBox .

Resumen: los ejecutables de 16 bits no tienen derechos de administrador automáticos en DOS / Windows. Las versiones anteriores del sistema operativo no tienen tal noción; En las versiones de Windows que admiten un concepto de derechos de administrador, un ejecutable de 16 bits solo tendrá dichos derechos si se concede de forma explícita, si es que puede ejecutarse, lo que ya no es el caso de las arquitecturas de 64 bits.

    
respondido por el Tom Leek 29.02.2016 - 18:38
fuente
2

En primer lugar, los permisos no tienen nada que ver con "C". La aplicación podría escribirse en C, ASM, Pascal o C ++. No importa.

Las CPU Intel x86 modernas tienen un abuelo llamado 8086. Era una CPU de 16 (¡no 8!) utilizada para la primera PC de IBM y se creó el sistema operativo MS-DOS.

Este procesador no hizo ninguna protección. Cualquier programa lanzado en él tenía acceso a cualquier espacio de memoria e IO, por lo que cualquier aplicación podía acceder al hardware y la RAM (incluido el sistema operativo). No había tal cosa como "derechos administrativos".

Desde 80386, crearon "modo protegido" (bueno, si estaba disponible desde 80286, pero nunca se usó allí). Cuando está en este modo, el procesador distingue "aplicación de usuario" de "os / kernel". La aplicación vive en el "mundo virtual" de la "memoria virtual" y cuando lee algo de memoria, la CPU (con ayuda del sistema operativo) asigna su solicitud a alguna memoria real, y si la aplicación no tiene acceso a ella, la falla ocurre y la aplicación muere .

Los sistemas operativos modernos asocian la "cuenta de usuario" con cada proceso en ejecución y lo utilizan para limitar el acceso a los procesos de algunas de sus API (como la depuración) o el sistema de archivos. (por cierto, FileSystem utilizado por DOS llamado FAT y no tenía ninguna información de permiso también).

Pero cualquier CPU puede ejecutarse en modo de emulación 8086 (llamado "modo real") sin ninguna protección.

También había un modelo "virtual 86" para emular el modo real del modo protegido, pero no está disponible cuando la CPU se ejecuta en modo largo (x64).

    
respondido por el user996142 29.02.2016 - 18:38
fuente

Lea otras preguntas en las etiquetas