오픈SSL 암호화 프로토콜에서 발견된 취약점인 '하트블리드(HEARTBLEED)'가 전 세계 IT업계를 뒤흔드는 태풍의 눈으로 부상했다.
보안 전문가들은 하트블리드에 대해 광범위한 영역에 문제를 일으킬 수 있는 취약점인 것은 분명하지만 우려했던 것과 달리 서버 내용을 모두 탈취할 수 있는 비밀키가 노출될 확률은 적다는 입장이다. 하트블리드는 오픈SSL과 같은 오픈소스 개발 생태계의 보안문제에 대한 태생적 한계를 드러냈다는 지적도 나오고 있다.
■하트블리드가 도대체 뭐길래...
하트블리드가 위험한 취약점으로 평가되는건 구글, 야후, 페이스북, 아마존웹서비스(AWS), 드롭박스 등 웹 기반 서비스, 시스코 시스템즈, 주니퍼네트웍스 등 네트워크 장비 회사, 안드로이드 4.1.1 젤리빈 운영체제(OS)를 적용한 주요 스마트폰까지 업계에 전방위로 영향을 미칠 수 있기 때문이다. 현재 관련 회사들은 긴급 패치를 배포하고 있다.
국내의 경우 한국인터넷진흥원(KISA)이 하트블리드로 인해 웹브라우저에서 웹서버로 전송된 개인정보, 비밀번호 등은 물론 웹서버 암호키도 탈취될 수 있다며 즉각적인 업데이트가 필요하다고 경고했다.
암호화 통신을 위한 오픈SSL은 오픈소스 형태로 제공된다. 또 지난 2012년 3월부터 '하트비트(HEARTBEAT)'라는 SSL 확장 프로토콜을 지원해왔다.
하트비트는 오픈SSL을 통한 암호화 통신이 유지되고 있는지를 확인하기 위해 클라이언트에서 서버에 응답을 요청하고 이를 수신하는데 사용된다. 본래 뜻처럼 네트워크로 연결된 클라이언트와 서버 사이에 심장박동이 뛰고 있는지를 확인하는 것이다.
KISA 취약점 분석팀 박진완 팀장에 따르면 하트블리드는 하트비트를 통해 통신할 때 발생할 수 있는 문제다. 심장박동이 뛰고 있는지 확인하는 과정에서 출혈이 발생하게 된다는 뜻을 담고 있다.
IT관련 이슈를 만화로 설명해 주는 웹사이트인 xkcd은 하트블리드를 보다 알기 쉽게 정리했다. 핵심은 서버가 암호화 통신상태가 유지되고 있는지를 확인하는 과정에서 요청한 정보의 크기를 제대로 확인하지 않는다는 것이다.
예를 들어 한 사용자가 웹브라우저를 통해 서버에 아직 동작하고 있으면 6글자짜리 'POTATO'라는 단어를 보내시오라고 요청하면 정상적인 암호화 통신이 유지되고 있을 경우 서버는 이를 인식해 'POTATO'라는 대답을 준다.
문제는 이러한 방법을 구현하는 하트비트 프로토콜에 치명적인 취약점이 있다는 사실이다. 사용자가 웹브라우저를 통해 서버에 아직 동작하고 있으면 500글자짜리 'HAT'이라는 단어를 보내시오라고 요청하면 서버는 'HAT'이라고 답하는 것이 아니라 이 단어를 포함해 서버에 저장된 내용 중 497개 정보를 더 보내는 것이다. 이렇게 해서 한번에 최대한 요청할 수 있는 용량은 64킬로바이트(KB)다.
취약점을 알고 있는 공격자 입장에서는 하트비트 프로토콜을 악용해 서버에 저장된 정보들 중 최대 64KB의 내용을 반복해서 요청하다보면 서버에 저장된 정보들 중 서버를 확인하기 위한 만능키 역할을 하는 비밀키가 노출될 수 있는 것이다.
■하트블리드 취약점, 만능키 아니다
하트블리드 취약점이 오픈SSL 1.0.1 버전을 사용하고 있는 광범위한 영역에 문제를 일으킬 수 있는 것은 맞지만 모든 자물쇠를 열 수 있는 만능키는 아니다.
콘텐츠딜리버리네트워크(CDN) 서비스를 제공하고 있는 클라우드플레어는 최근 자사 블로그를 통해 하트블리드 취약점으로 비밀키가 유출될 수 있다고 경고했다.
그러나 보안 전문가들에 따르면 비밀키를 알아내는 것은 '건초더미에서 바늘 찾기'나 다름없다. 실제로 클라우드플레어 역시 리눅스 계열 서버인 엔진엑스(NGINX)에서 하트블리드 취약점에 대한 광범위한 테스트 결과 해당 서버에서 비밀키를 유출시키는데 성공하지 못했다고 밝혔다.
공격자 입장에서는 반복적으로 탈취한 64KB 용량의 정보 중 실제로 중요한 정보가 뭔지를 골라내야 하는 과정이 남는다. 메모리에 저장된 정보 중 사회보장번호, 신용카드 번호, 비밀키 등의 정보를 확인해야 하는 것이다.
해커가 작정하고 공격대상을 지목하고, 장시간 지속적으로 하트블리드 취약점을 악용해 서버에서 내용을 탈취하지 않는 한 사실상 활용도가 떨어지는 취약점이라는 것이다.
■오픈소스 개발, 태생적 한계도 드러나
최근 오픈SSL 진영에서 하트비트 프로토콜을 고안해낸 독일 개발자 로빈 세겔만은 요청한 정보들에 대한 길이를 확인하지 않도록 실수했다는 사실을 인정했다.
이 과정에서 오픈SSL을 포함한 오픈소스 개발자들의 열악한 개발환경이 드러나기도 했다. 영국 데일리메일에 따르면 지난 2011년 개발된 하트비트 프로토콜에 대해 세겔만은 (오픈SSL에) 새로운 기능을 추가하는 과정에서 나온 단순한 프로그램 에러였다고 고백했다.
관련기사
- 서버·네트워크 업계, 하트블리드 대응에 분주2014.04.15
- 오바마, NSA '하트블리드' 취약점 활용 묵인 의혹2014.04.15
- "NSA,하트블리드 취약점 알고도 은폐"2014.04.15
- IT업계, 오픈SSL 취약점 '하트블리드' 비상 경계령2014.04.15
외신에 따르면 문제는 오픈소스 개발자들이 대개 자원봉사나 파트타임 형태로 참여하다보니, 개발 과정에서 발생하는 버그에 대해 충분한 검증 없이 광범위하게 활용되는 경우가 대부분이라는 설명이다. 하트비트 프로토콜의 경우 그동안 취약점에 대한 정보가 발견되지 않은 채 지난 2년간 수많은 곳에서 활용돼왔다.
한 개발자 블로그에 따르면 프로그램을 만들기 위해 사용된 1천 LOC(Lines Of Code) 당 평균적으로 15개~50개 가량 에러가 발생한다. LOC는 프로그램에 사용된 소스코드 1줄을 말하는 것으로 1천LOC는 소스코드가 1천개 줄로 쓰였다는 것을 뜻한다. 현재 오픈SSL은 약 30만 LOC로 구성됐다. 그만큼 버그가 나올 확률이 높고 이에 대한 철저한 관리가 필요한 셈이다.