하트블리드

하트블리드()는 2014년 4월에 발견된 오픈 소스 암호화 라이브러리인 OpenSSL의 소프트웨어 버그이다. 발표에 따르면, 인증 기관에서 인증받은 안전한 웹 서버의 약 17%(약 50만대)가 이 공격으로 개인 키 및 세션 쿠키 및 암호를 훔칠 수 있는 상태이다.

역사

출현 
전송 계층 보안(TLS) 및 데이터그램 전송 계층 보안(DTLS) 프로토콜의 하트비트 확장은 2012년 2월 출판된 RFC 6520이 지정한 제안된 표준이다. 이 확장은 매번 연결을 재협상하지 않아도 안전한 통신 연결을 테스트하고 유지시키는 방법을 제공한다.

그 뒤 2011년 뒤스부르크-에센 대학교의 박사과정을 밟던 학생인 로빈 세글먼(Robin Seggelmann)이 OpenSSL의 하트비트 확장을 구현하였다. OpenSSL에 그의 노고의 결과물을 넣어달라는 세글먼의 요청에 따라, OpenSSL 소속의 4명의 핵심 개발자들 중 한 명인 스티븐 N. 헨슨(Stephen N. Henson)은 그의 변경 사항을 검토하기에 이르렀다.
헨슨은 세글먼의 구현체 안에 들어있던 버그를 눈치채지 못했고 취약한 코드가 OpenSSL의 소스 코드 저장소에 2011년 12월 31일 들어가게 되었다. 이 취약성 코드는 2012년 3월 14일 OpenSSL 버전 1.0.1 출시와 더불어 널리 이용되었다. 하트비트 지원은 기본적으로 활성화되어 있었고, 이에 따라 영향을 받는 버전들은 기본적으로 취약성에 노출되게 되었다.

발견 
OpenSSL의 마크 J. 콕스(Mark J. Cox)에 따르면 구글 보안팀의 닐 메타(Neel Mehta)는 2014년 4월 1일 하트블리드를 보고했다. 이 버그는 TLS 하트비트 확장 구현체에서 심각한 메모리 처리 오류를 따라다녔다. 이 결함은 매 하트비트마다 응용 프로그램 메모리의 최대 64 킬로바이트를 들추어내는데 이용될 수 있었다.

이 버그의 이름은 버그를 대중에게 설명할 목적으로, 피가 흘러내리는 심장의 로고를 만들어 도메인 Heartbleed.com를 시작한 핀란드의 보안 업체인 코데노미콘의 한 기술자가 지은 것이다. 코데노미콘에 따르면 닐 메타는 처음으로 이 버그를 OpenSSL에 보고했으나, 구글과 코데노미콘 모두 이 버그를 독립적으로 발견하였다.

코데노미콘은 4월 3일을 이 버그의 발견일이자 NCSC-FI(이전 이름: CERT-FI)의 통보일로 보고하고 있다.

해결 
2014년 3월 21일 구글의 보도 모엘러(Bodo Moeller)와 애덤 랭글리(Adam Langley)는 이 버그를 수정한 패치를 기록하였다. 패치일은 레드햇의 이슈 트래커를 통해 알려져 있다. 이어, 웹사이트 성능 및 보안 기업인 클라우드플레어는 2014년 3월 31일 시스템 상의 결점을 수정하였다.

동작 원리

패치 
이 버그는 버퍼 초과 읽기로 분류되는데, 소프트웨어가 허용된 것보다 더 많은 데이터를 읽게 하는 상황을 가리킨다. 이 문제는 필요한 양 보다 더 많은 데이터를 요청하는 하트비트 요청 메시지를 무시함으로써 수정할 수 있다.

버전 1.0.1g의 OpenSSL은 몇 가지 바운드 검사를 추가하여 버퍼 초과 읽기를 방지한다. 예를 들면 다음 코드와 같은 변수 검사를
if (1 + 2 + payload + 16 > s->s3->rrec.length) return 0; /* silently discard per RFC 6520 sec. 4 */
이 밑에 나오는 줄 바로 위에 입력하면 된다.
pl = p;
완전한 변경 사항 목록은 git.openssl.org에서 참조할 수 있다.

영향을 받는 서비스 
다음 OpenSSL 버전은 취약한 것으로 결정되었다:
 OpenSSL 1.0.2 베타
 OpenSSL 1.0.1 – OpenSSL 1.0.1f
 CVE-2014-0160용 운영 체제 패치가 설치되지 않은 경우, 라이브러리 버전은 변경되지 않는다. 우분투, 리눅스 민트와 같은 파생 계열을 아우르는 데비안, 또 오픈수세나 FreeBSD, 레드햇 엔터프라이즈 리눅스 (CentOS, 아마존 리눅스 등의 파생 계열 포함)가 이에 해당한다.

다음 OpenSSL 버전은 하트블리드 버그를 해결한 패치를 포함하고 있다.:
 OpenSSL 1.0.2 베타 2 (예정)
 OpenSSL 1.0.1g
 OpenSSL 1.0.0 (및 1.0.0 브랜치 릴리즈)
 OpenSSL 0.9.8 (및 0.9.8 브랜치 릴리즈) (이 버전은 Heartbeat 자체를 지원하지 않는다)

버그를 해결하려면 서버 관리자가 1.0.1g 버전을 사용하거나 DOPENSSL_NO_HEARTBEATS 같이 취약한 기능을 비활성화한 상태로 OpenSSL을 다시 컴파일하면 된다.

웹사이트 및 웹 서비스 
다음의 사이트들은 버그에 대응하여 사용자가 암호를 변경할 것을 권고하는 발표를 하였거나 버그에 영향을 받은 서비스들을 포함하고 있다:

 모장
 리그 오브 레전드
 배틀넷

라스트패스 패스워드 매니저는 순방향 비밀성을 사용하여 취약하지는 않았지만 라스트패스에 저장된 취약한 웹사이트의 암호를 변경할 것을 권장하고 있다.
로그인은 "OpenSSL에 의존하는 자사 서비스들 중 일부와 수많은 제품들을 업데이트하였다"고 주장하였다.

각주 

소프트웨어 버그
인터넷 보안
2010년대의 해킹
전송 계층 보안
2014년 컴퓨팅