ช่องโหว่ผี - CVE-2015-0235


13

ที่ไม่ช่องโหว่ผีจำเป็นต้องเข้าถึง (ในขณะที่เป็นอยู่ในระบบต่อผู้ใช้) กับระบบปฏิบัติการได้รับผลกระทบในคำถาม? บางคนสามารถอธิบาย 'ผู้โจมตีจากระยะไกลที่สามารถโทรแอปพลิเคชัน' ได้หรือไม่? ฉันดูเหมือนจะหาการทดสอบเพื่อทำงานบนระบบโลคัลโดยตรง แต่ไม่ใช่จากโฮสต์ระยะไกล

ข้อมูลทั้งหมดที่ฉันได้รวบรวมเกี่ยวกับGhost Vulnerabilityจากหลายแหล่ง (เครดิตไปยังแหล่งข้อมูลเหล่านั้น) ฉันได้โพสต์ไว้ด้านล่างในคำตอบในกรณีที่คนอื่นอยากรู้อยากเห็น

แก้ไขฉันพบคำตอบของฉัน:

ในระหว่างการตรวจสอบรหัสนักวิจัย Qualys ค้นพบบัฟเฟอร์มากเกินไปในฟังก์ชัน __nss_hostname_digits_dots () ของ glibc ข้อผิดพลาดนี้สามารถถูกเรียกทั้งในประเทศและจากระยะไกลผ่านฟังก์ชั่น gethostbyname * () ทั้งหมด แอปพลิเคชันสามารถเข้าถึงตัวแก้ไข DNS เป็นหลักผ่านชุดฟังก์ชัน gethostbyname * () ฟังก์ชั่นเหล่านี้แปลงชื่อโฮสต์เป็นที่อยู่ IP


อาจเพิ่มลิงก์ไปยังไซต์ความปลอดภัย SE เช่นsecurity.stackexchange.com/q/80210/1341และโพสต์อื่น ๆ ที่นั่นด้วยใช่ไหม
MattBianco

Muru ฉันย้ายเนื้อหาไปเป็นคำตอบ ขอบคุณสำหรับคำแนะนำ MattBianco ฉันยังเพิ่มลิงค์นั้นขอบคุณ
devnull

ฉันอัพเดตคำถามเพื่อลบความกำกวมใด ๆ
devnull

คำตอบ:


20

ตอบคำถามของฉันจากQualys :

ในระหว่างการทดสอบเราได้พัฒนาแนวคิดที่พิสูจน์ได้ซึ่งเราส่งอีเมลที่สร้างขึ้นเป็นพิเศษไปยังเซิร์ฟเวอร์อีเมลและสามารถรับเชลล์ระยะไกลไปยังเครื่อง Linux ได้ สิ่งนี้ข้ามการป้องกันที่มีอยู่ทั้งหมด (เช่น ASLR, PIE และ NX) บนระบบทั้งแบบ 32 บิตและ 64 บิต


รวบรวมงานวิจัยของฉันด้านล่างสำหรับคนอื่นมอง:


คำปฏิเสธ

แม้จะมีกระทู้ / บล็อกอื่น ๆ อีกมากมายที่บอกคุณได้ฉันขอแนะนำไม่ให้อัพเดททุกระบบปฏิบัติการที่คุณตาบอดโดยไม่ต้องทดสอบglibcอัพเดตเหล่านี้อย่างถี่ถ้วน มีรายงานว่าการอัพเดต glibc ทำให้แอปพลิเคชั่นขนาดใหญ่บังคับให้ผู้ใช้ย้อนกลับการอัปเดต glibc ไปเป็นเวอร์ชันก่อนหน้า

ไม่เพียงแค่อัปเดตสภาพแวดล้อมการผลิตโดยไม่ต้องทดสอบ


ข้อมูลพื้นฐาน

GHOST เป็นบั๊ก 'บัฟเฟอร์โอเวอร์โฟลว์' ที่มีผลต่อการเรียกใช้ฟังก์ชัน gethostbyname () และ gethostbyname2 () ในไลบรารี glibc ช่องโหว่นี้อนุญาตให้ผู้โจมตีจากระยะไกลสามารถเรียกใช้แอปพลิเคชั่นไปยังฟังก์ชันเหล่านี้เพื่อเรียกใช้รหัสโดยอำเภอใจด้วยสิทธิ์ของผู้ใช้ที่เรียกใช้แอปพลิเคชัน

ส่งผลกระทบ

การเรียกใช้ฟังก์ชัน gethostbyname () ใช้สำหรับการแก้ปัญหา DNS ซึ่งเป็นเหตุการณ์ที่พบบ่อยมาก ในการใช้ประโยชน์จากช่องโหว่นี้ผู้โจมตีจะต้องทริกเกอร์บัฟเฟอร์โอเวอร์โฟลว์โดยส่งอาร์กิวเมนต์ชื่อโฮสต์ที่ไม่ถูกต้องไปยังแอปพลิเคชันที่ทำการแก้ไข DNS

รายการปัจจุบันของ distros Linux ที่ได้รับผลกระทบ

RHEL (Red Hat Enterprise Linux) รุ่น 5.x, 6.x และ 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 เวอร์ชั่น 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 รุ่น 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 เวอร์ชั่น 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 เวอร์ชัน 13.0

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

