OpenSSL HeartBleed 취약점
네트워크를 통한 데이터 통신에 쓰이는 프로토콜인 TLS와 SSL의 오픈 소스 구현판인 OpenSSL의 라이브러리인 HeartBeat에서 서버에 저장된 중요 메모리 데이터가 노출되는 취약점 발견되었습니다.
* 본 보안 취약점(CVE-2014-0160)은 하트블리드(HeartBleed)로 알려져 있음
※ 참조 : http://heartbleed.com/
- 발생 원인
OpenSSL 암호화 라이브러리의 하트비트(Heartbeat)라는 확장 모듈에서 클라이언트 요청 메시지를 처리할 때 데이터 길이 검증을 수행하지 않아 시스템 메모리(서버)에 저장된 64KB 크기의 데이터를 외부에서 아무런 제한 없이 탈취할 수 있는 취약점입니다.
· HeartBeat : 통신 시 연결의 유지, 서버의 상태 체크 등을 목적으로 이용
· 노출 가능한 정보 : SSL 서버 비밀키, 세션키, 쿠키 및 개인정보 등
(원격 메모리 덤프, 위치는 지정 불 가능함)
- 공격방법
- (전송) 공격자는 하트비트 패킷 헤더에서 페이로드 길이 필드를 조작하여 서버에 전송
- (응답) 서버는 공격자가 요청한 길이(최대 64KB)만큼 메모리에서 데이터를 추출하여 공격에게 응답
- 취약 버전 및 관련 정보
· Version : OpenSSL 1.0.1 ~ 1.0.1.F (2014.04.08. openssl-10.1g에서 패치됨)
· 파일 및 함수명: "d1_both.c" dtls1_process_heartbeat 함수, "t1_lib.c" tls1_process_heartbeat 함수 내 코드 패치
- 보안 취약점
· 데이터 길이를 확인하지 않고 안전하지 않은 메모리 복사 함수 이용
· HeartBeat(RFC 6520) 기능 구현 시 악용 가능한 취약점 존재
구분 |
소스코드 |
비고 |
openssl-1.0.1e |
dtls1_process_heartbeat(SSL * s){ .... n2s(p, payload); pl = p; .... |
입력 데이터 크기를 확인하지 않음 |
openssl-1.0.1g |
dtls 1_process_heartbeat(SSL *s){ ... n2s(p, payload); if ( 1 + 2 + payload + 16 > s->s3->rrec.length) return 0; /* silently discard per RFC 6520 sec. 4 */ pl = p; ... |
입력 데이터 크기를 확인하고 예외 사항 처리 |
- 취약점 여부 확인
· http://filippo.io/Heartbleed/
- 공격 스크립트
· 파이썬(기본형) : http://www.exploit-db.com/exploits/32745/
· 파이썬(발전형) : https://github.com/sensepost/heartbleed-poc/blob/master/heartbleed-poc.py
· 파이썬(발전형) : https://raw.githubusercontent.com/musalbas/heartbleed-masstest/master/ssltest.py
· NMAP sslheartbleed 기능 : http://nmap.org/nsedoc/scripts/ssl-heartbleed.html
· C언어 : http://www.exploit-db.com/exploits/32791/
※ 참조
KISA 인터넷침해대응센터 : http://krcert.or.kr/
http://legend.anycert.co.kr/support/openssl_install.html
'30. > 31. Web' 카테고리의 다른 글
Actionscript XSS using flash (0) | 2014.04.29 |
---|---|
URL 한글 인코딩, 디코딩 (0) | 2014.04.19 |
The Hacker Firefox (0) | 2014.04.17 |
22. 세션고정(SF) 취약점 (0) | 2014.04.16 |
Flash SWF을 이용한 XSS (0) | 2014.03.20 |