jueves, 28 de diciembre de 2023

¿Qué son los anillos de la arquitectura x86?

¿Qué es una arquitectura? Y ¿Qué es la arquitectura x86 o x86_64?

    Se puede decir que una arquitectura de procesador es el conjunto de instrucciones mediante el cual se realizan operaciones en él. Así la arquitectura del procesador con el que funciona tu PC es diferente de la arquitectura con la que funciona el procesador que contiene tu móvil.

    Mayoritariamente el mercado de PC esta dominado por la arquitectura x86, y x86_64 y el principal fabricante de esta arquitectura es Intel, seguido de AMD.

    X86_64 es idéntica a x86, lo que pasa es que x86 es de 32 bits, y x86_64 es de 64 bits. La diferencia entre estos dos sistemas reside en la cantidad de memoria dedicada por instrucción, así los sistemas de 32 bits pueden tener un máximo de 4 GB de RAM y los de 64 bit no tienen esta restricción, pudiendo tener cantidades superiores a esta cifra y sólo limitada por el tope que pueda gestionar el Sistema Operativo.

    Actualmente la hegemonía respecto a la arquitectura x86_64 han comenzado a cambiar, ya que empiezan a surgir fabricantes que deciden que sus computadoras trabajen en otras arquitecturas por razones como el rendimiento o el consumo energético. Este es el caso de Apple que ha pasado a producir sus propios procesadores para sus computadoras basados en una arquitectura ARM.

    Hasta ahora la arquitectura ARM se utilizaba en sistemas portátiles como móviles, tablets o algunos portátiles, porque tiene la ventaja de que gasta menos energía por conjunto de instrucciones. Por esto los procesadores basados en la arquitectura ARM son ideales para dispositivos móviles, por su bajo consumo en energía y su alta capacidad de procesamiento.

    Existen otras arquitecturas como la arquitectura POWER de IBM, que actualmente se centra en el mercado de los servidores. Apple también utilizó esta arquitectura en sus Power Macintosh. Pero desde que Apple pasó de usar la arquitectura POWER a la arquitectura de Intel en el año 2005, el mercado de PC lo domina x86.

¿Que son los Anillo de protección de la arquitectura x86?

    Los anillo de protección son niveles jerárquicos o capas de privilegios conceptuales dentro de la arquitectura de un sistema de computación. Los anillos están dispuestos en una jerarquía que va desde las zonas del procesador con más privilegios (es decir, de más confianza), hasta la zona menos privilegiada (de menos confianza). En la mayoría de arquitecturas el anillo 0 es el nivel más privilegiado e interactúa directamente con el hardware, como la CPU y la memoria. Los anillos de protección son un mecanismos para proteger los datos frente a fallos y comportamientos maliciosos, como pueden ser el comportamiento de un malware. El objetivo es separar los programas sensibles, como los contenidos en el kernel, y los programas de usuario. Así un programa contenido en una zona de memoria asignada al anillo 3 no podrá acceder a una zona de memoria asignada al anillo 0 sin pedir permiso. De esta forma evitamos que un malware, que se ejecuta como un programa de usuario en el anillo 3, no tenga privilegios y no pueda encender la webcam o acceder al micrófono puesto que el acceso al hardware debe ser una función reservada del anillo 0. Los programas como navegadores web, grabadores de sonido o grabadores de video corriendo en los anillos menos privilegiados, deben solicitar el acceso al hardware, y el hardware es administrado en anillo de numeración inferior.

    La arquitectura x86 cuentan con 4 anillos de seguridad por razones históricas. El anillo 0 corresponde al nivel con más privilegios y el anillo 3 al de menos privilegios. Hay que entender que la arquitectura x86 comenzó a desarrollarse en la década de 1970. En aquella época la visión que se tenía de los sistemas operativos era otra muy distinta a la que se tiene hoy en día.


