Top Coder RAW novel - Chapter (17)
탑 코더-17화(17/303)
# 17
갑질을 이기는 기술
────────────────잠시 뒤 오겠다는 연락을 받은 황호근은 음료를 한잔 마시며, 목을 축였다.
“한 30분 뒤에 도착 할 수 있다고 하는데 괜찮습니까?”
“상관없습니다. 이 앱을 개발하신 분이 직접 온다는 거 맞죠?”
“네. 개발 담당자가 올 겁니다.”
“혹시 그 전에 저희가 앱을 다운 받아 볼 수 있을까요?”
순간 황호근은 승호의 당부를 떠올렸다.
-앱을 주는 건 상관없습니다. 어차피 난독화가 되어 있어서 디컴파일을 해도 내용은 볼 수 없을 거예요. 다만 이 앱이 불법성이 포함되어 있어 유포되는 건 막아야 합니다. 물론 바나나톡에서 유포 할리는 없겠지만요.
승호는 앱을 줘도 상관없다고 했다. 그러나 계약에서 우위를 점하기 위해서는 쉽게 알려줘선 안된다. 황호근이 일부러 머뭇거리며 대답을 하지 않았다.
“아직 계약도 되지 않은 상황에서 앱 공개가 어렵다는 거 이해합니다. 단지 이 앱이 보여주는 내용의 사실 여부를 확인하고 싶을 뿐입니다.”
황호근이 반문했다.
“이미 수번이나 테스트 하셨는데, 아직도 못 믿으신다는 말입니까?
고성진이 헛기침을 하며 대답했다.
“흠, 흠. 그게 아니라··· 직업 병 같은 겁니다. 직접 확인하지 않고는 믿지 못하는. 그리고 서로 확실히 하는 게 좋잖아요.”
머뭇거리던 황호근이 고심하는 척 눈을 감았다. 그렇게 수 십 초가 흐르고 나서야 눈을 뜨고 입을 열었다.
“알겠습니다. 건네 드리겠습니다. 어차피 앱은 시내 소프트 자체 코드 난독화 기술로 컴파일 되어 있어. 알아보실 수 없을 테니까요.”
고성진이 어색하게 웃어보였다.
“하하, 저희가 뭐 꼭. 디컴파일해서 코드를 살펴보겠다는 뜻은 아니었습니다.”
황호근은 폰에 설치되어 있는 앱을 고성진에게 보내 주었다. 고성진은 앱을 받자마자 바나나톡으로 다른 이들에게 전송하려다 멈칫했다.
‘맞다. 이거 해킹 당하고 있었지.’
그러고는 슬쩍 황호근의 눈치를 살폈다. 이내 이메일 앱을 구동시켜 앱을 전송했다.
-바나나톡 취약 점 해킹 앱 파일 첨부.
그리고 자신의 핸드폰에도 앱을 설치해 테스트를 해보았다.
-고성진 : 테스트 채팅. 채팅 보내봐.
단톡 방에 채팅이 올렸다. 이내 같은 공유기를 잡고 있는 동료들이 답장을 보내 왔다.
-김민하 : 테스트 채팅입니다.
바나나톡에서 채팅이 보였다. 고성진은 설치한 바나나후킹이란 이름의 앱을 실행시켜 보았다.
거기에도 똑같은 내용의 채팅이 올라와 있었다. 몇 번을 테스트 했지만 결과는 같았다. 보면 볼수록 신기했다. 어떻게 이럴 수가 있을까?
‘SSL은 지금까지 해킹 방법이 없는 걸로 알려져 있는데··· 더구나 바나나톡 앱도 자체 코드 난독화 기술로 암호화 되어 있고, 채팅내용 역시 AES-128로 암호화 되어 있는데 그걸 전부 풀었다니······.’
눈으로 보면서도 믿기지가 않았다. 몇몇 동료들에게 할 수 있겠냐고 물어 보았다. 하나같이 난색을 표했다. 아무리 생각해 보았지만 답을 찾을 수 없었다.
‘말 도 안 돼······.’
곧 개발자가 오면 의문이 전부 풀릴 것이다. 전부 개발한 게 맞는지, 아니면.
‘다른데서 다운을 받았다는 건 더 말이 안 돼······.’
고성진은 아무리 머리를 굴려 봐도 답을 찾을 수 없었다.
30분 정도가 지난 뒤.
바나나톡 본사로 승호 일행이 도착했다. 회의실로 올라가자마자 십여 명의 사람들이 승호를 기다리고 있었다. 고성진이 자리에서 일어나 최기훈에게 다가갔다.
“보안 이슈가 한 번 터지면 파급력이 워낙 크다 보니. 참석인원이 많아졌습니다. 정식으로 인사드리겠습니다. 바나나톡 고성진 매니저 입니다.”
최기훈이 어리둥절한 표정으로 대답했다.
“시내 소프트 최기훈 부장입니다.”
“시간이 급박한 만큼 바로 설명을 들을 수 있을 까요? 발견 하신 취약점이 외부에 흘러나가기 전에 이슈를 처리해야 해서요.”
최기훈이 고개를 돌려 승호를 쳐다보았다.
“승호야, 설명 해달라고 하시는데 바로 가능하겠어?”
승호가 고개를 끄덕이며 앞으로 나섰다. 당황한 고성진이 눈을 크게 뜨며 승호를 보았다.
“큰 틀은 전화로 말씀 드렸고, 자세한 내용은 저희 기술을 공개해야 하는 수준인데. 계약서는 작성 되셨습니까?”
“그, 그건 아직 이지만.”
“그러면 더 자세한 설명은 어렵습니다.”
고성진이 슬쩍 뒤를 보았다. 부하직원이 절레절레 고개를 저었다. 앱을 디컴파일을 하여 내부 코드를 볼 수 없다는 뜻이었다.
저들은 할 수 있고 자신들은 하지 못했다. 일순 회의실에 정적이 흘렀다. 그러자 앉아 있던 사람들 중 한명이 입을 열었다.
“말씀 하신 데로 해드려.”
그리고 자리에서 일어나 승호에게 다가와 손을 내밀었다.
“반갑습니다. 서현석 이사입니다.”
서현석 이사.
바나나톡 창업멤버이자, 뛰어난 기술로 국내외의 호평을 받고 있는 프로그래머.
종종 방송까지 출연해 기술의 미래를 논하는 사람이었다.
***
인사를 마친 승호가 보드마커를 들고 화이트보드 앞에 섰다.
“저 앱을 개발하는 데는 총 네 가지 기술이 들어갔습니다. 네트워크 상의 패킷 탈취. SSL로 암호화 된 네트워크 패킷의 복호화. 바나나톡의 난독화 된 코드 복호화. 바나나톡의 암호화된 채팅 내용 복구.”
서현석이 흥미로운 표정으로 승호를 보았다.
“네트워크 패킷 탈취는 딱히 바나나톡과 관련된 이슈는 아니기에 자세히 설명 드리지 않겠습니다. 그럼 먼저 SSL 패킷을 탈취 하고 복호화 한 과정을 말씀 드리겠습니다. 그러기 위해서는 확인해야 할 게 하나 있는데······.”
승호가 고성진을 보며 말을 이었다.
“바나나톡은 자체 큐 라이브러리를 사용하시던데 맞습니까?”
고성진이 고개를 끄덕였다.
“네. 내부적으로는 바나나큐 라고 부르는 프로그램을 이용 하고 있습니다.”
“거기에 탑재된 SSL 기반의 통신 라이브러리가 최초 두 종단간의 연결이 확립되면 서로 생존 신고 과정인 하트비트를 하게 됩니다. 디컴파일 해본 바로는 정확히 1바이트 가량을 주고받더군요.
회의실내 사람들의 웅성거림이 시작되었다. 서현석이 승호를 보며 말했다.
“계속 부탁드립니다.
“하트비트. 그 과정에서 종단 간 주고받는 페이로드에 원래는 1바이트만이 담겨 있어야 합니다. 그러나 탈취한 네트워크 패킷에 1바이트 이상을 담아 서버 쪽으로 보내면 과연 서버는 어떻게 작동할까요?”
승호의 말에 또 다시 웅성거림이 시작되었다.
“야, 확인해 봐. 어떻게 동작하는지?”
“잠시 만요. 코드 보고 있습니다.”
“이거 아는 사람 없어? 테스트해본 사람은?”
“아무도 없는 거야? 도대체 개발을 어떻게 한 거야.”
질문이 오고 갔지만 답을 아는 사람은 없었다. 그때 승호가 입을 열었다.
“문제는 이때 발생합니다. 제가 1바이트 보다 많은 양의 데이터를 하트비트 프로토콜에 담아 요청하면 서버는 원치도 않는 정보를 함께 건네주더군요. 거기에 SSL의 개인키가 담겨 있었고, 그걸 이용해 패킷을 원문으로 해석 할 수 있었습니다. 이걸로 첫 번째 과정의 설명을 마칩니다.”
서현석이 승호를 보며 말했다.
“혹시 지금 질문을 해도 되겠습니까?”
“네. 편하게 해주세요.”
“하트비트 과정에서 버퍼 오버플로우 현상이 발생한 다는 건 어떻게 찾아낸 건가요? 또 버퍼 오버플로우 현상으로 인해 추가된 데이터에서 개인키는 어떻게 찾아낸 건지 궁금합니다.”
“이미 서 이사님께서 답을 말씀 하셨네요. 버퍼 오버플로우는 대단히 널리 알려진 공격 방법입니다. 전 그저 기본적인 방법들부터 시도해 보았을 뿐입니다.”
승호가 빠르게 말을 이었다.
“그 중 개인키를 찾아낸 건 버퍼 오버플로우 현상으로 추가 된 데이터들에 대해 의미를 가지지 않는 문자열을 찾아내는 알고리즘을 돌렸습니다. 개인키는 의미를 가지는 단어가 아닌. 무의미한 문자열의 연속이니까요. 검색 방법은 시내 소프트가 가진 솔루션이라, 자세히 말씀드리지 못하는 점 양해 바랍니다.”
최기훈이 황호근에게 귓속말을 전했다.
“저거, 우리 제품 홍보하는 거 맞죠?”
“그런 거 같은데. 언제 저런 넉살이 생겼지?”
“잘하면 검색 솔루션도 팔 수 있겠어요.”
“바나나톡도 명색이 검색에 조예가 있는 회사야. 그렇게 까지 될까.”
“저기 놀란 사람들 표정 좀 보세요.”
황호근과 최기훈의 자리는 맨 뒤.
가장 뒤에 있었기에 사람들의 반응을 쉽게 확인 할 수 있었다. 과연 최기훈의 말대로 놀라는 사람이 많았다. 특히나 서현석 이사가 감탄을 금치 못했다.
“자사의 검색 알고리즘으로 개인키를 찾았다. 기회가 되면 거기에 대해서도 이야기를 나누고 싶군요.”
그 사이 바나나톡 관계자 한 명이 탄성을 터트렸다.
“정말 페이로드 길이에 대한 검증 로직이 없잖아······.”
“다시 한 번 확인 해봐.”
“벌써 몇 번을 봤습니다. 페이로드에 대한 검증을 하고 있지 않아요. 이 상태로 면 정말 버퍼 오버플로우가 발생할 지도 모릅니다.”
“모르겠는 게 아니라 발생하고 있다니까. 그러니까 우리쪽 SSL 개인키를 탈취 당한 거잖아.”
“아··· 그건 좀 더 찾아보고 테스트를 해봐야 합니다. 코드만 보고는 알 수가······.”
“어휴, 빨리 찾아봐. 보안 패치 오늘 안에 못하면 집에 갈 생각도 하지 마.”
잠시간의 소란이 잦아들 때 쯤 승호가 말을 이었다.
“그러면 다음 차례로 바나나톡 엔드로이드 앱의 코드 난독 화를 어떻게 복호화 했는지 말씀 드려도 될까요?”
서현석이 고개를 끄덕였고, 중구난방으로 떠들던 사람들이 입을 닫았다.