top of page
33.jpg
55.jpg

KAIST부설 한국과학영재학교 온라인 과학매거진 코스모스

  • 블랙 페이스 북 아이콘
  • 블랙 인스 타 그램 아이콘

IT업계의 대재앙, 하트블리드

컴퓨터로 프로그램을 개발해 본 사람은 알겠지만, 버그가 없는 코드를 짜는 것은 쉽지 않다. 외견상으로는 정상적으로 작동하는 듯 보여도, 내부에서는 메모리가 새거나 특수한 입력은 처리하지 못하는 등의 문제가 발생하는 경우가 많다. 결국 프로그램도 사람이 개발하는 것이기 때문에, 버그가 없는 프로그램은 존재하지 않는다.

이 기사에서 다루는 하트블리드 취약점은 근본적으로는 또 하나의 버그일 뿐이다. 하지만 이것이 단순한 버그가 아니라 “취약점”이라고 불리는 이유는, 그 버그가 초래하는 오동작이 외부에서 시스템을 공격하는 데 사용될 수 있기 때문이다. 단순히 사용자에게 불편을 주는 버그가 아닌, 실제로 사용자에게 심각한 피해를 줄 수 있는 버그를 취약점이라고 부른다.

하트블리드 취약점도 예외는 아니다. 하트블리드 취약점은 공격 대상 시스템의 메모리 내에 저장된 정보를 외부에서 접근할 수 있게 해 준다. 일반 사용자에 이는 큰 문제로 다가오지 않을지도 모른다. 그런데 공격 대상 시스템이 은행 컴퓨터라면? 어쩌면 수백만 명의 은행 계좌 정보가 누출될 수도 있다. 공격 대상 시스템이 정부 컴퓨터라면? 국가 기밀이 유출될 수도 있다.

독자들은 은행이나 정부 같은 중요한 시스템에는 그런 허술한 프로그램이 사용되지 않았을 것이라고 질문할 수도 있다. 하지만 불행하게도 이 프로그램의 경우에는 사용되지 않는 시스템을 찾는 것이 어려울 정도로 널리 사용되고 있다. 대다수의 웹사이트는 서버와 클라이언트 간에 중요한 정보를 교환할 때 OpenSSL 라이브러리를 이용해 정보를 암호화한다. 2014년 발견된 하트블리드 취약점은 2011년에 OpenSSL 라이브러리에 처음 등장한 이후로 3년동안 OpenSSL을 사용한 모든 프로그램에 영향을 미친다. 암호화 통신이 필요한 모든 프로그램이 잠재적으로 위험하다고 볼 수 있는 것이다. 예시 두 개만 들자면, Apache와 Nginx라는 웹 서버 프로그램이 이 취약점을 가지고 있다. 그리고 전 세계의 모든 웹사이트 중 66%가 이 두 프로그램 중 하나를 사용하고 있다. 다른 취약한 프로그램을 사용하는 시스템들을 고려하면 이 수치는 훨씬 더 커질 것이다.

이 취약점은 아주 간단한 원리로 작동한다. 6컷짜리 만화 하나만으로도 핵심 아이디어를 모두 설명할 수 있을 정도이다.


OpenSSL에서는 하트비트 패킷이라는 것을 통해 연결이 정상적인지 확인한다. 클라이언트에서 임의의 더미 데이터와 함께 그 데이터의 크기를 보내면, 서버가 같은 데이터를 보냄으로써 연결 도중에 데이터에 손실이 생기지 않았는지를 검사하는 방식이다. 그런데 문제는 악의적인 클라이언트가 얼마만큼의 데이터를 보냈는지를 조작할 경우에 발생한다. 클라이언트에서 32바이트의 데이터를 보낸다고 명시해 놓고 4바이트의 데이터만을 보낸다면 서버는 원래 보내져야 할 4바이트의 데이터 외에도 메모리에 저장된 (유출되어서는 안 될) 데이터를 28바이트만큼 끌어와 재전송하는 것이다.

하트블리드 취약점은 생각해봐야 할 만한 문제를 하나 제공한다. OpenSSL 라이브러리는 대표적인 오픈소스 소프트웨어 중 하나이다. 오픈 소스는 모든 사람이 코드를 접근하고 수정할 수 있도록 한 프로그램이다. 일반 사용자들에게는 익숙하지 않을지도 모르지만, 이미 IT업계에서는 Linux, Git, MySQL 등 많은 프로그램들이 오픈 소스로 개발되고 있다. OpenSSL도 이 중 하나이기 때문에 이번 사태로 오픈 소스 소프트웨어의 신뢰도를 우려하는 사람들이 늘어난 것이 이해할 수 없는 일은 아니다. 모두가 코드를 확인할 수 있기 때문에 많은 사람들의 관심을 받는 프로그램에서 발견되지 않았을 버그가 비교적 빠르게 발견되는 경우가 많이 있다. 하지만 반대로 많은 사람들의 관심을 받지 못하는 프로그램은 악의적인 누군가가 버그를 발견하고 이를 악용할 수도 있는 것이다. 기업에서 프로그램을 관리하는 경우에 이런 일은 벌어지지 않았을지도 모른다. 코드의 버그를 책임질 의무가 있는 프로그래머가 정해져 있기 때문이다. 하지만 오픈 소스 소프트웨어는 이러한 이점을 누릴 수 없다. 많은 사람들이 코드를 볼 수 있다고 해도, 그 코드 속의 버그를 누군가가 자신의 시간과 노력을 투자해서 고칠 것이라는 보장은 없기 때문이다.

위에서 알 수 있듯이, 하트블리드 사태는 어쩌면 단순한 기술적인 문제가 아니라, 현재 IT업계의 경제적 특징의 실패일지도 모른다. 컴퓨터공학계의 수많은 기술적 업적 중 절대다수는 하나 이상의 오픈 소스 프로그램에 의존하고 있다. 오픈 소소의 신뢰성은 의심받고 있고, 어쩌면 IT업계는 사상누각일 수도 있다는 평가까지 나오는 상황이다.

하지만 이를 해결하기 위해서 대기업에서 노력을 보이고 있다는 사실은 특기할 만한 점이다. 오픈소스의 지속적인 관리를 위한 지원을 확보하기 위해 Core Infrastructure Initiative가 발족되었고, 아마존, 어도비, 인텔, 구글 등에서 360만 달러 이상의 자금을 출자하였다. 이 자금의 관리는 리눅스 재단이 맡고 있다. 또한 구글에서는 이러한 취약점들을 찾아내기 위해 Project Zero를 시작하기도 했다.

오픈 소스는 이미 시대의 대세라고 생각한다. 큰 이익이 예상되지는 않지만, 꼭 필요한 프로그램들을 기업에서 나서서 개발해주기를 바라는 것은 공허한 이상일 뿐이다. 이런 상황에서 누군가가 그런 프로그램을 개발해 준다면, 이는 감사받아야 할 일이다. 현재 IT업계에서 이러한 공로로 감사받아야 할 사람은 바로 별다른 대가 없이 커뮤니티에 공헌하고 있는 오픈 소스 개발자들이다. 따라서 우리는 오픈 소스 소프트웨어를 불신하기보다는 신뢰하고, 이에 대한 관심을 가져야 한다고 생각한다.

 

이승욱 학생기자 | Mathematics & Computer Science | 지식더하기


참고자료

[1] https://heartbleed.com/

첨부 이미지 출처

[1] https://xkcd.com/1354/


ⓒ KAIST부설 한국과학영재학교 온라인 과학매거진 KOSMOS


조회수 356회댓글 0개

최근 게시물

전체 보기
bottom of page