El sistema de arranque

Todas las estaciones de trabajo actuales disponen de algún sitema básico de arranque grabado en una memoria de sólo lectura (generalmente una EPROM, que permite actualizarla) denominado firmware.

En general este sistema se encarga de inicializar el hardware, cargar el operativo o un sistema de arranque más complejo y ejecutarlo.

Dado que este curso se centra principalmente en Solaris y Linux, y que las principales plataformas para ambos sistemas son SPARC e Intel respectivamente, sólo discutiremos los sistemas de arranque de estas dos arquitecturas, aunque probablemente lo dicho aquí será aplicable a otros sistemas.

En los PCs basados en tecnología Intel el firmware se suele denominar BIOS (Basic Input Output System) y suele tener una funcionalidad bastante limitada.

En las estaciones SPARC actuales el firmware se denomina OpenBoot. Se trata de una implementación del IEEE Standard 1275-1994, que define un estándar para los firmware de arranque. En la actualidad, además de los equipos SPARC de Sun, tambien los PowerPC de Apple emplean un firmware basado en este estándar.

En los apartados siguientes explicaremos brevemente como funcionan ambos tipos de sistemas de arranque y las implicaciones que tienen para la seguridad. Hay que indicar que en general las modificaciones que se hagan en las configuraciones de estos sistemas pueden ser evitadas desmontando los equipos, pero para un entorno de trabajo normal pueden ser suficientes (no es normal que alguien no autorizado que acceda a un equipo se ponga a desmontarlo sin que nadie le diga nada).

La BIOS del PC (Intel)

En general las BIOS de los equipos basados en Intel son muy similares, aunque exiten varios fabricantes que se reparten el mercado, los más famosos son Phoenix y AMI.

Generalmente el acceso a la BIOS se hace pulsando una o varias teclas cuando arranca el equipo; una vez pulsado se entra en un entorno de configuración sencillo, habitualmente en modo texto, que nos permite definir parámetros del sistema como la fecha y la hora, la geometría y tamaño de los discos, si debemos habilitar o no determinadas controladoras, etc.

Uno de los parámetros que más nos interesa desde el punto de vista de la seguridad es la elección de los dispositivos de arranque, ya que generalmente es la BIOS la que decide el orden en el que se intenta arrancar empleando distintos soportes (disco duro, CD-ROM, floppy, ...). Si permitimos el arranque de disquete o CD-ROM es extremadamente fácil para cualquiera que se siente ante el equipo el arrancarlo con cualquier cosa y modificar nuestros sistemas de ficheros.

Aunque configuremos correctamente los dispositivos de arranque es necesario limitar el acceso a la BIOS para que nadie pueda entrar en ella de nuevo y cambiar los ajustes. Para ello la mayor parte de las BIOS ofrecen la posibilidad de establecer dos contraseñas independientes; una para impedir el acceso a la configuración de la BIOS (hay que introducirla despues de pulsar la secuencia de teclas que carga el programa de configuración de la BIOS) y otra de arranque (si no se introduce la clave no se inicia el procedimiento de arranque y por tanto no se puede ejecutar nada). El problema de esta última contraseña es que es necesario estar delante del PC para arrancar un equipo, algo poco práctico si reiniciamos remotamente el ordenador o simplemente si se va la luz ...

Por último mencionar que la BIOS tiene un sistema de carga de S. O. extremadamente simple: en el caso de los discos duros se carga el programa que hay en unos sectores concretos del disco (el MBR o Master Boot Record) o, en caso de no haber nada en ese sector, lo que hay en el sector de arranque de la partición marcada como activa.

Por todo esto, es imposible usar la BIOS para pasarle parámetros a un sistema operativo o simplemente decidir cual vamos a arrancar si tenemos más de uno. Si instalamos linux en el equipo es habitual instalar en el disco algún bootloader que nos permita arrancar varios sistemas operativos distintos (o incluso el mismo con parámetros diferentes) como LILO o GRUB. Hablaremos de estos programas en el apartado que trata la instalación de Linux.

La OpenBootProm de Sun (SPARC)

El firmware de las estaciones SPARC de SUN es una memoria NVRAM denominada OpenBoot PROM o simplemente OBP.

El acceso a la misma se consigue pulsando la combinación de teclas Stop-A en teclados Sun o Ctrl-Break en terminales serie. Sin importar el estado en que se encuentre el sistema, cuando se pulse esta combinación se se detendrán automáticamente todos los procesos en ejecución y se mostrará en consola el prompt ok, que indica que podemos comenzar a teclear órdenes de la OBP.

