26 febrero 2008

Bastionado con Bastille

La gestión de la seguridad local de los equipos de una organización puede ser extremadamente costosa. Algunas organizaciones están constantemente poniendo en marcha nuevos equipos, ya sea para su uso como PC de trabajo o como servidor. En teoría, el Departamento de Seguridad debería supervisar la creación y configuración de estos nuevos equipos pero en la práctica estos departamentos suelen estar saturados de trabajo y carecen de personal disponible para asignarlo a esta tarea. Es aquí donde entra en juego el uso de scripts que aseguren una correcta configuración del equipo antes de pasarlo a producción. El departamento de Seguridad le pasa estos scripts al de Sistemas y le urge a aplicarlo justo antes de la puesta en producción del equipo. De esta manera se automatiza la tarea y se gana en eficiencia.

Una opción es que el diseñemos nosotros mismos estos scripts, la otra es no reinventar la rueda y utilizar lo que otros ya han creado. En este sentido Bastille es una de las aplicaciones más reconocidas. A lo largo de este artículo explicaremos su uso.

Si su sistema operativo es Ubuntu la instalación de Bastille es extremadamente sencilla por estar incluida en los repositorios por defecto de esta distribución:
dante@dante-desktop:~$ sudo aptitude search bastille [sudo] password for dante: c bastille - Security hardening tool dante@dante-desktop:~$ sudo aptitude show bastille Paquete: bastille Estado: sin instalar Versión: 1:2.1.1-13 Prioridad: opcional Sección: universe/admin Desarrollador: Ubuntu MOTU Developers Tamaño sin comprimir: 1544k Depende de: perl5, libcurses-perl Recomienda: whois, psad, bind9-host | host Sugiere: acct, perl-tk (>= 1:800.011) | libgtk-perl Tiene conflictos con: libcurses-widgets-perl Descripción: Security hardening tool Bastille Linux is a security hardening program for GNU/Linux. It increases the security of the system either by disabling services (if they are not necessary) or by altering their configuration. If run in the (recommended) Interactive mode, Bastille educates the administrator during the hardening process: in each step of the process, extensive descriptions are given of what security issues are involved. Each step is optional. If run in the quicker Automated mode, Bastille hardens the system according the profile chosen. Bastille Linux works for several Linux distributions. This package has been specifically modified to work for Debian GNU/Linux. Homepage: http://www.bastille-linux.org/ dante@dante-desktop:~$ sudo aptitude install bastille (...) Se instalarán los siguiente paquetes NUEVOS: bastille libbit-vector-perl libcarp-clan-perl libcurses-perl libdate-calc-perl libnetwork-ipv4addr-perl libunix-syslog-perl psad whois 0 paquetes actualizados, 9 nuevos instalados, 0 para eliminar y 107 sin actualizar. Necesito descargar 0B/1355kB de ficheros. Después de desempaquetar se usarán 6697kB. ¿Quiere continuar? [Y/n/?] Y (...) dante@dante-desktop:~$
Una vez instalado, ya se puede ejecutar Bastille. Se recomienda ejecutarlo en modo interactivo, de tal manera que el programa le vaya haciendo una serie de preguntas con el fin de averiguar el uso que se le piensa dar al equipo. En función de las respuestas, Bastille configurará el equipo de la manera más segura posible. Dichas preguntas se formularán a través de un sencillo interfaz basado en ncurses y por tanto fácilmente visualizable a través de una sesión de ssh. Gracias a Bastille bastará con que el departamento de Seguridad le de al de Sistemas una "chuleta" donde se diga qué responder a cada una de las preguntas de tal manera que ellos mismo puedan ejecutar Bastille en cada uno de los sistemas Linux que vayan instalando.

