Kerentanan Hantu - CVE-2015-0235

13

Apakah Kerentanan Hantu memerlukan akses (seperti menjadi pengguna yang masuk) ke OS yang bersangkutan? Dapatkah seseorang mengklarifikasi 'penyerang jarak jauh yang dapat melakukan panggilan aplikasi'? Saya hanya menemukan tes untuk dijalankan pada sistem lokal secara langsung tetapi tidak dari host jarak jauh.

Semua informasi yang saya kumpulkan sejauh ini tentang Kerentanan Hantu dari berbagai sumber (kredit untuk sumber-sumber itu) telah saya posting di bawah dalam sebuah jawaban jika ada orang lain yang penasaran.

Edit, saya menemukan jawaban saya :

Selama audit kode, peneliti Qualys menemukan buffer overflow dalam fungsi __nss_hostname_digits_dots () dari glibc. Bug ini dapat dipicu baik secara lokal maupun jarak jauh melalui semua fungsi gethostbyname * (). Aplikasi memiliki akses ke resolver DNS terutama melalui fungsi gethostbyname * (). Fungsi-fungsi ini mengubah nama host menjadi alamat IP.

devnull
sumber
mungkin menambahkan beberapa tautan ke situs SE keamanan, seperti security.stackexchange.com/q/80210/1341 dan posting lain di sana juga?
MattBianco
Muru, saya memindahkan konten ke sebuah jawaban. Terima kasih untuk sarannya. MattBianco, saya juga menambahkan tautan itu, Terima kasih.
devnull
Saya memperbarui pertanyaan untuk menghapus ambiguitas.
devnull

Jawaban:

20

Jawab pertanyaan saya, dari Qualys :

Selama pengujian kami, kami mengembangkan konsep bukti di mana kami mengirim e-mail yang dibuat khusus ke server surat dan bisa mendapatkan shell jarak jauh ke mesin Linux. Ini melewati semua perlindungan yang ada (seperti ASLR, PIE dan NX) pada sistem 32-bit dan 64-bit.


Penelitian terkompilasi saya di bawah ini untuk orang lain yang mencari:


Penolakan

Terlepas dari apa yang mungkin diberitahukan oleh banyak utas / blog lain kepada Anda, saya sarankan untuk tidak segera memperbarui setiap OS yang Anda miliki secara membabi buta tanpa secara menyeluruh menguji glibcpembaruan ini . Telah dilaporkan bahwa pembaruan glibc telah menyebabkan segfault aplikasi besar-besaran yang memaksa orang untuk memutar kembali pembaruan glibc mereka ke versi sebelumnya.

Seseorang tidak hanya memperbarui lingkungan produksi secara massal tanpa pengujian.


Informasi latar belakang

GHOST adalah bug 'buffer overflow' yang memengaruhi panggilan fungsi gethostbyname () dan gethostbyname2 () di pustaka glibc. Kerentanan ini memungkinkan penyerang jarak jauh yang mampu membuat panggilan aplikasi ke salah satu dari fungsi ini untuk mengeksekusi kode arbitrer dengan izin dari pengguna yang menjalankan aplikasi.

Dampak

Panggilan fungsi gethostbyname () digunakan untuk menyelesaikan DNS, yang merupakan peristiwa yang sangat umum. Untuk mengeksploitasi kerentanan ini, penyerang harus memicu buffer overflow dengan memberikan argumen nama host yang tidak valid ke aplikasi yang melakukan resolusi DNS.

Daftar saat ini dari distro Linux yang terpengaruh

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

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

Fedora Linux versi 19 (atau yang lebih lama harus ditingkatkan)

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 (versi yang lebih tua dari 11 harus ditingkatkan)

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


Paket / aplikasi apa yang masih menggunakan glibc yang terhapus?

( kredit untuk Gilles )

Untuk 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}'

Untuk 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}'

Versi C library (glibc) apa yang digunakan sistem Linux saya?

Cara termudah untuk memeriksa nomor versi adalah dengan menjalankan perintah berikut:

ldd --version

Contoh keluaran dari 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.

Contoh keluaran dari 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.

Contoh keluaran dari 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.

Pemeriksaan kerentanan GHOST

University of Chicago menyelenggarakan skrip di bawah ini untuk memudahkan pengunduhan:

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

Kompilasi dan jalankan sebagai berikut:

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

Red Hat Access Lab: Alat GHOST Jangan gunakan alat ini, pelaporannya salah, pemeriksa kerentanan dari Qualys akurat.


Menambal


CentOS / RHEL / Fedora / Scientific Linux

sudo yum clean all
sudo yum update

Sekarang restart untuk mengambil efek:

sudo reboot

Atau, jika mirror Anda tidak mengandung paket-paket terbaru, cukup unduh secara manual. * catatan: Untuk pengguna yang lebih mahir

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

Mengulang kembali:

sudo reboot

SUSE Linux Enterprise

Untuk menginstal Pembaruan Keamanan SUSE ini gunakan YaST online_update. Atau gunakan perintah berikut sesuai versi Anda:

SUSE Kit Pengembangan Perangkat Lunak Perusahaan Linux 11 SP3

zypper in -t patch sdksp3-glibc-10206

SUSE Linux Enterprise Server 11 SP3 untuk 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

Terakhir jalankan untuk semua versi SUSE linux untuk membuat sistem Anda mutakhir:

zypper patch

OpenSUSE Linux

Untuk melihat daftar pembaruan yang tersedia termasuk glibc di OpenSUSE Linux, masukkan:

zypper lu

Untuk memperbarui paket glibc yang terinstal dengan versi terbaru yang tersedia, jalankan:

zypper up

Hampir setiap program yang berjalan pada mesin Anda menggunakan glibc. Anda perlu memulai kembali setiap layanan atau aplikasi yang menggunakan glibc untuk memastikan tambalan berlaku. Karena itu, disarankan untuk reboot.


Bagaimana cara me-restart init tanpa memulai ulang atau memengaruhi sistem?

telinit u

'man telinit' - U atau u untuk meminta daemon init (8) mengeksekusi ulang dirinya sendiri. Ini tidak disarankan karena Upstart saat ini tidak dapat melakukan pra-servis kondisinya, tetapi diperlukan saat memutakhirkan pustaka sistem.


Untuk segera mengurangi ancaman secara terbatas adalah dengan menonaktifkan cek DNS terbalik di semua layanan yang Anda hadapi di depan umum. Misalnya, Anda dapat menonaktifkan pemeriksaan DNS terbalik di SSH dengan mengatur UseDNSke nodalam /etc/ssh/sshd_config.

Sumber (dan informasi lebih lanjut):

  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- 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
sumber
1
Nitpick: Kode uji kerentanan berasal dari Qualys, bukan dari Openwall. Posting Openwall yang ditautkan hanyalah penasihat Qualys yang diposting di milis mereka.
muru
"Karena banyaknya aplikasi / utilitas sistem yang bergantung pada glibc" -> Anda sebaiknya mengeluarkannya, atau menekankan fakta bahwa 100% dari segalanya semuanya tergantung langsung pada libc kecuali untuk hal-hal sangat aneh yang telah dikompilasi sebagai benjolan statis raksasa. Terima kasih untuk BTW ini!
goldilocks
@goldilocks, terima kasih atas sarannya. Saya mengeditnya bersama beberapa hal lainnya. Senang membantu!
devnull