하트블리드
IT위키
더 많은 작업
- CVE-2014-0160; 낮은 버전의 OpenSSL에서 임의의 메모리 데이터가 탈취될 수 있는 취약점
2014년 4월에 발견된 심각한 취약점으로 빠른 조치가 권고된다.
- OpenSSL 1.0.1 ~ 1.0.1f 버전에서 발생한다. 1.0.1g 에서 고쳐졌고, 하트비트 기능이 없는 1.0.0·0.9.8 계열은 해당하지 않는다.
- 하트비트(Heartbeat)라는 SSL/TLS 확장 프로토콜 동작 과정에서 발생한다.
- Heartbeat
- 일종의 Echo Request/Echo Reply처럼 서버의 기동 여부를 진단하기 위한 프로토콜
- 특정 Echo Request를 보내고, 반환 받을 크기를 지정하면 해당 크기만큼 Echo Reply가 온다.
- Heartbleed
- 원인은 요청 메시지의 페이로드 길이 확인 누락이다. 하트비트 요청에는 페이로드와 함께 그 길이를 적는 필드(payload_length)가 있는데, 취약한 OpenSSL 은 이 값이 실제로 받은 페이로드 크기와 맞는지 확인하지 않고 적힌 길이만큼 메모리를 응답 패킷의 페이로드에 복사했다.
- 그래서 피해 서버(또는 클라이언트)는 의도하지 않은 메모리 내용을 공격자에게 보낸다. 1.0.1g 는 길이가 실제 레코드보다 크면 요청을 버리도록 고쳤다.
- 문제는 연결을 맺는 핸드셰이크(Handshake) 프로토콜이 아니라 연결이 살아 있는지 확인하는 하트비트 확장(RFC 6520)에 있다. 사용자 인증과도 관계가 없다 → 핸드셰이크는 TLS(SSL) 참고
- 반환 받을 크기 지정 시 보낸 메세지보다 훨씬 크게 지정(최대 64KB)하여 보낼 수 있는 취약점이 존재하였다.
- 1KB를 보내면서 64KB를 요청 할 경우 나머지 63KB는 메모리에 있는 임의 데이터가 보내진다.
- 위와 같은 동작을 반복하면 메모리상에 흐르는 임의 데이터를 지속적으로 탈취할 수 있다.
- 하트블리드 공격 시 하트비트 응답 패킷이 요청보다 응답이 비정상적으로 크게 나간다.
- 하트블리드 공격 시 SSL 서비스 포트로 |18 03 ??| 패턴의 데이터가 전송된다.
# openssl version -a OpenSSL 1.0.1 14 May 2012 # openssl s_client -connect domain.com:8443 -tlsextdebug -state | grep -i heartbeat TLS server extension "heartbeat" (id=15), len=1
- 설치된 버전이 1.0.1 ~ 1.0.1f 이고, 서버가 heartbeat 확장(id=15)을 돌려주면 취약하다.
- 시스템 측면 : OpenSSL 을 1.0.1g 이상으로 업그레이드한다. 운영 환경 사정으로 패키지 업데이트가 어려우면
-DOPENSSL_NO_HEARTBEATS옵션으로 다시 컴파일해 하트비트 기능을 끈다. 업그레이드 뒤 OpenSSL 을 쓰는 서비스(웹 서버 등)를 재시작해야 새 라이브러리가 적용된다. - 서비스 측면 : 아래 두 가지
- 서버측 SSL 비밀키가 유출되었을 가능성이 있으므로 SSL 서버 인증서를 재발급 한다.
- 시스템 이용자들의 비밀번호가 유출되었을 가능성이 있으므로 변경을 안내한다.