Ghost-Sicherheitsanfälligkeit - CVE-2015-0235

13

Erfordert die Ghost-Sicherheitsanfälligkeit den Zugriff (als angemeldeter Benutzer) auf das betroffene Betriebssystem? Kann jemand den "Remote-Angreifer, der einen Anwendungsaufruf tätigen kann" klären? Ich finde anscheinend nur Tests, die direkt auf dem lokalen System ausgeführt werden können, aber nicht von einem Remote-Host.

Alle Informationen, die ich bisher über die Ghost-Sicherheitsanfälligkeit aus mehreren Quellen gesammelt habe (Gutschriften für diese Quellen), habe ich unten in einer Antwort veröffentlicht, falls jemand anderes neugierig ist.

Bearbeiten, ich habe meine Antwort gefunden :

Während eines Code-Audits entdeckten die Forscher von Qualys einen Pufferüberlauf in der Funktion __nss_hostname_digits_dots () von glibc. Dieser Fehler kann sowohl lokal als auch remote über alle Funktionen von gethostbyname * () ausgelöst werden . Anwendungen können auf den DNS-Resolver hauptsächlich über den Funktionssatz gethostbyname * () zugreifen. Diese Funktionen konvertieren einen Hostnamen in eine IP-Adresse.

devnull
quelle
Fügen Sie möglicherweise einige Links zur Security SE-Site hinzu, z. B. security.stackexchange.com/q/80210/1341 und andere Posts dort?
MattBianco
Muru, ich habe den Inhalt auf eine Antwort verschoben. Danke für den Vorschlag. MattBianco, ich habe auch diesen Link hinzugefügt, Danke.
Devnull
Ich habe die Frage aktualisiert, um Unklarheiten zu beseitigen.
Devnull

Antworten:

20

Antwort auf meine Frage von Qualys :

Während unserer Tests haben wir einen Proof-of-Concept entwickelt, bei dem wir eine speziell erstellte E-Mail an einen Mail-Server senden und eine Remote-Shell auf den Linux-Computer übertragen können. Dadurch werden alle vorhandenen Schutzfunktionen (wie ASLR, PIE und NX) auf 32-Bit- und 64-Bit-Systemen umgangen.


Meine unten zusammengestellten Recherchen für alle anderen, die suchen:


Haftungsausschluss

Ungeachtet dessen, was viele andere Threads / Blogs zu Ihnen sagen könnten, empfehle ich, nicht jedes einzelne Betriebssystem, das Sie haben, sofort blind zu glibcaktualisieren, ohne diese Updates gründlich zu testen . Es wurde berichtet, dass die glibc-Updates massive Anwendungsfehler verursacht haben, die dazu führten, dass Benutzer ihre glibc-Updates auf die vorherige Version zurücksetzen mussten.

Man aktualisiert eine Produktionsumgebung nicht einfach in Massen, ohne sie zu testen.


Hintergrundinformation

GHOST ist ein 'Buffer Overflow'-Fehler, der die Funktionsaufrufe gethostbyname () und gethostbyname2 () in der glibc-Bibliothek betrifft. Diese Sicherheitsanfälligkeit ermöglicht einem Remoteangreifer, der eine dieser Funktionen über eine Anwendung aufrufen kann, um beliebigen Code mit den Berechtigungen des Benutzers auszuführen, der die Anwendung ausführt.

Einschlag

Die Funktionsaufrufe gethostbyname () werden für die DNS-Auflösung verwendet, was ein sehr häufiges Ereignis ist. Um diese Sicherheitsanfälligkeit auszunutzen, muss ein Angreifer einen Pufferüberlauf auslösen, indem er einer Anwendung, die eine DNS-Auflösung durchführt, ein ungültiges Hostnamenargument bereitstellt.

Aktuelle Liste der betroffenen Linux-Distributionen

RHEL (Red Hat Enterprise Linux) Version 5.x, 6.x und 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 Version 5.x, 6.x & 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 Version 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 Version 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 Version 13.0

Mint 13    fix available ---> libc6-2.15-0ubuntu10.10

Fedora Linux Version 19 (oder älter sollte upgraden)

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 (ältere Versionen als 11 sollten upgraden)

11.4 Evergreen     fix available ---> glibc-2.11.3-12.66.1
12.3               fix available ---> glibc-2.17-4.17.1


Welche Pakete / Anwendungen verwenden die gelöschte glibc noch?

( Dank an Gilles )

Für 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}'

Für 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}'

Welche C-Bibliotheksversion (glibc) verwendet mein Linux-System?

Der einfachste Weg, die Versionsnummer zu überprüfen, besteht darin, den folgenden Befehl auszuführen:

ldd --version

Beispielausgaben von 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.

Beispielausgaben von 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.

Beispielausgaben von 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.

GHOST-Schwachstellenüberprüfung

Die University of Chicago hostet das folgende Skript zum einfachen Herunterladen:

$ 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);
}

