|
G A C E T
A D E L I N U X |
| Investigando
el "Saludo de los tres dedos" Por Dean Wilson Traducción al español por José Ramón Alonso Tapia
|
"La máquina sólo está ejecutando una
aplicación, está totalmente actualizada y tiene un cortafuegos que
rechaza el servicio por defecto."
"¿Qué pasa si hago Ctrl-Alt-Delete?"
Una de las premisas en seguridad de computadoras es que es casi imposible evitar ataques a una máquina si el posible atacante tiene acceso físico a ella. Aunque no podemos tratar todos los casos, podemos hacer algunos pequeños cambios para evitar la más obvia y descarada intromisión en nuestra máquina. Así pues, este documento explicará cómo evitar que una persona sin autorización reinicie sus computadoras.
Cualquiera que usa un teclado conectado a una máquina Linux puede presionar Control-Alt-Delete para reiniciarla sin introducir un nombre de usuario o una contraseña. Incluso las máquinas Windows piden un registro válido (bien el del usuario actual o bien uno con privilegios de administrador) para reiniciar una máquina en ejecución que tiene bloqueada la pantalla. Esto no tiene que ser por malicia, es normal que un usuario de Windows NT o Windows 2000 presione Control-Alt-Delete durante una sesión de X-Windows para bloquear la computadora o abrir el gestor de tareas y en vez de eso, vean el terrible mensaje "The system is going down for reboot NOW!" (¡El sistema se va a reiniciar AHORA!), indicando que su trabajo desaparece mientras la computadora se apaga.
En muchas distribuciones de Linux la combinación de teclas Control-Alt-Delete (a menudo llamada "ctrl-alt-del" o "el saludo de los tres dedos") está preconfigurada para reiniciar la máquina. Aunque esto puede ser aceptable para un sólo usuario en casa, es un riesgo innecesario para las estaciones de trabajo de oficinas o incluso para los servidores, por un hecho importante: este proceso no necesita autentificación.
Para evitar este comportamiento destructivo, vamos a capturar los
sucesos "Control-Alt-Delete" y deshabilitar esta "característica"
sustituyendo la acción por defecto con un archivo de guiones creado por
nosotros. También añadiremos una funcionalidad que capture y registre
cualquier intento de reinicio. Para hacer esto, añadiremos un fichero
de comandos al sistema y cambiaremos el fichero de configuración '/etc/inittab',
de forma que sea invocado nuestro propio gestor y luego se añada un
pequeño registro de rotación (si se ejecuta 'logrotate').
El archivo de comandos bash que hace casi todo el trabajo se llama 'audit_cad.sh'
y está aquí. Se puede
invocar de dos maneras. La primera consiste en llamarlo con el
argumento '-c'. De este modo el archivo de comandos
comprobará que todas sus dependencias externas existen y se pueden
ejecutar. Esta es la mejor forma de asegurarse de que el sistema
satisface todos los prerrequisitos.
Si falla alguna de las pruebas, aparecerá un error con el nombre del fichero binario sospechoso y el archivo de comandos seguirá ejecutándose hasta que haya terminado todas las comprobaciones. Si alguna de estas comprobaciones falla, el archivo de comandos devolverá el código de salida '1' al terminar su ejecución. Los ficheros binarios involucrados son los siguientes:
De todos estos, el único fichero que quizás se necesite editar
manualmente es basename ,que suele estar en el directorio '/usr/bin'
o en el '/bin' . Normalmente, cuando se instale el archivo
de comandos, éste se ejecuta en modo de comprobación para asegurarse de
que se ejecuta correctamente y no falta nada. Como este archivo se
ejecuta en modo superusuario, hay que asegurarse de dar los permisos
apropiados para que sólo el superusuario pueda acceder al fichero.
Idealmente, los permisos deberían tener estos valores -rwx------,
esto se puede hacer con el siguiente comando: 'chmod 0700
audit_cad.sh'.
La segunda manera de llamarlo es sin argumentos; en este modo se
registra una entrada en dos ficheros: en 'syslog' (con unos
niveles y unas facilidades especificados por el usuario) y en un
fichero externo, que por defecto es '/var/log/shutattempt'.
En este documento, el archivo de comandos se llama 'audit_cad.sh'
y está en el directorio '/usr/local/sbin/'. Para cambiar
una de estas dos opciones o cualquier otra, simplemente se abre el
archivo con un editor cualquiera y se baja hasta la línea
correspondiente a esa opción. Todas las opciones de configuración están
comentadas.
Ahora que hemos terminado con el archivo de comandos, vamos a editar
el gestor por defecto para Ctrl-Alt-Delete en el fichero '/etc/inittab'
. La línea que nos interesa le dice a 'init' que capture
los sucesos "Control-Alt-Delete" y que ejecute un comando específico
cuando se produzca uno. En la mayoría de las distribuciones el
identificador será 'ca' y la línea será similar a ésta: "ca:12345:ctrlaltdel:/sbin/shutdown
-t1 -a -r now" Lo más importante de esta línea es el último
campo, que empieza con '/sbin/shutdown'. Para cambiar el
comportamiento del sistema, se puede editar este comando y hacer que
apunte a nuestro archivo 'audit_cad.sh' . Si se han
seguido todos los ejemplos, el camino absoluto será '/usr/local/sbin/audit_cad.sh'
Una vez que se ha hecho el cambio anterior, hay que decir al proceso 'init'
que 'inittab' ha cambiado. La forma más fácil de hacerlo es
ejecutar 'telinit q' , lo cual origina que 'init'
relea su fichero de configuración sin tener que reiniciar.
Ahora ya podemos probar los cambios que hemos hecho; antes de hacer esto, recomiendo cerrar todas las aplicaciones que no sean absolutamente necesarias para el sistema, tales como los entornos gráficos y los programas de edición. Si hemos cometido un error al seguir los ejemplos, el sistema está a punto de reiniciarse ¡y es mejor estar seguro que enfadarse con el autor! Cuando se esté listo, se presiona Ctrl-Alt-Delete y no debería pasar nada en absoluto.
Si el sistema está todavía en funcionamiento, entonces se comprueban
el fichero de registros del sistema (normalmente es '/var/log/messages'
o '/var/log/syslog') y el fichero externo de registros que
especificamos en el fichero 'audit_cad.sh' para asegurarse
de que no hubo problemas en el ingreso. Si el sistema se ha reiniciado,
compruebe cada paso e inténtelo otravez.
Una vez que funciona todo lo anterior, merece la pena ir más allá y
añadir algún tipo de procesamiento automático de los registros. Esto se
puede hacer usando 'SWATCH' o 'logwatch' para
enviar alertas automatizadas; o añadiendo rotación de registros para
controlar el tamaño del fichero. A continuación hay un sencillo
ejemplo, que asume que tiene el comando 'logrotate' en su
máquina (las últimas distribucines de Redhat y Debian lo tienen). Tambén aquí.
daily
rotate 7
compress
delaycompress
/var/log/shutattempt {
nomail
notifempty
missingok
create 0600 root root
}
Para añadirlo a la lista de procesamiento de 'logrotate',
tan solo hay que añadir un fichero llamado audit_cad a su
directorio 'logrotate' , que suele estar en '/etc/logrotate.d'
, con el código de arriba u otro similar y así no hay que preocuparse
más porque la lista ocupe demasiado espacio en el disco.
Aunque esta técnica registrará correctamente cualquier intento de
reiniciar la máquina, hay que destacar dos puntos. El primero es la
contabilidad, pues el archivo de comandos presentado no puede, por si
solo, determinar quién intentó tomar el control de la máquina. Como no
hay ninguna autentificación para los ingresos, 'init', el
programa que realmente gestiona el suceso Ctrl-Alt-Delete, se ejecuta
como superusuario. En consecuencia, cualquier intento de capturar el
nombre de usuario invocado devolverá el superusuario ("root")'.
Haciendo algunos pequeños cambios en 'audit_cad.sh' , se podría
capturar la salida de w o who para los
registros, pero esta información no es tan útil como se podría pensar,
pues estos comandos sólo siguen la pista a los usuarios válidos que han
dado sus claves para ingresar. Sin embargo, cualquiera que vaya hasta
el teclado y presione Control-Alt-Delete no necesita introducir ninguna
clave, así que ¡la persona que realmente usó el teclado es la única que
no se registró!
El segundo punto es considerar si este archivo de comandos se quiere
ocultar. Si se es astuto y se quiere esconder, se puede llamar 'shutdown'
y guardarlo en un directorio extraño.
Para más información sobre el formato y el propósito de 'inittab'
se puede ver 'man 5 inittab' y para una lista completa de
las opciones de 'telinit' se puede leer 'man 8
telnint'. Si se desconoce el comando 'logrotate' ,
entonces su página en el manual es un buen punto de partida: 'man
8 logrotate'.
Dean
Wilson es (esta semana) un administrador de sistemas y un colaborador
ocasional de esta revista; desde www.unixdaemon.net