웹상에서 잃어버린 메일주소를 찾거나 비밀번호를 찾을 때, 우리는 사용자 인증을 위해 휴대전화를 많이 사용한다. 예를 들어, 아이디를 찾거나 비밀번호를 찾으려 하면, 일회성 인증 코드가 사용자 휴대전화에 전달되어 사용자가 인증되고, 사용자는 암호 재설정 프로세스를 할 수 있다. 이런 식으로 자신의 명의로 된 휴대 전화를 이용한 사용자 인증은 생각보다 일반인들의 높은 신뢰감을 주고 있다. 딱 봐도, 내 명의로 된 휴대전화의 메시지로 인증한다는 거가 듣기로는 좋지 아니한가. 하지만 듣기 좋은 거에 비해 여기에서 사용되는 SS7 시스템은 보안 연구가들이 보기엔 문제의 여지가 많다. 특히나 SS7의 구조적인 취약점은 보안 연구가들이 꾸준하게 언급해오고 있음에도, 큰 위협으로 다가오는 것 같지 않다.[1][2][3] 그렇다 하더라도 보안 연구가들의 경고는 끊이지 않는데[4], 오늘은 이런 취약성을 이용하여 비트코인 지갑에 접근하는 방법에 대해 이야기해보려 한다.
SS7(Signaling System No. 7)은 글로벌 통신 네트워크로, 전 세계 공중 전화망(PSTN, Public Switched Telephone Network)의 대부분을 연결하고 구현하는데 사용되고 있다.[5] 좀 더 자세히 얘기하면, SS7은 AT&T, Verizon을 비롯한 전 세계 800여 통신 사업자가 전화, 문자 메시지, 데이터를 서로 상호 연결하고 교환하는 로밍 및 기타 서비스를 할 수 있는 전화 통신 프로토콜이다.[6] 빠르게 달리는 자동차 안에서 끊기지 않게 통화하고, 바다를 건너 서로 다른 기지국 간의 연결도 SS7에 있는 기능이다.[7] 쉽게 생각하면, 전 세계를 이어주는 아주 큰 전화 통신망인 셈이다. 1975년도에 개발된 SS7은 전 세계 어디에 있든 서로 연결해주는 편리한 시스템으로 사용됐지만[8], 2008년부터 그 신호체계가 보안에 취약하다는 이야기가 돌기 시작했다.
처음 SS7이 취약하다는 말이 돌던 2008년에는 휴대전화의 사용자를 몰래 추적할 수 있는 몇 가지 취약점이 공개되었다.[9] 이러한 취약점은 2014년에 더 정교해지면서 70%의 성공률로 일반 사용자나 테러리스트 등의 휴대 전화로 사용자의 위치나 움직임을 찾아낼 수 있었다. 당시 발견된 SS7의 프로토콜 취약점은 통화 연결을 전달하는 프로토콜을 통해 도청할 수 있었고, 각 발신자의 이동 통신사에 임시 암호화 키를 해제하도록 요청함으로써, 암호화된 통신을 해제할 수도 있었다.[10] 이처럼 여러 보안 연구가들은 SS7에서 취약점을 찾아 공개하고 발표하면서 SS7의 위험성에 대해 계속해서 경고했다.
이번 비트코인 지갑 해킹도 마찬가지다. Positive Technologies의 보안 연구가는 SS7의 취약점을 통해 동전 지갑에서 관리하는 모든 코인을 훔칠 방법을 공개했다.[11] 그들은 먼저 사용자의 Gmail 주소와 전화번호를 얻은 다음, 대상에 대한 일회용 인증 토큰을 보내어 계정의 암호 재설정 요청을 했다. 이어서, SS7의 취약점을 악용하여 이중 인증 코드가 포함된 SMS 메시지를 가로챘고, 사용자의 Gmail 받은 편지함으로 접근하였다. 받은 편지함에서 받은 메일을 통해 등록된 코인 시장의 계정으로 접근하여, 사용자의 코인 지갑에 대한 비밀번호도 재설정하고, 지갑에 저장된 비트코인, 현금에도 접근하여 제어도 할 수 있었다.[12][13][14] 아래의 영상은 이에 대한 시연 영상으로 그 과정을 확인할 수 있다.
그렇다면 SS7의 취약점은 무엇인가. 바로, SMS 기반의 이중 인증의 큰 취약점은 SS7의 구현 설계상 일회용 암호가 다양한 장치 및 서비스에서 접근하여 확인할 수 있다는 점이다. 이러한 장치 및 서비스에는 자체 결함이 있을 수 있기 때문에 그럴 때 공격 범위도 더욱 증가하기 마련이다. 반면, 푸시 알림 팝업과 같은 SMS를 사용하지 않는 이중 인증은 인증 메시지를 하나의 장치로 전송하기 때문에 SMS 기반의 이중 인증보다는 안전함이 따른다. 따라서 정리하면 비밀번호 복구를 위해 SMS를 사용하는 모든 곳에는 SS7에 구현 설계에 따른 취약점이 존재한다는 것이다.[15]
비트코인 지갑 해킹을 발표한 Positive Technologies은 SS7의 취약점을 계속해서 경고해온 곳 중 하나다. 그들은 이번 비트코인 아니어도 WhatsApp과 Telegram을 SS7의 유사한 취약점으로 해킹하였고[16], 이 밖에도 Facebook 계정 역시 그들의 경고 메시지에 총알받이가 되었다.[17] 뿐만이랴, Gmail, Twitter를 포함한 SMS를 사용하여 사용자 계정을 확인하는 모든 서비스에 이 같은 취약점을 가지고 있다. 하지만 취약점이 공개하고, 1년의 시간이 지나는 동안 변한 것은 없었다.[18]
이렇게 문제가 있는 SS7인데, 왜 고치려고 하지 않을까. SS7은 수년간 사용하면서 악용 사례나 취약점이 꾸준하게 언급되고 있음에도 사람들이 관심을 두지 않았다. 그 이유는 전 세계 통신 네트워크를 구성하고 있는 SS7 취약점을 악용하려면 상당한 기술과 금전적인 부분이 필요했기 때문이다. 이 때문에 계속해서 취약점이 발견되더라도 사람에 의한 위험요소가 매우 낮다고 판단하였고, 지속해서 문제를 무시해 왔던 것이다.[19] 더군다나, Positive Technologies의 연구원 말에 따르면, SMS를 통한 사용자 인증은 가장 보편적이고 편리한 이중 인증 기술이기 때문에 이를 한순간에 사용하지 않기로 하는 것은 불가능하다고 한다.[20] 결국, 이에 대한 해결안은 모든 통신 사업자가 취약점을 분석하고, 가입자 보안 수준을 체계적으로 향상해야 되는 문제가 된 것이다. 예를 들어, Google OTP, Google 음성 안내 또는 보안 키와 같은 도구의 사용처럼 말이다.[21]
앞서 얘기로는 상당한 기술과 금전적인 부분으로 위험 요소가 매우 낮아 발생하기 어려울 것으로 사람들은 예상했다. 하지만 이러한 예상은 올해 5월에 발생한 사건으로 깨졌다. 독일의 유무선 통신, 인터넷 등을 제공하는 영국 통신사 O2-Telefonica[22]는 SS7을 취약점을 악용하여 고객 중 일부의 은행 계좌가 비워진 것을 확인했다고 전했다.[23] 독일 은행에서는 SMS 이중 인증 시스템을 사용하였는데, 이는 온라인 뱅킹을 통해 이체할 경우, SMS를 통해 인증 코드를 받고, 이를 인증해야 이체를 할 수 있다. 해커는 이를 이용하여 먼저 악성코드를 사용자의 컴퓨터에 스팸 메일로 보내고, 사용자의 은행 계좌, 잔액, 로그인 세부 정보 및 암호와 자신의 휴대폰 번호를 수집했다. 그런 다음 SS7의 취약점을 악용할 수 있는 접근 권한을 구입하여 해커가 제어하는 휴대 전화로 사용자의 휴대 전화 번호를 리디렉션하도록 설정했다. 이후, 해커가 온라인 은행 계좌에 로그인하여 돈을 송금하고, 거래 번호가 전송되었을 때 해커는 자신에게 리디렌셕되어 온 인증 메시지로 자신을 인증하여 돈을 이체시킨 것이다. 즉, 해커는 SS7의 취약점을 악용하여 온라인 뱅킹 고객에게 전송된 2단계 인증 코드를 가로챘고, 계좌의 잔액을 비울 수 있었던 것이다. 더욱이, 이를 보도한 언론매체로는, 지난 몇 달간 이런 해킹 사건이 계속해서 발생했다고 한다.[24]
이처럼 구현상의 문제 때문인 취약점은 손 쓰기가 어렵다. 특히, 보안을 위해 이중 인증을 한 것이 약점이 된 것은 아이러니하다. 하지만 이러한 해킹으로 ‘2단계 인증 보안’의 보안이 약화하는 것은 아니다. 현관문이 부러져 강도가 쉽게 진입할 수 있다 해도, 현관문의 가치는 계속해서 남아 있는 것이다.[25] 결국에는 통신 회사가 이러한 SS7 취약점을 통해 공격하려는 해커의 위험을 줄이기 위해서 이러한 사고와 원인을 알고, 이에 대한 또 다른 해결안이 나오길 기대해본다.