17 marzo 2009

Protección física a la consola Linux

En este artículo vamos a revisar distintos controles para evitar el acceso no autorizado a un equipo mediante el acceso físico al sistema (o a la consola). Como siempre, ninguna opción soluciona el problema, pero todas ellas añaden capas de seguridad adicionales.

Añadir contraseña a la BIOS

La primera configuración a modificar es asignar a la BIOS una contraseña de acceso, de esta forma no se podrá alterar el orden de inicio de dispositivos y arrancar con un CD o USB.

La modificación de la BIOS varía según los distintos fabricantes.

En algunos casos se puede arrancar un menú de "Configuración de inicio", o boot, pulsando una tecla cuando el sistema carga la BIOS, esta opción también se ha de deshabilitar.

Añadir contraseña al Grub/Lilo

Los sistemas de gestión de arranque, como Grub y Lilo, permiten modificar en tiempo de ejecución el arranque normal del sistema con parámetros que evitan la parte de autenticación finalpermiten acceso a su consola, así como el arranque de otro sistema operativo instalado en el equipo. Para evitar estas alteraciones se puede definir controles mitigadores.

En el caso de Grub, mediante la ejecución del siguiente comando:
/sbin/grub-md5-crypt
Que devuelve un hash md5 y que ha de ser introducido en el archivo: /boot/grub/grub.conf

De la forma: password --md5 <hash anterior>

Finalmente, para evitar el arranque de otro sistema operativo, se ha de modificar el /boot/grub/grub.conf y bajo la línea "title", del sistema operativo a bloquear, hay que añadir una línea: "lock". Esta medida ha de ser implantada junto a la anterior, es decir, se ha de definir una contraseña previamente.

El resultado final debería tener este aspecto:
title DOS
lock
password --md5 <hash del comando anterior>
En el caso de Lilo, la primera recomendación es su migración a Grub, ya que este dispone de menos mecanismos de seguridad y sus controles han sido evitados en distintas ocasiones. Como esta recomendación no siempre es aplicable, las medidas a adoptar son similares, se ha de asignar una contraseña en su fichero de configuración: /etc/lilo.conf

Antes de la primera etiqueta "image", se introduce la línea:

password=<contraseña>

Una vez modificado, se ha de ejecutar "lilo" para almacenar los cambios.
Para que otros usuarios no puedan leer el fichero, este ha de tener permisos 600:

chmod 600 /etc/lilo.conf

Lilo permite especificar contraseñas distintas dependiendo de la imagen, así como la opción de que solo sea solicitada en caso de que se introduzcan parámetros en el inicio. Podeís consultar más información en las referencias.

http://www.gnu.org/software/grub/manual/grub.html#Security
http://www.redhat.com/docs/manuals/linux/RHL-9-Manual/security-guide/s1-wstation-boot-sec.html


Añadir autenticación al modo "single-user"

Para añadir autenticación al modo single-user se modifica el archivo /etc/inittab y se añade la siguiente línea:

~~:S:wait:/sbin/sulogin

De esta forma, si el sistema es arrancado en este modo, no se presentará la consola de root directamente y solicitará antes su contraseña.

Referencia: http://linux.die.net/man/5/inittab

Deshabilitar las teclas interactivas

Las distribuciones basadas en el fabuloso mundo RedHat, como Fedora, CentOS, RHEL, etc, permiten arrancar interactivamente seleccionando que servicios arrancar y cuales no, con lo que se podría evitar, por ejemplo, el arranque del firewall.

Esta opción se puede eliminar modificando el archivo: /etc/sysconfig/init y cambiando el parámetro PROMPT a "no".
PROMPT=no
Referencia:http://www.redhat.com/docs/manuals/linux/RHL-8.0-Manual/ref-guide/s1-boot-init-shutdown-sysconfig.html


Activar tiempos de espera en la shell

De la shell (bourne again shell) ya hemos hablado en otra entrada, aquí remarcar que existe la posibilidad de que haga cierre de sesión (exit) automáticamente si no hay actividad.

Editando el archivo: /etc/profile añadir una línea:
TMOUT=600
Los 600 son segundos de inactividad.

Referencia: http://www.gnu.org/software/bash/manual/html_node/Bash-Variables.html

Activar bloqueo de pantalla

El bloqueo de pantalla se puede activar de distintas maneras que dependiendo del entorno que se utiliza.

Si el sistema no tiene arrancado el servidor X, es necesario instalar la aplicación "vlock". Una vez instalada, su uso es tan fácil como llamarlo mediante el comando:
vlock -a
Si el equipo tiene entorno gráfico, se puede configurar el protector de pantalla para que este bloquee el equipo cuando es ejecutado. Esta configuración dependerá del gestor utilizado.

http://docs.kde.org/stable/en/kdebase-workspace/kcontrol/screensaver/index.html
http://live.gnome.org/GnomeScreensaver/FrequentlyAskedQuestions

