Ghost버그는 무었인가?


미국 US-CERT는 리눅스 GNU C 라이브러리(glibc)에서 임의코드를 실행할 수 있는 취약점(CVE-2015-0235)이 발견되었다고 발표하였습니다.


- CVE-2015-0235는glibc의 gethostbyname(), gethostbyname2() 처리 과정에서 발생하는 버퍼오버플로우에의해 취약점발생합니다.




리눅스에서 glibc 버전 확인하기?

$ ldd --version


영향을 받는 lib는 라이브러리는 2.2 ~ 2.17버전의 모든 리눅스 시스템으로 알려져있다.


알려진 영향받는 리눅스 버전

RHEL (Red Hat Enterprise Linux) version 5.x, 6.x and 7.x
CentOS Linux version 5.x, 6.x & 7.x
Ubuntu Linux version 10.04, 12.04 LTS
Debian Linux version 7.x
Linux Mint version 13.0
Fedora Linux version 19 or older
SUSE Linux Enterprise 11 and older (also OpenSuse Linux 11 or older versions).
SUSE Linux Enterprise Software Development Kit 11 SP3
SUSE Linux Enterprise Server 11 SP3 for VMware
SUSE Linux Enterprise Server 11 SP3
SUSE Linux Enterprise Server 11 SP2 LTSS
SUSE Linux Enterprise Server 11 SP1 LTSS
SUSE Linux Enterprise Server 10 SP4 LTSS
SUSE Linux Enterprise Desktop 11 SP3
Arch Linux glibc version <= 2.18-1



취약점에 노출되어있는지 확인하는 방법


$vi ghosttest.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) {CentOS http://lists.centos.org/pipermail/centos/2015-January/149413.html

Debian https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=776391

Redhat https://access.redhat.com/articles/1332213

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

  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 ghosttest.c -o ghosttest

$ ./ghosttest



패치를 해야한다면 vulnerable 패치하지 않아도 된다면 not vulnerable 출력된다.



패치를 하는 방법


ubuntu의 경우

# sudo apt-get clean

# sudo apt-get update

# sudo apt-get upgrade

# sudo reboot


기타 os는 아래 웹을 참고

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

Debian https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=776391

Redhat https://access.redhat.com/articles/1332213

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



출처 및 참고사이트

http://www.cyberciti.biz/faq/cve-2015-0235-patch-ghost-on-debian-ubuntu-fedora-centos-rhel-linux/


+ Recent posts