본문 바로가기

IT/IT Trend

OpenSSL 버그 Heartbleed

요즘 웹에서는 Heartbleed가 단연 핫 이슈로 떠오르고 있는데요. 이게 무엇인지 쉽게 참고할 만한 영문 페이지가 있어 번역 요약해 봅니다.

원문 출처는 Forum Systems.의  How to fix OpenSSL Heartbleed Security Flaw 입니다. 그림과 원문 모두 이곳이 출처입니다.


OpenSSL Heartbleed는 최근 보안 전문가들에 의해 발견되었는데요, OpenSSL의 SSL/TLS 프로토콜 구현 방법에 소프트웨어 버그로 인한 것이랍니다.


Heartbleed는 여러가지 면에서 대재앙이 될 수 있습니다.


  1. 이용하기 아주 쉽습니다.
  2. 인터넷에 연결된 많은 네트워크 장비와 서버들이 통신의 보안을 위해 OpenSSL에 의존하고 있습니다.
  3. 아이디, 비밀번호, 세션키, 장기키, 해독된 사용자 데이터와 같이 1급의 정보들이 공격자에게 새어나갈 수 있습니다.


보안의 허점은 OpenSSL 라이브러리의 TLS 프로토콜 구현에 있습니다. TLS는 예전 SSL프로토콜 다음에 나온 것인데요. 이 허점에 취약한 버전은 OpenSSL 1.0.1 부터 OpenSSL 1.0.1f 까지입니다.


TLS (https)는 서버와 클라이언트간에 보안 채널을 구성하기위해 사용되는데요. 


보안 채널이 구성된다음, TLS 프로토콜 표준은 클라이언트에게 서버의 연결유무를 확인하는 "Heartbeat" 메시지를 보내고 받도록 하는 옵션을 주고 있는데요. 이 "Heartbeat" 메시지는 더이상 사용되지 않는 채널이 종료되지 않았는지 확인하는 역할을 합니다.


이 시나리오가 잘 작동한다면, 클라이언트는 TLS 채널을 통해 두 파트(메시지의 크기와 실제 메시지 내용)로 구성된 "Heartbeat" 메시지를 보내게 됩니다.



올바르게 작동하는 Heartbeat 메시지



여기에서 사용된 Heartbeat의 메시지 내용은 간단한 예시를 위해 임의적으로 선택한 것입니다. 서버와 클라이언트간의 상호작용 단계는 아래와 같습니다.


  1. 클라이언트가 길이 5, 데이터 내용은 "HELLO"로 구성된 메시지를 보냅니다. HELLO가 다섯자리이므로 길이가 5로 주어집니다.
  2. 서버는 메시지 내용 "HELLO"를 받고 그것을 "Hearbeat"로서 되보내기 위해 메모리에 저장합니다. 여기에 다른 서버가 다른 클라이언트와 연결하여 사용하는 TLS 채널로부터 추가적인 데이터가 메모리에 저장됩니다. 우리는 이 다른 데이터를 "사용자의 민감한 데이터"라고 칭합니다.
  3. 손상된 시나리오에서 클라이언트는 TLS 채널을 통해 같은 Heartbeat 메시지를 보냅니다. 하지만 여기서 다른점은 메시지의 길이가 올바르지 않다는 것입니다.

부정하게 사용되는 Heartbeat 메시지


이 예제에서, TLS 채널에서 작동하는 세가지 단계가 있습니다.


  1. 클라이언트는 25사이즈와 메시지를 보냅니다. 그러나 메시지는 여전히 5자리 ("HELLO") 입니다.
  2. 서버는 "HELLO" 메시지의 내용을 받고 그것을 "Heartbeat"로서 응답하기위해 메모리에 저장합니다. 이 바로전에 다른 TLS 채널로부터 서버에 저장된 다른 데이터가 있습니다.
  3. 서버는 25 자리의 메시지에 해당하는 "HELLO"와 "사용자 민감 데이터"를 보냅니다.
  4. 서버가 응답 메시지의 사이즈를 볼때 원본 메시지의 사이즈가 올바른 크기인지 확인하지 않습니다. 이때문에 서버는 응답메시지에 민감한 데이터를 누출하게 됩니다.