(기고)휴대전화의 ID 체계와 휴대전화의 보안
2010-09-07 12:05:25 2010-09-08 07:10:02
금융결제원은 곧 안드로이드 스마트폰용 모바일뱅킹 프로그램에 백신프로그램이 의무 탑재되도록 할 예정입니다. 스마트폰의 보안이 취약하다는 판단에 따른 것인데, 백신프로그램이 사용자의 선택과 무관하게 무차별적으로 설치되고, 마음대로 삭제할 수도 없다는 점에서 논란을 불러 일으키고 있습니다. 일부 전문가들은 이런 식의 백신 설치가 '오픈마켓'인 모바일생태계를 크게 교란시킬 것이라고 우려하고 있습니다. 이런 상황에서 이토마토가 서비스하는 애플리케이션 '증권통'의 개발자인 이창원 세마포어솔루션 대표가 백신 프로그램의 기능에 대해 근본적인 의문을 제기하는 글을 보내왔습니다. 사회적 관심사가 되고 있는 스마트폰 보안문제와 관련해 시사하는 바가 크다고 판단해 이를 기고글로 소개합니다. 이 글에서 언급하는 휴대전화는 특별한 언급이 없는 한 3G 휴대전화, 그 중에서도 iOS 또는 안드로이드를 OS로 사용하는 스마트폰을 의미하고, 일부 내용은 그 성격상 매우 기술적인 내용을 담고 있기도 합니다. [편집자주]
   
휴대전화의 ID체계
 
정확히 이야기 해서 휴대전화에 부여되는 ID는 한가지 입니다. IMEI(International Mobile Equipment Identity)라고 하는 번호입니다. 이 번호는 단말기를 생산할 때 단말기에 이식되어 생산됩니다. 이 번호의 목적은 말 그대로 단말기를 확인하기 위한 기능입니다.
 
