Bastille


La Herramienta que permite reforzar la Seguridad de Linux

Bastille es una de las tantas herramientas de "hardening", significa que su propósito es generar reglas y políticas que sean implementadas para mejorar el nivel de seguridad de un sistema, está compuesta por un conjunto de scripts que trabajan en conjunto, lo que me gusta más de la herramienta es que no solo se encarga de mejorar ofrecer políticas para mejorar la seguridad sino que también busca educar al usuario a medida que se van ejecutando los scrtips que toman la información necesaria desde un sistema de preguntas y respuestas (lo entenderán más adelante).


Distribuciones

Es ofrecida por los repositorios de Red Hat, Fedora, SuSE, Mandriva, Debian y Gentoo, no obstante, para otras distribuciones es posible instalar la herramienta mediante el paquete de fuentes.


Argumentos utilizables con Bastille

Aunque todos los argumentos de Bastille los puedes obtener ejecutando bastille -h, por razones de conveniencia los colocaré acá:

Usage: Bastille [ [ -h | -b [-- ] | -c | -r | -x |-a [--] | -l ]
-i alternate config> ]

-b : use a saved config file to apply changes directly to system
-c : use the Curses (non-X11) GUI
-h : this help
-i : input alternate configuration file
-r : revert Bastille changes to original file versions(pre-Bastille)
-l : list the standard config file(s) (if any) that matches the last run config
--os version : ask all questions for the given operating system version.
e.g. --os HP-UX11.11
-x : use the Perl/Tk (X11) GUI
--assess / -a : run Bastille in assessment mode, generating a report and displaying
it in a browser
--assessnobrowser : run Bastille in assessment mode, generating a report with no
browser


Los argumentos hablan por si solos en su mayoría, tal vez el menos entendible de ellos sea el parámetro "--assess". Dicho parámetro viene de Assessment que es todo método de auditoría que se utiliza en un sistema para determinar su nivel de seguridad. Con este parámetro, Bastille generará un reporte muy básico basado en algunos servicios instalados en tu sistema y ejecutará el navegador predeterminado el cual mostrará un reporte que mayormente incluirá un conjunto de recomendaciones o tips que deberías tomar en cuenta para mejorar la seguridad de lo que tienes instalado en el sistema. El parámetro relacionado "--assessnobrowser" generará el mismo reporte solo que lo mostrará en la cónsola donde sea ejecutado Bastille y no en el navegador.

Uso de Bastille

La herramienta tiene dos interfaces disponibles, una basada en ncurses (cónsola) y otra basada en Tk (X11), ambas interfaces ofrecen el mismo nivel de funcionalidad y en la mayoría de los sistemas, a menos que sea ejecutado con el parámetro "-c", Bastille se ejecutará usando la interfaz Tk.

Ejecutar la herramienta es de lo más simple:

[nixlkp@root]# Bastille


Como es posible que en tu primer uso de la herramienta no quedes plenamente contento con los cambios realizados, el siguiente es un comando que tiene por finalidad deshacer todos los cambios hechos por la herramienta:

[nixlkp@root]# RevertBastille


Habrán notado que ambos comando usan mayúsculas en las primeras letras de cada palabra, sin embargo lo he colocado así porque es como sale en la documentación oficial , no obstante ambos comandos pueden ser ejecutados con todas las letras en minúsculas.

El questionario de Bastille en sistemas Linux

En algún momento al principio del artículo mencioné que Bastille es un conjunto de scripts que toman su información desde un set de preguntas y respuestas, y es así que la herramienta funciona. Cuando la ejecutas, luego de una pantalla de bienvenida e información sobre el proyecto, llegarás a una pantalla la cual está divida en grupos y funciones y a su vez, las funciones están dividas en preguntas relacionadas al grupo, algo similar a este esquema:

FilePermissions --> SUID --> Would you like to disable SUID for Mounting/
Unmounting?


FilePermissions es el grupo, SUID es una de las funciones que se pretende cambiar y finalmente la pregunta relacionada a esa función.

