GHOST ( CVE- 2015-0235 ) se právě objevilo. Jak mohu rychle zkontrolovat, zda je můj systém zabezpečený? V ideálním případě pomocí příkazu s jedním řádkem.

Podle článku ZDNet „byste měli restartovat systém“. V ideálním případě by to naznačil i test …

Komentáře

  • Navrhuji povýšit na “ kanonická otázka “
  • Skvělá otázka. Škoda, že jste přijali odpověď, která zdaleka není jednorázovým příkazem prostředí, vyžaduje nainstalovaný plný vývojový nástroj. Kritická zařízení, jako jsou směrovače, většinou nemají ‚ gcc. Některá zařízení ‚ nemohou být ani sama hostitelem.
  • Máte ‚ pravdu @BenVoigt. Dal jsem odměnu za odpověď pomocí jedné linky, která ‚ t nevyžaduje dev nástroje.
  • Na zařízení, které může ‚ t self-host, uClibc a dietlibc jsou mnohem pravděpodobnější než glibc. Než přetáhnete křížový kompilátor, zkontrolujte, zda ‚ skutečně běžíte na glibc.

Odpovědět

Zdá se, že si můžete stáhnout nástroj z University of Chicago , který vám umožní otestovat váš systém na zranitelnost .

To neopraví ani nereštartuje nic řekne vám pouze to, zda je váš systém zranitelný.

$ wget https://webshare.uchicago.edu/orgs/ITServices/itsec/Downloads/GHOST.c $ gcc GHOST.c -o GHOST $ ./GHOST [responds vulnerable OR not vulnerable ] 

Spustím to na jednom ze svých vzdálených serverů:

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 

The zdrojový kód tohoto skriptu vypadá jako tento další blok kódu , ale původní kód byste měli nejprve zkontrolovat . Jak již zdůraznili jiní, pokud svévolně spouštíte kód z internetu, aniž byste věděli, co dělá, může dojít ke špatným věcem :

