Heartbleed bug란? (원인, 결과 및 대처방안)

2014년 4월, 보안 전문가들에 의해 갑자기 발견된 Heartbleed 버그로 인터넷이 떠들썩해 지고 전 세계적인 문제로 커져가고 있는 추세이다.





1) Heartbleed bug란? 

사용자가 통신을 할 때 인터넷 사용자와 서버 사이에서 서로 데이터를 주고받으면서 통신을 한다. 이 때 데이터를 교환할 때 사용 하는 것이 OpenSSL (Secure Sockets Layer) 혹은 TLS (Transport Layer Secure)이라는 오픈소스 소프트웨어를 사용하게 된다.

사용자가 웹사이트에서 아이디와 패스워드를 입력해서 서버로 보내는 것부터 시작해서 모든 정보를 교환할 때 암호화와 복호화를 하는데 사용되는 소프트웨어이다. 

사용자는 컴퓨터나 모바일을 사용하여 웹사이트에 접속할 때 서버로부터 정보를 암호화해서 주고받으며 통신을 하는데 이 과정에서 서버와 사용자가 같은 데이터를 주고받지 않는 소프트웨어적인 문제점이다. 


2) 원  인 

먼저 Heartbeat라는 것은 사용자가 웹사이트에 접속을 하였을 때 서버에 정보를 보내지 않더라도 연결을 유지하기 위해 사용되는 프로토콜이다. 사용자는 서버의 작동 여부를 확인하면서 서버의 메모리에 저장되어 있는 데이터를 가져올 수 있다. 웹 브라우저에서 웹서버에 한번에 최대로 요청할 수 있는 용량은 64KB이다. Heartbleed는 이 Heartbeat에서 유래되었으며, Heartbleed 버그를 사용하여 해커가 지속해서 서버에 저장된 64KB의 데이터를 가져오다 보면 서버에 저장된 정보들 중 개인키 및 세션키, 암호를 해킹할 수 있고 서버를 확인하기 위한 만능키 역할을 하는 비밀키까지 노출이 될 수 있다.

또한 Heartbleed 버그는 해커가 접근한 흔적을 남기지 않기 때문에 피해규모를 확인할 수가 없으며 추적도 불가능하다. 



정상적인 Heartbeat를 살펴보면 사용자와 서버가 연결 채널을 생성한 후 사용자가 데이터(HELLO)를 보내면 서버는 Heartbeat로 다시 사용자에게 보내기 위해서 서버의 메모리에 저장을 한다. 이 데이터를 저장하면서 사용자의 개인정보(USERS SENSITIVE DATA)까지 저장을 하게 된다.





그러나 Heartbleed 버그에 걸린 연결채널에서는 사용자가 보내는 데이터 길이를 다르게(25) 보내게 되어 서버에서 Heartbeat로 응답을 할 때 받은 데이터 길이만큼 응답하게 되므로 메모리에 저장된 사용자의 개인정보도 같이 보내지게 된다.

서버는 원본 데이터의 길이가 맞는 크기인지를 확인하지 않기 때문에 요구되는 데이터의 길이만큼 응답하게 되는 것이다.


이는 컴퓨터의 통신뿐만이 아니라 스마트폰에도 적용이 되며 많이 팔린 단말기인 젤리빈 4.1.1이 설치된 삼성 갤럭시 S3와 갤럭시 노트2 스마트폰이 대상이 된다.


3) 결과 및 대처방안 

현재 OpenSSL 1.0.0 버전과 0.9.8 버전은 해당 버그에 노출되지 않아있으며, 1.0.1 버전은 1.0.1f 버전 까지는 버그에 노출되어 있으므로 1.0.1g 버전으로 업데이트를 해야 한다.

아직까지는 해커가 Heartbleed 버그를 사용하여 서버의 비밀키를 빼냈다는 소식은 없다. 64KB를 계속해서 받으면서 운좋게 해당 메모리에 비밀키가 있어야 하기 때문이다. 

요즘은 대부분의 서버에서 OpenSSL 기술을 사용하고 있기 때문에 서버관리자는 버전 업데이트를 해야 하며, 한국인터넷진흥원(KISA)은 사용자들에게 비밀번호를 바꿀 것을 권고하고 있다. 

+ Recent posts