Come proteggersi dalla falla “ghost” di Linux (aggiornato 31 gennaio 2015) Alcuni accorgimenti per limitare l'impatto, potenzialmente devastante, di questo bug informatico di Linux

<span class="entry-title-primary">Come proteggersi dalla falla “ghost” di Linux (aggiornato 31 gennaio 2015)</span> <span class="entry-subtitle">Alcuni accorgimenti per limitare l'impatto, potenzialmente devastante, di questo bug informatico di Linux</span>

Un nuova falla informatica su alcune versioni di Linux, nome in codice “ghost“, è stata rivelata ieri: i suoi effetti sono davvero notevoli, e questo sia perchè riguarda una funzione cardine del sistema (glibc), sia perchè non sarà possibile aggiornare in modo uniforme tutti i dispositivi fallati. È stato infatti commesso un errore di valutazione da parte dei programmatori, che hanno classificato male un vecchio bug non aggiornando, di conseguenza, molte versioni considerate stable di Linux.

Ma come fare a proteggersi dal “fantasma” di cui si dibatterà accanitamente nelle prossime settimane? È bene non farsi prendere dall’angoscia perchè, in questi casi, l’impatto può essere limitato ed è noto, soprattutto, come effettuare la verifica e come proteggersi (aggiornando il sistema, di fatto, e considerare che molte distribuzioni sono già protette di loro, ma molte altre no). Su seclists – una delle principali mailing list di sicurezza informatica – sono comparse stanotte le prime contromisure da adottare, che riporto in questa sede a vantaggio di tutti gli interessati. Tenete conto che si tratta di indicazioni molto specialistiche che, a conti fatti, non dovrebbero risultare neanche troppo difficili da applicare.

Chiunque gestisca un web server in hosting con Linux, ad esempio, dovrebbe leggere quanto segue e regolarsi di conseguenza: ad esempio se sia il caso di effettuare il check sulla vulnerabilità descritto ed eventualmente aggiornarse glibc per proteggersi.

Per non generare inutile panico negli utenti Linux medi, comunque, è bene sapere quali sono le versioni infette, e verificare anzitutto se corrispondono a quelle che stiamo usando: in caso di risposta affermativa, bisogna aggiornare il sistema e seguire gli accorgimenti indicati di seguito.

Quello che bisogna sapere sulla falla “ghost”

L’impatto di “ghost” potrebbe rivelarsi più circoscritto del previsto per le seguenti ragioni:

  1. come detto nell’articolo precedente, una patch correttiva già è in circolazione (e risale al 21 maggio 2013) ed è stata applicata e testata a glibc-2.18 a partire dal 13 agosto 2013;
  2. viene da chiedersi come mai, a questo punto, si sia lanciato comunque l’allarme: il problema risale al fatto che la falla non è stata riconosciuta all’epoca come bug di sicurezza vero e proprio, per cui alcune versioni di Linux sono rimaste scoperte.
  3. Quali sono le versioni sicuramente affette dal bug? Tra queste, annoveriamo la maggioranza delle distribuzoni stable e long-term-support come Debian 7 (wheezy), Red Hat Enterprise Linux 6 & 7, CentOS 6 & 7,Ubuntu 12.04.
  4. la falla riguarda la famiglia (obsoleta) di funzioni gethostbyname*() : con l’avvento del nuovo IPv6, si può sostituire qualsiasi chiamata a queste funzioni con la più moderna, e sicura, getaddrinfo();
  5. moltissimi programmi utilizzati localmente da Linux fanno scattare in automatico gethostbyname*() (mettendo così a rischio il sistema) solo se viene superato il flag contenuto in una funzione denominata inet_aton(); in altri termini, molti sistemi sono al sicuro già di loro senza dover fare nulla;
  6. il vero pericolo di “Ghost” è legato, di fatto, ai server online che usino gethostbyname() per eseguire operazioni sul DNS, in particolare un FCrDNS o full-circle reverse DNS. In questi casi l’esecuzione è normalmente safe (sicura), poichè l’hostname che viene passato alla funzione viene solitamente (ma sarebbe opportuno verificarlo sul campo) pre-controllato dal software DNS, a monte.

Come proteggersi da “ghost”

La prima versione vulnerabile alla falla di Linux Ghost è la glibc-2.2 del 2000: il bug è stato corretto solo nel 2013, creando così una serie di pericoli in ambiente Linux a volte difficili perfino da quantificare alla buona. Tutto dipende dalla versione utilizzata: i sistemi operativi Debian 7 (wheezy), Red Hat Enterprise Linux 6 & 7, CentOS 6 & 7, Ubuntu 12.04 ne sono affetti e devono essere patchati.
I servizi a rischio per ghost sono tra gli altri Exim, Pppd, Clockdiff e Procmail, mentre digitando il seguente comando sarà possibile listare tutti i servizi che dipendono, in qualche modo, da glibc:

lsof | grep libc | awk '{print $1}' | sort | uni

Una patch per Linux Centos/RHEL/Fedora 5,6,7 è la seguente:

yum update glibc sudo restart

Similmente per Ubuntu bisogna digitare da terminale o SSH:
sudo apt-get update
sudo apt-get dist-upgrade sudo restart

 

Per verificare se siamo vulnerabili a ghost, è stato predisposto del codice C apposito per verificarlo, che potete copiare ed incollare:

#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("vulnerable");
    exit(EXIT_SUCCESS);
  }
  if (retval == ERANGE) {
    puts("not vulnerable");
    exit(EXIT_SUCCESS);
  }
  puts("should not happen");
  exit(EXIT_FAILURE);
}

Dovete poi salvarlo in un file apposito, compilarlo:

gcc GHOST.c -o GHOST

ed infine lanciarlo:

./GHOST

A questo punto, se compare la scritta “vulnerable” non siete protetti, altrimenti non dovete preoccuparvi. Fedora Linux fino alla versione 19 è vulnerabile, dalla 20 in poi non più:

[user () fedora-19 ~]$ ./GHOST
vulnerable
[user () fedora-20 ~]$ ./GHOST
not vulnerable

Dettagli tecnici (solo per developer e specialisti)

La funzione affetta dalla vulnerabilità di “ghost” è la seguente:

__nss_hostname_digits_dots()

che viene richiamata internamente da glibc in due tipi di chiamate distinte. Le chiamate sono tuttavia circoscritte ad una macro definita soltanto in:

inet/gethstbynm.c-

inet/gethstbynm2.c-

inet/gethstbynm_r.c-

inet/gethstbynm2_r.c-

nscd/gethstbynm3_r.c

che non sono altro che i file che implementano la funzione critica (o meglio la famiglia di funzioni) gethostbyname() e gethostbyname2(), affetta da un possibile buffer overflow.

(fonte: http://seclists.org/fulldisclosure/2015/Jan/111)

 


Ti piace questo articolo?

0 voti

Su Trovalost.it puntiamo sulla qualità dei contenuti da quando siamo nati: la tua sincera valutazione può aiutarci a migliorare ogni giorno.