더북(TheBook)

3.4 Heartbleed

2014년에 보안 취약점을 가리키는 대표적인 전문 용어는 Heartbleed다. 불행히도 다수의 네트워크 관리자와 시스템 관리자는 이 취약점을 2014년 최악의 문제로 꼽았다. Heartbleed 버그는 공격자가 서버의 메모리 일부를 읽을 수 있는 OpenSSL 취약점이다. 도대체 이 버그의 정체는 무엇일까? SSL을 사용해 암호화하도록 서버에 요구해서 요청을 수행할 수 있는데, 자세한 내용을 알고 싶다면 xkcd 사이트인 http://xkcd.com/1354/를 방문하자. 이 xkcd 만화를 보면, 반환받을 단어(예를 들어, dog)를 요청할 때 3바이트가 아닌 500바이트 크기로 요청한다. 요청을 받은 서버는 ‘dog’란 단어를 반환하는데, 이때 이전 요청에서 할당된 다른 메모리에 있는 데이터까지 반환한다.

얼마나 많은 시스템이 취약한지 정확히 알 수는 없지만, zmap.io(https://zmap.io/)에서는 2014년 4월 16일 알렉사Alexa에서 선정한 상위 100만 개 도메인에서 스캔을 수행해 어느 도메인이 취약한지 보고했다. 아마 지금도 일부 도메인은 여전히 취약한 상태일 텐데, 관련 정보는 https://zmap.io/heartbleed/vulnerable.html에서 볼 수 있다.

메모리 영역에서 문제가 되는 부분을 발견됐다. 수많은 모의 침투를 한 결과 패스워드, 사용자 이름, 무작위 문자열, 이메일, 세션 키, 심지어 개인용 SSL 인증서까지 찾아냈다. 개인용 SSL 인증서가 있으면 네트워크 패킷을 감청해 해독할 수 있다.

그럼, 실습을 하나 해 보자. 취약한 OpenSSL 서비스에서 메모리를 탈취하는 도구는 매우 많은데(메타스플로이트 모듈 사용 가능), 여기서는 직접 컴파일해서 수행하자.

cd /opt/

wget https://raw.githubusercontent.com/HackerFantastic/Public/master/exploits/heartbleed.c

gcc heartbleed.c -o heartbleed -Wl,-Bstatic -lssl -Wl,-Bdynamic -lssl3 -lcrypto

chmod +x heartbleed

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.