HeartBleed
발표자 소개 지용빈 (ben3679@naver.com) 한세사이버보안고등학교 3학년 시스템 보안 동아리 노예
HeartBeat의 원리와 구조 HeartBleed의 원리 OpenSSL Heartbleed? 시나리오 INDEX
What is HeartBleed? CVE-2014-0160
HTTPS
HTTPS + = HTTP SECURE HTTPS
HTTP HTTP Port: 80
HTTP HTTP Port: 80
HTTP HTTP Port: 80 Hacker
HTTP HTTPS Open SSL Port: 443
HTTP HTTP Port: 80 Hacker
HeartBleed HeartBleed = HeartBeat 확장 라이브러리에서 발생한 취약점
HeartBeat
HeartBeat TLS/DTLS Extension Library
Server와 Client 사이의 통신 보안을 위한 프로토콜 TLS TLS (Transport Layer Security) Server와 Client 사이의 통신 보안을 위한 프로토콜
SSL SSL (Secure Socket Layer) OpenSource OpenSSL
HeartBeat HeartBeat 서버와 클라이언트의 안정적인 연결을 유지하기 위해 일정 신호를 주고 받는 OpenSSL 확장 프로토콜
HeartBeat request response Client Server
HeartBeat request response Type Type length length payload payload padding padding
HeartBeat Connection Alive Client Server
Type : Request OR Response Length : payload length Payload : text HeartBeat Type : Request OR Response Length : payload length Payload : text Padding : random text
HeartBeat Request, Response Type 1byte length 2byte payload Max(65KB) padding Min(16byte)
HeartBeat int tls1_process_heartbeat(SSL *s) { unsigned char *p = &s->s3->rrec.data[0], *pl; *p = request packet, *pl = payload unsigned short hbtype; hbtype = heartbeat type unsigned int length; length = length of payload unsigned int padding = 16;
HeartBeat Request 변수 request 5 hello padding type length payload
HeartBeat unsigned char *buffer, *bp; int r; bp buffer = OPENSSL_malloc (1 + 2 + length + padding); bp = buffer; bp hbtype length payload padding
HeartBeat Response packet의 크기만큼 메모리 할당
HeartBeat *bp++ = TLS1_HB_RESPONSE; bp = TLS1_HB_RESPONSE s2n(length, bp); bp = length에서 2바이트만큼 저장 memcpy(bp, pl, length); bp에다가 pl의 정보를 length의 값만큼 할당 할당 . bp hbtype length payload padding
HeartBeat 변수 Response hbtype length payload padding response 5 hello
HeartBeat Length 와 payload의 실제 크기를 비교 하지 않습니다.
HeartBeat 정상적인 HeartBeat Client Server Server Memory 서버야 살아있니? “Hello” 라고 5byte로 대답해 “Hello” Server Memory Hello Client Server 1byte
ID=root, Pwd=admin123, please login again HeartBeat 악의적인 HeartBeat 서버야 살아있니? “Hello” 라고 50byte로 대답해 Hello Wrong password! ID=root, pwd=admin123, please login again Server Memory Hello Wrong password! ID=root, Pwd=admin123, please login again Client Server 50 byte
HeartBeat Private Key User Data Session
HeartBleed 해외 유명 사이트 18개 이상
HeartBleed 취약한 야후 사이트
HeartBleed 노출된 password
시나리오 크고 아름다운 시나리오 2개
시나리오 1. HeartBleed 취약점을 이용한 사용자의 세션 값 탈취 2. APT 공격을 위한 정보수집 방법으로 활용
실습 환경 Ubuntu 12.04 OpenSSL 1.0.1 CVE-2014-0160-master https://github.com/0x90/CVE-2014-0160
시나리오 영상
시나리오 1 LOGIN PHPSESSID=f8e8a6d2f4w8wf USER PHPSESSID=f8e8a6d2f4w8wf Server HeartBleed Attack PHPSESSID=f8e8a6d2f4w8wf Server Memory PHPSESSID=f8e8a6d2f4w8wf PHPSESSID=f8e8a6d2f4w8wf LOGIN SUCCESS Attacker
노출된 정보
노출된 정보
노출된 정보
Sensitive Information 시나리오 2 HeartBleed Attack Sensitive Information Attacker Server Store Server Memory select * from user where id=‘admin’ and pw=‘1234’ /var/lib/php5 /var/www/admin_board.php DataBase
노출된 정보
노출된 정보
노출된 정보 SQL 쿼리문 사용자의 ID와 PW SSL 발급 정보 세션 값 디렉토리 노출 시스템 정보(커널과 버전정보)
문제점 서버의 메모리에서 random 하게 추출하기 때문에 원하는 정보를 얻을 때까지 걸리는 시간도 random
대응방안
대응방안
대응방안 Update 취약한 버젼 패치된 버젼 OpenSSL 1.0.1g OpenSSL 1.0.2 beta OpenSSL 1.0.1f OpenSSL 1.0.2-beta1 Update OpenSSL 1.0.1g
대응방안 IDS(침입탐지시스템) IPS(침입차단시스템)에 탐지 rule 업데이트 적용
대응방안 SSL 비밀키 유출 가능성을 대비한 인증서 재발급을 권장
Q&A
감사합니다.