Cada pregunta es mostrada con una descripción de la función que se pretende cambiar y las implicaciones de seguridad que una respuesta afirmativa o negativa tendrá sobre esa función, es esto lo que hace genial a la herramienta ya que termina educando al usuario con recomendaciones básicas de seguridad y la forma en la que trabaja el sistema.

Lo que haré acá será indicar el grupo, la función, la pregunta y una pequeña descripción sobre lo que significa la función y la pregunta. No agregaré nada adicional ni tampoco hablaré de todas las preguntas ya que sería muy largo, no son dos preguntas o tres ;). Aún así cubriré la mayoría y las más importantes.

Grupo: FilePermissions.
Función: SUID.
Pregunta: Would you like to disable SUID for mounting and unmounting?
Descripción: SUID es un bit que permite a usuarios regulares utilizar funciones del sistema que normalmente deberían ser ejecutadas por root. En este caso, la pregunta es sobre si se desea deshabilitar tal bit a las funciones de montaje, contestando "si" a esta pregunta implicaría que cada vez que desees montar un cdrom o un pendrive, deberás hacerlo obligatoriamente como root.


Grupo: FilePermissions.
Función: SUID.
Pregunta: Would you like to disable SUID for Ping?
Descripción: Ping es un comando o utilidad que permite el enviar y recibir paquetes a un determinado servidor indicando a su vez información extra como el tiempo en el que se llevó a cabo la transacción, si se perdieron paquetes o no durante el envió, etc. Este comando normalmente es utilizado para determinar fallas de conexión, pero también es la principal herramienta para los DoSers (los que generar los aquetes DoS a un sistema). Contestando afirmativamente a esta pregunta obligaría al usuario tener que usar Ping como root.


Grupo: FilePermissions.
Funcion: Herramientas r-BSD
Pregunta: Would you like to disable the r-tools?
Descripción: Las herramientas r-BSD son aquellas como rlogin, rsh, rdist y similares. El problema con estas herramientas es que todas las transacciones son hechas en texto plano, es decir, la información no es enviada ni recibida de forma cifrada lo que representa un riesgo de seguridad si la transferencia es víctima de sniffing. Contestar afirmativamente a esta pregunta deshabilitaría el uso completo de las herramientas a todos los usuarios (incluyendo root) lo cual es recomendable tomando en cuenta que cada una de estas herramientas tiene actualmente equivalentes más seguras basadas en OpenSSL, PAM y similares.


Grupo: AccountSecurity.
Función: Herramientas r-BSD.
Pregunta: Should Bastille clear-text r-protocols that use IP-based authentification?
Descripción: La diferencia de esta pregunta a la anterior es que se refiere al uso de r-tools a nivel de servidor, es decir, permitir que se ejecute por ejemplo rsh en tu sistema y de esta forma poder acceder remotamente a él con rlogin. La misma razón que se describió en la pregunta anterior es por la que deberías desactivar estas herramientas a nivel de servidor.


Grupo: AccountSecurity.
Función: Password Aging.
Pregunta: Would you like to enforce password aging?
Descripción: De forma predeterminada en la mayoría de las distribuciones, toda clave creada deberá ser cambiada en 99.999 días, este es un límite bastante elevado y por consiguiente usuarios con esta configuración nunca necesitan cambiar las claves. En sistemas empresariales con un grupo cambiante de usuarios es normal que se implemente un sistema de claves cambiante con un límite menor, es como cuando ven una de esas pelis como Mission Impossible y resulta que la clave del mainframe de Langley se cambia cada 12 horas o algo así. La idea de un límite bajo es evitar el riesgo de que la clave sea comprometida. En caso de ser afirmativa la respuesta, Bastille cambiará el límite de 99.999 días a 60.


Grupo: AccountSecurity.
Función: TTY Access.
Pregunta: Should we disallow root login on tty's 1-6?
Descripción: Las tty es lo que se conoce como cónsolas virtuales, de forma predeterminada, se puede acceder como root a cualquiera de estas simplemente colocando como nombre de usuario root y luego colocando la clave. Contestar afirmativamente a esta pregunta obligará a que sea necesario hacer login primero como usuario normal para poder hacer login luego como root. La idea que persigue Bastille en este caso es buena ya que si se viera la clave de root comprometida, un atacante no podría hacer login directamente con esa cuenta sino que tendría que tener acceso a la clave de un usuario regular también para poder usar la cuenta de root.


