Truco Linux: Cómo comprobar si somos vulnerables al bug de BASH

Siendo sin duda el asunto más importante del año en cuestión de seguridad y sistemas informáticos, he pensado en seguir aportando mi granito de arena a luchar contra el bug de BASH y por ello quiero dedicar el truco Linux de esta semana a explicar cómo podemos comprobar de forma periódica si somos vulnerables a Shellshock o a alguna otra vulnerabilidad relacionada que pueda surgir en el futuro. Para ello vamos a utilizar un fantástico script escrito por Hanno Böck y que publica en su repositorio público de GitHub.

bashcheck, que así se llama el script, realiza un serie de comprobaciones en el sistema en el que se ejecuta para analizar si sufre de alguna de las 6 vulnerabilidades publicadas a fecha de este artículo. Veamos cómo instalar el script en nuestros sistemas, mantenerlo actualizado y ejecutarlo periódicamente para que nos informe por email de si alguno es vulnerable o no.

Empezamos con la instalación de bashcheck. Como ya he dicho, el proyecto se encuentra alojado en un repositorio de GitHub, lo que nos podría hacer pensar que la opción más directa para descargar el script sea hacer uso de Git. Pero teniendo en cuenta que sólo vamos a descargar un fichero, que Git no suele venir instalado de serie en las distribuciones Linux más populares y que no es precisamente un software fácil de utilizar sin experiencia previa, creo que es mejor utilizar alguna herramienta más sencilla pero potente que sí esté ya instalada en nuestro Linux y que nos evite el tener que «contaminar» nuestro sistema con la instalación de un software que va a tener un uso tan marginal.

Para estos casos yo prefiero utilizar Wget, el cual permite descargarse un fichero sólo si ha sido actualizado. Sin embargo, GitHub no nos lo va a poner fácil en este sentido, ya que ni nos deja descargarnos un único fichero a nuestra elección sino todo el repositorio completo, ni sirve la información temporal necesaria como para que Wget o cualquier otra herramienta pueda comprobar si efectivamente el fichero disponible es más moderno que el que ya tenemos descargado. Por ello vamos a tener que sortear estos obstáculos a través del siguiente script que he preparado para la ocasión:
{code type=php}
#!/bin/bash
#
# descargar_bashcheck.sh
# Descarga bashcheck desde GitHub e instala si es una nueva version
# 2014 (C) Activa Sistemas
# Este script se distribuye bajo licencia GPL
#
STAMP=$(date +%Y-%m-%d)
echo «Descargando bashcheck…»
wget –quiet https://github.com/hannob/bashcheck/archive/master.zip -O /tmp/bashcheck_$STAMP.zip
unzip -o -q -j /tmp/bashcheck_$STAMP.zip bashcheck-master/bashcheck -d /usr/local/tmp
rm /tmp/bashcheck_$STAMP.zip
diff -q /usr/local/tmp/bashcheck /usr/local/bin/bashcheck 2> /dev/null
if [ $? != 0 ]
then
echo «Actualizando bashcheck…»
mv /usr/local/tmp/bashcheck /usr/local/bin/bashcheck
chmod 755 /usr/local/bin/bashcheck
chown root.root /usr/local/bin/bashcheck
echo «Nuevo bashcheck listo para su uso»
else
echo «No es necesario actualizar bashcheck»
fi
{/code}

Guardamos el código en un fichero que llamaremos descargar_bashcheck.sh, lo almacenamos en /usr/local/bin (donde deben ir las herramientas propias que desarrollemos) y le otorgamos permisos de ejecución:

# chmod 755 /usr/local/bin/descargar_bashcheck.sh

Lo ejecutamos por primera vez para comprobar que todo es correcto y que se descarga la última versión disponible de bashcheck:

# /usr/local/bin/descargar_bashcheck.sh
Descargando bashcheck...
Actualizando bashcheck...
Nuevo bashcheck listo para su uso
# ls -l /usr/local/bin/bashcheck
-rwxr-xr-x 1 root root 2889 oct 13 10:48 /usr/local/bin/bashcheck

El último paso es asegurarnos de que se mantiene actualizado y que se ejecuta diariamente para avisarnos de eventuales vulnerabilidades. Para ello, programamos un par de tareas con cron. Aunque el usuario root cuenta con su propia lista de tareas programadas, personalmente prefiero dar de alta las tareas generales del sistema en el fichero /etc/crontab, en el que insertaremos las siguientes líneas:

# bashcheck
00 07 * * * root /usr/local/bin/descargar_bashcheck.sh
30 07 * * * root /usr/local/bin/bashcheck | mail -s "Resultado analisis bashcheck" alguien@ejemplo.com

Con esto habremos programado la ejecución diaria de ambas tareas a las 7:00 y las 7:30, respectivamente, y enviaremos por email el resultado de bashcheck a la dirección que queremos. Os dejo como ejercicio hacer que bashcheck sólo mande el email si el resultado del test es positivo, es decir, se ha encontrado una vulnerabilidad en el sistema.

Para el que tenga a su cargo un buen número de sistemas y se pregunte cómo copiar descargar_bashcheck.sh y modificar el crontab en cada uno de manera automática y con el menor esfuerzo posible, le diré que la mejor manera es a través de un buen software de gestión automatizada de sistemas, como Chef, Ansible, Salt o, mi favorito, Puppet. Evidentemente, una herramienta así también nos sirve para aplicar parches si bashcheck nos avisa de una nueva vulnerabilidad.

Para terminar, una anécdota: tanto bashcheck como descargar_bashcheck.sh están escritos en BASH 😉 ¡Hasta el truco de la semana que viene!

1 comentario en “Truco Linux: Cómo comprobar si somos vulnerables al bug de BASH

  1. Pingback: Recomedaciones Linux de la semana (17/10/2014) | El blog de Activa Sistemas

Los comentarios están cerrados.