Desactivar Ctrl+Alt+Del

En ocasiones se puede reiniciar el equipo "accidentalmente", mediante la combinación de teclas Ctrl+Alt+Del que son pulsadas en un terminal en vez de donde se pretendía... El objetivo de esta medida es deshabilitar esta combinación para que no tengan ningún efecto y haya que recurrir al comando 'reboot' o el botón de reinicio.

Para modificar el comportamiento, se edita el fichero: /etc/inittab comentando la línea:
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
Para que los cambios tengan efecto, es necesario reiniciar el servicio init: init q

Desactivar permisos especiales sobre unidades removibles

En algunas distribuciones, como RedHat, el módulo de PAM (pam_console), asigna permisos especiales a los usuarios que acceden localmente al sistema, de esta forma se les permite montar unidades como el CDROM o la disquetera. Puesto que estas unidades son removibles y contienen información desconocida, se aconseja eliminar este permiso. Para ello, se edita el fichero: /etc/security/console.perms.d/50-default.perms comentado las líneas en las que se muestre "<floppy>" y "<cdrom>"

El Benchmark de CIS deja a disposición este script para realizar la tarea:

cd /etc/security
CONS_PERM_FILE="console.perms"
DEF_FILE="console.perms.d/50-default.perms"
test -f $DEF_FILE && CONS_PERM_FILE="$DEF_FILE"
awk '( $1 == "<console>" ) && ( $3 !~
/sound|fb|kbd|joystick|v4l|mainboard|gpm|scanner|memstick|diskonkey/ ) \
{ $1 = "#<console>" }; { print }' ${CONS_PERM_FILE}-preCIS > $CONS_PERM_FILE
chown root:root $CONS_PERM_FILE
chmod 0600 $CONS_PERM_FILE
echo "diff ${CONS_PERM_FILE}-preCIS $CONS_PERM_FILE"
diff ${CONS_PERM_FILE}-preCIS $CONS_PERM_FILE


Referencia: http://www.redhat.com/docs/manuals/linux/RHL-7.1-Manual/ref-guide/s1-access-privileges-console-access.html

Desactivar permisos especiales sobre aplicaciones

Con la misma problemática que en el punto anterior, se permite a usuarios conectados en consola la ejecución de comandos de sistema como la parada o reinicio del equipo, para evitar esta funcionalidad basta con ejecutar:

rm -f /etc/security/console.apps/poweroff
rm -f /etc/security/console.apps/halt
rm -f /etc/security/console.apps/reboot

Referencia:http://www.redhat.com/docs/manuals/linux/RHL-7.1-Manual/ref-guide/s1-access-privileges-console-access.html

Cifrado

Si alguien accede al servidor, lo abre y extrae el HD, accederá a la información de forma sencilla utilizando este disco como secundario en otro sistema. Para evitar la fuga de información puede cifrarse su contenido mediante dmcrypt. De esta forma, aunque el disco sea robado, la información permanecerá inacesible para el curioso.

Para montar dmcrypt en una partición, de la cual su contenido será eliminado, y resumiendo al máximo los comandos:
cryptsetup luksFormat /dev/sdb1
cryptsetup luksOpen /dev/sdb1 volumen
mkfs.ext3 /dev/mapper/volumen
mount /dev/mapper/volumen
Hay extensa documentación para crear contenedores en vez de particiones, así como de especificar distintas opciones.



Tarjeta de video.

La mejor opción para evitar el acceso a la consola es eliminar el soporte en el kernel para la tarjeta gráfica, configurando el sistema para que únicamente se pueda acceder mediante puerto serie o remotamente.

Esta configuración aunque parece exagerada es la más eficaz. Para ello hay que editar tanto el inittab, como el grub o lilo.

Referencias:
http://www.vanemery.com/Linux/Serial/serial-console.html
http://znark.com/tech/serialconsole.html


3 comments :

Alejandro Ramos dijo...

Buenas, Quería disculparme, publiqué la entrada antes de tiempo y aún no estaba terminada, con la eliminación de un comentario de uno de nuestros lectores!!

Al que aprovecho para responderle:

@Newlog, la idea es publicar aproximadamente 1 entrada por día, si conseguimos subir esa media mejor, pero en principio es el objetivo. Muchas gracias por tus comentarios y nuevamente, me auto-flagelo.

Sangorrin dijo...

Hola, muy bueno el post. Yo además añadiría poner un buen candado para que no se pueda sacar la batería de la bios jeje porque sino se puede resetear la bios y que así no te pida la contraseña (al menos yo lo he probado y funcionaba así). Además se puede encriptar el propio sistema de ficheros o incluso borrar el MBR para que el no se sepa donde comienza-termina cada partición.

Emanuel dijo...

Te felicito , Me encanto este articulo. Buen día.

Saludos