Grupo: Inetd
Función: TCP Wrappers and Xinetd
Pregunta: Would you like to set a default-deny on TCP Wrappers and Xinetd?
Descripción: Inetd y su posterior implementación mejorada Xinetd, son considerados super servidores, estos servicios se usan en muchas distribuciones como un punto de control para definir el acceso a otros servicios configurados bajo ellos, por ejemplo, podrías ejecutar Apache o PureFTPD como un servidor bajo xinetd lo que implicaría que todas las peticiones hechas hacia Apache o PureFTPD serían recibidas primero por xinetd y generaría respuestas en base a los permisos otorgados por xinetd a los otros servidores. El problema con inetd, tcp wrappers y xinetd es que en muchas distribuciones vienen con el acceso habilitado para permitir conexiones entrantes de forma predeterminada, en lo que respecta a seguridad, es un problema ya que muchos usuarios son descuidados y no se dan cuenta que tienen un servidor ftp activo en el puerto 21 esperando recibir conexiones. A esto, Bastille generará una política de denegación predeterminada, significa que ningún servidor configurado bajo inetd, tcp wrappers o xinetd podrán recibir peticiones desde afuera, en caso de ser necesaria tal cosa, cada servicio deberá configurarse acordemente.


Grupo: Inetd.
Función: Telnet.
Pregunta: Should Bastille ensure that telnet service doesn't run on this system?
Descripción: Telnet es un protocolo para conexiones remotas y tiene el mismo problema de las herramientas r-BSD, toda la información viaja en forma de texto plano. Esta pregunta se refiere específicamente a telnet como servidor, no a las herramientas telnet. Tener telnet como un servidor activo en tu sistema implica a que un atacante puede fácilmente intentar hacer sesión en tu sistema usando cualquier aplicación telnet. Contestar afirmativamente a esta pregunta deshabilitaría tal acceso, pero las herramientas telnet de cliente (las que uses tú para hacer telnet a otros sistemas) seguirán funcionando normalmente.


Grupo: Inetd
Función: FTP
Pregunta: Should Bastille ensure inetd's FTP service doesn't run on this system?
Descripción: FTP tiene el mismo problema que telnet y las herramientas r-BSD, toda la información viaja en texto plano. FTP no se diseñó para ser seguro (así como pasa con el protocolo TCP) y de ahí el problema del texto plano. Actualmente hay implementaciones más seguras al protocolo FTP basadas en SSL y TLS, tal vez una de las más populares sea sftp, por ende, deberías contestar afirmativamente a esta pregunta.


Grupo: ConfigureMiscPAM.
Función: System usage resource limits.
Pregunta: Would you like to put limit on system resource usage?
Descripción: Esta opción se ofrece como un método para evitar los ataques DoS. Como sabrán, en los sistemas basados en Unix, todo servicio se ejecuta bajo el nombre de un usuario virtual (como el usuario "nobody" de Apache), muchos ataques DoS buscan aprovecharse de esto utilizando a dichos usuarios virtuales para ejecutar múltiples procesos a la vez y así tumbar a un servidor. Contestar afirmativamente a esta pregunta configurará el sistema para que cada usuario virtual no puede ejecutar más de 150 procesos a la vez lo que es suficiente para un sistema común pero no tanto como para generar un DoS (dependiendo claro de los recursos del sistema).


Grupo: ConfigureMiscPAM.
Función: Users account console access.
Pregunta: Should we restrict console access to a small group of users accounts?
Descripción: Cuando un usuario hace login en un cónsola, automáticamente el sistema le otorga acceso a varios servicios, qué tantos depende de configuraciones extras a la cuenta, pero un ejemplo sencillo es el montaje de dispositivos. Si un usuario llamado "k13" tiene permisos para montar dispositivos sin necesidad de usar la cuenta de root, dichos permisos serán otorgados cuando haga login en la cónsola. De forma predeterminada Linux utiliza un set de permisos distribuidos de forma equitativa para cada cuenta de usuario que sea creada. En este caso lo que Bastille ofrece es la posibilidad de limitar la cantidad de cuentas que pueden hacer login en un sistema. En caso de contestar afirmativamente esta pregunta la siguiente pregunta será mostrada.