Wikipedia(http://en.wikipedia.org/wiki/International_Mobile_Equipment_Identity)에 따르면 주로 단말기 도난의 경우 해당 단말기를 사용하지 못하게 하기 위해서라고 나와 있습니다. 한국에서는 외국에서 수입된 단말기를 개통 전에는 사용하지 못하게 하는 용도로도 쓰고 있습니다.(이것을 IMEI whitelist정책이라고 합니다. 즉 등록하지 않은 단말은 아예 사용불능으로 만드는 것입니다)
 
2G전화기는 단말기의 고유번호가 곧 가입자의 ID를 의미했습니다. 그렇기 때문에 ESN 또는 MEID라 불리는 단말기 ID를 복제하면 곧 전화기가 복제가 되었습니다. 이러한 문제를 극복하기 위해 3G 단말기에는 SIM(Subscriber Identity Module)카드라는 것이 도입됩니다. 즉, 단말기의 ID와 가입자의 ID를 완전히 분리한 것입니다. 단말기를 복제해도 SIM카드를 복제하지 못하면 단말기는 전화기로서 아무런 역할도 하지 못합니다.
 
SIM카드에는 여러 가지 번호가 있습니다.
1. SIM Serial Number : SIM Card 겉면에 인쇄된 번호입니다. SIM 카드 생산 시 카드 관리를 위해서 인쇄되며 카드 내부에도 같은 번호가 기록됩니다. 가입자 인증과 아무런 관련이 없으며 카드 관리를 위한 번호입니다.
2. ICC-ID(Integrated circuit card identifier)
3. IMSI(International mobile subscriber identity)
4. 인증키(Kj)
 
1번은 위 설명대로 관리번호입니다. 2~4번의 번호가 실제 통신사와 가입자 인증을 할 때 사용하는 번호입니다. SIM을 복제하려면 이 모두를 복제해야 합니다. 전화기가 통신사의 망에 연결되기 위해서는 생각보다 매우 복잡한 절차를 거칩니다. Wikipedia에 나오는 내용을 살펴보겠습니다. 위쪽이 영문원본 아래는 번역입니다.(제가 이분야 전문가가 아니라 정확한 번역이 아닐 수 있습니다. 원문을 참고 하십시오)
 
Authentication process
1. When the Mobile Equipment starts up, it obtains the International Mobile Subscriber Identity (IMSI) from the SIM card, and passes this to the mobile operator requesting access and authentication. The Mobile Equipment may have to pass a PIN to the SIM card before the SIM card will reveal this information. 
(기계가 켜지면 SIM 카드의 IMSI를 통신사 서버로 보낸다. 이 과정에서 IMSI를 읽기 위해 단말기가 PIN 번호를 SIM카드에 줘야 할 경우도 있다.)
 
2. The operator network searches its database for the incoming IMSI and its associated Ki.
(통신사서버는 DB를 검색해 해당 IMSI를 찾아 이와 연결된 Kj<128bit 인증키, 이것은 처음 USIM을 개통할 때 USIM과 통신사 서버에 저장된다>를 찾는다)
 
3. The operator network then generates a Random Number (RAND, which is a nonce) and signs it with the Ki associated with the IMSI (and stored on the SIM card), computing another number known as Signed Response 1 (SRES_1).
(통신사서버는 난수를 발생시키고 이 난수를 IMSI와 연결된 Kj로 사인하고 새로운 번호인 '서명된 답장1'<Signed Response1>을 만든다.)
 
4. The operator network then sends the RAND to the Mobile Equipment, which passes it to the SIM card. The SIM card signs it with its Ki, producing SRES_2 which it gives to the Mobile Equipment along with encryption key Kc. The Mobile Equipment passes SRES_2 on to the operator network.
(통신사서버는 난수를 단말기에 보내고 단말기는 이를 SIM카드에 보낸다. SIM카드는 이 난수를 Kj로 사인하고 '서명된 답장2'를 만들고 이를 단말기에 암호화 코드 Kc와 같이 전달한다. 단말기는 이 '서명된 답장2'를 통신사로 보낸다.)
 
5. The operator network then compares its computed SRES_1 with the computed SRES_2 that the Mobile Equipment returned. If the two numbers match the SIM is authenticated and the Mobile Equipment is granted access to the operator's network. Kc is used to encrypt all further communications between the Mobile Equipment and the network.
(통신사서버는 '서명된 답장1'과 '서명된 답장2'를 특수한 계산에 의하여 비교한다. 이것이 맞으면 인증이 완료된다. Kc는 이후에 발생하는 단말기와 통신사서버 간의 통신의 암호화 키로 사용된다.)
 
위 절차에서 보듯 암호화된 인증키가 가입자인증에 매우 중요한 부분이며 이 암호화를 깨지 못하면 SIM카드 복사는 불가능한 이야기입니다.
 
안드로이드 프로그램에서 읽을 수 있는 ID
 
안드로이드에서는 전화기의 ID를 읽을 수 있는 다양한 API를 제공합니다.
1. get Device Id
2. get Sim SerialNumber
3. get Subscriber Id
4. get Line1 Number
 
첫 번째 API가 통상 IMEI를 돌려 줍니다. 반드시 그래야 하는 것은 아니며 단말기 디자인에 의해서 바뀔 수 있습니다. 두 번째 API가 SIM카드의 일련번호를 돌려줍니다. 위에서 설명된 대로 카드에 인쇄된 번호입니다. 세 번째가 IMSI를 돌려줍니다. 네 번째는 가입자 전화번호입니다.
 
한 보안업체가 문제 삼은 증권통의 개인화ID체계는 1번과 2번을 사용합니다. 1, 2번이 있으면 전화기를 복제할 수 있다고 주장합니다. 위에서 본 휴대폰과 USIM카드의 체계를 볼 때 말이 안되는 억지라는 것은 바로 알 수 있습니다.
 
위 4가지 API는 안드로이드에서 android.permission.READ_PHONE_STATE라는 권한을 요청하면 언제나 사용할 수 있습니다.(사용자가 프로그램을 설치할 때는 전화기상태읽기 라는 용어로 표현됩니다.) 이 번호들이 휴대폰 복제에 사용될 수 있다면 이렇게 허술히 관리해서는 안될 것입니다. 특히 단말기 생산회사들이 이 번호들을 이렇게 쉽게 획득할 수 있도록 절대 만들지 않을 것도 자명합니다.
 
1, 2번의 숫자는 굳이 프로그램을 만들지 않아도 금방 알 수 있습니다. IMEI는 전화기에서 *#06#을 누르면 언제나 볼 수 있습니다. SIM serial number는 카드에 인쇄가 되어 있어서 그냥 눈으로 볼 수 있는 것입니다. 이것은 공장에서 나올 때 새겨져 있기 때문에 휴대폰 대리점에 가면 아직 발매되지 않는 카드들에서 쉽게 많은 양을 획득할 수 있습니다. 복제에 사용되는 번호를 이렇게 관리 하겠습니까?
 
스마트폰의 보안
 
그런데 왜 그 특정 보안업체는 이 번호가 그리 중요하고 유출되면 전화기가 복제가 될 수 있다고 과장하고 협박할까요? 그들의 프로그램이 스마트폰에서 무슨 역할인가를 한다고 주장하고 싶다고 밖에 볼 수 없습니다. 그렇다면 정말 무슨 역할을 할 수 있을까요?
 
프로그램이 프로그램을 감시하려면 감시하는 프로그램은 감시 당하는 프로그램보다 권한이 높아야 합니다. 또는 둘 다 최상위 수준의 권한을 가져야 합니다. 윈도우에서는 모든 프로그램이 최상위 권한을 가지고 실행됩니다. 그래서 문제도 많고 백신도 있고 바이러스도 있고 별의별 상상할 수도 없는 일들이 발생합니다.
 
iOS나 안드로이드는 이러한 윈도우의 문제점을 잘 알고 만들어진 OS입니다. 사용자 프로그램은 하위 수준의 권한에서 실행되기 때문에 어떤 프로그램이 다른 프로그램을 수정하는 것도 감시하는 것도 불가능합니다.(물론 OS에 오류가 있다면 당연히 모든 것이 가능할 수 있습니다. 여기서 OS의 오류 문제는 잠시 접어두겠습니다. 원래적인 OS 디자인에 의하여 가능한지 불가능한지를 먼저 살펴보겠습니다.)
 
지금까지 발표된 스마트폰의 백신이라는 것들도 그냥 일반 프로그램입니다. 그들이 감시하고자 하는 프로그램과 동등한 수준에서 실행됩니다. 당연히 다른 프로그램이 뭘 하는지 알 수 없습니다. 증권통의 문제를 지적한 백신회사의 경우도 자신의 프로그램이 뭘 알아낸 것처럼 이야기 하지만 사실은 OS를 rooting 하거나 또는 다른 네트워크 장비를 이용하여 패킷을 검사한 것입니다. 스마트폰 프로그램이 절대 다른 프로그램의 네트워크 통신을 감시할 수 없습니다.
 
저는 IBM PC가 처음 나오던 시절부터 PC를 사용해 왔습니다. 그 동안 은행사이트 등에 들어갈 때 강제로 설치되는 백신 외에 어떤 백신프로그램도 사용해 보지 않았습니다. 그렇지만 단 한번도 바이러스에 감염된 적이 없습니다. 윈도우가 보안상 문제가 있다지만 해커들이 제 컴퓨터를 목표로 공격하지 않는 한 대부분의 문제는 스스로 설치하는 프로그램에 의해서 발생합니다. 제가 그 동안 지킨 원칙은 단 두 가지 입니다.
 
1. 윈도우 업데이트를 철저히 한다.
2. 금융사이트가 아닌 경우에는 절대로 ActiveX등 사이트에서 설치하라고 하는 프로그램을 설치하지 않는다.
 
우리나라 윈도우 사용자들은 아무 사이트에나 들어가서 뭔가를 설치하라고 하면 무조건 설치하도록 많은 사이트에서 교육합니다. “보안을 해제하고 무조건 설치해라”가 보안 가이드라인입니다. 그 결과 해킹을 당한 수많은 사이트에서 배포되는 바이러스, 악성 프로그램을 스스로 설치하고 있는 것입니다.
 
누가 이렇게 만들었습니까? 누가 ActiveX를 무턱대고 깔라고 교육했습니까? 누가 결정을 하였든 전세게 어디서도 사용하지 않는 ActiveX를 이용한 보안을 도입한 사람들, 그에 동조하여 그러한 프로그램을 만든 사람들이 이렇게 만들었습니다.
 
그들이 스마트폰도 그렇게 만들려고 노력하는 것을 잘 알고 있습니다. 여러 차례 뉴스에 나왔듯이 금융결제원은 특정회사의 백신을 모든 은행권 스마트폰 프로그램에 강제로 설치하도록 이미 결정했고 그렇게 진행될 예정입니다. 이 백신 강제 번들이 진행되는 와중에 증권통의 문제가 불거진 것입니다.
 
더욱 더 경악할만한 사실은 사용자의 판단과 선택을 근원적으로 차단하기 위해 아예 금융프로그램 내부에 코드를 삽입하는 정책을 취하고 있다는 것입니다. 즉 독립적인 프로그램으로 설치되면 혹시 삭제될까 두려워(?) 금융 프로그램 자체를 삭제하기 전에는 삭제가 불가능하도록 한 프로그램으로 묶어버렸다는 것입니다.
 
이런 결정의 이면에는 보안회사들이 그동안 꾸준히 스마트폰 보안에 문제가 있다고 주장해왔다는 사실이 있습니다. 세상에 완벽한 것은 없습니다. 스마트폰 OS도 완벽하지 않습니다. 그렇다고 백신프로그램이 그 완벽하지 못한 부분을 채워주지는 못합니다. 위에서 이야기 했듯이 단순 애플리케이션이 할 수 있는 영역이 아닙니다. OS에 보안 헛점이 생기면 OS를 업데이트 해야 합니다. OS가 해킹 당하면 백신이라고 하는 프로그램도 하위 수준의 프로그램에 불과하므로 해킹 프로그램이 백신 프로그램을 무력화 시키는 건 너무나 쉬운 일입니다.
 
OS의 해킹이 두려워 백신을 설치 하시겠습니까? 아닙니다. 백신은 그것을 막지 못합니다. 보안 회사들은 사용자 정보를 유출하는 프로그램이 있어서 이를 막아야 한다고 합니다. 그런 프로그램이 있을 수 있습니다. 그렇지만 백신이 이를 사전에 진단할 수 없습니다. 스마트폰 사용자들이 즐겨 사용하는 문자메시지 기능을 네트워크로 대신하는 프로그램들이 많이 있습니다. 이런 프로그램들은 대부분 사용자의 전화번호부를 모두 자신의 서버로 전송합니다. 그러면 악성 프로그램입니까? 이런 프로그램은 절대 사용하지 말아야 합니까? 습득한 정보를 어떻게 보호하고 어떻게 사용하는지는 프로그램을 운영하는 회사의 몫입니다. 그들이 사용자 정보를 유용한다면 법에 의하여 엄하게 처벌 받을 것입니다. 이 회사들이 장차 사용자 정보를 어떻게 사용할지 백신이 진단할 수 있겠습니까?
 
보안 회사들은 사용자동의를 이야기 합니다. 해당 프로그램 안에서 특정정보 습득에 대한 동의를 구하는지 안 구하는지 백신프로그램은 알 길이 없습니다. 백신이 다른 프로그램의 내용을 볼 수 없을 뿐만 아니라 보인다 해도 어떤 똑똑한 프로그램이 사용자 약관을 다 해석하고 그것이 문제가 있는지 없는지 판단 할 수 있단 말입니까?
 
그러면 지금 세상에 나와 있는 스마트폰 백신이라는 것은 도데체 뭘 하는 걸까요? 저도 궁금합니다. 스마트폰 백신을 개발한 보안회사 관계자 여러분, 도대체 스마트폰 백신이 하는 일이 뭔가요? 스마트폰 보안에 문제가 있다는 이야기만 하지 마시고 어떤 방법으로 그 위험을 백신 프로그램이 막고 있는지 알려주세요. 정말 궁금합니다. <끝>
 
이창원(세마포어솔루션 대표이사)
 
- Copyrights ⓒ 뉴스토마토 (www.newstomato.co.kr) 무단 전재 및 재배포 금지 -
이 기사는 뉴스토마토 보도준칙 및 윤리강령에 따라 김기성 편집국장이 최종 확인·수정했습니다.

ⓒ 맛있는 뉴스토마토, 무단 전재 - 재배포 금지

관련기사
정광섭

정론직필! 바로 보고 바로 쓰겠습니다.

email
0/300

뉴스리듬

    이 시간 주요 뉴스

      함께 볼만한 뉴스