Junto a cada pregunta Bastille incluye una detallada explicación acerca del motivo de la cuestión y lo que se hará en función de la respuesta que se le de. Aún así a continuación se mostrarán las preguntas que realiza Bastille y seintentará dar una explicación sencilla:
  1. Would you like to set more restrictive permissions on the administration utilities? [N] ---> Útil en máquinas con múltiples cuentas de usuario. Hay utilidades que, en general, sólo son ejecutadas por el administrador de la máquina aunque por defecto los usuarios habituales tienen acceso a ellas, al menos a parte de sus funcionalidades (¿que necesidad tiene el usuario de ejecutar herramientas de administración como top o ifconfig?). Para evitar los posible problemas de seguridad a los que podría dar lugar esto Bastille puede cambiar los permisos de las mencionadas aplicaciones con el fin de asegurar que sólo el administrador pueda ejecutarlas. Si usted es el único usuario de la máquina no tiene sentido que habilite esta opción. Si cuenta con otros usuarios que acceden a ella (por ejemplo para subir fichero a sus carpetas web) sí que sería interesante añadir esta opción.
  2. Would you like to disable SUID status for mount/umount? [Y] ---> En general, los programas que tienen el atributo SUID son muy peligrosos ya que aunque pueden ser invocados por usuarios normales, se ejecutan con privilegios de superusuario. Esto no entrañaría ningún riesgo si estos programas se limitasen a hacer aquello para lo que fueron diseñados, el problema está en que es relativamente habitual que se descubran bugs en estas aplicaciones que permitan "engañarlas" para que hagan cosas con privilegios de superusuario. Si dice que śi en esta pregunta Bastille se asegurará de que el comando mount/umount sólo pueda ser ejecutado por aquellos que conozcan la contraseña de superusuario, reduciendo así la exposición al riesgo del equipo.
  3. Would you like to disable SUID status for ping? [Y] ---> Similar al anterior.
  4. Would you like to disable SUID status for at? [Y] ---> Similar al anterior.
  5. Should Bastille disable clear-text r-protocols that use IP-based authentication? [Y] ---> Las llamadas r-tools son un conjunto de utilidades para la administración remota de equipos. El problema con ellas es que no usaban encriptación para el intercambio de datos y usaban las direcciones IP como método de autentificación. Esta carencia de confidencialidad y la facilidad para falsificar las direcciones IP de origen han llevado a que se desaconseje el uso de las r-tools y se usen en su lugar alternativas más seguras.
  6. Would you like to enforce password aging? [Y] ---> Habilita un tiempo de caducidad de las contraseñas de 180 días. Antes de que pase ese tiempo se pedirá al usuario que cambie su contraseña. Si se cumple el plazo y el usuario no ha cambiado su contraseña se procederá a bloquear su cuenta hasta que el administrador la vuelva a activar.
  7. Would you like to restrict the use of cron to administrative accounts? [Y] ---> Existen determinados ataques que pueden sacar provecho de la capacidad de los usuarios para utilizar la herramienta cron con el fin de lanzar tareas diferidas según una planificación determinada. Si los usuarios de un equipo no necesitan lanzar tareas planificadas, lo mejor es dejar que Bastille les restrinja el uso de cron, de tal manera que sólo esté disponible para el administrador.
  8. Do you want to set the default umask? [Y] ---> El umask son los permisos por defecto que se le ponen a los ficheros que vaya creando. Lo más aconsejable es dejar que Bastille lo fije a un valor seguro.
  9. What umask would you like to set for users on the system? [077] ---> Continuación de la cuestión anterior, lo mejor es usar la opción 077 de tal manera que se asegure tanto la confidencialidad de nuestros archivos como su integridad impidiendo que cualquiera que no sea sea su dueño pueda leerlos o escribir sobre ellos.
  10. Should we disallow root login on all ttys? [N] ---> Esta opción es extremadamente útil con equipos a los que se pueda acceder por SSH sin limitación en cuanto a la IP de origen, ya que suelen ser víctimas de ataques de diccionario desde bots de Internet. Estos bots lo primero que prueban es el usuario root, omnipresente en todos los servidores Unix/Linux. Sin embargo si se activa esta opción, Bastille se ocupará de que la única manera de acceder a root sea conectándose con un usuario normal y luego haciendo "su -". La ventaja es que de esta manera el bot se ve obligado a descubrir no sólo una contraseña, sino también el nombre del usuario dado de alta para conectarse. Lo más recomendable por tanto es activar esta opción.
  11. Would you like to password-protect the GRUB prompt? [N] ---> En caso de que un intruso tenga acceso físico al equipo puede obtener una consola de root rebotando el equipo y pasándole unos parámetros determinados al GRUB. Para evitar esto lo mejor es activar esta opción de tal manera que aunque se pueda reiniciar el equipo y arrancarlo normalmente, sólo se puedan pasar parámetros al GRUB previa autentificación con una contraseña.
  12. Would you like to disable CTRL-ALT-DELETE rebooting? [N] ---> Esta secuencia permite a un usuario con acceso físico a la máquina rebotarla limpiamente. A primera vista podría ser interesante decirle a Bastille que deshabilite esta secuencia de teclado. Sin embargo habría que plantearse que el que haga uso de esta secuencia de teclado puede acceder también al enchufe del equipo, llegado a este punto el intruso va a reiniciar el equipo por las buenas o por las malas ¿de verdad interesa forzarle a hacer un reinicio sucio que puede dañar el disco duro?. El mismo Bastille recomienda no deshabilitar esta secuencia de teclado.
  13. Would you like to password protect single-user mode? [Y] ---> El modo mono-usuario sirve para arrancar el sistema de manera que única y exclusivamente pueda acceder el superusuario. Es un tipo de acceso que se utiliza en casos de emergencia, como por ejemplo cuando no se recuerda la contraseña de root ya que en este modo no suele solicitarse autentificación... claro, esto supone un arma de doble filo que puede permitir el acceso no autorizado al sistema. Si se activa esta opción de Bastille se evitará esta situación solicitando contraseña al acceder por este modo... pero cuidado: ¡no se olvide de recordarla o ya si es cierto que no habrá manera de recuperarla!.
  14. Would you like to set a default-deny on TCP Wrappers and xinetd? [N] ---> Los servicios de inetd están permitidos por defecto, si se activa esta opción Bastille cambiará la configuración para que lo que se haga sea una denegación por defecto.
  15. Should Bastille ensure the telnet service does not run on this system? [y] ---> El servicio de telnet está obsoleto y supone un riesgo grave para la seguridad del sistema al transmitir los datos en claro. Lo recomendable en la actualidad es usar SSH que permite acceder a la consola pero a través de un canal cifrado.
  16. Should Bastille ensure inetd's FTP service does not run on this system? [y] ---> Lo dicho para el servicio de telnet es igualmente válido para el de FTP. En este caso lo mejor es sustituirlo por SCP o SFTP.
  17. Would you like to display "Authorized Use" messages at log-in time? [Y] ---> Esta opción habilitará un mensaje que aparecerá al comienzo de las sesiones de consola. Este mensaje advertirá de que se está accediendo a un sistema restringido y que cualquier acceso no permitido puede ser perseguido por vía legal. Posteriormente podremos editar dicho mensaje para adecuarlo convenientemente a lo que diga el Departamento Jurídico.
  18. Who is responsible for granting authorization to use this machine? ---> Esta una pregunta dirigida a redactar el mensaje mencionado antes. En este caso se trata de identificar al responsable del equipo encargado de autorizar los diferentes accesos a él.
  19. Would you like to disable the gcc compiler? [N] ---> Activar esta opción evitará que se pueda utilizar el compilador de C en este equipo lo que hará la vida mucho más difícil a aquellos intrusos que obtengan acceso al sistema y quieren descargarse en él el código fuente de herramientas de ataque con el fin de compilarlas in-situ. Además, anular el compilador de C no debería suponer un problema en equipos, como por ejemplo cortafuegos perimetrales, en los que no se tiene pensado realizar ningún tipo de desarrollo.
  20. Would you like to put limits on system resource usage? [N] ---> Permite establecer ciertos límites al número de procesos y memoria usados por usuario con el fin de evitar ataques de denegación de servicio.
  21. Should we restrict console access to a small group of user accounts? [N] ---> Se trata de denegar el acceso a la consola excepto a un grupo determinado de cuentas.
  22. Would you like to add additional logging? [Y] ---> Configura el equipo para que incremente el número de fuentes de log y para que muestre algunos de ellos en las terminales 7 y 8 (accesibles mediante Alt+F7 y F8 respectivamente).
  23. Would you like to disable printing? [N] ---> Si el equipo no cuenta con una impresora, dejar el demonio de impresión activado es dejar una puerta abierta al desastre.
  24. Would you like to install TMPDIR/TMP scripts? [N] ---> Activar esta opción hará que Bastille instale unos scripts en las cuentas de los usuarios que configuren las variables TMPDIR y TMP de tal manera que utilicen directorios de ficheros temporales completamente individuales, en vez de que todos usen el /tmp lo que puede ser extremadamente peligroso en entornos multiusuarios.
  25. Would you like to run the packet filtering script? [N] ---> Activa el cortafuegos nativo de Linux. Activarlo es lo más seguro pero tenga en cuenta que tendrá que configurarlo localmente (si lo hace en remoto puede que se "corte las manos") bien a través de la línea de comandos o bien mediante el GUI correspondiente. Así que tendrá que documentarse adecuadamente antes de activarlo.
  26. Are you finished answering the questions, i.e. may we make the changes? ---> Y por fin llegamos al final del camino. Si está seguro de la configuración especificada responda afirmativamente para que se apliquen los cambios en su sistema.