Fedora Linux เวอร์ชั่น 19 (หรือสูงกว่าควรอัพเกรด)

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 (เวอร์ชั่นที่เก่ากว่า 11 ควรอัปเกรด)

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


แพ็คเกจ / แอปพลิเคชั่นใดยังคงใช้ glibc ที่ถูกลบอยู่?

( เครดิตถึง Gilles )

สำหรับ 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}'

สำหรับ 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}'

ระบบ Linux ของฉันใช้ไลบรารีไลบรารี่รุ่นใด (glibc)

วิธีที่ง่ายที่สุดในการตรวจสอบหมายเลขเวอร์ชันคือการเรียกใช้คำสั่งต่อไปนี้:

ldd --version

ตัวอย่างผลลัพธ์จาก 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.

ตัวอย่างผลลัพธ์จาก 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.

ตัวอย่างผลลัพธ์จาก 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

University of Chicago เป็นเจ้าภาพสคริปต์ด้านล่างสำหรับการดาวน์โหลดง่าย:

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

รวบรวมและเรียกใช้ดังนี้:

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

Red Hat Access Lab: เครื่องมือ GHOSTอย่าใช้เครื่องมือนี้การรายงานไม่ถูกต้องตัวตรวจสอบช่องโหว่จาก Qualys นั้นถูกต้อง


ปะ


CentOS / RHEL / Fedora / Scientific Linux

sudo yum clean all
sudo yum update

ตอนนี้รีสตาร์ทเพื่อรับผลกระทบ:

sudo reboot

อีกทางหนึ่งถ้ามิเรอร์ของคุณไม่มีแพ็คเกจล่าสุดให้ดาวน์โหลดด้วยตนเอง * หมายเหตุ: สำหรับผู้ใช้ขั้นสูงเพิ่มเติม

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

เริ่มต้นใหม่:

sudo reboot

SUSE Linux Enterprise

ในการติดตั้ง SUSE Security Update นี้ให้ใช้ YaST online_update หรือใช้คำสั่งต่อไปนี้ตามเวอร์ชั่นของคุณ:

ชุดพัฒนาซอฟต์แวร์ SUSE Linux Enterprise 11 SP3

zypper in -t patch sdksp3-glibc-10206

SUSE Linux Enterprise Server 11 SP3 สำหรับ 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

ในที่สุดก็รันสำหรับ SUSE linux version ทั้งหมดเพื่อให้ระบบของคุณทันสมัย:

zypper patch

OpenSUSE Linux

หากต้องการดูรายการของการอัพเดตที่มีอยู่รวมถึง glibc บน OpenSUSE Linux ให้ป้อน:

zypper lu

ในการอัปเดตแพ็คเกจ glibc ที่ติดตั้งด้วยรุ่นที่ใหม่กว่าได้ง่ายให้รัน:

zypper up

เกือบทุกโปรแกรมที่รันบนเครื่องของคุณจะใช้ glibc คุณต้องรีสตาร์ททุกบริการหรือแอพที่ใช้ glibc เพื่อให้แน่ใจว่าแพตช์มีผล ดังนั้นจึงแนะนำให้รีบูตเครื่อง


วิธีการเริ่มต้นใหม่โดยไม่ต้องเริ่มต้นใหม่หรือส่งผลกระทบต่อระบบ?

telinit u

'man telinit' - U หรือ u เพื่อขอให้ init (8) daemon เรียกใช้งานตัวเองอีกครั้ง ไม่แนะนำให้ทำเช่นนี้เนื่องจาก Upstart ไม่สามารถแสดงสถานะล่วงหน้าได้ แต่มีความจำเป็นเมื่ออัพเกรดไลบรารีระบบ


ในการลดภัยคุกคามในลักษณะที่จำกัดโดยทันทีคือการปิดใช้งานการตรวจสอบ DNS ย้อนกลับในบริการสาธารณะทั้งหมดของคุณ ตัวอย่างเช่นคุณสามารถปิดใช้งานการตรวจสอบย้อนกลับใน DNS SSH โดยการตั้งค่าUseDNSไปในของคุณno/etc/ssh/sshd_config

แหล่งที่มา (และข้อมูลเพิ่มเติม):

  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- เซิร์ฟเวอร์
  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: รหัสทดสอบความเสี่ยงนั้นมาจาก Qualys ไม่ใช่จาก Openwall โพสต์ Openwall ที่ลิงก์ไปนั้นเป็นเพียงการแนะนำ Qualys ที่โพสต์ในรายชื่อผู้รับจดหมาย
muru

"เนื่องจากแอปพลิเคชัน / ระบบสาธารณูปโภคจำนวนมากขึ้นอยู่กับ glibc" -> คุณอาจนำสิ่งนั้นออกมาหรือเน้นความจริงที่ว่า100% ของทุกสิ่งขึ้นอยู่กับ libc โดยตรงยกเว้นสิ่งแปลก ๆ ที่ได้รวบรวมเป็น ก้อนยักษ์แบบคงที่ ขอบคุณสำหรับ BTW!
goldilocks

@ goldilocks ขอบคุณสำหรับคำแนะนำ ฉันแก้ไขมันพร้อมกับสิ่งอื่น ๆ ดีใจที่มันช่วย!
devnull
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.