■ 개요

Linux 시스템의 GNU C 라이브러리 (glibc)의 특정 함수에서 임의코드를 실행할 수 있는 취약점이 공개 (2015. 1. 27)

 

※ 해당 취약점은 CVE-2015-0235 지정, 도메인 네임을 IP로 변환하는 기능이 포함된 서비스 (메일, 웹 등)들은 해당 취약점에 영향을 받을 수 있음.

 

■ 취약점 상세분석

 - 리눅스 계열에서 사용하고 있는 glibc 라이브러리에 존재하는 __nss_hostname_digits_dots 함수에서 잘못된 메모리 사용으로 인해 메모리 변조 가능.

※ glibc 라이브러리 : GNU C 라이브러리로 리눅스 운영체제에서 기본적으로 사용하고 있는 라이브러리 .

※ __nss_hostname_digits_dots 함수 : 도메인 주소를 IP 주소로 변환하는 gethostbyname 함수 호출 시 호스트 이름이 ip형태일 경우, 내부적으로 호출되는 함수.

 __nss_hostname_digits_dots 함수 내 메모리 사이즈 연산이 잘못되어 메모리 복사과정에서 오버플로우 발생.

 

■ 영향 받는 glibc 버전

glibc 2.2~2.17 버전의 모든 리눅스 시스템

※ glibc 2.18~2.20 버전, 2.1.3 이하버전은 취약하지 않음 (2.(2~17)버전에 해당)

■ glibc 버전 확인 방법

 

※ 업데이트된 후 버전이 바뀌지 않는 일부 운영체제도 있으니 취약점 확인 방법으로 패치 검증 권고

■ 영향 받는 OS 플랫폼

- CentOS 6*, 7*
-  Debian 6*, 7*
-  Red Hat Enterprise Linux 5*, 6*, 7*
-  Ubuntu 10.04*, 12.04*
-  CentOS 6*, 7*
-  취약한 glibc 버전을 사용하는 기타 리눅스 시스템

■ 취약점 확인 방법

- glibc를 사용하는 시스템에서 터미널 프로그램 실행 후 아래내용을 GHOST.c로 저장

 /* 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);
}

- GHOST.c 파일을 아래의 명령어로 컴파일 실행

 

- glibc 라이브러리에 의존하는 패키지 및 어플리케이션 확인 방법

# lsof | grep libc | awk '{print $1}' | sort | uniq

 

 

■ 해결 방법

<업데이트 버전 설치>

o 취약한 glibc 버전을 사용하고 있는 경우, 운영체제 제조사 홈페이지를
방문하여 패치 방법 확인

 CentOS http://lists.centos.org/pipermail/centos/2015-January/149413.html
Debian https://security-tracker.debian.org/tracker/CVE-2015-0235
Redhat https://rhn.redhat.com/errata/RHSA-2015-0090.html
Ubuntu https://launchpad.net/ubuntu/+source/eglibc
GUN C Library http://www.gnu.org/software/libc/

■ 패키지 버전 확인 방법

 OS 종류

패키지 버전 확인 방법 

 CentOS / Redhat

 > rpm -qa | grep glibc

 Ubuntu / Debian

 > apt-cache show eglibc-source | grep Version

※ 운영체제 제조사 홈페이지를 방문하여 최신 버전을 확인하고, 아래 방법을 이용하여 현재 버전을 확인 후 최신 버전이 아닌 경우, 패키지 업데이트

 

■ 패키지 업데이트 방법

 OS 종류

 패키지 업데이트 방법

 CentOS / Redhat

 > yum install glibc

  Ubuntu / Debian

 > apt-get clean && apt-get update && apt-get upgrade


※ 패키지 업데이트 후 시스템 재부팅 수행

 

[참고문서]

[KISA]리눅스_Ghost_취약점_대응방안_권고_v2.pdf

 

 

 

 

 

 

사업자 정보 표시
(주)블루원 | 김홍태 | 서울특별시 용산구 원효로 4가 135 금홍 2빌딩 | 사업자 등록번호 : 106-86-76684 | TEL : 02-3272-7200 | Mail : support_ora@blueone.co.kr | 통신판매신고번호 : 호 | 사이버몰의 이용약관 바로가기

+ Recent posts