Priv rings


 

    Estos niveles jerárquicos los gestionan los sistemas operativos proporcionando diferentes niveles de acceso a los recursos. Los sistemas operativos x86 modernos ignoran el mecanismo de segmentación y reducen su protección a solo 2 anillos, el anillo 3 y el anillo 0. Esto lo hacen por una cuestión de eficiencia de programación usando solo un bit de seguridad. Este bit controla si el procesador debe estar trabajando en el nivel "privilegiado" o anillo 0, o debe estar trabajando en el anillo de nivel de usuario no privilegiado, el anillo 3. Al ser solo un bit, el número de "modos" disponibles en lo que respecta a la protección de memoria es solo dos. Por lo tanto, sólo usa dos anillos. Para que pudiera hacer uso de los 4 anillos tendrían que hacer uso de dos bits de protección para que fueran accesibles 4 modos de trabajo. Esto es 0, 1, 2, 3 en binario. Además hay otra razón por la que sólo utilizan 2 anillos. Esta razón es debido a la portabilidad. En el mercado existen más arquitecturas de computadoras con sólo esos dos niveles de protección y para poder usarlas sin tener que reprogramar todo el sistema operativo es más sencillo universalizar el uso de 2 anillos de protección, uno privilegiado y otro no. El ejemplo más claro de esto son las distintas distribuciones Linux en múltiples arquitecturas de procesador que es una de las principales característica de Linux. Por esta razón los sistemas operativos más modernos y conocidos en la arquitectura x86, como los basados en kernel Linux o el sistema operativo Windows, sólo usan el anillo 0 para el modo de núcleo y el anillo 3 para el modo de usuario.

    El kernel es el núcleo del sistema operativo, podríamos decir que son las tripas, o más concretamente definirlo como un software fundamental del sistema operativo. Es el principal responsable de facilitar a los distintos programas acceso seguro al hardware de la computadora por lo que es el encargado de gestionar sus recursos.

    Actualmente con el propósito de aumentar la eficiencia energética y aprovechamiento de los recursos, además de aumentar la seguridad de los sistemas operativos, podríamos considerar que existe un nuevo interés en utilizar un anillo de seguridad más. Este giro de dirección se debe a la extendida implantación del hardware de virtualización.

    En Intel tenemos la Tecnología de Virtualización de Intel VT-d y en AMD su tecnología AMD-V. Por otro lado, además tenemos la proliferación de software que explota esta tecnología como por ejemplo los hipervisores de software libre Xen y KVM. 

    Con esta nueva tecnología tenemos que empezar a hablar del modo hipervisor. El modo hipervisor controla el acceso del hardware al anillo 0, lo que significa que en la jerarquía de anillos estaría por debajo del anillo 0. Sería considerado el anillo -1. Esto permite que varios sistemas operativos puedan ejecutarse en un mismo procesador de forma nativa sobre el propio hardware y poder exprimir al máximo los recursos de la máquina con un bajo coste energético. La virtualización es muy usada en servidores para sacarle el máximo provecho al hardware al menor costo posible. Pensemos en un servidor de servicios web, podremos tener varios servidores en un mismo hardware. Ahorrando así en recursos como son la memoria o la cpu y en energía.

    La virtualización también es utilizada por algunos sistemas operativos para incrementar la seguridad, al poder separar componentes hardware por sistemas operativos y actuar como un cortafuegos a la hora de administrar recursos. De esta forma, por ejemplo, si un pendrive esta cargado con un malware y se ejecuta en una maquina virtual, el sistema operativo anfitrión estará a salvo del malware.

    Por otro lado tenemos otra característica histórica de la arquitectura x86 de Intel. El llamado Modo de Gerencia de Sistema o SMM de sus siglas en inglés. Este modo es totalmente independiente de los modos de los que ya hemos hablado. Es independiente incluso del modo hipervisor, por lo que en la jerarquía estaría por debajo del hipervisor que es el anillo -1.

    El Modo de Gerencia de Sistema es el anillo -2 y se encarga entre otras cosas de emular hardware de la placa base que no está implementado realmente, por ejemplo un ratón o un teclado que debería estar conectado desde un puerto PS/2 a un puerto USB, de operaciones relacionadas con la energía del sistema, como encendido de ventiladores o apagar el computador cuando detecta alta temperatura en la CPU.

    Por último, como contábamos en el anterior artículo, tenemos el Intel Management Engine, que gestiona el chipset y tiene acceso a toda la placa base. Por lo que es totalmente independiente y representaría en la jerarquía el anillo -3.