/* * 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); } 

Upravit : Přidal jsem odpovědnou příručku sem , pokud je kdokoli, pokud máte velké množství systémů, které lze poté otestovat, vám to umožní rychle.

Rovněž podle níže uvedené diskuse, pokud zjistíte, že jsou vaše servery zranitelné, a použijete dostupné opravy, je velmi doporučeno restartovat systém .

Komentáře

  • @KasperSouren No, ano. Pokud je zranitelný, použijte opravu / upgrade a restartujte.
  • @KasperSouren To, na co ‚ žádáte, je upřímně řečeno trochu hloupé. Tato odpověď dokonale odpovídá na vaši otázku: jak zjistím tuto chybu zabezpečení. To je ‚ vše, co jste požadovali. Žádat o “ jednu linii “ je také trochu hloupé. Test, který zde zveřejnil, jsem provedl na všech mých serverech za méně než 2 minuty. Je ‚ mrtvý jednoduchý. Právě “ vypnutí -r nyní “ poté, co jste ‚ hotovi ….. ..
  • Upgradoval jsem, spustil test, nerestartoval jsem ‚. K tomu jsem se vrátil, až když jsem zjistil, že musím restartovat. To se může stát poměrně málo lidem a jejich servery mohou být zranitelné a mohou být napadeny navzdory jejich falešnému pocitu bezpečí. Takže to není tak hloupé, pokud je to možné, IMHO.
  • GHOST.c POC pochází z původního Qualysu poradenský .
  • @KasperSouren test vám může říci, že nové programy budou používat bezpečnou verzi glibc. Můžete však mít spuštěné programy na pozadí, které byly spuštěny před upgradem, a proto jste načetli starou verzi.

Odpovědět

One-liner PHP:

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)" 

Pokud vám dávají segfaults (ano, Python segfault, vzácný vzorek), pak jste „zranitelní. Nevím, jestli považujete Python za„ vývojový nástroj “, ale PHP je běžný program.

Pokud je cílovým zařízením router, nevím o ničem, co byste na něm mohli dělat, co by vám to říkalo, kromě hloubení specifikací výrobce a / nebo čekání na doporučení výrobce a aktualizace firmwaru.

Komentáře

  • Je možné to kombinovat s sudo lsof | grep libc- | grep DEL"? Uvedeno v jiném komentáři, aby se tomu zabránilo lidé si myslí, že ‚ jsou v bezpečí, zatímco se starý libc stále používá. Díky tomuto dodatku hned

ll odměnu rozdám.

  • Je to ‚ sa příkaz shellu, takže můžete věci řešit pomocí & &. A tento příkaz je teprve poté, co jste aktualizovali své balíčky glibc.Pokud jste ‚ aktualizovali, tyto řádky selžou. Naplňte tedy svou aktualizaci vommamd mezitím?
  • Použil jsem php na SUSE 11SP3 a před ani po opravě jsem neviděl žádný segfault. Nějaké nápady?
  • @marcin To je ‚ zajímavé. Vytáhl jsem je z internetových zdrojů a spousta lidí hlásí segfaulting. Dělá něco zvýšení počtu smyček? (Z toho, co to ‚ stojí, segfault pro Python bude také segfault na některých opravených systémech … žádné slovo o tom, proč ‚ s happening.)
  • Při hraní s kódem uchicago to vypadá, že pokud se pokusíte přetéct o více než 4 bajty, gethostbyname () vrátí místo přetečení chybu (EINVAL). S C můžete přesně řídit, co se přepíše. S PHP nebo Python může být to, co se přepíše, důležité a segfaultní, nebo to nemusí být nic; ‚ bude záviset na přesném sestavení systému. A Python segfault na gethostbyname("0"*50000000) mi připadá spíš jako chyba v Pythonu. (Ghost Python?)
  • Odpověď

    Odpověď aaronfay je již zahrnuta v určení, zda je váš základní systém zranitelný, ale nezjistí, zda existují programy, které po upgradu stále běží pomocí staré verze glibc. To znamená, že byste mohli upgradovat bez restartování postižených procesů a skript by hlásil „není zranitelný“, přestože se stará zranitelná knihovna stále používá.

    Tady je jeden způsob, jak zkontrolovat, zda nějaké existují dynamicky propojené programy, které stále používají starou verzi glibc:

    sudo lsof | grep libc- | grep DEL 

    Pokud existují výsledky, používají se smazané verze glibc a procesy, které je používají, mohou být zranitelný.

    Samozřejmě to nepokrývá případ, kdy byl glibc staticky propojen. Dobrá (?) zpráva je, že je velmi vzácné najít glibc staticky propojený v binární podobě, protože velikosti, a protože to představuje další nepříjemnosti a obtíže. V případě, že máte programy využívající staticky kompilovaný glibc (který téměř jistě nemáte), budete je muset znovu zkompilovat.

    Komentáře

    • lsof +c0 -f -- /usr/lib64/libc-*.so | grep "(deleted)$" o něco přesnější, zobrazí vám celé názvy procesů a hledá odkazy na soubory, které byly smazány.

    Odpověď

    Pokud máte účet v Redhat, můžete přistupovat k jejich „GHOST detektoru“ na tato adresa URL . Je to malý skript prostředí, který vám řekne, zda je váš glibc zranitelný.

    Red Hat se nyní vrátil a uvedli, že jejich skript detektoru je chybný. Všimněte si, že na RHEL6.6 existuje také obava při použití yum –security k opravě zranitelnosti, protože byla zmeškána podle https://bugzilla.redhat.com/show_bug.cgi?id=1186717 .

    Komentáře

    • Nástroj RedHat kontroluje pouze verzi RPM glibc a to jen ví o verzích RedHat (a pravděpodobně derivátech). Ve skutečnosti to nefunguje na žádném jiném operačním systému.
    • Toto již také není k dispozici ke stažení, což pravděpodobně způsobí chyby.

    Napsat komentář

    Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *