Ghost 취약점 으로 인해 영향을받는 OS에 대한 액세스 권한이 필요 합니까 (로그인 한 사용자와 동일)? 누군가가 ‘응용 프로그램 호출을 할 수있는 원격 공격자’를 명확히 할 수 있습니까? 로컬 시스템에서 직접 테스트해야하지만 원격 호스트에서는 테스트를 찾지 못하는 것 같습니다.
지금까지 여러 출처 (그 출처에 대한 신용) 의 고스트 취약점 (Ghost Vulnerability) 에 관해 수집 한 모든 정보는 다른 사람이 궁금한 경우에 대한 답변으로 아래에 게시했습니다.
편집, 내 대답을 찾았습니다 .
코드 감사 중 Qualys 연구원은 glibc의 __nss_hostname_digits_dots () 함수에서 버퍼 오버 플로우를 발견했습니다. 이 버그는 모든 gethostbyname * () 함수를 통해 로컬 및 원격으로 트리거 될 수 있습니다 . 응용 프로그램은 주로 gethostbyname * () 함수 집합을 통해 DNS 확인자에 액세스 할 수 있습니다. 이 함수는 호스트 이름을 IP 주소로 변환합니다.
답변
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
.
출처 (및 추가 정보) :
- https://access.redhat.com/articles/1332213
- http://www.cyberciti.biz/faq/cve-2015-0235-patch-ghost-on-debian-ubuntu-fedora-centos-rhel-linux/
- http://www.openwall.com/lists/oss-security/2015/01/27/9
- /security/80210/ghost-bug-is-there-a-simple-way-to-test-if-my-system-is-secure
- http://bobcares.com/blog/ghost-hunting-resolving-glibc-remote-code-execution-vulnerability-cve-2015-0235-in-centos-red-hat-ubuntu-debian-and-suse-linux- 서버
- https://community.qualys.com/blogs/laws-of-vulnerabilities/2015/01/27/the-ghost-vulnerability
- https://security-tracker.debian.org/tracker/CVE-2015-0235