Grupo: ConfigureMiscPAM.
Función: Accounts Settings.
Pregunta: Which accounts should be able to login at a console?
Descripción: Como dije antes, esta pregunta sólo se mostrará si contestaron afirmativamente a la anterior, en dicho caso, en esta pregunta deberán colocar los nombres de las cuentas que tendrán permisos para hacer login en una cónsola separando cada nombre de cuenta por un espacio, ejemplo: root k13 lkp nix


Grupo: Sendmail.
Función: Daemon mode.
Pregunta: Would you like to stop sendmail running in daemon mode?
Descripción: Sendmail es un servicio encargado de procesar peticiones de correo, sean estas entrantes o salientes (recibir o enviar). De forma predeterminada sendmail es ejecutado en daemon mode, lo que significa que desde que se inicie el sistema hasta que se detenga, el servicio estará procesando peticiones de correo. Esto es un problema de seguridad porque muchos usuarios no usan este servicio y nisiquiera se han dado cuenta que se está ejecutando lo que hace que sea muy fácil para muchos hacer cosas como smtp spoofing. Si esta pregunta se responde afirmativamente, sendmail será configurado para no ejecutarse en daemon mode y a su vez se configurará en un cron que cada cierto tiempo se ejecutará para procesar las colas de peticiones relacionadas al envío de correo. Si tienes un mail server obviamente deberás contestar que "No" a esta pregunta.


Grupo: Apache.
Función: Bind Apache.
Pregunta: Would you like to bind the Web server to listen only to the localhost?
Descripción: Bind es el proceso mediante el cual se "enlaza o liga" un servicio a una determinada dirección IP o nombre de host, en este caso lo que se busca es si debería configurar el servidor Apache para recibir sólo aquellas peticiones que se originen en la dirección 127.0.0.1 o localhost, evitando así un posible punto de acceso a tu sistema. Esto es útil solo para aquellos que hagan desarrollo a nivel a local y utilicen para tal fin el servidor Apache, aquellos que tengan un web server que deberá ser accedido desde fuera obviamente deberán contestar "No" a esta pregunta.


Grupo: Firewall.
Función: Packet filtering script.
Pregunta: Would you like to run the packet filtering script?
Descripción: Este es el último grupo en ser configurado mediante Bastille y lo que ofrece es la posibilidad de utilizar un script para generar reglas de firewall. Este script solo tiene soporte para el IPChains del kernel 2.2 y para Iptables del kernel 2.4 (En caso de que un kernel 2.4 no tenga activo el soporte de iptables se usará IPChains). Este script puede ser problemático para los que utilicen kernels 2.6.x sin embargo puede utilizarse como punto de partida y luego ser modificado posteriormente para adaptarse mejor a las características del kernel. Contestar afirmativamente a esta pregunta generará posteriores preguntas que ayudarán al script a crear las reglas necesarias para el firewall (quienes pueden acceder al sistema desde la red, qué protocolos se pueden servir, qué se colocará en los logs referentes a los procesamientos de acceso, etc.)



Todas las funciones que busca configurar Bastille se pueden hacer de forma manual, Bastille lo que ofrece es la posibilidad de hacer todo más sencillo. Por otra parte, Bastille no puede cubrir cada servicio que tu sistema pueda tener, esto implica que si tienes activos servicios como Bind9 o vsftpd, es tu trabajo buscar la información adecuado para asegurarte de que dichos servicios se estén ejecutando de forma segura.

Bastille no es la única herramienta de "hardening" para Linux, en todo caso, es la más sencilla. Otras herramientas conocidas son AppArmor, GRSecurity (Hardening a nivel del kernel), y por supuesto, hay distribuciones ya hechas que implementan muchas políticas de seguridad, normalmente tienen el mismo nombre de la distribución seguido de la palabra Hardened (ejemplo: Gentoo Hardened) y otra muy buena opción es Engarde Linux.