Hayalet Güvenlik Açığı - CVE-2015-0235


13

Does Hayalet güvenlik açığı söz konusu etkilenen OS (bir kullanıcı oturum olmak gibi) erişim gerektirir? Birisi 'uygulama çağrısı yapabilen uzak saldırganı' netleştirebilir mi? Sadece yerel sistemde çalışacak testleri buluyorum, ancak uzak bir ana bilgisayardan değil.

Şimdiye kadar çok sayıda kaynaktan (bu kaynaklara verilen krediler) Hayalet Güvenlik Açığı hakkında topladığım tüm bilgiler, başka birinin merak etmesi durumunda aşağıda bir cevapta yayınladım.

Düzenle, cevabımı buldum :

Kod denetimi sırasında Qualys araştırmacıları, glibc'nin __nss_hostname_digits_dots () işlevinde bir arabellek taşması buldular. Bu hata, tüm gethostbyname * () işlevleri aracılığıyla hem yerel olarak hem de uzaktan tetiklenebilir . Uygulamaların DNS çözümleyicisine öncelikle gethostbyname * () işlevler kümesi aracılığıyla erişimi vardır. Bu işlevler bir ana bilgisayar adını IP adresine dönüştürür.


belki güvenlik SE sitesine bazı güvenlik bağlantıları ekleyin, örneğin security.stackexchange.com/q/80210/1341 ve diğer yayınlar da?
MattBianco

Muru, içeriği bir cevaba taşıdım. Önerin için teşekkürler. MattBianco, ben de bu bağlantıyı ekledim, teşekkürler.
devnull

Herhangi bir belirsizliği kaldırmak için soruyu güncelledim.
devnull

Yanıtlar:


20

Sorumun cevabı Qualys'ten :

Testlerimiz sırasında, bir posta sunucusuna özel olarak oluşturulmuş bir e-posta gönderdiğimiz ve Linux makinesine uzak bir kabuk alabileceğimiz bir kavram kanıtı geliştirdik. Bu , hem 32 bit hem de 64 bit sistemlerde mevcut tüm korumaları (ASLR, PIE ve NX gibi) atlar .


Aşağıdaki derlenmiş araştırmamı arayan herkes:


feragat

Diğer konuları bir sürü / bloglar söyleyebilir şeye ben önermek rağmen değil hemen her OS güncellemek için iyice bu test olmadan körlemesine sahip glibcgüncelleştirmeleri. Glibc güncellemelerinin büyük uygulama segfaultlarının insanları glibc güncellemelerini önceki sürümlerine geri döndürmeye zorladığı bildirildi.

Biri bir üretim ortamını test etmeden toplu olarak güncellemez.


Arkaplan bilgisi

GHOST, glibc kütüphanesindeki gethostbyname () ve gethostbyname2 () işlev çağrılarını etkileyen bir 'arabellek taşması' hatasıdır. Bu güvenlik açığı, bu işlevlerden birini uygulama çağrısı yapabilen bir uzak saldırganın uygulamayı çalıştıran kullanıcının izinleriyle rasgele kod yürütmesine olanak tanır.

Etki

Gethostbyname () işlev çağrıları, çok yaygın bir olay olan DNS çözümlemesi için kullanılır. Bu güvenlik açığından yararlanmak için, bir saldırganın DNS çözümlemesi yapan bir uygulamaya geçersiz bir ana bilgisayar adı bağımsız değişkeni sağlayarak arabellek taşmasını tetiklemesi gerekir.

Etkilenen Linux dağıtımlarının güncel listesi

RHEL (Red Hat Enterprise Linux) sürüm 5.x, 6.x ve 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 sürüm 5.x, 6.x ve 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 sürüm 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 sürüm 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 sürüm 13.0

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

Fedora Linux sürüm 19 (veya daha eski sürüm yükseltilmelidir)

Fedora 19 - vulnerable - EOL on Jan 6, 2014 (upgrade to Fedora 20/21 for patch)

