애플리케이션 보안 - 하트블리드 (Heartbleed)
본문 바로가기

애플리케이션 보안 - 하트블리드 (Heartbleed)

액트 2019. 8. 22.

 다음 보기가 설명하는 취약성은?    4
[보기]
이것은 암호화를 위해 대중적으로 사용되는 OpenSSL 라이브 러리에서 서버 메모리 중 64KB의 데이터에 대해 공격자가 덤프를 뜰 수 있게 하는 취약점이다. 해당 취약점을 이용하여 시스템 메모리에 저장되어 있는 무의미한 작은 정보들을 지속적으로 유출시키면, 이러한 무의미한 정보들이 모여 하나의 완전한 유의미한 정보가 될 수 있다. 특히 개인키의 경우 암 호화하여 전달되는 데이터를 모두 열람할 수 있는 핵심정보 이기 때문에 매우 심각한 취약성이라 할 수 있다.
① Poodle 
② Ghost 
③ Shellshock 
④ Heartbleed


하드블리드(HeartBleed) 명칭의 유래

HeartBleed 명칭의 유래는 해당 취약점으로 공격할 때마다 작은 정보들이 새어 나오는 것을, 심장이 한번씩 뛸 때마다(HeartBeat) 심장에서 피가 한 방울씩 떨어지는 치명적인 심장출혈(HeartBleed)로 비유하여 명명한 것입니다.

 

'하트블리드(HeartBleed)' 취약점이란?

 

HeartBleed란 OpenSSL 1.0.1 버전에서 발견된 매우 위험한 취약점 입니다. OpenSSL을 구성하고 있는 TLS/DTLS의 HeartBeat 확장규격에서 발견된 취약점으로, 해당 취약점을 이용하면 서버와 클라이언트 사이에 주고받는 정보들을 탈취할 수 있습니다.

 

* OpenSSL은 정해진 규격의 네트워크 보안 프로토콜을 범용 라이브러리로 구현하기 위한 목적으로 만들어졌으며, SSL이나 TLS를 이용한 암호화를 구현할 수 있습니다. 강력한 암호화 기능을 제공하기 때문에, 보안이 중요한 대형 포털서비스, 이메일 서비스, 금융권 등에서 데이터 통신 시 OpenSSL을 사용하고 있습니다.

 

HeartBleed 취약점은 OpenSSL 라이브러리의 구조적인 취약점입니다. 

OpenSSL의 확장규격 중 하나인 HeartBeat는 서버와 클라이언트 사이에 무슨 문제는 없는지 또는 안정적인 연결을 유지하기 위한 목적으로 일정 신호를 주고 받을 때 사용하는 확장규격입니다.

 

 클라이언트는 HeartBeat 확장프로토콜을 이용하여 임의의 정보를 그 정보의 길이와 함께 서버에 전송합니다. 그 후 서버는 전달받은 정보를 다시 클라이언트에 전달해 주는 과정을 통해 자신의 존재 사실을 알려줍니다. 

 

이 때 클라이언트로부터 전달받은 정보와 그 정보의 길이가 일치하지 않는다면, 클라이언트의 요청에 서버는 응답을 하지 않는 것이 정상적인 동작입니다. 

 

 

HeartBleed 취약점

서버가 클라이언트로부터 전달받은 정보의 내용과 그 정보의 길이의 일치 여부를 검증하지 않은 채 정보를 보내주면서 문제가 발생

 

그림1. 정상적인 요청과 정상적인 반환값

 

 

그림2. payload의 길이를 조작하여 정보 유출

 

 

* 페이로드(Payload) :  실제 전송되는 데이터

 

쉽게 설명하자면, 클라이언트가 '사과 한 개가 담긴 사과박스'를 '사과가 10개 들어있다는 거짓 정보'와 함께 서버에 전달합니다. 이 정보를 받은 서버는 사과가 1개가 들어있는 박스를 확인하면 사과가 10개라는 정보는 거짓이기 때문에 그 요청에 응답을 해서는 안됩니다. 하지만 서버는 그러한 정보를 검증하지 않은 채 '사과 한 개가 있는 박스를 받았지만, 사과가 10개 있다고 착각'해 클라이언트로부터 전달받은 1개의 사과에 자신이 갖고 있던 사과 9개를 추가하여 클라이언트에게 전달하게 됩니다.

 

이것이 바로 HeartBleed 취약점이 발생되는 과정입니다.

 

클라이언트는 한번에 최대 64KB의 정보를 요청할 수 있습니다. 실제로 64KB에 들어갈 수 있는 정보는 매우 작습니다. 그러나 해당 취약점을 이용하여 시스템 메모리에 저장되어 있는 무의미한 작은 정보들을 지속적으로 유출시키면, 이러한 무의미한 정보들이 모여 하나의 완전한 유의미한 정보가 될 수 있습니다. 이러한 과정을 통하여 공격자는 시스템 메모리에 저장되어 있는 정보들을 유출시킬 수 있으며, 이 정보들에는 개인키, 관리자 정보 등 민감한 정보들도 포함되어 있습니다. 특히 개인키의 경우 암호화하여 전달되는 데이터를 모두 열람할 수 있는 핵심정보이기 때문에 사안이 매우 심각하다고 할 수 있습니다.

 

 



출처: https://blog.alyac.co.kr/76 [이스트시큐리티 알약 블로그]

댓글