-
Heartbleed#05. 취업 2020. 11. 4. 21:08
금융보안원에서 Heartbleed 취약점 확인 요청메일이 왔다.
Heartbleed가 무엇인지 개념과 조치방안에 대해 알아보자.
2014년 4월 7일 SSL통신에 대하여 취약점이 발견되었다.
키워드: openssl 1.0.1, Heartbeat 확장규격, payload와 payload length, 64kb, 연결상태 확인
공개키방식의 인증서사용을 통한 전송구간암호화는 제 3자에게 정보를 숨기는 보안방안의 대명사였다.
그리고 전송구간암호화에서 대표적으로 사용하는게 바로 SSL(Secure Sockets Layer) 방식이다.
SSL 방식을 사용하기 위해 서버에 설치하는 대표적인 프로그램이 OpenSSL이다.
HeartBleed 취약점이란?
* 구글번역기는 '심장 피'라고 한다.
OpenSSL을 구성하는 TLS/DTLS의 HeartBeat라는 확장규격에서 발생한 취약점이다.
? TLS/DTLS :
- TLS: SSL 3.0에 기반한 기술로 정식명칭이 TLS이나 아직 SSL로 부르는 곳이 많다.
- DTLS: Datagram 형식의 콘텐츠를 어플리케이션끼리 주고받을 때 안전하게 전송할 수 있도록 고안된 통신 프로토콜
Datagram은 3계층의 Header와 Payload로 구성된 정보단위로 빠른속도가 필요하지만 신뢰성이 필요없는 통신에 주로 사용(UDP)
VPN 클라이언트나 WebRTC를 지원하는 브라우저, VoIP 서비스, 게임 스트리밍 클라이언트 등에 사용
HeartBeat라는 확장규격의 경우 연결상태를 확인하기 위해 사용자 → 서버로 주기적 신호를 보내 상응하는 응답값을 받고, 사용자와 서버의 연결상태를 확인한다. 이때 주기적신호(임의의값)를 변조하여 서버의 데이터를 뺴간다.
한번에 최대 64KB까지 빼갈 수 있는데 이 작은 정보를 조금씩 빼가는것의 위험성이 심장에서 피가 흐르는 것과 같이 치명적이라 하여 HeartBleed라고 한다.
---시나리오---
1. 사용자는 서버로 임의의 정보를 길이와 함께 전달해야한다.
2. 서버는 수신한 임의의 정보를 다시 사용자에게 전달하여 연결을 유지한다.
3. 전달받은 정보와 길이가 다르면 모자라는 크기의 데이터를 시스템 메모리에서 꺼내준다.
(최대 64KB를 한번에 요청할 수 있다.)
찾아보기
Heartbeat Message라고 되어있다.
실제 길이(Length)는 3이지만, Heartbeat 확장규격에서 주장하는 길이(Payload Length)는 16384byte(16KB)이다.
(출처: https://girrr.tistory.com/170?category=865832)
보안방안
1. 서버
서버쪽은 Openssl 업데이트가 필요하다.1.0.1~1.0.1f 버전이 취약하니 참고하자2. 직접 패치아래와같은 검사로직을 pl = p; 바로 위에 넣자.(어차피 이게 추가된게 패치된 버전인 1.0.1g이다.)if (1+2+payload+16 > s->s3->rrec.length) return 0;
if (s->s3->rrec.length > SSL3_RT_MAX_PLAIN_LENGTH) return 0;
2-1. 직접 패치는 왜 저런식일까?
openssl-1.0.1e.zip을 보면 아래와같이 표기되어 있다.
멤버연산자(. ->)를 사용하여 rrec 구조체의 data(rrec.data)버퍼에 메시지가 저장된다.
저장되는 메시지는 1byte(type필드), + 2byte(payload_length필드) + payload + 16byte(padding)이다.
2byte는 2^16까지 표현가능하므로 65,536byte -> 64KB까지 데이터 탈취가 가능하다.
왜 위험한가?
예를들면, 회사에서 HSM을 쓰고 있다고 치자. 매번 요청/응답을 받아 키정보를 보내주는것은 시스템의 과부하를 일으킨다.이에 메모리상에 개인키 등 자주사용하는 중요키값을 올려놓고 쓰게된다.64KB씩 뜯기다보면 이 개인키가 탈취될 수도 있다.단체소송 → 고소 → 파탄 백수의 흐름이다.
정리용으로 이것저것 참고한 개인용글이고 아래분이 잘써뒀다.
https://jmoon.co.kr/164
댓글