SUSE Linux Kurumsal

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 (11'den eski sürümler yükseltilmelidir)

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


Silinen glibc'yi hala hangi paketler / uygulamalar kullanıyor?

( Gilles'e kredi )

CentOS / RHEL / Fedora / Scientific Linux için:

   lsof -o / | awk '
   BEGIN {
       while (("rpm -ql glibc | grep \\\\.so\\$" | getline) > 0)
           libs[$0] = 1
   }
   $4 == "DEL" && $8 in libs {print $1, $2}'

Ubuntu / Debian Linux için:

   lsof -o / | awk '
   BEGIN {
       while (("dpkg -L libc6:amd64 | grep \\\\.so\\$" | getline) > 0)
           libs[$0] = 1
   }
   $4 == "DEL" && $8 in libs {print $1, $2}'

Linux sistemim hangi C kütüphanesi (glibc) sürümünü kullanıyor?

Sürüm numarasını kontrol etmenin en kolay yolu aşağıdaki komutu çalıştırmaktır:

ldd --version

RHEL / CentOS Linux v6.6'dan örnek çıktılar:

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.

Ubuntu Linux 12.04.5 LTS'den örnek çıktılar:

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.

Debian Linux v7.8'den örnek çıktılar:

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 güvenlik açığı kontrolü

Chicago Üniversitesi, kolay indirme için aşağıdaki betiği barındırmaktadır:

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

Aşağıdaki gibi derleyin ve çalıştırın:

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

Red Hat Access Lab: GHOST aracı Bu aracı kullanmayın, raporlaması yanlış, Qualys'in Güvenlik Açığı denetleyicisi doğrudur.


yama


CentOS / RHEL / Fedora / Bilimsel Linux

sudo yum clean all
sudo yum update

Etkilenmek için şimdi yeniden başlatın:

sudo reboot

Alternatif olarak, aynanız en yeni paketleri içermiyorsa, bunları manuel olarak indirmeniz yeterlidir. * not: Daha ileri düzey kullanıcılar için

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

Tekrar başlat:

sudo reboot

SUSE Linux Kurumsal

Bu SUSE Güvenlik Güncelleştirmesini yüklemek için YaST online_update komutunu kullanın. Veya sürümünüze göre aşağıdaki komutları kullanın:

SUSE Linux Kurumsal Yazılım Geliştirme Kiti 11 SP3

zypper in -t patch sdksp3-glibc-10206

VMware için SUSE Linux Enterprise Server 11 SP3

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 Kurumsal Masaüstü 11 SP3

zypper in -t patch sledsp3-glibc-10206

Son olarak sisteminizi güncel hale getirmek için tüm SUSE linux sürümü için çalıştırın:

zypper patch

OpenSUSE Linux

OpenSUSE Linux'ta glibc dahil mevcut güncellemelerin bir listesini görmek için şunu girin:

zypper lu

Kurulu glibc paketlerini daha yeni mevcut sürümleriyle güncellemek için şunu çalıştırın:

zypper up

Makinenizde çalışan hemen hemen her program glibc kullanır. Düzeltme ekinin geçerli olmasını sağlamak için glibc kullanan her hizmeti veya uygulamayı yeniden başlatmanız gerekir. Bu nedenle, yeniden başlatma önerilir.


Sistemi yeniden başlatmadan veya etkilemeden init nasıl yeniden başlatılır?

telinit u

'man telinit' - init (8) arka plan programının kendini yeniden yürütmesini istemek için U veya u. Upstart şu anda durumunu önceden sunamadığından bu önerilmez, ancak sistem kitaplıklarını yükseltirken gereklidir.


Tehdidi hemen sınırlı bir şekilde azaltmak, halka açık tüm hizmetlerinizde ters DNS kontrollerini devre dışı bırakmaktır. Örneğin, ayarı tarafından SSH içinde ters DNS denetimler devre dışı UseDNSetmek noGözlerinde farklı /etc/ssh/sshd_config.

Kaynaklar (ve daha fazla bilgi):

  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-is-there-a-simple-way-to-test-if-my-system-is-secure
  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- sunucular
  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

1
Nitpick: Güvenlik açığı test kodu Openwall'tan değil Qualys'den alınmıştır. Bağlantılı Openwall postası, e-posta listelerinde yayınlanan Qualys danışma belgesidir.
muru

"Glibc'ye bağlı çok sayıda uygulama / sistem yardımcı programı nedeniyle" -> Siz de bunları çıkartabilir ya da derlenmiş çok garip şeyler dışında kesinlikle her şeyin% 100'ünün doğrudan libc'ye bağlı olduğunu vurgulayabilirsiniz. dev bir statik yumru. BTW için teşekkürler!
goldilocks

@ goldilocks, öneriniz için teşekkürler. Diğer bazı şeylerle birlikte düzenledim. Yardım etmekten memnunum!
devnull
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.