Vulnerability
Heartbleed Bug
2016 09 29
  • Facebook
  • Twitter
  • Copy URL

2014년, 안전하다고 생각했던 HTTPS에서 취약점이 발견되어 전 세계가 떠들썩하다. 일명 ‘하트블리드 버그(Heartbleed bug)’다. 하트블리드 버그는 금융권, 기업은 물론 흔히 알고 있는 유투브, 구글, MS와 같은 일반사이트까지 영향을 줬던 버그로 웬만한 사이트는 이 버그에 그대로 노출되었다. 하트블리드 버그는 웹 서비스를 이용하는 사용자와 서비스를 제공하는 서버가 연결할 때 암호화되는 안전한 통로를 제공하기 위해 설치하는 ‘TLS(SSL)’에서 비롯된다.

이미지를 불러오는데 실패했습니다.

정식 명칭은 TLS 지만 보통은 SSL로 많이 사용된다. SSL은 Secure Sockets Layer 약자로 국제적으로 표준화된 인터넷 프로토콜(규약)이다. 안전한 인터넷 연결은 상대방이 맞는지 확인되어야 하고 나와 상대방을 제외한 제 3자는 나의 통신 내용을 볼 수 없어야 한다. SSL은 이러한 기능을 제공해주는 통합 보안 프로토콜로써 전자 서명이 포함된 인증서를 사용하여 서로를 확인하고 제 3자가 볼 수 없도록 통신 내용을 암호화한다. 이러한 SSL은 개인정보와 같은 민감한 내용이 담긴 페이지 즉, 로그인 페이지나 금융권과 같은 민감한 메시지들이 오가는 페이지에서 많이 사용된다.

SSL이 웹상에서 분명 좋은 녀석으로 쓰이지만 완벽한 프토로콜은 아니었다. SSL은 인증서를 통해 서로 신뢰 여부를 확인하고 연결을 허용한다. 하지만 이 인증서가 낮은 신뢰도의 인증서이거나 가짜 인증서라도 정상적인 인증서로 취급해 연결을 허용한다. 즉, 인증서만 있으면 장땡이다. 또한 사용자의 컴퓨터나 서버 자체에서 해킹당하면 어쩔 수 없는 것은 당연하고 데이터를 많이 포함하는 서버일 경우 SSL 적용되지 않은 일반적인 웹사이트에 비해 암호화하는 과정이 포함되어 있어 상대적으로 속도도 느리다. 그런데도 SSL은 안전한 인터넷 환경을 위해 이 정도는 고려하고 사용할 정도로 신뢰를 두고 사용하는 프로토콜이었다.

이렇게 믿고 보는 SSL에서 하트블리드 버그가 나올 것이라곤 아무도 상상 못 했다. SSL은 안전하고 신뢰할 수 있는 연결을 위해 핸드쉐이크 과정을 거친다. 핸드쉐이크 과정은 서버와 클라이언트 사이에서 오가는 통신을 일컬어 말하는데 이 오가는 과정이 서로 주고받는 모습이라 하여 핸드쉐이크라 일컫는다. 사용자가 웹사이트(클라이언트)에 접속하게 되면 접속한다는 메시지와 함께 접속을 허락해달라는 요청을 서버로 보낸다. 서버에서는 클라이언트에 접속을 환영한다는 메시지와 함께 공개된 자신의 키와 자신의 인증서를 클라이언트에 보낸다. 그럼 클라이언트는 받은 인증서 진위를 확인하고 임의 메시지를 서버의 공개키로 암호화하여 서버로 보낸다. 서버는 암호화된 임의 메시지의 암호를 풀고 이 메시지를 통해 둘만의 키를 만든다. 마찬가지로 클라이언트도 자신이 만든 임의 메시지로 둘만의 키를 생성하여 서버와 클라이언트의 은밀한 대화 연결을 만들어낸다.

이러한 과정에서 ‘하트비트’는 메시지를 서로 주고받지 않더라도 연결이 끊어지지 않도록 유지하는 것을 말한다. 하트블리드 버그의 명칭은 이 하트비트에서 취약점이 발견되어 이와 같은 이름이 붙여졌다.[1] 사용자가 서버에 메시지를 보낼 때 메시지와 함께 메시지의 총 크기를 명시하여 같이 보낸다. 서버에서는 이 메시지의 크기를 확인하고 크기가 같으면 암호화하여 다시 전송한다. 하지만 문제는 메시지의 크기가 명시된 크기보다 작을 경우 서버는 명시된 크기 정보에 의존하여 명시된 메시지 크기에 맞춰 자신이 가지고 있는 데이터를 내용에 담아 사용자에게 보낸다. 이때 서버가 가지고 있는 데이터는 다른 사용자의 아이디나 비밀번호 같은 내용이 포함되어 있을 수 있어 비밀스러운 정보가 그대로 노출된다. 이와 같은 일이 일어난 원인은 사용자가 보내는 메시지와 명시된 메시지의 크기를 검사하지 않고 서버로 보내게 된 것이 원인이다.

이미지를 불러오는데 실패했습니다.

하트블리드 버그의 가장 큰 문제는 그동안 누가 얼마나 이 취약점을 통해 정보를 가져갔는지 아무도 모른다는 것이다.[2] SSL을 만든 개발자는 당시 이 사건을 인정하고 빠르게 고칠 것[3]을 이야기했으며 상당수의 사이트도 자신들이 SSL에 많이 의존하고 있다는 것을 인정했다. 국내에서는 하트블리드 버그에 대해 심각성을 언급하고 염려가 섞인 기사가 많이 나왔지만 아주 차분하게 흘러갔다. 필자가 생각하기로 국내에서는 SSL을 사용하지 않는 사이트들이 대다수이며 당시 개인정보 유출 사건들도 빈번히 일어났다. 실제로 피해가 보이는 개인정보 유출사건보다 하트블리드 버그는 상대적으로 피해 상황이 제대로 확인되지 않아 심각하게 여기지 않았다는 생각이 든다. 더불어 국내보다는 외국 사이트 피해가 대다수라 강 건너 불구경으로 하트블리드 버그를 바라봤을 거라 생각된다. 그래도 IT 종사자나 보안담당자, 네이버나 다음과 같은 국내 유명 사이트들은 이를 심각히 받아들여 지금은 패치를 완료한 상태이다.

2년이 지난 지금 페이스북, 구글을 비롯한 여러 사이트는 하트블리드 버그 취약점 보안 패치를 완료한 상태다. 참고로 애플 같은 경우는 처음부터 SSL이 안전하다고 생각하지 않아 사용하지 않았다. 혹시나 내가 이용하는 외국 사이트가 안전한지 확인하고 싶다면 아래에 있는 링크 버튼을 눌러 사이트를 검색해보면 알 수 있다.

유성경 yuopboy@grayhash.com