1049 Journal of The Korea Institute of Information Security & Cryptology ISSN 1598-3986(Print) VOL.23, NO.6, Dec. 2013 ISSN 2288-2715(Online) http://dx.doi.org/10.13089/jkiisc.2013.23.6.1049 안드로이드스마트폰암호사용앱보안분석및대응 * 박상호, 1 김현진, 2 권태경 3 1 세종대학교, 2 ETRI 부설연구소, 3 연세대학교 On Security of Android Smartphone Apps Employing Cryptography* Sang-ho Park, 1 Hyeonjin Kim, 2 and Taekyoung Kwon 3 1 Sejong University, 2 Attached Instituteof ETRI, 3 Yonsei University 요 약 스마트폰은사용자가필요한응용프로그램 ( 이하앱 ) 을선택하여설치할수있어서그활용도가점차확대되고있다. 앱에따라서계정정보, 금융정보등민감한정보가저장되며, 반드시안전하게암호화되어야한다. 안드로이드는리눅스커널기반으로메모리와스토리지에대한보안을수행하지만루팅공격으로인하여보안이무력화될수있다. 본논문에서는안드로이드에사용되는보안기법을분석하여문제점을지적하였다. 문제점을바탕으로상용앱분석을통해취약점을보인후, 대응방안을제시한다. ABSTRACT Smartphones are rapidly growing because of easy installation of the apps (application software) that users actually want. There are increasingly many apps that require cryptographic suites to be installed, for instance, for protecting account and financial data. Android platform provides protection mechanisms for memory and storage based on Linux kernel, but they are vulnerable to rooting attacks. In this paper, we analyze security mechanisms of Android platform and point out security problems. We show the security vulnerabilities of several commercial apps and suggest appropriate countermeasures. Keywords: Android, Smartphone, Reverse-Engineering, Security I. 서론 스마트폰시장의성장은멈출줄모르며, 2013 년 2/4분기기준, 전세계에약 435백만대의스마트폰이판매되었고이중약 80% 가안드로이드플랫폼을탑재하고있다 [1]. 안드로이드플랫폼은 2008 년 10월첫단말기를출시한이후, 개방성을무기로빠르게성 접수일 (2013 년 10 월 17 일 ), 게재확정일 (2013 년 10 월 23 일 ) * 본연구는미래창조과학부및정보통신산업진흥원의대학 IT 연구센터지원사업의연구결과로수행되었음 (NIPA- 2013-H0301-13-1003). 또한, 2012 년도정부 ( 교육부 ) 의재원으로한국연구재단의지원을받아수행된기초연구사업임 (No. NRF-2012R1A1B3000 965) 주저자, superh1@gmail.com 교신저자, taekyoung@yonsei.ac.kr(corresponding author) 장하여 2011 년 3/4분기에는전체스마트폰 OS 시장의절반이상을차지하였다 [2]. 우리나라는특히안드로이드점유율이높아서약 90% 에이르는것으로조사된다 [3]. 높아진점유율만큼다양한앱이출시되고있으며, 이중일부는중요한정보들을저장한다. 많은앱이온라인서비스에접속하기위한계정정보를저장하며, 계좌및신용카드등금융정보를저장하기도한다. 개인정보보호를위하여앱에서암호화를적용하고안드로이드가보안기능을제공하나, 실제로안전한지는알수없다. 안드로이드보급률이높은만큼, 앱과데이터의안전성을파악하고취약점을분석하여대책을마련해야한다. 본논문은다음과같이구성된다. 2장에서는관련연구에대해소개하고, 3장에서안드로이드보안요소
1050 안드로이드스마트폰암호사용앱보안분석및대응 및문제점을지적한다. 4장에서상용앱에대한분석을수행하고 5장에서대응방안을제시한다. II. 관련연구 스마트폰보급으로 BYOD(Bring Your Own Devices) 가확산되면서보안문제는더욱대두되었다 [4]. 사용자정보와회사정보가서로에게유출될수있으며, 일부기관은스마트폰사용을통제하고있다 [5]. 기관에서제작한보안앱을설치하도록하고, 그러지못한경우사용을금지한다. 일부스마트폰제조사들은기업환경을목표로자체적으로보안솔루션을도입하였다. BlackBerry 는자사의스마트폰에 Balance technology 를도입하였다 [6]. BlackBerry Balance 를활성하기위해서는기업에서 BlackBerry Enterprise Server를갖추어야한다. BlackBerry 단말의앱과저장공간은업무용과사용자용으로나뉘어독립된다. Black- Berry 제공앱들과일부공용기능앱은양쪽모두에접근가능하나, 인스턴스분리등을통하여데이터가오가는것을방지한다. Fig. 1. 은 BlackBerry Balance 의간략한구조도이다 [7]. BlackBerry Enterprise Server 와의데이터송수신은모두암호화된다. 삼성은안드로이드플랫폼에기반한 KNOX 를발표하였다 [8]. 이는미국국가안보국 (National Security Agency) 에서안드로이드플랫폼을위해제시한 Security Enhanced Android[9][10] 에기반하며, 그밑에하드웨어에따라수정가능한 Secure Boot와 TrustZone-based Integrity Measurement Architecture(TIMA) 가존재한다. TrustZone 은 ARM CPU에서제공되는기술로, 보안모드와일반모드를분리하여안전한지불결제환경등을제공한다. 삼성은 KNOX 기술로미국국방부 (Department of Defense) 의보안인증을통과했다 [11]. Fig. 2. 는 KNOX의계층개요이다. 사용자환경의보안으로써, LG는게스트모드를제공한다 [12]. 게스트모드에서는미리설정한앱에만접근할수있도록하여사용자정보를보호한다. 사용자주의를위한안내역시여러곳에서발표되고있다. 안철수연구소는스마트폰보안수칙 10계명 [13], 한국인터넷진흥원은스마트폰이용자 10대안전수칙 [14], 금융감독원은스마트폰금융거래 10계명을발표하였다 [15]. 내용은대동소이하다. 신뢰할 Fig.1. BlackBerry Balance Architecture Fig.2. Samsung KNOX Layer 수있는앱마켓이용하기, 백신설치하기, 개인 / 금융정보저장하지않기, 임의개조하지않기등이있다. III. 배경및문제점 3.1 연구배경안드로이드사용자가늘어남에따라, 공격역시증가하고있다. 위에서소개한자체기술은 1 제조사, 단말등에따라지원여부가다르고, 2 보안솔루션 API가적용되지않고개인영역에설치된앱에대해서는여전히공격이가능하다. 따라서앱과앱데이터보안은여전히필요한과제이다. 안드로이드는보안기법을제공하고있으나무력화될수있다. 안드로이드보안기법과공격법을소개한다.
정보보호학회논문지 (2013. 12) 1051 3.2 안드로이드보안요소안드로이드는비인가된접근으로부터메모리와스토리지를보호하는기법을기본으로제공하고있다 [16]. 앱에서시스템의중요한기능을사용하기위해서는사용을명시해야하며, 앱설치시이를사용자에게알림으로써사용자가앱의위험성을판단할수있게한다. 본연구에서는사용자관리의측면이아닌, 시스템측면을분석한다. 1) 앱샌드박스 : 안드로이드는리눅스커널위에서동작하는플랫폼이다. 사용자가새로운앱을설치하면, 안드로이드는해당앱에대한유일한리눅스사용자 ID(UID) 를발급한다. 해당앱은패키지명과동일한이름의디렉토리에설치되며, 이디렉토리또한해당 UID만이읽기 / 쓰기권한을갖도록설정된다. 앱에서생성한파일은기본적으로이디렉토리안에생성된다. 앱의실행파일, 생성파일등자원에다른앱이접근할수없도록보호받으며, 반대로다른앱의자원에접근할수없다. 앱런타임은앱에할당된유일한 UID 계정으로실행되므로앱프로세스는리눅스커널에의해다른앱프로세스의메모리등자원에접근할수없다. 2) Secure Element: 스마트폰에서전자결제서비스요구가높아짐에따라 NFC(Near Field Communication) 기능이기본탑재되는단말기가증가하고있다. NFC는자체 CPU와 SE(Secure Element) 를갖추고, 카드정보등과같은중요한정보를 SE에안전하게저장한다. NFC 통신을위한안테나는단말기에위치하며, CPU와 SE는단말기에내장될수도있고, USIM(Universal Subscriber Identity Module) 에내장될수도있다 [17]. 자체 CPU를가지고있다는것은, 안드로이드플랫폼과분리되어있음을의미한다. SE로의접근은운영체제차원에서엄격하게제어된다. 3.3 보안요소의문제점안드로이드가위와같은여러보안기법을제공함에도불구하고, 중요한보안문제를안고있다. 이문제점은앱에서저장한중요정보를노출시킬수있으므로앱개발시반드시고려되어야한다. 1) 루팅 : 앱샌드박스는리눅스커널의권한제어에기반하므로, 사용자가루트계정을획득할경우무력화될수있다. 사용자에게배포되는펌웨어에는로그인계정변경할수있는 su 명령어가존재하지않으므로사용자가루트권한을획득하기란불가능하다. 시스템의버그를이용하거나, su가포함된펌웨어를설치하는방법으로 su 명령어를단말기에설치할수있으며, 이를루팅 (rooting) 이라고한다 [18]. 루팅된단말기, 즉 su명령어가설치된단말기에서는루트권한을획득할수있으므로앱샌드박스와무관하게다른앱의자원에접근할수있다. 2) SE 사용제약 : SE는 NFC 하드웨어모듈이탑재된안드로이드단말기에서만사용가능하다. 또한, 안드로이드에서 SE에데이터를입력하기위한 API는공개되어있지않다. 앱개발자가 SE에데이터를넣기위한함수를구현했다하더라도, SE가 USIM 에내장된경우에는통신사의승인을, 단말에내장된경우단말제조사의승인을받은경우에만사용가능하다. 따라서, 임의의앱에서데이터를 SE에저장하기란사실상불가능하다. 3) 암호화저장기법부재 : 앱에서저장한데이터는앱샌드박스에의해보호되므로, 안드로이드 API 에는안전한데이터저장을위한별도의기법을제공하지않는다. 그러나위에서지적한바와같이루팅이된단말기인경우저장된데이터가보호되지않으므로, 암호화되지않은데이터는노출될수있다. 4) 역공학 : 안드로이드앱은자바로쓰여진다. 자바는다른프로그래밍언어에비하여역공학이용이하다. 단말기에설치된앱을, 컴퓨터등으로추출하기위한방법역시용이하다. 암호화키가앱내에고정되어있는경우, 역공학을통해암호키가노출될수있다. IV. 상용암호소프트웨어분석본장에서는역공학과정과필요도구를간단히소개한후, 구글플레이에등록된앱중카드정보등개인정보를다루거나암호기능을제공하는앱을역공학하여분석한다.
1052 안드로이드스마트폰암호사용앱보안분석및대응 4.1 역공학과정및도구안드로이드앱역공학과정은다음과같다. apk파일획득은구글플레이에서쉽게설치할수있는무료탐색기앱으로가능하다. 나머지과정 PC 환경에서이루어지며, 관련도구는무료로구할수있다. 1 apk 파일획득 2 압축해제 3 dex 파일변환 dex2jar[19] 이용 4 jar 파일압축해제 5 class 파일디컴파일 jad[20] 등이용 4.2 상용앱분석결과구글플레이, 즉안드로이드앱마켓에서개인정보를사용하거나암호기능을제공하는상용앱을설치한후, 이를분석하였다. dex2jar 0.0.9.13, jad 1.5.8g 버전을사용하였다. 데이터파일에접근하기위하여루팅된단말을사용하였다. 1) CJ One card (2.7.0): 제품, 컨텐츠등을구매할때포인트를적립하고, 쿠폰등을발행하는앱이다. 이앱은자동로그인기능을지원하므로, 계정정보가단말기에저장된다. AES 클래스디컴파일결과, AES 알고리즘을사용하며, 암호키가 cjonemobilecard1 로고정되어있음을확인하였다. SetCardPW 클래스에서사용자로부터입력받은패스워드를위 AES 클래스의메쏘드를호출하여암호화함을확인하였다. 앱이설치된디렉토리의 shared_prefs/cjonecarepref. xml 에서 autologinuserpass 항목값이 2230e31f- 942970fb463b3168b9734f84임을확인했다. 해당파일은루팅된단말에서만접근이가능하다. 이값을복호하여 Fig. 3. 과같은값을얻어냈다. 이는로그인패스워드와동일하다. 진및동영상을숨겨주는앱이다. 앱실행시패스워드를입력해야하며, 앱에서미디어파일을선택하면, 다른갤러리앱에서해당미디어파일이보이지않는다. shared_prefs/com.morrison.gallery locklite_preferences. xml 파일에앱실행비밀번호가암호화되지않고그대로저장되어있었다. 하지만앱은난독화되어있어쉽게분석되지않았다. 주패키지의 util/ia 클래스에서 DESede 문자열은난독화되지않아 3-DES 를사용함을알수있었다. 암호키는자바 API를통해랜덤하게생성했으나, 저장방법을찾지못했다. 앱을난독화하여분석이어려웠으나, 앱에암호기능은구현되어있지만실제로파일이암호화되지않았다. 확장자가변경되고숨김폴더로이동되어드러나지않을뿐이었다. 3) Encrypt File Free (1.0.6): 사용자가선택한파일을암호화하는앱이다. 앱구동시비밀번호를물어보며, 암복호시에는비밀번호를묻지않는다. 앱구동비밀번호는 Login 클래스에서 MD5되어 databases/optionscrypt 파일과암호화된파일의첫부분에기록된다. Fig. 4. 는앱구동비밀번호가 mypassword1 일때저장된모습이다. 암호화방식으로는공개알고리즘을사용하지않고내부에서독자적인알고리즘을사용하고있다. Main 클래스와 Crypt 클래스를분석하여복호알고리즘을완성하였다. 디컴파일된소스를활용하여복호프로그램을제작한후, 암호화한파일에수행하여원본을획득할수있었다. Fig.4. Stored password using MD5 2) Gallery Lock Lite (4.6): 갤러리로부터사 4) Secret Space Encryptor (1.4.7): 문자열, 파일등을암호화하는앱이다. 암호시패스워드는사용자로부터입력받는다. 난독화는되어있지않으나, 다양한알고리즘이포함되어있고복호패스워드를저장하지않고사용자에게물어보는방식으로서정적분석만으로는파일을복호할수없었다. Fig.3. Decrypting user s password
정보보호학회논문지 (2013. 12) 1053 V. 대응방안 위와같은공격을막기위한대응방안을제시하고이를위한개발프로세스를제안한다. 5.1 단위보안기능 1) 데이터암호화는반드시적용해야할기술이다. 암호화키역시안전하게관리되어야한다. 소스코드에고정되어있거나파일등에기록한경우키가노출될수있다. < 사용자입력값 > 및 < 기기의고유하드웨어정보 > 를조합및변형하여사용한다면, 해당키는정적분석만으로는알기어려워지는동시에기기에종속된다. 다른기기에서동일한사용자입력값을입력해도복호되지않는다. 2) C/C++ 로작성된 JNI 코드는자바바이트코드보다역공학이어렵다. 민감한데이터는 JNI 내부에서처리하고, 자바실행코드에서필요한데이터만가져와서사용하도록하면역공학에보다강인해질수있다. 암호라이브러리를직접구현할수도있고, OpenSSL 과같은기존 C/C++ 라이브러리를빌드하여사용할수도있다. 3) 역공학에대응하기위하여난독화를적용할수있다. 난독화는소스혹은머신코드를사람이이해하기어렵게만드는기법이다 [21]. 변수와연산을추가하고제어흐름을바꾸어알고리즘을알아보기어렵게만드나, 최종적으로동일한결과가출력되도록한다. 자바는주로소스코드가아닌바이트코드, 즉 class 파일에서난독화가이루어진다. 안드로이드는 class 파일을직접실행시키는것이아니라 dex 파일을실행시키므로일반적인난독화도구는사용할수없다. 안드로이드를지원하는난독화도구를사용해야하며, 안드로이드 SDK에 ProGuard 난독화도구가포함되어있다 [22]. 개발환경에서 ProGuard 를활성화하면, 설치파일생성단계에서자동으로난독화를수행한다. 난독화는역공학을불가능하게만드는것이아니라, 분석에소요되는시간을증가시켜공격자로하여금중단하게만든다. 난독화를해제및공격하는기법또한존재하므로, 난독화만으로는공격에대비할수없다 [23]. 5.2 데이터보호프레임워크위에서제시한 3개의기법은동시에적용되어야한 Fig.5. Data Protection Framework 다. 이들을유기적으로결합하여앱에적용해야한다. 앱설계과정에서체계적으로보호기법을적용할수있도록데이터보호프레임워크를제안한다. Fig. 5. 는데이터보호프레임워크의계층도이다. 1) 데이터사용계층 : 앱에서사용할데이터중, 암호화가필요없는일반데이터와암호화가필요한민감한데이터로나눈다. 민감한데이터를저장, 전송해야하는경우에는반드시하부계층을통하여보안을적용해야한다. 2) 자바코드계층 : 안드로이드 SDK로구현되는계층이다. 키생성에활용할 < 사용자입력값 > 과 < 기기의고유정보 > 는이계층에서획득한다. 데이터관리모듈은자바코드계층에서보안에가장민감한부분이다. 평문, 암호문을하위계층으로전달하고암호, 복호, 해쉬결과를받아 UI, 네트워크등으로전달한다. 보안연산을단위기능으로분리하여하위로호출하는경우, 중간값을자바코드계층에서임시로가지고있어야한다. 정적분석만으로는이를알아낼수없지만동적분석에서는일부정보가노출될수있다. 그러므로앱에서수행하고자하는큰기능단위로하위계층에요청하도록한다. 기능을나누어서호출할경우에는, 중간에더미값을포함시켜분석으로부터강인하도록설계한다. 자바코드계층은앱배포전에반드시난독화를적용해야한다. 기능설계시, 가령 AES와 SHA1 연산을수행해야하는경우, 하위계층의 aes() 와 sha1() 을각각호출하는것이아니라, getdata() 와같은하나의함수만을호출하도록한다. getdata() 내에서내부의
1054 안드로이드스마트폰암호사용앱보안분석및대응 aes() 와 sha1() 을호출함으로서자바코드계층을분석하는것만으로는내부를알기어렵도록한다. 는데이터보호프레임워크에따라앱의알고리즘및데이터를안전하게보호해야한다. 3) 함수이름사상 : 자바계층을난독화하여 JNI 호출함수이름이변경될경우, 정상적으로 JNI 함수를호출할수없다. JNI 함수명이 encrypt() 과같이쉽게내용을추측가능한경우는보안에취약할수있다. 따라서 JNI 함수이름을 aa, bb 와같이의미를알수없거나 getprocess() 등과같이다른의미의이름으로사상하여구현한다. 4) 네이티브코드계층 : 암복호, 해쉬, 키유도, 파일입출력등보안기능을구현한다. 자바코드계층에서요구하는기능을수행하고결과를반환한다. 유도된키는자바코드영역으로전송하지말고, 내부에서만사용해야한다. Fig. 6. 은데이터보호프레임워크구현절차이다. 데이터의분류를시작으로키유도, 필요한암호기능을정의한다. 이에따라 JNI로구현하고함수이름을사상한다. 데이터관리모듈에서는사상된 JNI를통하여데이터를관리하도록한다. Fig.6. Implementation Method VI. 결론스마트폰의다양한기능에따라, 더많은개인정보가단말기에저장되고있고이는보안위협으로다가오고있다. 본연구에서는이러한위협이실제함을보였다. 앱의알고리즘은역공학을통해드러날수있고, 저장한데이터역시루팅에의해노출될수있다. 개인데스크탑에서관리자권한이일반적이듯, 스마트폰에서도루팅을고려한대응을해야한다. 사용자에게루팅의위험성을알리고주의를당부하는일역시중요하지만, 앱을제작할때에는본연구에서제시하 References [1] Gartner, Market Share Analysis: Mobile Phones, Worldwide, 2Q13, http://www. gartner.com/newsroom/id/2573415, Aug. 2013. [2] Gartner, Market Share: Mobile Communication Devices by Region and Country, 3Q11, http://www.gartner.com/newsroom/id/1848514, Nov. 2011. [3] icrossing, 2013 Mobile Market Share, http://connect.icrossing.co.uk/2013-mo bile-market-share-infographic_10062, Jan 2013. [4] Wikepedia, Bring Your Own Device, http://en.wikipedia.org/wiki/bring_your_own_device [5] News1, From 15th, blocking smartphone features in the building of Ministry of National Defense, http://news1.kr/articles/1239175 [6] BlackBerry, Balance technology, http: //us.blackberry.com/business/software/blackberry-balance.html [7] Jason Foy, Understanding BlackBerry Balance, BlackBerryLive, 2013. [8] Samsung, KNOX, https://www.samsungknox.com/en/ [9] SELinux Wiki, SEforAndroid, http:// selinuxproject.org/page/seandroid [10] Centrify, Samsung to OEM Centrify for Single Sign-On and Mobile Management, http://www.centrify.com/blogs/tomkemp /samsung_oems_centrify_for_sso_and_m dm.asp [11] Samsung, Samsung KNOX available for use by consumers, http://www.samsung.com/us/news/21651 [12] LG Electronics, Guest Mode, http:// www.lgmobile.co.kr/microsite/lgg2/ features/features03.jsp
정보보호학회논문지 (2013. 12) 1055 [13] AhnLab, Inc., 10 Commandments of sma rtphone security policy, http://www.ahn lab.com/kr/site/securityinfo/secunews/ secunewsview.do?menu_dist=2&seq= 16012 [14] Korea Internet & Security Agency, 10 safety regulations for smartphone users, http://boho.or.kr/kor/private/private_02.jsp [15] Financial Supervisory Service, 10 Comm andments of smartphone banking, http:/ /www.fss.or.kr/fss/kr/promo/bodobbs_ view.jsp?page=1&seqno=14941 [16] Google, Android Security Overview, http://source.android.com/devices/ tech/security/index.html [17] Smart Card Alliance, Mobile/NFC Secur ity Fundamentals, http://www.smartcardalliance.org/resources/webinars/secure_elements_101_final3_032813.pdf [18] Wikipedia, Android rooting, http:// en.wikipedia.org/wiki/android_rooting [19] dex2jar, https://code.google.com/p/dex- 2jar/ [20] jad, http://varaneckas.com/jad/ [21] Wikipedia, Obfuscation, http://en.wikipedia.org/wiki/obfuscation_(software) [22] ProGuard, http://developer.android.com /tools/help/proguard.html [23] A look inside Dexguard, http://www.and roid-decompiler.com/blog/2013/04/02/a -look-inside-dexguard/ < 저자소개 > 박상호 (Sang-ho Park) 학생회원 2004 년 2 월 : 세종대학교컴퓨터공학과학사 2006 년 2 월 : 세종대학교컴퓨터공학과석사 2008 년 2 월 : 세종대학교컴퓨터공학과박사과정수료 2008 년 ~2011 년 : 잉카엔트웍스전임연구원 2011 년 3 월 ~ 현재 : 세종대학교컴퓨터공학과박사과정 < 관심분야 > 암호프로토콜, 스마트폰보안등 사 진 김현진 (Hyeonjin Kim) 정회원 1992 년 2 월 : 서울대학교수학과졸업 1994 년 2 월 : 포항공과대학교수학과석사 2008 년 8 월 : 한국과학기술원수리과학과박사 1994 년 2 월 ~1999 년 9 월 : 한국전자통신연구원 1999 년 10 월 ~ 현재 : ETRI 부설연구소책임연구원 < 관심분야 > 정보보호, 암호분석, 불함수이론 권태경 (Taekyoung Kwon) 종신회원 1992 년 2 월 : 연세대학교컴퓨터과학과학사 1995 년 2 월 : 연세대학교컴퓨터과학과석사 1999 년 8 월 : 연세대학교컴퓨터과학과박사 1999 년 ~2000 년 : U.C. Berkely Post-Doc. 2001 년 ~2013 년 8 월 : 세종대학교컴퓨터공학과교수 2007 년 ~2008 년 : Univ. Maryland at College Park 교환교수 2013 년 9 월 ~ 현재 : 연세대학교정보대학원부교수 < 관심분야 > 암호프로토콜, 네트워크프로토콜, 센서네트워크보안, HCI 보안등