안드로이드를 하트블리드(Heartbleed) 버그로부터 구하신(?) 개발자 전병권님과의 인터뷰!
2014년 4월 28일 월요일
1. 본인 소개 부탁드립니다.
안드로이드를 사랑하는 개발자 전병권입니다. 사랑하는 딸 지아의 아빠이자 수희의 든든한 남편입니다. :) GDG Korea Android에서 운영자로 활동하고 있으며 Daum 에서 안드로이드 앱 개발을 하다가 작년에 SK planet으로 옮겨 안드로이드 앱 성능 개선, 테스트 자동화 등의 업무를 담당하고 있습니다.
2. Heartbleed 버그란?
우리가 웹 페이지에 접속하면서 https를 사용하게 되면 암호화된 SSL/TLS 통신을 사용하게 됩니다. 이 암호화된 통신을 시작하기 위해서는 서버와 브라우저 간에 암호화에 관련된 데이터를 주고 받게 되는데 이 과정에서 약간의 시간이 소모되게 됩니다. 만약 접속이 자주 끊어지고 다시 이루어 지게 된면 소모되는 시간이 점차 늘어나게 됩니다. 이를 줄이기 위해 Heartbeat 라는 확장이 TLS구현에 추가되어 있습니다. 접속을 끊지 않고 계속 사용한다고 생각하면 됩니다.
그런데 OpenSSL 의 Heartbeat 구현에 문제가 있었습니다. 접속을 유지하기 위해 주기적으로 브라우저에서 특정 데이터를 보내고 서버에서 같은 데이터를 다시 받는데, 길이를 조작하는 방식을 통해 서버 메모리의 내용을 65535 바이트만큼 읽을 수 있었습니다. 이것이 Heartbeat 확장에서 발생했고 서버데이터를 외부로 흘린다고 해서 Heartbleed 이라는 이름이 붙게 되었다고 합니다.
3. AOSP 버그 리포트를 하게 된 이유?
사실 제가 2012년 7월 초에 리포팅 했을 때는 Heartbleed 가 알려지기 훨씬 이전 이였습니다. 물론 저도 그 버그에 대한 아무런 정보도 없었습니다. 리포팅한 버그의 내용도 특정 프로토콜로 AP에 접속 시 오류가 발생한다는 내용입니다. 그 때가 젤리빈(JB)이 나온지 얼마 안된 때였는데 가지고 있던 갤럭시 넥서스 폰이 ICS에서는 문제없이 사용하다가 JB로 업그레이드 이후에 문제가 발생해서 그 차이를 찾아서 리포팅하게 되었습니다.
4. 그 후 실제 구글 엔지니어와는 어떻게 같이 일을 하셨는지?
리포팅을 하고 얼마 지나지 않아서 동일한 에러 때문에 고생하는 사람들의 댓글이 남겨지기 시작했습니다. (댓글이 달리면 메일로 알림이 옵니다.) 다들 구글 레퍼런스 폰 사용자들이었고 소스가 공개되어있기 때문에, '내가 한번 직접 고쳐보자'라는 생각이 들었습니다. 그래서 안드로이드 오픈소스 프로젝트(AOSP)의 코드를 살펴보기 시작했습니다. 이전 버전과의 차이를 살펴보면서 옵션들을 수정한 후 빌드해서 마침내 제대로 동작하는 패치를 만들 수 있었습니다.
그 때쯤 드디어 구글 엔지니어인 Brian D. Carlstrom 가 나타나서 문제를 파악하기 시작했습니다. 제가 제안했던 방법을 살펴보고 좀 더 상세히 문제를 파악해서 다시 제게 의견을 물었습니다. 저의 제안과 더불어 구글러가 제안해준 방법이 바로 Heartbeat 확장을 끄는 것이었습니다. 제안해준 방법을 적용해보니 문제도 잘 해결되고 변경되는 범위도 작았습니다. 결국엔 이 패치가 2012년 7월 말쯤에 반영되었습니다. 제가 리포팅한지 겨우 20일쯤 지난 후였습니다. 결국 이 패치 덕에 Hearbeat 확장을 사용하지 않게 되었고, 따라서 안드로이드는 4.1.1 버전 일부를 제외하고는 Heartbleed 버그에 영향을 받지 않게 되었습니다. "소 뒷걸음질 치다 쥐 잡기"라는 속담이 정말 잘 어울리는 경우인 것 같습니다. :)
만약 안드로이드가 오픈소스가 아니었고 사용자의 참여가 어려운 환경이었다면 이런 버그 수정에 얼마만큼의 시간이 들었을까요? 6개월? 1년? 그 이상의 시간이 걸릴지도 모릅니다. 안드로이드 프로젝트에서는 문제를 스스로 고치는 것이 충분히 가능합니다. 다른 오픈소스의 경우도 마찬가지 입니다. 오픈소스를 열심히 사용하다가 발견한 버그를 직접 수정하거나 내게 필요한 새로운 기능을 구현해서 다른 이들도 사용할 수 있도록 기여하는 것이 가능합니다. 이게 바로 오픈소스의 가장 큰 즐거움인 것 같습니다.
GDG 활동에 참여하면서 얻게 되는 소득도 참 많습니다. 모임에 참여하는 개발자들과 이야기를 나누다 보면 참여하는 개발자의 열정이 강렬하게 느껴집니다. 그런 열정이 제게는 큰 에너지가 되어 저를 계속 노력하도록 만듭니다. 여러분들도 GDG 활동과 오픈소스 참여를 통해 많은 열정과 즐거움을 얻어 가시길 바랍니다.