본문 바로가기

system

GHOST: glibc Vulnerability(CVE-2015-0235)

GHOST: glibc Vulnerability(CVE-2015-0235)

 

1. 취약점 정보

GHOST: glibc Vulnerability은 2015년 1월 27일 발표된 취약점으로 glibc에 overflow 취약점이 존재하여 원격에서 임의의 명령을 실행할 수 있는 취약점이다.

이 취약점은 gethostbyname() 와 gethostbyname2() 에서 내부적으로 호출하는 __nss_hostname_digits_dots() 에서 발생하는 Heap Buffer Overflw 취약점으로, 취약점이 발생하려면 gethostbyname() 또는 gethostbyname2() 함수를 사용하는 조건이 필요하기 때문에 glibc를 사용하는 모든 애플리케이션에서 취약점이 발생하는 것은 아니다.

 

※ Glibc 란

: GNU 프로젝트의 일환으로 GNU C 라이브러리를 줄여서 Glibc로 부른다. 한 마디로 C 언어로 만든 C 표준 런타임 라이브러리이다.

 

 

2. 위험성 

NVD(National Vulnerability Database)에서 GHOST 취약점에 대해 위험성을 측정한 점수이다.

10.0 만점에 10.0 점을 받았다. 따로 설명하지 않아도 위험성 높은 취약점이라는 것을 알 수 있다.

 

 

3. 취약점 자가 진단

취약점 진단을 할 수 있는 방법은 취약한 소스코드를 통해 확인하는 방법과 gblic 버전을 확인하는 방법이 있다.

GHOST 취약점에 영향을 받는 시스템은 "gblic 2.2 ~ 2.17" 버전을 사용하고 있는 모든 리눅스 시스템이다.

다음 소스코드를 통해 취약 여부를 진단할 수 있다.

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

 

 

4. 해결 방안

각 배포판에서 제공하는 업데이트 실행 또는 라이브러리 최신 버전으로 업데이트

Red Hat Enterprise 5 : https://rhn.redhat.com/errata/RHSA-2015-0090.html

Red hat Enterprise 6 : https://rhn.redhat.com/errata/RHSA-2015-0092.html

Debian : https://security-tracker.debian.org/tracker/CVE-2015-0235

Ubuntu : http://www.ubuntu.com/usn/usn-2485-1

CentOS : http://lists.centos.org/pipermail/centos-announce/2015-January/020906.html

GNU C Library : http://www.gnu.org/software/libc/

 

 

Reference :  https://www.qualys.com/2015/01/27/cve-2015-0235/GHOST-CVE-2015-0235.txt

'system' 카테고리의 다른 글

checksec.sh  (0) 2016.03.17
Easy RM to MP3 Converter Exploit  (0) 2016.03.10
메시지 루프와 처리 함수의 전체 순서  (0) 2016.01.07
BOF protection techniques  (0) 2016.01.03
plt, got  (0) 2015.12.30