glibc 보안 취약점 개요
해결방안
(CVE-2015-0235)

 

 

 

 

GLIBC 보안 취약점 개요 해결방안    3

WHAT IS "GNU GLIBC" ?    3

보안 취약점 발표내용    3

보안 취약점 대상    3

보안 취약점 확인방법    4

보안 취약점 조치방법    4

File Lists & Where to Download    4

How to Patch    4

How to Verify    5

참고문서    6

첨부: 취약점 확인 프로그램 (GHOSTTEST.C)    7

 

 

 

 

 

 




glibc 보안 취약점 개요 해결방안

   What is "GNU glibc" ?

GNU C glibc GNU Project Group에서 배포하는 C library

- http://www.gnu.org/software/libc/libc.html


보안 취약점 발표내용

2015 127(현지시간) 미국 보안회사인 퀼리스(Qualys) 리눅스
    
GNU C 라이브러리(glibc)에서 일명 '고스트(GHOST)' 불리는 중대
    취약점을
발견했다고 밝혔다.

glibc에서 제공하는 gethostbyname 함수의 소스코드 결함을 이용,
    
공격자가 Buffer Overflow 일으켜 웍격 코드실행을 통해 ID
    
PASSWORD없이 목표 시스템에 접근해 원격제어를 하는 것이
    가능하게
된다.

2000 11 10일부터 배포되기 시작한 glibc-2.2 기반으로

시스템들은 모두 영향을 받을 있으며, 취약점이 동안 공식
보안
취약점으로 분류되지 않았던 탓에 데비안7, 레드햇
엔터프라이즈
리눅스(RHEL) 5, 6, 7, 센트OS 6 7, 우분투12.04
오랫동안
세계 여러 시스템에 활용돼 리눅스 배포판에서 악용될
가능성이
높다.

 

 

보안 취약점 대상

Oracle Linux 기반의 모든 Engineered System 영향 받음

(, Solaris 기반 Exadata 경우 Storage Server 영향 받음)

개별적으로 GNU library glibc 2.2 받아서 설치한 OS 시스템 문제가 발생되는 GNU library 소스코드 리스트
    
inet/gethstbynm.c

inet/gethstbynm2.c
inet/gethstbynm_r.c

inet/gethstbynm2_r.c
nscd/gethstbynm3_r.c

 

보안 취약점 확인방법

첨부된 점검 소스 파일의 내용을 해당 시스템의 vi editort 이용하여
    아래와
같은 이름으로 저장을 합니다.

    # vi ghosttest.c

파일 생성 컴파일하여 실행될 있는 파일을 만듭니다.

    # gcc ghosttest.c -o ghosttest

해당 파일을 아래와 같이 실행하여 결과값을

확인합니다."vulnerable"이라고 뜨면 취약하다는 것입니다.

 

보안 취약점 조치방법

    # ./ghosttest

vulnerable


Exadata 시스템 만을 대상으로 정리하였으나 Oracle Linux 설치된 모든 시스템에 대해 첨부 프로그램을 사용하여 점검, 취약점 발견 해당 커널 버전에 설치 가능한 파일을 받아 설치할 것을 권고합니다.

File Lists & Where to Download

Exadata Image

Version

 해당 Patch 파일

Where to Download

 12.1.1.1 이하 버전

glibc-2.5-123.0.1.el5_11.1.i686.rpm
glibc-2.5-123.0.1.el5_11.1.x86_64.rpm

glibc-common-2.5-123.0.1.el5_11.1.x86_64.rpm glibc-devel-2.5-123.0.1.el5_11.1.i386.rpm

glibc-devel-2.5-123.0.1.el5_11.1.x86_64.rpm
glibc-headers-2.5-123.0.1.el5_11.1.x86_64.rpm
glibc-utils-2.5-123.0.1.el5_11.1.x86_64.rpm
nscd-2.5-123.0.1.el5_11.1.x86_64.rpm

 https://public-yum.oracle.com/repo/OracleLinux /OL5/latest/x86_64/

 12.1.2.1.0 이상

 glibc-2.12-1.149.el6_6.5.i686.rpm
 glibc-2.12-1.149.el6_6.5.x86_64.rpm
glibc-common-2.12-1.149.el6_6.5.x86_64.rpm
glibc-devel-2.12-1.149.el6_6.5.i686.rpm
glibc-devel-2.12-1.149.el6_6.5.x86_64.rpm
glibc-headers-2.12-1.149.el6_6.5.x86_64.rpm
nscd-2.12-1.149.el6_6.5.x86_64.rpm

 https://public-yum.oracle.com/repo/OracleLinux /OL6/latest/x86_64/


How to Patch

Exadata Node

 Command Line

 Compute Node

1. 사용중인 시스템 확인
#rpm -qa --queryformat="%{name}-%{version}-%{release}.%{arch}\n" | egrep Compute Node    'glibc|nscd'

2.
모든 compute 노드에 패치 파일을 root 유저로 생성 download rpm 화일 저장
#mkdir /tmp/glibc-update
Place all the rpms listed above (for your appropriate release) in the directory /tmp/glibc-update

3. Exadata Database Server image version 11.2.3.3.0이후 버전일 경우 아래와 같은 명령어를 실행 합니다.
#rpm -e exadata-sun-computenode-exact

4. RPM patch file 설치 합니다.
#rpm -Fvh /tmp/glibc-update/*rpm

5. Rebooting
#shutdown -r -y now

6. 리부팅후 패치 파일 삭제

#rm -rf /tmp/glibc-update

 Cell Node

 Compute node 작업 절차가 동일하며 설치 아래와 같은 메시지가 나올 있으나 무시 해야 합니다.
"During installation, you may see an ignorable warning like this:? warning: /root/glibc-update/glibc-2.5-123.0.1.el5_11.1.i686.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159
You may ignore this warning and the installation will proceed as normal."


How to Verify

첨부된 점검 소스 파일의 내용을 해당 시스템의 vi editort 이용하여
    아래와
같은 이름으로 저장을 합니다.

    # vi ghosttest.c

파일 생성 컴파일하여 실행파일을 만듭니다.

    # gcc ghosttest.c -o ghosttest

패치 후에 다시 ghosttest 실행하여 취약점이 수정되었는지
    확인합니다
."not vulnerable"이라고 뜨면 취약점이 수정된 것으로
    판단하시면
됩니다.

    # ./ghosttest

not vulnerable

참고문서

Oracle Documents

glibc vulnerability (CVE-2015-0235) patch availability for Oracle
    Exadata Database Machine (Doc ID 1965525.1)

Responses to common Exadata security scan findings (Doc ID
    1405320.1)

 

External Documents

http://www.openwall.com/lists/oss-security/2015/01/27/9
http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2015-
    0235 

 

첨부: 취약점 확인 프로그램 (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) {

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가 135 금홍 2빌딩 | 사업자 등록번호 : 106-86-76684 | TEL : 02-3272-7200 | Mail : support_ora@blueone.co.kr | 통신판매신고번호 : 호 | 사이버몰의 이용약관 바로가기

+ Recent posts