Sembra che tu possa scaricare uno strumento da l'Università di Chicago che ti permetterà di testare il tuo sistema per vulnerabilità.
Questo non ripara o riavvia nulla ti dirà solo se il tuo sistema è vulnerabile.
$ wget https://webshare.uchicago.edu/orgs/ITServices/itsec/Downloads/GHOST.c
$ gcc GHOST.c -o GHOST
$ ./GHOST
[responds vulnerable OR not vulnerable ]
Eseguito su uno dei miei server remoti ottengo:
user@host:~# wget https://webshare.uchicago.edu/orgs/ITServices/itsec/Downloads/GHOST.c
--2015-01-27 22:30:46-- https://webshare.uchicago.edu/orgs/ITServices/itsec/Downloads/GHOST.c
Resolving webshare.uchicago.edu (webshare.uchicago.edu)... 128.135.22.61
Connecting to webshare.uchicago.edu (webshare.uchicago.edu)|128.135.22.61|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1046 (1.0K) [text/x-csrc]
Saving to: 'GHOST.c'
100%[============================================>] 1,046 --.-K/s in 0s
2015-01-27 22:30:48 (237 MB/s) - 'GHOST.c' saved [1046/1046]
user@host:~# gcc GHOST.c -o GHOST
user@host:~# ./GHOST
vulnerable
Il codice sorgente di quello script appare come il prossimo blocco di codice , ma dovresti comunque ispezionare il codice di origine . Come altri hanno sottolineato, se esegui arbitrariamente un codice da Internet senza sapere cosa fa, potrebbero accadere cose brutte :
/*
* GHOST vulnerability check
* http://www.openwall.com/lists/oss-security/2015/01/27/9
* Usage: gcc GHOST.c -o GHOST && ./GHOST
*/
#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] = '$ wget https://webshare.uchicago.edu/orgs/ITServices/itsec/Downloads/GHOST.c
$ gcc GHOST.c -o GHOST
$ ./GHOST
[responds vulnerable OR not vulnerable ]
';
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);
}
Modifica :
Ho aggiunto un playbook ansible qui se è utile a chiunque, se hai un gran numero di i sistemi per testare quindi ansible ti permetteranno di farlo rapidamente.
Inoltre, come descritto di seguito, se ritieni che i server siano vulnerabili e applichi le patch disponibili, è altamente consigliato riavviare il sistema .