Odpowiedz na moje pytanie od Qualys :
Podczas naszych testów opracowaliśmy test koncepcyjny, w którym wysyłamy specjalnie utworzoną wiadomość e-mail na serwer pocztowy i możemy uzyskać zdalną powłokę na maszynę z systemem Linux. Pomija to wszystkie istniejące zabezpieczenia (takie jak ASLR, PIE i NX) zarówno w systemach 32-bitowych, jak i 64-bitowych.
Moje zebrane badania poniżej dla każdego, kto szuka:
Zrzeczenie się
Pomimo tego, co może powiedzieć wiele innych wątków / blogów, sugeruję, aby nie aktualizować natychmiast każdego systemu operacyjnego na ślepo bez dokładnego przetestowania tych glibc
aktualizacji. Doniesiono, że aktualizacje glibc spowodowały masowe awarie aplikacji, zmuszając ludzi do wycofania aktualizacji glibc do poprzedniej wersji.
Nie można po prostu masowo aktualizować środowiska produkcyjnego bez testowania.
Informacje podstawowe
GHOST to błąd „przepełnienia bufora” wpływający na wywołania funkcji gethostbyname () i gethostbyname2 () w bibliotece glibc. Luka ta umożliwia zdalnemu atakującemu, który jest w stanie wykonać wywołanie aplikacji do którejkolwiek z tych funkcji, w celu wykonania dowolnego kodu z uprawnieniami użytkownika uruchamiającego aplikację.
Wpływ
Wywołania funkcji gethostbyname () są używane do rozwiązywania DNS, co jest bardzo częstym zdarzeniem. Aby wykorzystać tę lukę, osoba atakująca musi wyzwolić przepełnienie bufora, podając niepoprawny argument nazwy hosta do aplikacji wykonującej rozpoznawanie DNS.
Aktualna lista zagrożonych dystrybucji Linuksa
RHEL (Red Hat Enterprise Linux) wersja 5.x, 6.x i 7.x
RHEL 4 ELS fix available ---> glibc-2.3.4-2.57.el4.2
Desktop (v. 5) fix available ---> glibc-2.5-123.el5_11.1
Desktop (v. 6) fix available ---> glibc-2.12-1.149.el6_6.5
Desktop (v. 7) fix available ---> glibc-2.17-55.el7_0.5
HPC Node (v. 6) fix available ---> glibc-2.12-1.149.el6_6.5
HPC Node (v. 7) fix available ---> glibc-2.17-55.el7_0.5
Server (v. 5) fix available ---> glibc-2.5-123.el5_11.1
Server (v. 6) fix available ---> glibc-2.12-1.149.el6_6.5
Server (v. 7) fix available ---> glibc-2.17-55.el7_0.5
Server EUS (v. 6.6.z) fix available ---> glibc-2.12-1.149.el6_6.5
Workstation (v. 6) fix available ---> glibc-2.12-1.149.el6_6.5
Workstation (v. 7) fix available ---> glibc-2.17-55.el7_0.5
CentOS Linux w wersji 5.x, 6.x i 7.x
CentOS-5 fix available ---> glibc-2.5-123.el5_11
CentOS-6 fix available ---> glibc-2.12-1.149.el6_6.5
CentOS-7 fix available ---> glibc-2.17-55.el7_0.5
Ubuntu Linux wersja 10.04, 12.04 LTS
10.04 LTS fix available ---> libc6-2.11.1-0ubuntu7.20
12.04 LTS fix available ---> libc6-2.15-0ubuntu10.10
Debian Linux wersja 6.x, 7.x
6.x squeeze vulnerable
6.x squeeze (LTS) fix available ---> eglibc-2.11.3-4+deb6u4
7.x wheezy vulnerable
7.x wheezy (security) fix available ---> glib-2.13-38+deb7u7
Linux Mint w wersji 13.0
Mint 13 fix available ---> libc6-2.15-0ubuntu10.10
Fedora Linux wersja 19 (lub starsza powinna się zaktualizować)
Fedora 19 - vulnerable - EOL on Jan 6, 2014 (upgrade to Fedora 20/21 for patch)
SUSE Linux Enterprise
Server 10 SP4 LTSS for x86 fix available ---> glibc-2.4-31.113.3
Server 10 SP4 LTSS for AMD64 and Intel EM64T fix available ---> glibc-2.4-31.113.3
Server 10 SP4 LTSS for IBM zSeries 64bit fix available ---> glibc-2.4-31.113.3
Software Development Kit 11 SP3 fix available ---> glibc-2.11.3-17.74.13
Server 11 SP1 LTSS fix available ---> glibc-2.11.1-0.60.1
Server 11 SP2 LTSS fix available ---> glibc-2.11.3-17.45.55.5
Server 11 SP3 (VMware) fix available ---> glibc-2.11.3-17.74.13
Server 11 SP3 fix available ---> glibc-2.11.3-17.74.13
Desktop 11 SP3 fix available ---> glibc-2.11.3-17.74.13
openSUSE (wersje starsze niż 11 powinny zostać zaktualizowane)
11.4 Evergreen fix available ---> glibc-2.11.3-12.66.1
12.3 fix available ---> glibc-2.17-4.17.1
Jakie pakiety / aplikacje nadal używają usuniętego glibc?
( podziękowania dla Gillesa )
W przypadku CentOS / RHEL / Fedora / Scientific Linux:
lsof -o / | awk '
BEGIN {
while (("rpm -ql glibc | grep \\\\.so\\$" | getline) > 0)
libs[$0] = 1
}
$4 == "DEL" && $8 in libs {print $1, $2}'
W systemie Ubuntu / Debian Linux:
lsof -o / | awk '
BEGIN {
while (("dpkg -L libc6:amd64 | grep \\\\.so\\$" | getline) > 0)
libs[$0] = 1
}
$4 == "DEL" && $8 in libs {print $1, $2}'
Z jakiej wersji biblioteki C (glibc) korzysta mój system Linux?
Najłatwiejszym sposobem sprawdzenia numeru wersji jest uruchomienie następującego polecenia:
ldd --version
Przykładowe dane wyjściowe z RHEL / CentOS Linux v6.6:
ldd (GNU libc) 2.12
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.
Przykładowe dane wyjściowe z systemu Ubuntu Linux 12.04.5 LTS:
ldd (Ubuntu EGLIBC 2.15-0ubuntu10.9) 2.15
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.
Przykładowe dane wyjściowe z Debian Linux v7.8:
ldd (Debian EGLIBC 2.13-38+deb7u6) 2.13
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.
Kontrola podatności GHOST
University of Chicago udostępnia poniższy skrypt do łatwego pobierania:
$ wget https://webshare.uchicago.edu/orgs/ITServices/itsec/Downloads/GHOST.c
[OR]
$ curl -O https://webshare.uchicago.edu/orgs/ITServices/itsec/Downloads/GHOST.c
$ gcc GHOST.c -o GHOST
$ ./GHOST
[responds vulnerable OR not vulnerable ]
/* ghosttest.c: GHOST vulnerability tester */
/* Credit: http://www.openwall.com/lists/oss-security/2015/01/27/9 */
#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);
}
Skompiluj i uruchom w następujący sposób:
$ gcc ghosttester.c -o ghosttester
$ ./ghosttester
[responds vulnerable OR not vulnerable ]
Red Hat Access Lab: narzędzie GHOST Nie używaj tego narzędzia, jego raportowanie jest nieprawidłowe, moduł sprawdzania luk Qualys jest dokładny.
Łatanie
CentOS / RHEL / Fedora / Scientific Linux
sudo yum clean all
sudo yum update
Teraz uruchom ponownie, aby zastosować:
sudo reboot
Alternatywnie, jeśli twoje lustro nie zawiera najnowszych pakietów, po prostu pobierz je ręcznie. * Uwaga: dla bardziej zaawansowanych użytkowników
CentOS 5
http://mirror.centos.org/centos/5.11/updates/x86_64/RPMS/
CentOS 6
mkdir ~/ghostupdate
cd ~/ghostupdate
wget http://mirror.centos.org/centos/6.6/updates/x86_64/Packages/glibc-devel-2.12-1.149.el6_6.5.x86_64.rpm
wget http://mirror.centos.org/centos/6.6/updates/x86_64/Packages/glibc-common-2.12-1.149.el6_6.5.x86_64.rpm
wget http://mirror.centos.org/centos/6.6/updates/x86_64/Packages/nscd-2.12-1.149.el6_6.5.x86_64.rpm
wget http://mirror.centos.org/centos/6.6/updates/x86_64/Packages/glibc-static-2.12-1.149.el6_6.5.x86_64.rpm
wget http://mirror.centos.org/centos/6.6/updates/x86_64/Packages/glibc-headers-2.12-1.149.el6_6.5.x86_64.rpm
wget http://mirror.centos.org/centos/6.6/updates/x86_64/Packages/glibc-utils-2.12-1.149.el6_6.5.x86_64.rpm
wget http://mirror.centos.org/centos/6.6/updates/x86_64/Packages/glibc-2.12-1.149.el6_6.5.x86_64.rpm
wget http://mirror.centos.org/centos/6.6/updates/x86_64/Packages/glibc-static-2.12-1.149.el6_6.5.i686.rpm
wget http://mirror.centos.org/centos/6.6/updates/x86_64/Packages/glibc-devel-2.12-1.149.el6_6.5.i686.rpm
wget http://mirror.centos.org/centos/6.6/updates/x86_64/Packages/glibc-2.12-1.149.el6_6.5.i686.rpm
yum localupdate *.rpm [OR] rpm -Uvh *.rpm
Ubuntu / Debian Linux
sudo apt-get clean
sudo apt-get update
sudo apt-get dist-upgrade
Uruchom ponownie:
sudo reboot
SUSE Linux Enterprise
Aby zainstalować tę aktualizację zabezpieczeń SUSE, użyj YaST online_update. Lub użyj następujących poleceń zgodnie z wersją:
SUSE Linux Enterprise Software Development Kit 11 SP3
zypper in -t patch sdksp3-glibc-10206
SUSE Linux Enterprise Server 11 SP3 dla VMware
zypper in -t patch slessp3-glibc-10206
SUSE Linux Enterprise Server 11 SP3
zypper in -t patch slessp3-glibc-10206
SUSE Linux Enterprise Server 11 SP2 LTSS
zypper in -t patch slessp2-glibc-10204
SUSE Linux Enterprise Server 11 SP1 LTSS
zypper in -t patch slessp1-glibc-10202
SUSE Linux Enterprise Desktop 11 SP3
zypper in -t patch sledsp3-glibc-10206
Na koniec uruchom wszystkie wersje SUSE Linux, aby zaktualizować system:
zypper patch
OpenSUSE Linux
Aby zobaczyć listę dostępnych aktualizacji, w tym glibc w systemie OpenSUSE Linux, wpisz:
zypper lu
Aby po prostu zaktualizować zainstalowane pakiety glibc nowszymi dostępnymi wersjami, uruchom:
zypper up
Prawie każdy program działający na twoim komputerze używa glibc. Musisz ponownie uruchomić każdą usługę lub aplikację korzystającą z glibc, aby upewnić się, że łatka zadziała. Dlatego zalecane jest ponowne uruchomienie komputera.
Jak zrestartować init bez restartowania lub wpływania na system?
telinit u
„man telinit” - U lub u, aby zażądać ponownego uruchomienia demona init (8). Nie jest to zalecane, ponieważ Upstart obecnie nie jest w stanie zachować swojego stanu, ale jest niezbędny podczas aktualizacji bibliotek systemowych.
Natychmiastowe ograniczenie zagrożenia w ograniczony sposób polega na wyłączeniu wstecznego sprawdzania DNS we wszystkich usługach publicznych. Na przykład możesz wyłączyć sprawdzanie odwrotnego DNS w SSH, ustawiając UseDNS
na no
w swoim /etc/ssh/sshd_config
.
Źródła (i więcej informacji):
- https://access.redhat.com/articles/1332213
- http://www.cyberciti.biz/faq/cve-2015-0235-patch-ghost-on-debian-ubuntu-fedora-centos-rhel-linux/
- http://www.openwall.com/lists/oss-security/2015/01/27/9
- /security/80210/ghost-bug-is-there-a-simple-way-to-test-if-my-system-is-secure
- http://bobcares.com/blog/ghost-hunting-resolving-glibc-remote-code-execution-vulnerability-cve-2015-0235-in-centos-red-hat-ubuntu-debian-and-suse-linux- serwery
- https://community.qualys.com/blogs/laws-of-vulnerabilities/2015/01/27/the-ghost-vulnerability
- https://security-tracker.debian.org/tracker/CVE-2015-0235