고스트 취약점 (CVE-2015-0235)


13

Ghost 취약점 으로 인해 영향을받는 OS에 대한 액세스 권한이 필요 합니까 (로그인 한 사용자와 동일)? 누군가가 '응용 프로그램 호출을 할 수있는 원격 공격자'를 명확히 할 수 있습니까? 로컬 시스템에서 직접 테스트해야하지만 원격 호스트에서는 테스트를 찾지 못하는 것 같습니다.

지금까지 여러 출처 (그 출처에 대한 신용) 의 고스트 취약점 (Ghost Vulnerability) 에 관해 수집 한 모든 정보는 다른 사람이 궁금한 경우에 대한 답변으로 아래에 게시했습니다.

편집, 내 대답을 찾았습니다 .

코드 감사 중 Qualys 연구원은 glibc의 __nss_hostname_digits_dots () 함수에서 버퍼 오버 플로우를 발견했습니다. 이 버그는 모든 gethostbyname * () 함수를 통해 로컬 및 원격으로 트리거 될 수 있습니다 . 응용 프로그램은 주로 gethostbyname * () 함수 집합을 통해 DNS 확인자에 액세스 할 수 있습니다. 이 함수는 호스트 이름을 IP 주소로 변환합니다.


security.stackexchange.com/q/80210/1341 및 기타 게시물과 같은 보안 SE 사이트에 대한 링크를 추가 합니까?
MattBianco

Muru, 내용을 답변으로 옮겼습니다. 제안 해 주셔서 감사합니다. MattBianco, 나는 또한 그 링크를 추가했습니다. 감사합니다.
devnull

모호성을 제거하기 위해 질문을 업데이트했습니다.
devnull

답변:


20

Qualys의 내 질문에 대한 답변 :

테스트하는 동안 특수하게 생성 된 전자 메일을 메일 서버로 보내고 Linux 시스템에 원격 셸을 가져올 수있는 개념 증명을 개발했습니다. 이는 32 비트 및 64 비트 시스템에서 기존의 모든 보호 기능 (ASLR, PIE 및 NX 등)을 무시합니다 .


다른 사람들을 위해 아래에 내 컴파일 된 연구 :


기권

다른 많은 스레드 / 블로그에서 알 수 있듯이이 업데이트 를 철저히 테스트하지 않고 맹목적으로 모든 OS를 즉시 업데이트 하지 않는 것이 좋습니다 glibc. glibc 업데이트로 인해 대규모 애플리케이션 segfault가 발생하여 사람들이 glibc 업데이트를 이전 버전으로 롤백해야한다고보고되었습니다.

테스트없이 프로덕션 환경을 대량 업데이트하는 것은 아닙니다.


배경 정보

GHOST는 glibc 라이브러리의 gethostbyname () 및 gethostbyname2 () 함수 호출에 영향을주는 '버퍼 오버 플로우'버그입니다. 이 취약점으로 인해 응용 프로그램을 실행할 수있는 원격 공격자가 이러한 기능 중 하나를 호출하여 응용 프로그램을 실행하는 사용자의 권한으로 임의 코드를 실행할 수 있습니다.

타격

gethostbyname () 함수 호출은 DNS 확인에 사용되며 매우 일반적인 이벤트입니다. 이 취약점을 악용하려면 공격자는 DNS 확인을 수행하는 응용 프로그램에 잘못된 호스트 이름 인수를 제공하여 버퍼 오버플로를 트리거해야합니다.

영향을받는 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

우분투 리눅스 버전 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

데비안 리눅스 버전 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

리눅스 민트 버전 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}'

우분투 / 데비안 리눅스 :

   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 시스템은 어떤 C 라이브러리 (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.

데비안 리눅스 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.

고스트 취약점 검사

시카고 대학교는 쉽게 다운로드 할 수 있도록 아래 스크립트를 호스팅합니다.

$ 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

우분투 / 데비안 리눅스

sudo apt-get clean
sudo apt-get update
sudo apt-get dist-upgrade

재시작:

sudo reboot

SUSE Linux Enterprise

이 SUSE 보안 업데이트를 설치하려면 YaST online_update를 사용하십시오. 또는 버전에 따라 다음 명령을 사용하십시오.

SUSE Linux Enterprise 소프트웨어 개발 키트 11 SP3

zypper in -t patch sdksp3-glibc-10206

VMware 용 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 Enterprise Desktop 11 SP3

zypper in -t patch sledsp3-glibc-10206

마지막으로 모든 SUSE Linux 버전을 실행하여 시스템을 최신 상태로 유지하십시오.

zypper patch

OpenSUSE Linux

OpenSUSE Linux에서 glibc를 포함하여 사용 가능한 업데이트 목록을 보려면 다음을 입력하십시오.

zypper lu

설치된 glibc 패키지를 최신 버전으로 업데이트하려면 다음을 실행하십시오.

zypper up

컴퓨터에서 실행되는 거의 모든 프로그램은 glibc를 사용합니다. 패치가 적용되도록 glibc를 사용하는 모든 서비스 또는 앱을 다시 시작해야합니다. 따라서 재부팅하는 것이 좋습니다.


시스템을 다시 시작하거나 영향을 미치지 않고 init를 다시 시작하는 방법은 무엇입니까?

telinit u

'man telinit'-init (8) 데몬이 다시 실행되도록 요청하는 U 또는 u입니다. Upstart는 현재 상태를 보존 할 수 없으므로 시스템 라이브러리를 업그레이드 할 때 필요하므로 권장하지 않습니다.


제한된 방식으로 위협을 즉시 완화하려면 모든 공용 서비스에서 역방향 DNS 확인을 비활성화해야합니다. 예를 들어,에서로 설정 UseDNS하여 SSH에서 역방향 DNS 확인을 비활성화 할 수 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 : 취약성 테스트 코드는 Openwall이 아닌 Qualys의 코드입니다. 링크 된 Openwall 게시물은 메일 링리스트에 게시 된 Qualys 권고입니다.
muru

"glibc에 의존하는 많은 수의 응용 프로그램 / 시스템 유틸리티로 인해" -> 그 내용을 취하거나 100 % 로 컴파일 된 매우 이상한 것들을 제외하고 모든 것들의 100 %가 libc에 직접 의존 한다는 사실을 강조 할 수 있습니다. 거대한 정적 덩어리. BTW에 감사합니다!
goldilocks

@ goldilocks, 제안 주셔서 감사합니다. 다른 것들과 함께 편집했습니다. 도움이되어 다행입니다!
devnull
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.