Si cuando hemos hablado de Solaris hacíamos referencia al nivel de
seguridad más bajo que ofrece una máquina SPARC, el correspondiente a
su EEPROM, parece obligatorio comentar, en el capítulo dedicado a
Linux, de la seguridad de más bajo nivel que ofrece este operativo
ejecutándose sobre su principal plataforma: el PC.
Cuando arranca un ordenador personal se ejecuta un software denominado
BIOS (Basic I/O System) cuya función principal es determinar una
serie de parámetros de la máquina y proporcionar un sistema básico de
control de dispositivos, como el teclado o los puertos de comunicaciones; este
software se aloja típicamente en una memoria ROM (Read-Only Memory) o flash (estos últimos permiten actualizar la
versión de la BIOS sin necesidad de cambiar el chip
correspondiente), de forma que se permita autoarrancar a la máquina aunque
el subsistema de almacenamiento tenga problemas y no se pueda iniciar el
operativo. En el arranque de un PC se puede acceder a la configuración de
su BIOS mediante la pulsación de una tecla o una secuencia de escape
dependiente de cada modelo de chip; desde ese entorno de configuración
se pueden asignar parámetros como la fecha y hora del sistema, la
arquitectura de los discos duros, o la habilitación de memorias caché. Por
supuesto, la BIOS de un PC es completamente independiente del operativo
que se arranque después; esto implica que cuando a continuación comentemos
la protección que ofrece una BIOS, lo que digamos será aplicable sin importar qué operativo se ejecute en la máquina: servirá tanto para
Linux como para Solaris, FreeBSD, NetBSD...e incluso para las diferentes
versiones de Windows. Si lo comentamos en este capítulo dedicado a Linux
y no en otro, es únicamente porque la mayor parte de plataformas sobre las
que se ejecuta este operativo son ordenadores personales.
Generalmente la mayor parte de las BIOS ofrecen la posibilidad de
establecer dos contraseñas independientes. La primera de ellas es una clave
que evita a usuarios que no la conozcan acceder a la configuración de la BIOS, ya que se solicitará al pulsar la secuencia de escape de la que hemos
hablado antes para entrar en el entorno de configuración durante el arranque
de una máquina. El esquema de esta contraseña en muchas ocasiones no es
todo lo robusto que debiera, y en función del modelo y versión de cada
chip de memoria - especialmente en los más antiguos - es posible que
incluso se pueda romper ejecutando un simple programa desde línea de
órdenes; a pesar de ello, puede ser útil en entornos de muy baja seguridad
para prevenir que cualquiera se dedique a cambiar la configuración de la BIOS, pero más por comodidad (el administrador de la máquina debería
restaurar dicha configuración de nuevo, algo bastante molesto sobre todo si
el número de ordenadores es elevado, como en un laboratorio o un aula) que
por seguridad.
La segunda de estas claves ofrece un nivel de protección algo más elevado;
se trata de una contraseña que evita el arranque del PC sin que se teclee el
password (en local, por supuesto, recordemos que el operativo aún no se
ha inicializado). Con ella se consigue que nadie que no conozca la clave pueda
arrancar un ordenador, pero una vez arrancado no sirve para nada más; puede
ser útil para evitar que usuarios no autorizados puedan sentarse delante de
una máquina y arrancar desde un diskette, aunque seguramente una
solución menos agresiva es configurar la BIOS para que sólo arranque
desde disco duro, o al menos no trate de hacerlo desde floppy antes que
desde el disco primario. No obstante, poner una contraseña para arrancar el
sistema, como muchas medidas de seguridad, puede tener efectos negativos en la
funcionalidad o en la comodidad de administración: no podremos realizar
reboots automáticos ni remotos de Unix, ya que cada vez que el sistema
reinicie alguien deberá estar físicamente al lado de la máquina para
teclear la clave correspondiente.
Antes de finalizar este punto dedicado a la seguridad física dentro de
Linux debemos hablar de la protección ofrecida por LILO; ahora ya no
se trata de algo genérico de los PCs, sino de mecanismos implantados en el
cargador de Linux que sólo son aplicables a sistemas arrancados desde dicho
cargador. LILO (LInux LOader) es un software que se instala
en un sector de arranque - de una partición o de un diskette - o en
el Master Boot Record (MBR) del disco duro y que permite de esta
forma arrancar tanto Linux como otros sistemas operativos instalados en el PC.
LILO toma su configuración del archivo /etc/lilo.conf del
sistema Linux; cada vez que modifiquemos ese archivo será necesario ejecutar
la orden /sbin/lilo si queremos que los cambios tengan efecto en el
siguiente encendido de la máquina:
luisa:~# /sbin/lilo
Added linux *
luisa:~#
Al arrancar el PC, LILO permite elegir una imagen para ser arrancada,
así como especificar parámetros para el núcleo; aunque esto sea
necesario para inicializar el sistema en ciertas ocasiones - principalmente
cuando hay errores graves en un arranque normal -, el hecho es que los
parámetros pasados a un kernel antes de ser arrancado pueden facilitar
a un atacante un control total sobre la máquina, ya que algunos de ellos
llegan incluso a ejecutar un shell con privilegios de root sin
necesidad de ninguna contraseña.
En determinadas ocasiones, quizás nos interese proteger el arranque de una
máquina, tanto a nivel de la elección de núcleo a arrancar como a nivel
de las opciones que se pasan a dicho núcleo. Podemos habilitar desde LILO el uso de una contraseña que se solicitará antes de que LILO
cargue cualquier sistema operativo instalado en el ordenador; para ello debemos
hacer uso de la directiva `password' en /etc/lilo.conf:
luisa:~# cat /etc/lilo.conf
boot = /dev/hda
delay = 50
vga = normal
password = P,e+bqa
image = /vmlinuz
root = /dev/hda1
label = linux
read-only
luisa:~#
Tras ejecutar /sbin/lilo, en el siguiente arranque de la máquina se
solicitará la contraseña especificada antes de arrancar cualquier sistema
operativo; es importante que /etc/lilo.conf tenga un permiso de lectura
sólo para el root, ya que como podemos ver contiene contraseñas sin
cifrar.
Evidentemente, si elegimos este tipo de protección nos podemos olvidar de
cualquier cosa que implique un reinicio automático del ordenador, ya que
como acabamos de decir siempre se solicitará una clave en el arranque;
podemos relajar esta restricción de una forma muy útil: forzando el uso de
un password sólo si se especifican parámetros adicionales para
el núcleo que se quiere arrancar. Esto permite un equilibrio más que
razonable entre seguridad y usabilidad, ya que cualquiera - con los
privilegios necesarios - puede reiniciar el sistema, e incluso se pueden
programar rearranques automáticos, pero siempre será necesaria una clave si
alguien desea especificar parámetros adicionales al kernel.
Para conseguir esto utilizaremos la directiva `restricted' en
conjunción con `password' en el archivo de configuración de LILO; basándonos en el ejemplo anterior, el contenido del nuevo fichero
sería el siguiente:
luisa:~# cat /etc/lilo.conf
boot = /dev/hda
delay = 50
vga = normal
password = P,e+bqa
restricted
image = /vmlinuz
root = /dev/hda1
label = linux
read-only
luisa:~#
Los dos parámetros que acabamos de ver (`password' y `restricted'
se pueden utilizar y combinar bien en la configuración general de LILO
- como lo hemos visto aquí - o bien en la configuración particular de
cada uno de los sistemas operativos a arrancar; si queremos esto último no
tenemos más que incluir las directivas dentro de la configuración de las
entradas `image' (imágenes del kernel de Linux) u `other'
(arranque de otros sistemas operativos) en lugar de hacerlo antes de estas
entradas:
luisa:~# cat /etc/lilo.conf
boot = /dev/hda
delay = 50
vga = normal
image = /vmlinuz
root = /dev/hda1
label = linux
read-only
password = 66n4k
restricted
luisa:~#
De esta forma podemos particularizar claves para cada sistema o núcleo,
definir entradas en las que se necesitará la clave sólo si pasamos
parámetros en el arranque, entradas en las que se necesitará siempre,
entradas en las que no se necesitará nunca, etc.
Para finalizar este punto, es necesario recordar una vez más que una
correcta configuración del arranque en la BIOS es imprescindible para
garantizar la seguridad física de la máquina; sin ir más lejos, si un
pirata consigue arrancar el ordenador desde un diskette, poseerá un
control total del sistema sin importar las claves que tengamos definidas en
/etc/lilo.conf.
© 2002 Antonio Villalón Huerta