모바일어플리케이션의정적분석을통한개인정보유출차단 Blocking Personal Information Leakage of Mobile Application using Static Analysis 요 약 스마트폰의빠른보급에따라거의대부분의사람들이스마트폰을통해어플리케이션을사용하는시대가도래했다. 그러나특히안드로이드플랫폼상에서의어플리케이션은권한시스템의한계점으로인해어플리케이션이어떤정보를요구하는지등을알기어려우며, 요구하는정보들중일부만거부하는것도불가능하다. 또한, 획득된정보가기기내에서만사용되는지, 외부로전송되는지도알수없는것이현실이다. 따라서본연구에서는모바일어플리케이션을정적분석한결과를토대로개인정보가유출될수있는부분에서사용자의의도를물어보고사용자가원하는방향으로실행될수있도록하고, 별도로개인정보관리기능을제공하여추후에도이미부여된권한을수정하고체계적으로관리할수있도록하는시스템을구현해보았다.
모바일어플리케이션의정적분석을통한개인정보유출차단 Blocking Personal Information Leakage of Mobile Application using Static Analysis I. 서론 1.1 연구의필요성 2013년인터넷이용실태조사결과 [1] 에따르면스마트폰을보유한가구의비율은 79.7% 로 5가구중 4가구는스마트폰을사용하고있다. 여러통계자료로볼때우리의일상에서이미스마트폰은땔레야땔수없는중요한전자기기가되어있는것이다. 또한, 2012년하반기스마트폰이용실태조사결과 [2] 에따르면스마트폰이용자의 1인평균설치된어플리케이션의개수는 46.1개로상당히많음을알수있다. 한편, 삼성갤럭시S 내의 거울 위젯어플리케이션이동작하는기능에비해엄청난권한을요구하고있던것 [3] 이밝혀진바있으며, 얼마전에는유명손전등어플리케이션에서유심칩번호등의중요한개인정보를외부로유출한다는것 [4] 이드러난바가있다. 앞에서보이는것처럼원래의목적과는다르게사용자몰래개인정보를유출할수있는악성어플리케이션이증가하고있다. 또한, 악성어플리케이션이아니라도사용자위치기반광고서비스등부가서비스를위해사용자의개인정보영역에접근하는경우가많이늘어나고있다.
그림 1 손전등앱개인정보훔쳐가 유심칩번호까지유출 [4] Fig.1 Flashlight app steals personal information Leakage up to USIM chip number[4] 일반적으로사람들이널리사용하는스마트폰은크게 ios와 Android로구분된다. ios 를사용한아이폰의경우에는어플리케이션이요청하는모든권한에대해승인여부를물어보는팝업창을띄우고사용자의답변을받는형태로개인정보를관리하며그림2처럼설정창에서각권한별로승인여부를쉽게변경할수있도록한다.
그림 2 ios 상에서는사용자가각개인정보에대해사용을허가하거나거부할수있음 Fig.2 On ios, user can grant or refuse for use of specific kind of personal information 이에반해, 2014년 1월기준으로대한민국스마트폰사용자의 93.4% 가사용하는플랫폼인 Android[5] 는그림3처럼처음에설치할때에단한번, 이어플리케이션이이러한개인정보에접근할수있음을표시할뿐이다. 그마저도이중하나라도거부한다면그어플리케이션은설치조차되지않는다. 따라서특정기능을이용하고싶은사용자는울며겨자먹기로어플리케이션이요구하는권한을모두수락할수밖에없는것이다. 한편, 어플리케이션이특정권한을획득한다면, 그이후부터는사용자에게알려지는것하나없이개인정보에쉽게접근할수도있다. 따라서 Android 상에서도어플리케이션이개인정보를사용할수있도록하는권한을각유형별로사용자가관리할필요가있다.
그림 3 어플리케이션설치시사용자는모든권한에동의해야만함 Fig.3 When user installs application, user must accept all of permisions
그림 4 개인정보에접근할수있는권한이있는어플리케이션 Fig.4 Application which has permission to access personal information 1.2 연구현황 1.2.1 ScanDal[6] 달빅가상머신언어로기술되어있는안드로이드어플리케이션을분석대상으로하는정적분석기이다. 달빅프로그램에대해분석한다는것은자바역컴파일러등의툴을이용하지않는다는뜻이다. 악성행동을의도한어플리케이션의경우달빅바이트코드수준에서코드의수정이있을수있고, 그경우자바로의역컴파일러가제대로작동하지못할수있다. 따라서달빅바이트코드의실행의미를직접분석한다. 분석이어플리케이션으로부터알아내고자하는성질은어플리케이션이개인정보를누출시키는지의여부로, 개인정보의누출은정보의소스 ( 개인정보를운영체제로부터꺼내오는 API 함수호출위치 ) 로부터싱크 ( 임의의데이터를기기밖으로내보낼수있는 API 함수호출위치 ) 로데이터흐름의존재로정의하여요약해석기법을통해
구현된도구이다. 1.2.2 TaintDroid TaintDroid는 Android Open Source Project(AOSP) 를기반으로하여제작된시스템으로, 실행되는어플리케이션이어떤정보에접근하는지를실시간으로감시한다. 이를통해개인정보에접근하거나유출하는것이확인될경우에는사용자에게통지를하거나작동여부를물어보는역할을한다. 그러나동적분석의특성상실제로실행을해봐야하며작동속도도느려진다. 관련논문 [7] 에따르면 IPC 벤치마크를사용하여성능을평가했을때원래의 Android 시스템에비해 27% 더느리다. 1.3 이론적배경 1.3.1 정적분석 [6] 정적으로분석한다는것은프로그램을실행시켜보지않고원하는성질을얻어내는것이다. 이를자동으로, 즉일단분석기가완성되면사람의손을거치지않고분석기가스스로대상프로그램을분석한다. 요약해석에서제안하는조건들을만족하는분석기를디자인할경우, 그분석기는해당실행의미에대해모든실행과정을안전하게포섭하게된다. 이방법은임의의언어와임의의성질에대해활용할수있고, 디자인과구현에따라다양한정밀도를얻어낼수있다. 1.3.2 Android 어플리케이션파일의구조 Android 시스템에서어플리케이션은 APK 파일로지정되어있다. 이 APK 파일은일반적으로사용되는압축파일형식인 ZIP 파일과같은구조를가지고있다. 이파일의내부에는그림5에서나타난것과같이이미지, 음원과같은리소스파일들과, 컴파일된바이너리들로이루어진 classes.dex 파일, 어플리케이션의컴포넌트목록, 권한등과같은정보를포함하고있는 AndroidManifest.xml 등의파일로이루어져있다.
그림 5 Android 어플리케이션파일의구조 [8] Fig.5 Structure of Android application file[8] 1.3.3 Dalvik VM 및 smali 언어 Android 시스템은 Dalvik이라는가상머신위에서실행되는데, 이가상머신의명령코드를포함하는것이위에서설명한 classes.dex 파일이다. 여러개의 java 소스코드로부터컴파일된 class 파일들이합쳐져 Dalvik OpCode들로바뀌어바이너리생성되는것이다. 한편, 이렇게생성된바이너리파일은사람이읽을수없기에조금더사람이쉽게볼수있도록하는변환작업이필요하다. baksmali라는과정을통하면 classes.dex 파일은사람이읽기좋도록 const( 상수지정명령 ), move-result( 함수의실행결과를레지스터로복사 ), invoke-static( 정적멤버함수호출 ) 등으로쉽게풀어써져있는 smali 코드형태로바뀌게된다. 이를이용하면어플리케이션의특정부분을바꿀수있다. 다시 smali라는툴을이용하면이 smali 코드파일들을 classes.dex로바꿀수도있다.
II. 연구과정및방법 2.1 구현내용 2.1.1 개인정보흐름의차단본연구에서는개인정보를유출을 ScanDal에서분석한결과와같이프로그램상의두부분에서차단하고자한다. 첫번째는어플리케이션이개인정보를시스템에서얻어오는부분 ( 이하 source, 소스 ) 이고, 두번째는얻어온개인정보를인터넷, MMS, 파일등을통해서외부로유출하려하는것으로추정되는부분 ( 이하 sink, 싱크 ) 이다. 2.1.2 시스템의구조 본연구에서구현한시스템은크게 2 가지프로그램으로이루어져있다. 첫번째프로그램은주어진 APK 파일과이어플리케이션을 ScanDal로분석한결과를이용해서어플리케이션을압축해제한후, smali 코드를고쳐서 classes.dex 파일을바꾼뒤다시압축하여수정된 APK 파일을만들어주는프로그램인 PrivateRepacker이다. 두번째는 Android 시스템내에서어플리케이션이개인정보유출로추정되는부분을차단할지그대로실행할지를선택, 관리할수있게하는어플리케이션인 PrivateManager이다. PrivateManager는그림6과같이크게 2가지역할을하는데, 첫번째는어플리케이션이개인정보에접근하거나, 개인정보를유출하려는시도를할때, 다이얼로그를띄워서코드의해당부분의실행을승인할지거부할지선택하게하는역할이다. 두번째역할은이미사용자가선택한적이있는개인정보의흐름에대해서, 이전에입력한승인 / 거부여부를변경할수있게설정하는부분이다.
그림 6 PrivateManager 가하는일 Fig.6 What PrivateManager does 이 PrivateManager에서차단할필요가있는프로그램의실행부분각각의실행여부를관리할수있게하고, 사용자가설정한적이있는실행지점의경우다시묻지않고저장된기록을활용함으로써, 본연구에서는과다한다이얼로그의노출로사용자가어플리케이션사용중불편을겪는일이최소가되게할수있도록했다. 정적분석의특성상나타나는개인정보의유출지점이아님에도불구하고개인정보의유출로판단해차단하는부분이나, 어플리케이션이동작하는데필수적으로활용되는개인정보의활용의경우에차단해서어플리케이션이정상적으로동작하지않으면, 설정을변경하여어플리케이션이정상적으로동작할수있게하여정적분석의한계점을해결하였다. 2.2 구현방법
2.2.1 ScanDal과의상호작용 ScanDal에서정적분석을통해얻어낸소스와싱크정보를각각 json 파일형식으로전달한다. json 파일은프로그램의실행부분을나타내는 JsonObject의 Array로되어있으며, 각각의 Object에는어떤객체의어떤함수에서실행되는부분이고, 해당함수의몇번째명령어인지, 어떤함수를호출하는부분인지, 어떤종류의개인정보를받아오고, 어떤경로를통해서나가는지와같은정보가아래와같이주어진다. { type : src, // 소스면 src, 싱크면 sink category : geo, // 위치정보는 geo, 전화번호는 number, 기기번호는 imei, pos : { caller : ["Lcom/test/Test;, test:()v ], line : 1, // 호출위치. 리스너의인자일경우 arg : "1 callee : [, ] } } 2.2.2 inappclass 어플리케이션에코드를추가할때, 반복되는코드를줄이고작업의편의성을높이기위하여 inappclass라는클래스를자바코드로작성한뒤 smali 코드로변환하여원래어플리케이션의 smali 코드와함께컴파일하였다. inappclass가하는일은크게두가지인데, 첫번째는어플리케이션이실행중에현재소스나싱크가차단되는지승인되는지확인해야할때해당어플리케이션의고유식별자와소스 / 싱크의번호를인자로이함수를호출하면승인 / 차단여부를 boolean으로리턴해주는일이다. 이함수가호출이되면시스템은우선 PrivateManager가설치되어있는지확인한다. 설치되어있다면우선 PrivateManager와통신하기위한로컬소켓을하나생성한뒤, 로컬소켓에접근할수있는경로와소스 / 싱크의정보, 호출한시간등의정보를
Intent에담아서 PrivateManager를호출한다. 마지막으로, PrivateManager가결과를로컬소켓을통해전송할때까지최대 9초기다린다. 이는 Android 시스템의 ANR(Application Not Responding, 어플리케이션이 10초동안아무런동작도하지않을경우강제로어플리케이션을종료시키는과정 ) 을피하기위한수단이다. 두번째역할은, 프로그램의 Context를관리하는것이다. Android 시스템에서는시스템함수를호출할때, 어플리케이션을구분하기위해각각에고유한 Context라는클래스의인스턴스를부여한다. 이 Context는다른어플리케이션의컴포넌트를호출하거나사용자와상호작용하기위한다이얼로그등이포함되어있는 UI 작업을하는데에필수적으로필요하기때문에, inappclass에서 PrivateManager를호출하는시점에서어플리케이션의 Context의인스턴스가있어야한다. 그러나소스 / 싱크같은임의의프로그램실행지점에서콘텍스트를얻어오는방법은경우의수가많고구할수없을수도있다. 따라서어플리케이션의컴포넌트가시작되는지점에서, inappclass의 setcontext 함수를호출하여 inappclass에정적멤버변수로 Context 를저장해놓고, 필요할때불러서쓸수있게하였다. 2.2.3 PrivateRepacker PrivateRepacker는어플리케이션을본연구에서구현한기능이포함될수있도록수정하는프로그램이다. java 언어를기반으로작성되었고, 자체적으로수정한 smali/baksmali[9] 및 json-simple[10], signapk[11], AXMLPrinter2[12] 등의공개프로젝트들을사용하였다. PrivateRepacker는 APK 파일을읽어와서가장먼저해당어플리케이션의고유식별자로사용되는해시값을 MD5 알고리즘을이용하여생성한다. 악의적으로변경된어플리케이션의경우원래의정상적인어플리케이션과버전코드, 버전이름까지동일하게따라할수있으므로최종적으로생성된 APK 파일자체의해시값만고유식별자로사용한다. 그후내장된압축해제라이브러리를통해파일의압축을해제한
다. 그리고자체적으로수정한 baksmali 프로그램을이용하여 classes.dex 파일을 smali 파일들로변환한다. 그이후, 어플리케이션에 smali 코드를추가한다. 우선 inappclass 관련파일들을추가한뒤, ScanDal이분석한 json 파일을 json-simple 라이브러리를활용해읽어서소스 / 싱크목록을얻어온다. 각각의소스 / 싱크에대해서함수호출및결과를받아오는부분을실행할지뛰어넘을지선택하게해야한다. 따라서그림7과같이해당부분을실행하기전에 2.2.2에서기술한 PrivateRequest 함수를호출하여결과값을받아온뒤, 분기문을통해서원래의코드를실행하거나그렇지않게하였다. 그림 7 변경된 smali 코드의모습 Fig.7 Figure of changed smali code 이과정에서, 수정되는함수마다추가적인레지스터 ( 지역변수 ) 가필요하게되었는데, 원래에있던레지스터는임의로사용할경우어플리케이션에심각한오류를발생시킬수있으므로레지스터를별도로추가하여사용하였다. 한편, 어떤함수를호출할때에그인자는무조건가장뒤에있는레지스터부터들어가므로함수가시작될때에인자들을원래있던자리로옮겨주는작업을추가해주었다. 이과정에서원래의 baksmali/smali는전체레지스터의개수만볼수있거나인자의개수만볼수있기에이를둘다볼수있도록 baksmali/smali를수정하였다. 또한, Dalvik VM 특성상
레지스터가 16 개를넘어가는경우다른형태의명령어 (wide/range 계열 ) 를사용해야 하기에이를구현해주었다. smali 코드를수정한이후에는, 이를이용하여새로운 classes.dex 파일을생성한뒤, 나머지파일들과함께압축하였다. 리소스들은 STORED 메서드를사용하여압축함으로써오동작을방지하였다. 최종적으로는압축된파일에서명을해서기기에설치할수있게한다. 이후사용자의요구에따라생성된 APK 파일을바로기기에설치하도록할수도있다. 2.2.4 PrivateManager PrivateManager 는 2.1.1 에서설명한두가지기능을구현하기위해서두가지의 Activity 를구현한다. 첫번째는 PrivateRequestActivity로, inappclass의 PrivateRequest에서호출하는컴포넌트이다. 이 Activity가호출이되면, 우선 Intent를통해전달된정보와일치하는실행지점에대한정보가 SharedPreference에저장되어있다면이정보를그대로전달된로컬소켓을통해서 boolean 값을넘겨준다. 저장되어있지않다면, AlertDialog를띄워서사용자에게 inappsmali에서 Intent를생성한시간이후로최대 9초까지사용자에게해당실행지점을실행할지말지에대한입력을받은후사용자의선택을로컬소켓을통해서보내주고, SharedPreference에저장한다. 두번째로구현한 Activity는 PrivateSettingActivity로, 이 Activity에서는사용자가선택한기록이있는어플리케이션의목록을 SharedPreference로부터읽어와서 ListView를통해보여준다. 사용자가특정어플리케이션을선택하면, 새로운 ListView에사용자가선택한기록이있는프로그램의실행지점을보여주고, 그부분의실행여부에대한선택을사용자가변경하면, SharedPreference에저장된기록을변경하도록하였다.
III. 결과및토의 3.1 연구결과구현된 PrivateRepacker를사용하여생성된 APK 파일을 Android 기기에설치해본결과, 아래의그림8, 그림9와같이의도한대로사용자의개인정보에접근할때및유출이가능할때사용자의동의여부를물어보는창이나타났고, PrivateManager에서다시그권한을수정할수있는것을확인할수있었다. 그림 8 개인정보가획득 / 유출되려는부분에서사용자의의사를묻는창이나타남 Fig.8 Asking dialog is appeared when personal information is going to be acquired/spilled
그림9 최초 1회의다이얼로그이후에도사용자가개인정보접근 / 유출에관한허가여부를변경할수있다 Fig.9 User can change whether access/spill is permitted or declined after the first dialog 3.2 연구의한계점및발전가능성본연구의한계점으로는정적분석결과개인정보가유출되는것으로추정되는싱크부분에서사용자가프로그램실행지점의실행여부를선택할때참고할수있는자료가거의없다는점이있다. 이러한한계점을해결하기위해서고안한개선방법으로는, 우선소스-싱크매칭이있다. 지금은독립적으로존재하는싱크의목록을, ScanDal에서어떤소스에서나온개인정보가어떤싱크로유출되는지에대한정보를이용해서, 현재선택해야하는싱크가어떤종류의개인정보를유출할가능성이있는지에대해서보여준다면, 지도
어플리케이션이현재검색장소를찾기위해위치정보를전송하는것과같이어플리 케이션이정상적으로동작하는데필수적으로요구되는개인정보의전송을제어하는 데에도움이될수있을것이다. 두번째로고안한개선방법으로는, 여러사용자가이시스템을사용하면서얻어진개인정보접근또는유출에대한동의 / 거부여부를서버를이용해수집하여통계자료를제공하는것이다. 많은사용자가이시스템을이용하게된다면, 어떤어플리케이션의특정실행지점에서여러사람들이선택한통계자료가존재할것이다. 많은사람들이거부한곳에대해서는자동적으로거부하도록할수도있고, 다이얼로그를띄울때통계자료를함께제공하여이를참고하여선택할수있게하면, 더욱정확한판단을하게할수있을것이다. IV. 결론스마트폰은편리함을무기로하여수많은개인정보유출위험을지니고있는도구이다 따라서편리하면서도개인정보유출위험을최소화하기위해사용자의의도를파악하고이에따라어플리케이션이개인정보에선택적으로접근할수있도록하는시스템에대한연구를진행하였다 이시스템은정적분석을통해나온결과를이용함으로써직접실행시켜보지않아도적용할수있으므로시간적으로이득이상당하며 어플리케이션실행시모든동작을계속추적함으로써성능이하락되는 와다르게성능하락도전혀없다 정적분석이유출가능성이있는부분 을모두출력함으로써과도하게접근이제한되는부분과어플리케이션의정상적인작동을위해필수적으로요구되어지는부분도사용자가직접설정할수있도록하여오작동을최대한방지할수있도록했다 이연구에서나온결과물이잘사용된다면사용자가편리하면서도체계적으로자신의개인정보를지킬수있게되어보 안수준을한단계더높일수있을것이다 이후에도 소스 싱크매칭및통계자료 활용을적용한다면더스마트하게자신의개인정보를관리할수있게될것이다
참고문헌 한국인터넷진흥원 년인터넷이용실태조사결과발표 한국인터넷진흥원 년하반기스마트폰이용실태조사결과발표 동아일보 삼성갤럭시 거울 앱속에당신의정보몰래보는 눈 이있다 단독 손전등앱 개인정보훔쳐가 유심칩번호까지유출 연합뉴스 한국은세계 위안드로이드공화국 가사용 윤용호 안드로이드앱에서개인정보누출을검출하는정적분석기설계 공학석사학위논문 서울대학교 외 인
외 인