La máquina no pierde en ningún momento su estado a no ser que explícitamente la detengamos: al salir de la OBP podemos continuar la ejecución de todos los procesos que teníamos al entrar, desde el mismo punto en que los detuvimos y con el mismo entorno que poseían, pero mientras estemos interactuando con la EEPROM ningún proceso avanzará en su ejecución.

Un problema con este modo de funcionamiento es que al interactuar con la EEPROM, cualquier persona puede interrumpir al operativo y rearrancarlo desde un disco, un CD-ROM, o un sistema remoto, lo que evidentemente le proporciona un control total sobre el sistema.

Para evitarlo podemos deshabilitar la función de las teclas Stop-A mediante la directiva del kernel abort_enable en el fichero /etc/system, o proteger mediante contraseña el reinicio de una máquina desde su memoria NVRAM.

La OBP ofrece tres niveles de seguridad: none-secure, command-secure, y full-secure.

El primero de ellos, none-secure es el que está habilitado por defecto y no ofrece ningún tipo de seguridad.

Si activamos command-secure será necesaria una clave para reiniciar el sistema de cualquier dispositivo que no sea el utilizado por defecto (que generalmente será el disco, disk), y si elegimos full-secure la contraseña es obligatoria independientemente del dispositivo elegido para arrancar (con lo que no deberemos usar este modo si queremos permitir reinicios automáticos).

Hay que indicar que esta contraseña no tiene nada que ver con la del usuario root del sistema, aunque este usario puede usar desde línea de órdenes el comando eeprom para modificar (o consultar) cualquier parámetro de la NVRAM, passwords incluidos.

Si perdemos la contraseña de la EEPROM y no podemos arrancar la máquina será necesario sustituir nuestra memoria NVRAM por una nueva, por lo que hemos de tener cuidado con las claves que utilicemos para proteger la OBP.

Como hemos adelantado, para consultar o modificar el modo en el que se encuentra nuestra memoria NVRAM podemos ejecutar la orden eeprom.

Para conocer el estado de una variable (security-mode) haríamos lo siguiente:

    lem:/# eeprom security-mode
    security-mode=none

en este caso nuestra máquina no tiene habilitado ningún tipo de seguridad; si quisiéramos habilitar el modo command-secure, ejecutaríamos:

    lem:/# eeprom security-mode=command
    Changing PROM password:
    New password:
    Retype new password:
    lem:/# eeprom security-mode
    security-mode=command

También es posible realizar estos cambios desde el propio prompt de la memoria NVRAM, mediante la orden setenv:

    ok setenv security-mode command
    security-mode =       command

A partir de este momento, cuando el sistema inicie desde un dispositivo que no sea el utilizado por defecto, se solicitará la clave que acabamos de teclear; de forma similar podríamos habilitar el modo full-secure.

Para eliminar cualquier clave de nuestra memoria no tenemos más que restaurar el modo none-secure, de la forma habitual:

    lem:/# eeprom security-mode=none
    lem:/# eeprom security-mode
    security-mode=none

Si en los modos command-secure o full-secure queremos cambiar la contraseña de la NVRAM podemos utilizar de nuevo la orden eeprom y el parámetro security-password:

    lem:/# eeprom security-password=
    Changing PROM password:
    New password:
    Retype new password:
    lem:/# eeprom security-password
    security-password= data not available.

Como podemos ver, al consultar el valor de la variable, este nunca se muestra en pantalla.

El tercer y último parámetro relacionado con la seguridad de la memoria EEPROM es security-#badlogins, que no es más que un contador que indica el número de contraseñas incorrectas que el sistema ha recibido; podemos resetear su valor sencillamente asignándole 0:

    lem:/# eeprom security-#badlogins
    security-#badlogins=4
    lem:/# eeprom security-#badlogins=0
    lem:/# eeprom security-#badlogins
    security-#badlogins=0

Por último indicar que los parámetros de seguridad de la memoria EEPROM que acabamos de ver sólo existen en máquinas SPARC; aunque en la versión de Solaris para arquitecturas Intel también existe una orden denominada `eeprom' que nos mostrará los valores de ciertos parámetros si la ejecutamos, únicamente se trata de una simulación llevada a cabo en un fichero de texto denominado `bootenv.rc'. Es posible dar valor a las variables que hemos visto, pero no tienen ningún efecto en máquinas Intel ya que estas suelen proteger el arranque mediante contraseñas en la BIOS, como hemos visto.