Cómo comprobar si nuestro equipo Linux está afectado por la vulnerabilidad GHOST

Escrito por Sergio De Luz
GNU Linux
3

Ayer os contamos todos los detalles sobre la vulnerabilidad GHOST, un fallo de seguridad que se introdujo dentro del kernel con el paquete glibc-2.2, lanzado el 10 de noviembre del 2000. En esta entrada tenéis todos los detalles sobre este nuevo fallo de seguridad que afecta a todas las versiones de Linux que tienen instalado este paquete, aunque actualmente la mayoría de ellas han actualizado este paquete y por tanto están a salvo. Ahora os vamos a explicar cómo comprobar si nuestro sistema Linux está afectado por esta vulnerabilidad GHOST.

Para comprobar si nuestro sistema Linux está afectado, simplemente debemos abrir un fichero de texto con vuestro editor de texto favorito (Vi, Vim o Nano si tu sistema Linux funciona únicamente a través de comandos) o editores gráficos si es que usas entorno gráfico. Una vez que estás en modo edición, procedemos a copiar el siguiente script:

#!/bin/bash
GHOSTTEMP=$(mktemp /tmp/ghost.XXXXXXXXXXXXXX)
GHOSTEXEC=$(mktemp /tmp/ghost.XXXXXXXXXXXXXX)
cat <<"EOF" > $GHOSTTEMP
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>

#define CANARY "in_the_coal_mine"

struct {
  char buffer[1024];
  char canary[sizeof(CANARY)];
} temp = { "buffer", CANARY };

int main(void) {
  struct hostent resbuf;
  struct hostent *result;
  int herrno;
  int retval;

  /*** strlen (name) = size_needed - sizeof (*host_addr) - sizeof (*h_addr_ptrs) - 1; ***/
  size_t len = sizeof(temp.buffer) - 16*sizeof(unsigned char) - 2*sizeof(char *) - 1;
  char name[sizeof(temp.buffer)];
  memset(name, '0', len);
  name[len] = '\0';

  retval = gethostbyname_r(name, &resbuf, temp.buffer, sizeof(temp.buffer), &result, &herrno);

  if (strcmp(temp.canary, CANARY) != 0) {
    puts("ERES VULNERABLE");
    exit(EXIT_SUCCESS);
  }
  if (retval == ERANGE) {
    puts("NO ERES VULNERABLE");
    exit(EXIT_SUCCESS);
  }
  puts("should not happen");
  exit(EXIT_FAILURE);
}
EOF
gcc -x c $GHOSTTEMP -o $GHOSTEXEC
$GHOSTEXEC
rm -f $GHOSTTEMP $GHOSTEXEC

Una vez que lo hemos copiado, guardamos el archivo con nombre ghost.sh (por ejemplo) y le damos permisos de ejecución:

sudo chmod 755 ghost.sh

A continuación ejecutamos el script como hacemos normalmente, ya sea con:

./ghost.sh

O con

bash ghost.sh

Nada más ejecutar el script, nos saldrá un mensaje diciendo si somos o no vulnerables.

ghost_verificacion

Algunas distribuciones de Linux utilizan una versión de este paquete que ya no tiene este fallo de seguridad, no obstante es recomendable verificarlo.


Continúa leyendo
  • Santi

    Oh mas facil, sin dar permisos ni nada:

    lo guardas el archivo y ==> sh ghost.sh

    done.

  • Oli

    Donde ha de guardarse el archivo, sigo vuestros pasos y me da>

    chmod: no se puede acceder a «ghost.sh»: No existe el archivo o el directorio

    • Se puede guardar donde quieras, si te sale ese mensaje es que no has guardado el archivo en ningún sitio.