Lỗ hổng ma - CVE-2015-0235


13

Liệu ma dễ bị tổn thương yêu cầu truy cập (như trong là một người dùng đăng nhập) cho hệ điều hành thực hiện trong câu hỏi? Ai đó có thể làm rõ 'kẻ tấn công từ xa có thể thực hiện cuộc gọi ứng dụng' không? Tôi dường như chỉ tìm thấy các bài kiểm tra để chạy trực tiếp trên hệ thống cục bộ chứ không phải từ một máy chủ từ xa.

Tất cả thông tin tôi đã thu thập được cho đến nay về Tính dễ bị tổn thương của Ghost từ nhiều nguồn (tín dụng cho các nguồn đó) tôi đã đăng dưới đây trong một câu trả lời trong trường hợp bất kỳ ai khác tò mò.

Chỉnh sửa, tôi tìm thấy câu trả lời của mình :

Trong quá trình kiểm tra mã, các nhà nghiên cứu của Qualys đã phát hiện ra lỗi tràn bộ đệm trong hàm __nss_hostname_digits_dots () của glibc. Lỗi này có thể được kích hoạt cả cục bộ và từ xa thông qua tất cả các hàm gethostbyname * (). Các ứng dụng có quyền truy cập vào trình phân giải DNS chủ yếu thông qua bộ hàm gethostbyname * (). Các chức năng này chuyển đổi tên máy chủ thành địa chỉ IP.


có lẽ thêm một số liên kết đến trang web SE bảo mật, chẳng hạn như security.stackexchange.com/q/80210/1341 và các bài đăng khác ở đó?
MattBianco

Muru, tôi chuyển nội dung đến một câu trả lời. Cám ơn vì sự gợi ý. MattBianco, tôi cũng đã thêm liên kết đó, Cảm ơn.
tà đạo

Tôi cập nhật câu hỏi để loại bỏ bất kỳ sự mơ hồ.
tà đạo

Câu trả lời:


20

Trả lời câu hỏi của tôi, từ Qualys :

Trong quá trình thử nghiệm, chúng tôi đã phát triển một khái niệm bằng chứng trong đó chúng tôi gửi e-mail được tạo đặc biệt đến máy chủ thư và có thể nhận được một vỏ từ xa đến máy Linux. Điều này bỏ qua tất cả các biện pháp bảo vệ hiện có (như ASLR, PIE và NX) trên cả hệ thống 32 bit và 64 bit.


Nghiên cứu tổng hợp của tôi dưới đây cho bất cứ ai khác tìm kiếm:


Khước từ

Mặc dù rất nhiều chủ đề / blog khác có thể nói với bạn, tôi khuyên bạn không nên cập nhật ngay lập tức mọi hệ điều hành mà bạn có một cách mù quáng mà không kiểm tra kỹ các glibcbản cập nhật này . Nó đã được báo cáo rằng các bản cập nhật glibc đã gây ra sự phân biệt ứng dụng lớn buộc mọi người phải quay lại các bản cập nhật glibc của họ về phiên bản trước.

Một người không chỉ đơn giản là cập nhật hàng loạt một môi trường sản xuất mà không cần thử nghiệm.


Thông tin lai lịch

GHOST là một lỗi 'tràn bộ đệm' ảnh hưởng đến các lệnh gọi hàm gethostbyname () và gethostbyname2 () trong thư viện glibc. Lỗ hổng này cho phép kẻ tấn công từ xa có thể thực hiện cuộc gọi ứng dụng đến một trong hai chức năng này để thực thi mã tùy ý với sự cho phép của người dùng chạy ứng dụng.

Sự va chạm

Các lệnh gọi hàm gethostbyname () được sử dụng để phân giải DNS, đây là một sự kiện rất phổ biến. Để khai thác lỗ hổng này, kẻ tấn công phải kích hoạt tràn bộ đệm bằng cách cung cấp đối số tên máy chủ không hợp lệ cho ứng dụng thực hiện độ phân giải DNS.

Danh sách hiện tại của các bản phân phối Linux bị ảnh hưởng

RHEL (Red Hat Enterprise Linux) phiên bản 5.x, 6.x và 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

Phiên bản CentOS Linux 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 phiên bản 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 phiên bản 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

Phiên bản Linux Mint 13.0

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

Fedora Linux phiên bản 19 (hoặc cũ hơn nên nâng cấp)

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

SUSE Linux doanh nghiệp

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 (phiên bản cũ hơn 11 nên nâng cấp)

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


Những gói / ứng dụng nào vẫn đang sử dụng glibc đã bị xóa?

( tín dụng cho Gilles )

Đối với CentOS / RHEL / Fedora / Khoa học Linux:

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

Đối với 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}'

