Ghost버그는 무었인가?
미국 US-CERT는 리눅스 GNU C 라이브러리(glibc)에서 임의코드를 실행할 수 있는 취약점(CVE-2015-0235)이 발견되었다고 발표하였습니다.
- CVE-2015-0235는glibc의 gethostbyname(), gethostbyname2() 처리 과정에서 발생하는 버퍼오버플로우에의해 취약점발생합니다.
취약점에 노출되어있는지 확인하는 방법
$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/
'리눅스' 카테고리의 다른 글
[명령어] 파일속성 관리를 위한 chattr (0) | 2015.03.24 |
---|---|
리눅스에서 tshark사용하여 패킷 캡쳐하기 (0) | 2015.02.06 |
[우분투] 설치된 패키지 및 버전 확인 (0) | 2015.02.03 |
리눅스 폴더별 용량 확인 명령어 (0) | 2015.01.29 |
리눅스 특정 폴더 파일 일괄 지우기 (0) | 2015.01.14 |