643 Journal of The Korea Institute of Information Security & Cryptology ISSN 1598-3986(Print) VOL.28, NO.3, Jun. 2018 ISSN 2288-2715(Online) https://doi.org/10.13089/jkiisc.2018.28.3.643 자마린으로개발된안드로이드앱의정적분석연구 * 임경환, 김규식, 심재우, 조성제 단국대학교컴퓨터학과 A Static Analysis Technique for Android Apps Written with Xamarin* Kyeong-hwan Lim, Gyu-sik Kim, Jae-woo Shim, Seong-je Cho Dept. of Computer Science and Engineering, Dankook University 요 약 자마린은대표적인크로스플랫폼개발프레임워크로, 안드로이드, ios, 또는 Windows Phone 등의여러플랫폼을위한모바일앱을 C# 으로작성하게해준다. 모바일앱개발자들은기존의 C# 코드를재사용하고여러플랫폼간에상당한코드를공유할수있어개발시간과유지보수비용을줄일수있다. 한편, 멀웨어작성자들또한자마린을이용하여악성앱제작시간과비용을최소화하면서더많은플랫폼에악성앱을전파할수있다. 이에대응하기위해서자마린으로작성된멀웨어를분석하고탐지하는방안이필요하다. 그러나현재자마린으로작성된앱에대한분석방법에대한연구가많이이루어지고있지않다. 이에본논문에서는자마린으로개발된안드로이드앱의구조를파악하고앱코드를정적으로분석하는기법을제안한다. 또한, 코드난독화가적용된앱에대해서도정적으로역공학하는방법을보인다. 자마린으로개발된앱은자바바이트코드, C# 기반의 DLL 라이브러리, C/C++ 기반의네이티브라이브러리로구성되어있으며, 이들서로다른유형의코드들에대한정적역공학기법에대해서연구하였다. ABSTRACT Xamarin is a representative cross-platform development framework that allows developers to write mobile apps in C# for multiple mobile platforms, such as Android, ios, or Windows Phone. Using Xamarin, mobile app developers can reuse existing C# code and share significant code across multiple platforms, reducing development time and maintenance costs. Meanwhile, malware authors can also use Xamarin to spread malicious apps on more platforms, minimizing the time and cost of malicious app creation. In order to cope with this problem, it is necessary to analyze and detect malware written with Xamarin. However, little studies have been conducted on static analysis methods of the apps written in Xamarin. In this paper, we examine the structure of Android apps written with Xamarin and propose a static analysis technique for the apps. We also demonstrate how to statically reverse-engineer apps that have been transformed using code obfuscation. Because the Android apps written with Xamarin consists of Java bytecode, C# based DLL libraries, and C/C++ based native libraries, we have studied static reverse engineering techniques for these different types of code. Keywords: Xamarin framework, Android app, Cross-platform, Static analysis, Intermediate Language 서론 1) Received(03. 14. 2018), Modified(05. 31. 2018), Accepted(06. 01. 2018) * 본논문은 2017 년도동계학술대회에발표한우수논문을개선및확장한것으로 2017 년도정부 ( 미래창조과학부 ) 의재원으로한국연구재단기초연구사업의지원을받아수행된연 구임 (No. 2015R1A2A1A15053738) 그리고산업통상자원부 (MOTIE) 와한국에너지기술평가원 (KETEP) 의지원을받아수행한연구과제임 (NO. 20171510102080) 주저자, limkh120@dankook.ac.kr 교신저자, sjcho@dankook.ac.kr(corresponding author)
644 자마린으로개발된안드로이드앱의정적분석연구 I. 서론최근하나의프로그램을개발하여여러플랫폼에서수행할수있게해주는, 크로스플랫폼개발프레임워크 (cross-platform development framework) 의사용이증가하고있다 [1-4]. 대표적인크로스플랫폼개발프레임워크로는자마린 (Xamarin), 유니티 (Unity), PhoneGap, Appcelerator Titanium, Sencha 등이있다. 이러한프레임워크는모바일앱의개발생명주기동안개발비용및시간, 유지보수등의면에서효율성을증대시켜준다. 즉, 안드로이드, ios, 윈도우폰 (Windows Phone), 타이젠 (Tizen) 등의여러모바일플랫폼들이경쟁하고있는현재, 특정플랫폼을위한네이티브앱 (native app) 을개별적으로개발하는것은개발비용을크게증가시킨다. 안드로이드는 Java, ios는 Objective-C 와같이특정플랫폼은전용프로그래밍언어및개발도구를필요로하며, 업데이트나버그수정과같은유지보수비용도매우비싸다. 특정모바일플랫폼의프로그래밍언어와 API로개발된네이티브앱은해당플랫폼의기능을충분히활용할수있는반면, 다른플랫폼에서는수행되기어렵다. 이러한상황에서특정플랫폼에독립적인모바일크로스플랫폼도구가주목받고있다. 자마린 (Xamarin) 은대표적인모바일크로스플랫폼프레임워크로, 안드로이드, ios, 또는윈도우폰등의여러플랫폼을위한모바일앱을 C# 으로작성하게해준다 [1-4]. 자마린을이용할경우, C# 프로그래머들은특정플랫폼용프로그래밍언어를익힐필요없이모바일앱을즉시개발할수있으며, 기존의 C# 코드를재사용하고다른플랫폼간에상당한코드를공유할수있다. 2015 년기준자마린웹사이트에의하면, 90만명의개발자들이크로스플랫폼앱들을개발하기위해자마린도구를사용하고있다 [1]. 한편, 공격자들도멀웨어제작시간을최소화하면서최대의공격효과를내려고자마린을악용한다고알려져있다 [5]. C# 으로악성앱들을더빨리제작하거나기존의악성코드를재활용하여더많은플랫폼에효과적으로전파할수있기때문이다. 백신우회용악성실행파일을제작하는공격도구들의집합인 Veil-Framework 에서는, 악성페이로드를 C# 으로개발하였다. 실제인터넷을검색하여보면 C# 으로 키로거 (keylogger) 를작성하는방법, C# Crypto-Ransomware 작성및 DDoS 멀웨어관련유투브영상, C# 으로콘솔기반의트로이목마를작성하는튜토리얼, C# Nemesis.Worm 등을접할수있다. Mylonas[6, 7] 등은실험을통해학생들이 C# 을이용하여윈도우모바일 (Windows Mobile) 에서는이틀만에, 윈도우폰에서는하루만에악성앱을제작할수있음을보였다. 이처럼 C# 코드기반의악성앱들이도입되고있지만, C# 코드로제작된악성앱에대한효과적분석기법은연구된바가없다. 이에본논문에서는자마린으로개발된안드로이드앱을정적으로역공학하는방법을제안한다. 또한실험에서는, 난독화기법을포함시켜 C# 앱을재패키징한후, 이를역공학해보임으로써제안방법의실효성을보인다. 본논문의구성은다음과같다. 2장에서는관련연구에대해기술한다. 3장에서는자마린프레임워크및자마린으로개발된앱의실행환경인모노런타임 (Mono runtime) 에설명한다. 4장에서는자마린으로개발된안드로이드앱에대한정적분석기법을기술하면서, 네이티브앱을정적분석하는방법과의차이점에대해살펴본다. 5장에서는역공학방해요소가적용된앱을분석하는방법에대해논의하고 6장에서결론을맺는다. II. 관련연구자마린이지원하는모노 (Mono) 는크로스플랫폼앱을개발하도록해주는.NET 프레임워크용최초의오픈소스다 [5]. 이프로젝트는자마린의후원을받아리눅스, 윈도우, Mac OS X에설치될수있다. 모노에서개발된프로젝트는 MoMA (Mono Migration Analyzer) 을사용하여한플랫폼에서다른플랫폼으로이식될수있으며, MoMA 는자동화된도구로자마린앱들의생산성을증대시켜줄수있다. 자마린을이용하면, C# 으로작성된앱들이안드로이드, ios, Mac OS X 상에서동일코드를공유할수있다. Mylonas[6, 7] 등은대표적인스마트폰플랫폼들의보안수준을비교평가하기위해, 대상플랫폼들에서일반프로그래머들이멀웨어를제작할수있는지, 제작할수있다면얼마나작성이용이한지를실험하였다. 실험에서프로그래머들은스마트폰플랫폼에서제공된개발도구와프로그래밍라이브러리를
정보보호학회논문지 (2018. 6) 645 사용하여, 안드로이드에서는 Java 언어를사용하여 12시간만에멀웨어를제작할수있었다. ios에서는 Objective-C 를사용하여 7일만에멀웨어를제작하였고, Windows Mobile 6에서는 C# 을이용해이틀만에멀웨어를제작하였다, Windows Phone 7에서는 C# 프로그래밍경험을가진학부생이하루만에멀웨어를제작하였다. Boushehrinejadmoradi[2] 등은 X-Checker 라는테스팅도구를개발하여, 홈플랫폼 API를가지고동일기능을제공하는타깃플랫폼 API로변환할때발생할수있는비일치오류를조사하였다. 실험결과, 자마린에서 Windows Phone API와안드로이드 API의구문변환시에 47개의버그를탐지하였다. Martinez[3] 등은크로스플랫폼모바일앱개발프레임워크를사용하여개발된모바일앱들의품질을분석하였다. 즉, 자마린과같은크로스컴파일프레임워크를사용해작성된앱들의개발및유지보수과정을, 버그탐지및정정에초점을두고평가하였다. 여러논문들이악성앱개발용이성과버그탐지ᐧ 정정에대해연구하였지만, 자마린에서 C# 으로개발된앱에대한체계적인역공학분석연구는현재까지수행된바가없다. 본연구는자마린에서 C# 으로개발된안드로이드앱을대상으로정적역공학분석연구를진행한다. 있는코드로번역된다면, 소스코드번역기는런타임구성요소 (Runtime element) 와결합될수있다. 자마린으로개발된앱의개요가 Fig. 1. 에나타나있다. 자마린으로안드로이드앱을개발할경우, C# 이번역되어 IL(Intermediate Language) 코드가생성되며해당 IL 코드를실행하기위한모노환경과 IL 코드를위한 JIT(Just-In-Time) 컴파일기능을포함하여앱을생성하게된다. 자마린으로개발된앱을역공학하기위해서는컴파일과정과실행파일구조, 런타임동작원리를파악할필요가있다. 자마린의 C# 컴파일러를통해생성된 IL 코드는 Java 의바이트코드에대응되며, CLR (Common Language Runtime) 의 JIT 컴파일을통해기계어로변환된다 [5]. IL 코드는.NET PE 파일의포맷을갖고있으며 PE 포맷의구성은 Fig. 2. 와같다. 이러한앱의기능및동작과정을파악하기위해서 PE 파일포맷을갖는 DLL 파일들을정적역공학해야한다. III. 자마린및모노런타임환경 3.1 자마린개요 Fig. 1. Procedure of Xamarin app development [2] 2016 년마이크로소프트는닷넷프레임워크를다른외부플랫폼으로이식하기위해, 모노프로젝트 (Mono Project) 기반으로개발된자마린크로스플랫폼개발환경을무료로제공하고있다. 자마린은닷넷프레임워크와 C# 언어를이용하여안드로이드, 윈도우폰, ios와같은다양한모바일플랫폼에서동작할수있는앱을개발하게해준다. 자마린은크로스플랫폼개발프레임워크 [2] 또는소스코드번역기 (Source code translator)[1] 로, 주어진소스코드를크로스컴파일하여, 컴파일된코드를다른플랫폼들에서수행하게해준다. 소스코드는플랫폼의네이티브언어 (native language) 또는실행가능한바이트코드로변환된다. 소스코드가런타임환경 (Runtime environment) 에의해실행될수 Fig. 2. Format of.net PE files[5]
646 자마린으로개발된안드로이드앱의정적분석연구 3.2 모노런타임환경 IV. 자마린앱에대한정적역공학방법 자마린으로개발된앱들의경우, 소스코드로부터 IL 코드가생성되고, 생성된 IL 코드는 CLR 환경에서특정플랫폼에맞는네이티브코드로변환되어실행된다. 자마린을통해개발된 C# 기반의안드로이드앱도컴파일후 IL 코드형태로 DLL 파일에존재한다. 이안드로이드앱은 CLR 역할을하는모노런타임을통해실행되며기존의안드로이드실행환경인 DVM(Dalvik Virtual Machine) 또는 ART(Android Runtime) 과함께상호작용한다. 모노런타임이포함된안드로이드실행구조가 Fig. 3. 에나타나있다 [8]. 모노런타임에서제공되는.NET API는 XML, DB, 직렬화 (Serialization), 입출력, 스트링 (String), 네트워킹 (Networking) 기능들을제공한다 [9]. 하지만안드로이드 OS가제공하는 Audio, Telephony, OpenGL 기능등은안드로이드 SDK 또는자바 API로만접근이가능하다. 따라서모노런타임과안드로이드실행환경이서로통신해야할필요가있다. 이를위해, 자마린은 Managed Callable Wrappers(MCW) 를제공한다. MCW는 C# 코드에서 Java 코드를호출해야할때사용되는자바네이티브인터페이스 (JNI) 브릿지로 Binding Library 형태로제공하고있다. Binding Library 는 C# 코드에서자바코드를호출할수있도록자바라이브러리에대한 C# Wrapper 를생성하고이를 C# 에서호출하는방식을이용하고있다. 반대로안드로이드런타임에서 C# 코드를호출하기위해서 Android Callable Wrappers(ACW) 를제공하고있다. 이장에서는자마린으로개발된안드로이드앱의구조를분석하고, 정적으로역공학하는방법을기술한다. 본논문에서는자마린에서 C# 으로개발된안드로이드앱을 자마린앱 이라고부른다. 4.1 자마린앱의구조기존의 Java 언어로작성된안드로이드네이티브앱과비교하여보면, 자마린앱에는 assemblies 폴더와 lib 폴더가추가로구성된다. Fig. 4. 는마켓에배포되고있는 Snap Attack 이라는자마린앱의구조를보여준다. 해당앱을압축해체후살펴보면 assemblies 폴더에는 DLL 파일들이존재하는데, 이 DLL은 C# 코드로부터번역된 IL 코드가존재한다. lib 폴더에는 C/C++ 기반의네이티브라이브러리인 so 파일들, 즉모노런타임환경을제공하기위한라이브러리들이존재한다. assemblies 폴더의파일들은안드로이드 MainActivity, Java 코드에서 C# 코드를호출할수있게해주는 JNI, 안드로이드 API에대한 C# 바인딩, 암호화관련 API, 파일입출력기능등을제공하며, lib는모노런타임환경과 JIT 컴파일기능등을제공한다. 각파일들의주요기능은 Table 1. 과같다. Fig. 4. The structure of the xamarin app (Snap Attack) Fig. 3. Android execution environment including Mono runtime [8]
정보보호학회논문지 (2018. 6) 647 Table 1. Main features of files included in Xamarin app Folder name /Assembl ies /lib File name Description SnapAttack Compilation results of C Android.dll # developer code - Providing C # binding functionality for the Mono.Andr Android API oid.dll - Supporting for namespaces such as Java.Lang and Java.Net Mono.secu rity.dll Java.Inter op.dll Providing Cryptographic API Providing JNI functionality to call C # code from Java System.*.d File I / O function ll libmonodroi Providing a mono runtime d.so environment libmonosgen-2.0.so Providing JIT function 4.2 자마린앱에대한정적분석기법 정적역공학은실행코드를역어셈블 (disassemble) 하거나역컴파일 (decompile) 하는 과정을포함한다. 자마린앱의경우, 실행파일은 Java 바이트코드,.NET 프레임워크의 IL 코드를포함한 DLL 파일, 네이티브라이브러리인 so 모듈 (C/C++ 기반바이너리코드 ) 들로구성된다. 서로다른언어로개발된코드를역공학하기위해서각실행코드에적합한역공학도구를사용해야한다. 앱의바이트코드를자바소스코드로역컴파일하기위해무료도구인 Jadx[10] 나상용도구인 JEB[11] 를사용할수있다. 또한 IL코드로구성된 DLL 파일을.NET 기반 C# 코드로역컴파일하기위해서는무료도구인 ILSpy[12] 나상용도구인.NET Reflector[13] 를사용할수있다. 라이브러리인 so 파일을어셈블리나 C 기반의사코드로역공학하기위해서는 IDA pro[14] 를사용할수있다. 자마린앱의구성모듈별필요한정적역공학도구는 Fig. 5. 와같다. 자마린앱을정적으로분석하기위한절차는 Fig. 6. 과같이크게 4단계로나눌수있다. 가장먼저분석대상 DLL 파일을파악해야한다. 이를위해서자마린앱내에있는 DEX 파일을역공학하여 DEX 파일내존재하는 MonoPackageManager_Resources 클래스를분석해야한다. 해당클래스는개발자가작성한 DLL 파일과서드파티라이브러리리스트들을 Assemblies 배열에저장하고있다. 배열에저장된 DLL 파일이름들을확인하여분석대상 DLL 파일 Fig. 5. File structure and static analysis tools of a Xamarin app
648 자마린으로개발된안드로이드앱의정적분석연구 들을파악할수있다. Fig. 4. 에나타난 Snap Attack 앱의경우 Assemblies 배열첫번째값으로 SnapAttackAndroid.dll 의이름을갖고있다. 해당파일은모노런타임상에서가장먼저실행되는진입점 ( 보통은특정액티비티 ) 을포함하고있다. 다음으로 SnapAttackAndroid.dll에서진입점을파악하기위해서 AndroidManifest.xml을분석해야한다. 일반적인안드로이드앱의진입점은 AndroidManifest.xml 상에서 <action android:name= android.intent.action.main /> 속성을가진액티비티 (Activity) 라고할수있다. Snap Attack 앱의경우해당속성을갖는액티비티는 DEX 파일상의 RootActivity 로자바코드상에서의가장먼저실행되는진입점이다. RootActivity 에는 (C/C++ 로작성된 ) 네이티브함수인 Runtime.register( ) 함수를호출하고있다. 해당코드는 C# 코드로작성된 RootActivity 를등록하는코드로, 등록이완료된후 SnapAttackAndroid.dll 상의 RootActivity 가실행된다. 해당코드는 libmonodroid.so 파일내에네이티브함수인 Java_mono_android_Runtime_register( ) 함수로선언되어있다. 해당함수는호출과정중에 monodroid_runtime_invoke( ) 를호출한다. invoke( ) 함수는인자값으로어셈블리이름, 실행할클래스및메소드이름, 파라미터를요구하며인자값에맞 는어셈블리의코드를실행한다. libmonodroid.so 파일은 IDA Pro를통해서역공학을진행하였다. Fig. 7. 은 Snap Attack 앱의정적역공학과정을그림으로표현한것이다. 해당앱은자바영역에서 Runtime.register( ) 함수와네이티브영역에서 monodroid_runtime_invoke( ) 함수를차례로거쳐모노영역의진입점인 RootActivity.OnCreate( ) 함수가실행된다. 이와같이안드로이드플랫폼에서자마린앱을분석하여본결과, 기존의 Java 로작성된네이티브앱과비교하여차이점은다음 Table 2. 와같다. 자마린앱은네이티브앱과달리 C# 기반 DLL 파일을모노런타임에서실행하면서기존안드로이드런타임과상호작용하는형태로동작된다. 그리고모노런타임을제공하기위해별도의 so 파일을포함하고있다. 따라서자마린앱을정적으로분석하기위해서는 DLL 파일과모노런타임을위한 so 파일을분석하기위한과정이기본적으로필요하다. Table 2. Differences between native and Xamarin apps Files to be analyzed Static analysis tools Native apps - DEX file, - so file (exists if created by the developer) JEB, Jadx, IDA Pro Xamarin apps - DLL files, - DEX file, - so file (exists by default for mono runtime) ILspy, Reflector, JEB, Jadx, IDA Pro V. 정적역공학방해기법및극복 Fig. 6. Static reverse engineering procedures for Xamarin apps Fig. 7. Main control flow in a Xamarin app 이장에서는자마린앱의구성파일중 C# 언어와관련된 DLL 파일에대한코드난독화 (code obfuscation) 기법및이에대한분석기법에대해설명한다. 닷넷프레임워크에서실행되는프로그램을대상으로하는코드난독화도구는공통중간언어 (Common Intermediate Language, CIL) 기반으로적용된다. 관련난독화도구로는 Babel Obfuscator, Aldaray Rummage, Crypto Obfuscator For.Net,.Net Anti-Decompiler, Dotfuscator 등의상용도구와, ConfuserEx, DotRefiner 등의오픈소스프로젝트가있다. 이러
정보보호학회논문지 (2018. 6) 649 한난독화도구들은 IL 코드분석을방해ᐧ지연시키기위해다양한데이터 / 코드변환기법들을적용하고있다. 대표적인기법으로덤프방지 (anti-dump), 제어흐름보호기법, 문자열난독화, 리소스암호화등이존재한다. 본논문에서는 Crypto Obfuscator For.Net 도구와 ConfuserEx 도구의난독화기법을자마린앱의 DLL 파일에적용가능한지확인하였다. Table 3은자마린앱에적용가능한 Crypto Obfuscator For.Net과 ConfuserEx 의정적분석방해기법을나타낸다. 두도구들이제공하는정적분석방해기법을, Snap Attack 앱의핵심 DLL 파일인 SnapAttackAndroid.dll 에각기법별로적용하고, APKtool 을이용해재패키징 (repackaging) 하였다. 재패키징한앱을실행한결과, ildasm 1) 사용방지 (Anti ildasm Protection), 심볼이름변경 (Symbol renaming), 제어흐름난독화 (Control flow obfuscation), 문자열암호화 (String encryption) 기법등네가지기법은적용가능했으나, 이외에기법들은적용되지않았다. 2) 자마린앱에적용되지않는기법들의원인을조사해보니 Fig. 8. 과같이공통적으로, DLL 파일내에존재하는클래스인 internal class <Module> 에난독화기법과관련된코드가포함되어있었다. ConfuserEx 에의해 internal class <Module> 에추가되는코드들은윈도우환경에서만동작하도록고안되어있어, 안드로이드환경에서는해당 IL 코드를 JIT 컴파일을제대로수행하지못해, 실행이불가능한것으로보인다. 이에반해, 제어흐름난독화기법등자마린앱에적용가능한기법들은 Fig. 8. Inserted Code after Applying DLL Tamper Protection 1) IL disassembler 를말함 2) Table 3 의 문자열암호화 난독화는 Crypto Obfuscator for.net 도구에서만지원되는기능임 Table 3. Anti-Static Analysis Techniques of ConfuserEx and Crypto Obfuscator For.Net Function Anti ildasm Protection Symbol renaming Control Flow Protection Anti Tamper Protection Anti Debug Protection String Encryption Description prevents the use of iasm.exe, a tool that disassembles DLL files into IL code converts the name of the symbol (symbol) to make it difficult to read the decompiled code modifies the execution flow by changing the code in the method ensures the integrity of your app prevents debugging encrypts all literal strings internal class <Module> 영역에관련코드를추가하지않아안드로이드환경에서도정상적으로실행됨을확인했다. 이에자마린앱에적용가능한 4가지난독화기법들을적용하고이를분석하여정적분석하는방법을실험하였다. 5.1 ILDASM 사용방지및극복방법 IL Disassembler (ILdasm) 는 IL Assembler 의보조도구로서 DLL 파일을역어셈블하여분석가가알아보기쉬운 IL 코드를생성한다. 이도구는윈도우환경개발도구인비주얼스튜디오에서닷넷응용프로그램개발을지원하기위해기본적으로제공된다. ConfuserEx 는 ildasm 의사용을방지하는기법을제공한다. ildasm 사용을방지하는난독화기법이적용된어셈블리를, ildasm 도구의입력으로제공했을때 Fig. 9. 와같은오류문구를출력하게된다. 이난독화기법을확인해보면, Fig. 10. 과같이 DLL 파일내에 ildasm 방지속성인 SuppressIldasmAttribute 속성값을추가하는기능으로만구성되어있다. ildasm 도구는 DLL 파일내에 SuppressIldasmAttribute 속성이존재할경우해당어셈블리를분석하지않는다. 이는높은수준의난독화기법이아니어서, 이를우회하는것이
650 자마린으로개발된안드로이드앱의정적분석연구 Fig. 11. Bypassing the SuppressIldasmAttribute attribute 5.2 심볼이름변경및제어흐름난독화의극복 Fig. 9. Applying the ildasm prevention technique Fig. 10. Attribute of SuppressIldasmAttriubute 어렵지않다. SuppressIldasmAttribute 속성이존재하는 DLL 파일을역어셈블하기위하여, 본논문에서 SuppressIldasmAttribute 를무시하고, ildasm 이수행되도록하는두가지방법을찾았다. 첫번째방법은 SuppressIldasmAttribute 속성이적용된어셈블리를 Mono.Cecil 라이브러리를이용해해당속성을제거한어셈블리를재생성하는방법이다. 하지만본방법은윈도우환경에서구동하는어셈블리에는적용이가능하지만, 자마린앱의어셈블리에서는 Mono.Cecil. AssemblyResolutionException 오류로인해어셈블리재생성이불가능하다. 다른방법은 ildasm 도구에대한실행파일을수정하는것이다. ildasm 실행파일은어셈블리를입력값으로하며, 해당어셈블리를 IL 코드로변환해주는기능을하는데 Fig. 11. 과같이어셈블리내에 SuppressIldasmAttribute 가존재할경우이를 Fig. 9. 의오류문구와함께 IL 변환기능을수행하지않는다. 이러한루틴을우회하기위해 ildasm 실행파일내에존재하는 SuppressIldasmAttrib-ute 의텍스트를검색하고이를임의의다른텍스트로수정할경우어셈블리내의 SuppressIldasm-Attribute 속성이존재하더라도어셈블리파일들을 IL 코드로변환할수있다. 심볼이름변경기법은타입, 메소드, 특성, 이벤트, 필드, 네임스페이스및메소드매개변수의이름을분석하기어렵게변경하는것이다. 예로, 오버로딩을이용한메소드이름변경기법, 멤버이름을난독화하면서사용자지정유니코드문자로변경하는기법등이있다. 이기법적용후에는심볼이름이다르게변경되어원래대로역공학되지않는다. 따라서난독화된코드를이해하기어렵게하는효과를가져온다. Fig. 12. 는기존 Snap Attack 앱의어셈블리를난독화한결과이며, 심볼이름들이알아보기힘들게바뀌었다는것을확인할수있었다. 그러나심볼이름변경기법이적용된앱을역공학하여보니, 해당기법은분석가로하여금정적분석을어렵게만들긴하지만, 실제로는분석이가능하여해당앱의구조나실행흐름을파악할수있었다. 자마린앱에적용가능한다른난독화기법으로제어흐름변경기법이있다. 제어흐름변경기법은기존메소드코드에더미코드를삽입하거나, if문, switch 문, for문등을추가하여메소드의실행흐름을변경한다. 이2처럼제어흐름이변경되면코드의양이많아지며의미없는제어흐름이추가되어분석 Fig. 12. Snap Attack app with symbol renaming
정보보호학회논문지 (2018. 6) 651 가나공격자로하여금역공학을어렵게할수있다. Snap Attack 앱의어셈블리를대상으로제어흐름난독화를적용한결과, 분석코드의양이원본에비해많아지며제어흐름또한변경되어분석이상대적으로어려워지는것을확인하였다. 그러나난독화가적용되어있음에도불구하고, 결국높은난이도는아니기에조금의수고가더해진다면여전히분석가능한것을확인하였다. 5.3 문자열암호화극복방법 문자열암호화 (string encryption) 기법은암호화알고리즘을이용해소스코드내존재하는문자열들을암호화하여분석하기어려운형태로변경하여준다. 해당기법은 Crypto Obfuscator for.net 도구에서제공되고있다. Fig. 13은문자열암호화적용전 / 후의소스코드를나타낸다. 문자열암호화가적용된코드를분석하기위해서복호화루틴을통해복호화과정을수행해야한다. Crypto Obfuscator for.net 도구는 Fig. 13(b) 의표시된해시값과동일한클래스를생성하여복호화루틴을저장하고있는것을확인하였다. 문자열암호화라는난독화방법을극복하기위해서인터넷에공개된도구를이용하여역난독화 (de-obfuscation) 하였다. de4dot[14] 는오픈소스.Net 역난독화도구로 Crypto Obfuscator for.net 로암호화된문자열을복호화하여준다. 따라서해당도구를이용하여문자열암호화가적용된코드에서난독화가적용되기전의원본코드를획득할수있었다. (a) Before applying string encryption (b) After applying string encryption Fig. 13. Source code before and after applying string encryption VI. 결론본논문에서는 자마린프레임워크에서 C# 으로개발된안드로이드앱 ( 자마린앱 ) 의구조를분석하고 C# 코드를실행하기위한모노런타임환경동작원리를분석하였다. 또한자마린으로개발된안드로이드앱을체계적으로정적분석하는기법에대해제안하였다. 제안기법은소스코드가제공되지않는경우에도적용할수있는기법으로악성자마린앱을분석하는데활용될수있다. 정적분석은주어진코드를실행하지않고제어 데이터흐름이나특정한코드패턴을조사하는것으로, 전체코드를커버하면서분석할수있다. 또한, 실행오버헤드도발생하지않는다. 본논문에서는난독화가적용된앱에대해서도코드를정적으로분석하는실험을수행하였다. 단점으로는패킹되었거나암호화된코드를분석하기어렵다는점이다. 현재자마린앱을대상으로분석기법에대해서는거의연구된것이없다. 본논문에서제시한기법은자마린으로제작된악성앱을분석하기위한체계적인방법으로활용될수있다. 향후에는패킹된자마린앱을분석할수있는동적분석기법, 그리고자마린에서안드로이드바인딩 (Android binding) 을거치지않고악성행위를할수있는요소를도출하고이에대한분석방법에대해서연구할계획이다. References [1] M. Willocx, J. Vossaert, and V. Naessens, A quantitative assessment of performance in mobile app development tools, Mobile Services (MS), 2015 IEEE International Conference on. IEEE, 2015. [2] N. Boushehrinejadmoradi, V. Ganapathy, S. Nagarakatte, and L. Iftode, Testing cross-platform mobile app development frameworks (t), In Automated Software Engineering (ASE), 2015 30th IEEE/ACM International Conference on IEEE, pp. 441-451, 2015. [3] M. Martinez, and S. Lecomte, Towards the quality improvement of cross-
652 자마린으로개발된안드로이드앱의정적분석연구 platform mobile applications, In Mobile Software Engineering and Systems (MOBILESoft), 2017 IEEE/ACM 4th International Conference on IEEE, pp. 184-188, 2017. [4] P. Marius, "Considerations Regarding the Cross-Platform Mobile Application Development Process," Academy of Economic Studies. Economy Informatics Vol. 13, no. 1, 2013. [5] S. M. Pontiroli and F. R. Martinez, "The Tao of.net and PowerShell Malware Analysis," Virus Bulletin Conference, 2015. [6] A. Mylonas, S. Dritsas, B. Tsoumas and D. Gritzalis, "On the feasibility of malware attacks in smartphone platforms," International Conference on E-Business and Telecommunications, 2011. [7] A. Mylonas, S. Dritsas, B. Tsoumas and D. Gritzalis, "Smartphone security evaluation The malware attack case," Security and Cryptography (SECRYPT), 2011 Proceedings of the International Conference on. IEEE, 2011. [8] R. Mark. Xamarin mobile application development for Android. Packt Publishing Ltd, 2014. [9] jadx, https://github.com/skylot/jadx [10] JEB, https://www.pnfsoftware.com/ [11] ILspy, https://sourceforge.net/projects /ilspyportable/ [12].NET Reflector, https://www.red-gate. com/products/dotnet-development/refl ector/ [13] IDA Pro, https://www.hex-rays.com/p roducts/ida/ [14] de4dot, https://github.com/0xd4d/de4 dot
정보보호학회논문지 (2018. 6) 653 < 저자소개 > 임경환 (Kyeonghwan Lim) 학생회원 2015 년 2 월 : 단국대학교컴퓨터학과졸업 2016 년 8 월 : 단국대학교컴퓨터학과석사 2016 년 9 월 ~ 현재 : 단국대학교컴퓨터학과박사과정 < 관심분야 > 모바일보안, 시스템보안 김규식 (Gyoosik Hong) 학생회원 2016 년 2 월 : 단국대학교응용컴퓨터공학과졸업 2018 년 2 월 : 한국대학교컴퓨터학과석사 < 관심분야 > 모바일보안, 시스템보안 심재우 (Jaewoo Shim) 학생회원 2017 년 2 월 : 단국대학교소프트웨어학과졸업 2017 년 3 월 ~ 현재 : 단국대학교컴퓨터학과석사과정 < 관심분야 > 시스템보안, 역공학 조성제 (Seong-je Cho) 종신회원 1989 년 : 서울대학교컴퓨터공학과졸업 1991 년 : 서울대학교컴퓨터공학과공학석사 1996 년 : 서울대학교컴퓨터공학과공학박사 1997 년 3 월 현재 : 단국대학교컴퓨터학과 / 소프트웨어학과교수 < 관심분야 > 시스템보안및악성코드분석, 소프트웨어보증, 시스템소프트웨어, 임베디드소프트웨어등