네트워크/네트워크 보안

CVE-2014-0160 (HeartBleed)

비니화이팅 2020. 2. 24. 16:21

HeartBleed

- OpenSSL의 RFC6520 TLS/DTLS Heartbeat extension 구현이 표준을 따르지 않고 구현된 사실이 밝혀졌는데, 해당 취약점을 이용한 정보 탈취 공격이다.

CVE : https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0160

 

 

조건

1) 영향받는 버전

- OpenSSL 1.0.1 ~ OpenSSL 1.0.1f

- OpenSSL 1.0.2-beta, OpenSSL 1.0.2-beta1

 

2) 영항받지 않는 버전

- OpenSSL 1.0.1g

- OpenSSL 1.0.0대 버전

- OpenSSL 0.9.8대 버전

 

원리

OpenSSL

정해진 규격의 네트워크 보안 프로토콜을 범용 라이브러리를 구현하기 위한 목적으로 만들어진 오픈소스 라이브러리이다. SSL 및 TLS를 이용한 암호화 구현이 가능하다.

 

HeartBeat 확장 프로토콜

HeartBeat는 renegotiation 없이 keep-alive 통신을 가능하게 하는 OpenSSL의 확장 규격이다. 즉, 서버와 클라이언트 사이에 매번 연결을 재협상하지 않아도 안전한 통신 연결을 테스트하고 유지시키기 위해 사용한다.

 

1) Handshake 과정에서 Hello done 응답 메시지를 받으면 클라이언트는 HeartBeat 확장 프로토콜을 이용하여 Payload와 Payload Length를 함께 서버에 전송한다.(이때 클라이언트가 한번에 요청할 수 있는 최대 크기는 64KB이다.)

2) 서버는 클라이언트로부터 받은 정보를 다시 클라이언트에게 전달해주며 자신의 존재 사실을 알린다.

 

취약점

서버는 클라이언트로부터 전달받은 Payload와 Payload Length가 일치하지 않으면 요청에 응답을 하지 않는 것이 정상이나, 서버는 Heatbeat bound check 미비로 인하여 memcpy를 수행하여 응답을 하게된다. 이 취약점을 이용한 공격이 HeatBleed이다.

 

공격자는 payload 길이를 64KB로 조작하여 서버에게 정보 요청을 하면, 서버는 시스템 메모리에 저장되어 있는 개인키 등 민감한 정보들을 전달하게 된다. 공격자는 원하는 정보를 얻을 때까지 64KB씩 계속 요청한다.

 

 

PoC

https://github.com/mpgn/heartbleed-PoC

 

 

공격

Metasploit의 Heatbleed 모듈을 이용한다.

https://haccoders.blogspot.com/2016/01/exploit-openssl-vulnerability.html