Linux Glibc 라 이브 러 리 심각 한 보안 구멍 검사 및 복구 방안

2015 년 1 월 27 일 Linux GNU glibc 표준 라 이브 러 리 의 gethostby name 함수 가 버퍼 에 구멍 이 났 습 니 다. 구멍 번 호 는 CVE - 2015 - 0235 입 니 다.해커 는 gethostby name 시리즈 함 수 를 통 해 원 격 코드 를 실행 하고 서버 의 제어 권 과 Shell 권한, 이 구멍 은 트리거 경로 가 많 고 영향 범위 가 넓 으 며 성공 적 으로 이 용 된 소프트웨어 와 시스템 이 확인 되 었 습 니 다. Glibc 2.2 에서 2.17 (2.2 와 2.17 버 전 포함).
GNU glibc 표준 라 이브 러 리 의 gethostby name 함수 가 버퍼 에 구멍 이 났 습 니 다. 구멍 번호: CVE - 2015 - 0235.Glibc 는 시스템 호출 과 기본 함 수 를 제공 하 는 C 라 이브 러 리 입 니 다. 예 를 들 어 open, malloc, printf 잠깐 만.모든 동적 연결 프로그램 은 Glibc 를 사용 해 야 합 니 다.원 격 공격 자 는 이 구멍 을 이용 하여 임의의 코드 를 실행 하고 프로그램 을 실행 하 는 사용자 의 권한 을 향상 시 킬 수 있다.
구멍 검출 방법
설명 에 따라 조작 하면 된다.
#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("notvulnerable");   
    exit(EXIT_SUCCESS);   
  }   
  puts("should nothappen");   
  exit(EXIT_FAILURE);
}

다음 코드 내용 을 GHOST. c 로 저장 하고 실행 합 니 다.
gcc GHOST.c -o GHOST

$./GHOST
vulnerable   //表示存在漏洞,需要进行修复。

$./GHOST
notvulnerable //表示修复成功。

보완 방안 을 건의 하 다
특별 알림: glibc 는 Linux 시스템 기본 구성 요소 에 속 하기 때문에 서버 에 영향 을 미 치지 않도록 적절 한 시간 을 선택 하여 복구 하 는 것 을 권장 합 니 다. 또한 복구 전에 스냅 샷 작업 을 통 해 백업 하 는 것 이 좋 습 니 다.
CentOS 5/6/7
yum update glibc

Ubuntu 12/14
apt-get update
apt-get install libc6

Debian 6
wget -O /etc/apt/sources.list.d/debian6-lts.list http://mirrors.aliyun.com/repo/debian6-lts.list
apt-get updateapt-get install libc6

Debian 7
apt-get update
apt-get install libc6

openSUSE 13
zypper refresh
zypper update glibc*

Aliyun linux 5u7
wget -O /etc/yum.repos.d/aliyun-5.repo http://mirrors.aliyun.com/repo/aliyun-5.repo
yum update glibc

리 눅 스 학습 망

좋은 웹페이지 즐겨찾기