Kompilieren Sie und führen Sie es wie folgt aus:

$ gcc ghosttester.c -o ghosttester
$ ./ghosttester
[responds vulnerable OR not vulnerable ]

Red Hat Access Lab: GHOST-Tool Verwenden Sie dieses Tool nicht, da die Berichterstellung falsch ist und der Vulnerability Checker von Qualys korrekt ist.


Patchen


CentOS / RHEL / Fedora / Scientific Linux

sudo yum clean all
sudo yum update

Jetzt neu starten, um wirksam zu werden:

sudo reboot

Wenn Ihr Mirror nicht die neuesten Pakete enthält, können Sie diese auch manuell herunterladen. * Hinweis: Für fortgeschrittene Benutzer

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

Neustart:

sudo reboot

SUSE Linux Enterprise

Verwenden Sie zum Installieren dieses SUSE-Sicherheitsupdates YaST online_update. Oder verwenden Sie die folgenden Befehle gemäß Ihrer Version:

SUSE Linux Enterprise-Software-Entwicklungskit 11 SP3

zypper in -t patch sdksp3-glibc-10206

SUSE Linux Enterprise Server 11 SP3 für VMware

zypper in -t patch slessp3-glibc-10206

SUSE Linux Enterprise Server 11 SP3

zypper in -t patch slessp3-glibc-10206

LTSS für SUSE Linux Enterprise Server 11 SP2

zypper in -t patch slessp2-glibc-10204

LTSS für SUSE Linux Enterprise Server 11 SP1

zypper in -t patch slessp1-glibc-10202

SUSE Linux Enterprise Desktop 11 SP3

zypper in -t patch sledsp3-glibc-10206

Führen Sie zum Schluss alle SUSE Linux-Versionen aus, um Ihr System auf den neuesten Stand zu bringen:

zypper patch

OpenSUSE Linux

Geben Sie Folgendes ein, um eine Liste der verfügbaren Updates einschließlich glibc unter OpenSUSE Linux anzuzeigen:

zypper lu

Führen Sie Folgendes aus, um installierte glibc-Pakete einfach mit den neueren verfügbaren Versionen zu aktualisieren:

zypper up

Fast jedes Programm, das auf Ihrem Computer ausgeführt wird, verwendet glibc. Sie müssen jeden Dienst oder jede Anwendung, die glibc verwendet, neu starten, um sicherzustellen, dass der Patch wirksam wird. Daher wird ein Neustart empfohlen.


Wie starte ich init neu, ohne das System neu zu starten oder zu beeinflussen?

telinit u

'man telinit' - U oder u, um anzufordern, dass der init (8) -Daemon sich selbst erneut ausführt. Dies wird nicht empfohlen, da Upstart derzeit seinen Status nicht beibehalten kann, dies jedoch beim Upgrade von Systembibliotheken erforderlich ist.


Um die Bedrohung in begrenztem Umfang sofort zu mindern, müssen Sie die umgekehrten DNS-Überprüfungen in allen Ihren öffentlich zugänglichen Diensten deaktivieren. Sie können beispielsweise die umgekehrte DNS-Überprüfung in SSH deaktivieren, indem Sie in Ihrem System UseDNSauf nofestlegen /etc/ssh/sshd_config.

Quellen (und weitere Informationen):

  1. https://access.redhat.com/articles/1332213
  2. http://www.cyberciti.biz/faq/cve-2015-0235-patch-ghost-on-debian-ubuntu-fedora-centos-rhel-linux/
  3. http://www.openwall.com/lists/oss-security/2015/01/27/9
  4. /security/80210/ghost-bug-ist-die-einfach-zu-prüfen-wenn-mein-System-gesichert ist
  5. http://bobcares.com/blog/ghost-hunting-resolving-glibc-remote-code-execution-vulnerability-cve-2015-0235-in-centos-red-hat-ubuntu-debian-and-suse-linux- Server
  6. https://community.qualys.com/blogs/laws-of-vulnerabilities/2015/01/27/the-ghost-vulnerability
  7. https://security-tracker.debian.org/tracker/CVE-2015-0235
devnull
quelle
1
Nitpick: Der Code für den Schwachstellentest stammt von Qualys, nicht von Openwall. Der Openwall-Beitrag, auf den verwiesen wird, ist einfach die Empfehlung von Qualys, die in ihrer Mailingliste veröffentlicht wird.
Muru
"Aufgrund der großen Anzahl von Anwendungen / Systemdienstprogrammen, die von glibc abhängig sind" -> Sie können das Zeug genauso gut herausnehmen oder die Tatsache betonen, dass 100% von absolut allem direkt von libc abhängt, mit Ausnahme von sehr merkwürdigen Dingen, die als kompiliert wurden ein riesiger statischer Klumpen. Vielen Dank für die BTW!
Goldlöckchen
@goldilocks, danke für den Vorschlag. Ich habe es zusammen mit einigen anderen Dingen bearbeitet. Froh, dass es hilft!
Devnull