Hệ thống Linux của tôi sử dụng phiên bản thư viện C nào (glibc)?

Cách dễ nhất để kiểm tra số phiên bản là chạy lệnh sau:

ldd --version

Các kết quả đầu ra mẫu từ 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.

Các kết quả đầu ra mẫu từ 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.

Các kết quả đầu ra mẫu từ 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.

Kiểm tra lỗ hổng GHOST

Đại học Chicago đang lưu trữ tập lệnh dưới đây để dễ dàng tải xuống:

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

Biên dịch và chạy nó như sau:

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

Red Hat Access Lab: Công cụ GHOST Không sử dụng công cụ này, báo cáo của nó là sai, trình kiểm tra lỗ hổng từ Qualys là chính xác.



CentOS / RHEL / Fedora / Khoa học Linux

sudo yum clean all
sudo yum update

Bây giờ khởi động lại để có ảnh hưởng:

sudo reboot

Ngoài ra, nếu gương của bạn không chứa các gói mới nhất, chỉ cần tải xuống thủ công. * lưu ý: Dành cho người dùng cao cấp hơn

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

Khởi động lại:

sudo reboot

SUSE Linux doanh nghiệp

Để cài đặt Cập nhật bảo mật SUSE này, hãy sử dụng YaST online_update. Hoặc sử dụng các lệnh sau theo phiên bản của bạn:

Bộ phát triển phần mềm SUSE Linux Enterprise 11 SP3

zypper in -t patch sdksp3-glibc-10206

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

Cuối cùng chạy cho tất cả các phiên bản SUSE linux để mang đến cho hệ thống của bạn cập nhật:

zypper patch

OpenSUSE Linux

Để xem danh sách các bản cập nhật khả dụng, bao gồm cả glibc trên OpenSUSE Linux, hãy nhập:

zypper lu

Để chỉ cập nhật các gói glibc đã cài đặt với các phiên bản mới hơn có sẵn, hãy chạy:

zypper up

Gần như mọi chương trình chạy trên máy của bạn đều sử dụng glibc. Bạn cần khởi động lại mọi dịch vụ hoặc ứng dụng sử dụng glibc để đảm bảo bản vá có hiệu lực. Do đó, một khởi động lại được khuyến khích.


Làm thế nào để khởi động lại init mà không khởi động lại hoặc ảnh hưởng đến hệ thống?

telinit u

'man telinit' - U hoặc u để yêu cầu init (8) daemon tự thực thi lại. Điều này không được khuyến khích vì Upstart hiện không thể phục vụ trước trạng thái của nó, nhưng là cần thiết khi nâng cấp thư viện hệ thống.


Để giảm thiểu mối đe dọa ngay lập tức theo cách hạn chế là bằng cách vô hiệu hóa kiểm tra DNS ngược trong tất cả các dịch vụ đối mặt công khai của bạn. Ví dụ: bạn có thể vô hiệu hóa kiểm tra DNS ngược trong SSH bằng cách đặt UseDNSthành notrong /etc/ssh/sshd_config.

Nguồn (và thêm thông tin):

  1. https://access.redhat.com/articles/1332213
  2. http://www.cyberciti.biz/faq/cve-2015-0235-patch-ghost-on-debian-ubfox-fedora-centos-rhel-linux/
  3. http://www.openwall.com/lists/oss-security/2015/01/27/9
  4. /security/80210/ghost-orms-is-there-a-simple-way-to-test-if-my-system-is-secure
  5. http://bobcares.com/blog/ghost-hunting-resolve-glibc-remote-code-execut-vulnerability-cve-2015-0235-in-centos-red-hat-ubfox-debian-and-suse-linux- may chủ
  6. https://community.qualys.com/bloss/laws-of-vulnerabilities/2015/01/27/the-ghost-vulnerability
  7. https://security-tracker.debian.org/tracker/CVE-2015-0235

1
Nitpick: Mã kiểm tra lỗ hổng là từ Qualys, không phải từ Openwall. Bài đăng Openwall được liên kết đến chỉ đơn giản là lời khuyên Qualys được đăng trong danh sách gửi thư của họ.
muru

"Do số lượng lớn các ứng dụng / tiện ích hệ thống phụ thuộc vào glibc" -> Bạn cũng có thể loại bỏ những thứ đó hoặc nhấn mạnh thực tế là 100% mọi thứ hoàn toàn phụ thuộc trực tiếp vào libc ngoại trừ những thứ rất kỳ lạ đã được biên dịch như một cục tĩnh khổng lồ. Cảm ơn điều này cho BTW!
goldilocks

@goldilocks, cảm ơn bạn đã gợi ý. Tôi đã chỉnh sửa nó cùng với một số thứ khác. Vui vì nó giúp!
devnull
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.