Protección física para la consola

Cuando hablamos de seguridad, casi siempre pensamos en "seguridad remota" o "seguridad de acceso por la red" pero en muchas ocasiones el mayor peligro es el acceso físico, es decir, directamente desde el propio equipo. ¿Cómo evitarlo? O al menos, poner todas las capas de seguridad posibles.

Interesantísimo artículo de Security By Default.

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.confy 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

Comentarios

diego:

estoy de acuerdo con luzbel. excelentes medidas de seguridad, pero por lo menos en mi caso prefiero no incorporarlas. nadie toca jamás mi pc, y aunque alguien quisiera entrar y lo lograra nada ganaria porque no oculto nada. ya cuando tenga una portatil que se vea vulnerable y con informacion sensible la hare una fortaleza, por ahora estoy bien asi

Sr. Luzbel:

Genial, la verdad es un gran aporte, la verdad es que no lo voy a utilizar, ya que en mi casa la PC la utilizo prácticamente yo solo, pero sería bueno difundir estas técnicas. Muchas Gracias.

Warning: INSERT command denied to user 'linuxhis_drupal'@'localhost' for table 'watchdog' query: INSERT INTO watchdog (uid, type, message, variables, severity, link, location, referer, hostname, timestamp) VALUES (0, 'php', '%message in %file on line %line.', 'a:4:{s:6:\"%error\";s:12:\"user warning\";s:8:\"%message\";s:298:\"UPDATE command denied to user &#039;linuxhis_drupal&#039;@&#039;localhost&#039; for table &#039;sessions&#039;\nquery: UPDATE sessions SET uid = 0, cache = 0, hostname = &#039;69.61.14.202&#039;, session = &#039;&#039;, timestamp = 1337761747 WHERE sid = &#039;7da5ad8cf2093ca20fd442e832077a41&#039;\";s:5:\"%file\";s:54:\"/home/linuxhis/public_html/portal/includes/session.inc\";s:5:\"%line\";i:68;}', 3, '', 'http://www.linuxhispano.net/portal/noticia/protecci%C3%B3n-f%C3%ADsica-para-consola' in /home/linuxhis/public_html/portal/includes/database.mysql.inc on line 128