Seguridad física en SPARC

Los mecanismos de seguridad de más bajo nivel que ofrece Solaris sobre estaciones y servidores SPARC son los que estos implantan en su EEPROM, una memoria RAM no volátil (NVRAM, Non-volatile RAM) a la que se puede acceder pulsando las teclas `Stop-A' (teclados Sun) o `Ctrl-Break' (terminales serie). Esta memoria, también denominada OpenBoot PROM o simplemente OBP es en muchos aspectos similar a la BIOS de un simple PC, pero mucho más potente y flexible; sus funciones son verificar el estado del hardware e inicializarlo (ofreciendo para ello una amplica gama de herramientas empotradas), y por supuesto arrancar el sistema operativo.

Como antes hemos dicho, cualquiera con acceso físico a una máquina SPARC puede interactuar con su NVRAM sin más que pulsar la combinación de teclas `Stop-A'; sin importar el estado en que se encuentre el sistema, automáticamente se detendrán 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.

Al interactuar con la EEPROM, cualquier persona10.2 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; podemos deshabilitar la función de las teclas `Stop-A' mediante la directiva del kernel `abort_enable' en el fichero /etc/system, o - lo que suele ser más útil - proteger mediante contraseña el reinicio de una máquina desde su memoria NVRAM. Para ello, las máquinas SPARC ofrecen 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 como su nombre indica no ofrece ningún tipo de seguridad: cualquiera que pulse `Stop-A' desde la consola del sistema10.3obtiene un acceso total a la EEPROM sin necesidad de conocer ningún tipo de contraseña y puede reiniciar la máquina de la forma que le plazca.

Los dos modos siguientes son los que ofrecen un nivel de seguridad algo superior; 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. En cualquier caso, esta clave es diferente de la utilizada para acceder a Solaris como superusuario; si olvidamos la contraseña de la EEPROM pero tenemos acceso root a la máquina podemos usar desde línea de órdenes el comando `eeprom' para modificar (o consultar) cualquier parámetro de la NVRAM, passwords incluidos. Si hemos perdido la contraseña de la EEPROM y no podemos arrancar la máquina, es muy posible que necesitemos sustituir nuestra memoria NVRAM por una nueva, por lo que hemos de tener cuidado con las claves que utilicemos para proteger la OBP; por supuesto, si utilizamos el modo `full-secure' podemos ir olvidándonos de reinicios programados del sistema sin un operador que teclee el password en consola: la seguridad en muchas ocasiones no es del todo compatible con la comodidad o la funcionalidad.

Como hemos adelantado, para consultar o modificar el modo en el que se encuentra nuestra memoria NVRAM podemos ejecutar la orden `eeprom'; en nuestro caso queremos conocer el estado de la variable `security-mode', por lo que desde una línea de comandos teclearíamos lo siguiente:
marta:/# eeprom security-mode
security-mode=none
marta:/#
Podemos ver que en este caso nuestra máquina no tiene habilitado ningún tipo de seguridad; si quisiéramos habilitar el modo `command-secure', ejecutaríamos:
marta:/# eeprom security-mode
security-mode=none
marta:/# eeprom security-mode=command
Changing PROM password:
New password:
Retype new password:
marta:/# eeprom security-mode
security-mode=command
marta:/#
También es posible realizar estos cambios desde el propio prompt de la memoria NVRAM, mediante la orden `setenv'10.4:
ok setenv security-mode command
security-mode =       command
ok
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:
marta:/# eeprom security-mode=none
marta:/# eeprom security-mode
security-mode=none
marta:/#
Si en los modos `command-secure' o `full-secure' queremos cambiar la contraseña de la NVRAM podemos utilizar de nuevo la orden `eeprom', esta vez con el parámetro `security-password':
marta:/# eeprom security-password=
Changing PROM password:
New password:
Retype new password:
marta:/# eeprom security-password
security-password= data not available.
marta:/#
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'10.5:
marta:/# eeprom security-#badlogins
security-#badlogins=4
marta:/# eeprom security-#badlogins=0
marta:/# eeprom security-#badlogins
security-#badlogins=0
marta:/#
Antes de finalizar este punto quizás sea necesario recordar 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 se suelen proteger en el arranque mediante contraseñas en la BIOS, como veremos al hablar de Linux.
© 2002 Antonio Villalón Huerta