GHOST ( CVE- 2015-0235 ) dukkede lige op. Hvordan kan jeg hurtigt kontrollere, om mit system er sikkert? Ideelt set med en kommando med en linjeskal.
I henhold til ZDNet-artiklen “skal du derefter genstarte systemet”. Ideelt set ville testen også indikere dette …
Kommentarer
- Jeg foreslår at promovere til ” kankonisk spørgsmål ”
- Fantastisk spørgsmål. Synd, at du accepterede et svar, der langt fra at være en en-linjeskalkommando kræver en fuld udviklerværktøjskæde installeret. Kritiske enheder som routere har for det meste ‘ ikke gcc. Nogle enheder kan ‘ ikke selv være vært.
- Du ‘ har ret @ BenVoigt. Jeg stiller en pris for et svar med en one liner, der ikke ‘ t kræver dev-værktøjer.
- På en enhed, der kan ‘ t selvvært, uClibc og dietlibc er meget mere sandsynligt end glibc. Kontroller, at du ‘ virkelig kører på glibc, før du trækker cross-compileren ud.
Svar
Det ser ud til, at du kan downloade et værktøj fra University of Chicago , der giver dig mulighed for at teste dit system for sårbarheden .
Dette reparerer eller genstarter ikke noget , det fortæller dig kun, om dit system er sårbart.
$ wget https://webshare.uchicago.edu/orgs/ITServices/itsec/Downloads/GHOST.c $ gcc GHOST.c -o GHOST $ ./GHOST [responds vulnerable OR not vulnerable ]
At køre dette på en af mine eksterne servere får jeg:
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
kildekoden til dette script ser ud som denne næste kodeblok , men du skal alligevel først undersøge oprindelseskoden . Som andre har påpeget, hvis du vilkårligt kører kode fra internettet uden at vide, hvad det gør, kan der ske dårlige ting :
/* * 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] = "\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); }
Rediger : Jeg har tilføjet en anselig playbog her , hvis den er til brug for nogen, hvis du har et stort antal af systemer til at teste så ansible giver dig mulighed for at gøre det hurtigt.
Som beskrevet i diskussionen nedenfor, hvis du finder ud af, at dine servere er sårbare og anvender tilgængelige programrettelser, anbefales det , at du genstarter dit system .
Kommentarer
- @KasperSouren Nå ja. Hvis det er sårbart, skal du anvende patch / opgradering og genstarte.
- @KasperSouren Hvad du ‘ beder om, er ærligt talt lidt fjollet. Dette svar svarer perfekt på dit spørgsmål: hvordan opdager jeg denne sårbarhed. Det ‘ er alt hvad du spurgte. At bede om en ” en liner ” er også lidt fjollet. Jeg kørte den test, han postede her på alle mine servere på under 2 minutter. Det ‘ er dødt simpelt. Bare ” nedlukning -r nu ” efter du ‘ er færdig ….. ..
- Jeg opgraderede, kørte testen, startede ikke ‘. Kom først tilbage til dette, da jeg fandt ud af, at jeg var nødt til at genstarte. Dette kan ske for en hel del mennesker, og deres servere kan være sårbare og måske blive hacket på trods af deres falske følelse af sikkerhed. Så ikke så dumt at få dette lige hvis det er muligt IMHO.
-
GHOST.c
POC stammer fra den originale Qualys rådgivende . - @KasperSouren en test kan fortælle dig, at nye programmer bruger en sikker version af glibc. Du kan dog have programmer, der kører i baggrunden, der startede før opgraderingen, og derfor har du indlæst den gamle version.
Svar
PHP one-liner:
php -r "$e="0";for($i=0;$i<2500;$i++){$e="0$e";gethostbyname($e); }"
Python one-liner:
python -c "import socket;y="0"*50000000;socket.gethostbyname(y)"
Hvis disse giver dig segfaults (ja, en Python-segfault, en sjælden prøve), er du “sårbar. Jeg ved ikke, om du betragter Python som et” udviklerværktøj “, men PHP er et almindeligt program at have.
Hvis målenheden er en router, ved jeg ikke noget, du kunne gøre på den, der ville fortælle dig, undtagen at grave i producentens specifikationer og / eller vente på producentens rådgivning og firmwareopdateringer.
Kommentarer
- Er det muligt at kombinere dette med
sudo lsof | grep libc- | grep DEL"
? Forudsat i en anden kommentar for at undgå at folk tror, at de ‘ er sikre, mens den gamle libc stadig er i brug. Med denne tilføjelse vil jeg ‘ give bounty med det samme. - Det ‘ en shell-kommando, så du kan tackle tingene med & &. Og denne kommando er først, efter at du har opdateret dine glibc-pakker.Hvis du ‘ har opdateret, mislykkes disse liners. Så stopper din opdatering vommamd imellem?
- Jeg brugte php-en på SUSE 11SP3, og jeg så ingen segfault før eller efter patch. Eventuelle ideer?
- @marcin Det er ‘ interessant. Jeg hentede disse fra internetkilder, og mange mennesker rapporterer segfaulting. Gør det at øge antallet af sløjfer noget? (For hvad det ‘ er værd, vil segfault for Python også segfault på nogle patchede systemer … intet ord om, hvorfor ‘ s sker.)
- Fra at spille med uchicago-koden ser det ud til, at hvis du prøver at overløbe med mere end 4 bytes eller deromkring, returnerer gethostbyname () en fejl (EINVAL) i stedet for at løbe over. Med C kan du kontrollere nøjagtigt, hvad der bliver overskrevet. Med PHP eller Python kan det, der bliver overskrevet, være vigtigt og segfault, eller det er måske intet; det ‘ vil være afhængig af systemets nøjagtige opbygning. Og Python-segfaulten på
gethostbyname("0"*50000000)
ligner mig mere en bug i Python. (Ghost Python?)
Svar
aaronfay “s svar allerede dækket for at bestemme, om dit underliggende system er sårbart, men det registrerer ikke, om der er programmer, der stadig kører ved hjælp af den gamle version af glibc efter opgradering. Det vil sige, du kan opgradere uden at genstarte de berørte processer, og scriptet rapporterer “ikke sårbart”, selvom det gamle, sårbare bibliotek stadig er i brug.
Her er en måde at kontrollere, om der er nogen dynamisk linkede programmer, der stadig bruger den gamle version af glibc:
sudo lsof | grep libc- | grep DEL
Hvis der er resultater, er slettede versioner af glibc i brug, og de processer, der bruger dem, kan være sårbar.
Dette dækker selvfølgelig ikke den sag, hvor glibc var statisk knyttet. Den gode (?) nyhed er, at det er meget sjældent at finde glibc statisk knyttet i en binær, begge fordi af størrelsen, og fordi det giver nogle andre irritationer og vanskeligheder. I tilfælde af at du har har programmer, der bruger en statisk kompileret glibc (som du næsten helt sikkert ikke ikke har), skal du kompilere dem igen.
Kommentarer
-
lsof +c0 -f -- /usr/lib64/libc-*.so | grep "(deleted)$"
lidt mere præcist, viser dig fulde navne på processer og ser efter at linke til filer, der blev slettet.
Svar
Hvis du har en konto i Redhat, kan du få adgang til deres “GHOST-detektor” på denne URL . Det er et lille shell-script, der fortæller dig, om din glibc
er sårbar.
Red Hat er nu kommet tilbage og sagde, at deres detektorscript er mangelfuldt. Bemærk, at der også er bekymring for RHEL6.6, når man bruger yum –security til at patchere sårbarheden, da den er gået glip af i henhold til https://bugzilla.redhat.com/show_bug.cgi?id=1186717 .
Kommentarer
- RedHat-værktøjet kontrollerer kun versionen af glibc RPM , og det kun kender til RedHat-versioner (og sandsynligvis derivater). Det fungerer faktisk ikke på noget andet operativsystem.
- Dette er heller ikke længere tilgængeligt til download, sandsynligvis til manglerne.