2012. 06. 26. 양정규 amadoh4ck@gmail.com 라온시큐리티
목차 2
3
1. 취약점분석의필요성 필요성 다양한이유로인해 Android Application 취약점분석필요 Smart Phone 사용증가 Smart 가전에적용추세 지속적사용증가예상 App Store 검증절차미흡 자체서명인증허용 개인정보유출 위치정보유출 사생활노출 좀비단말 (DDoS) Worm & Virus 배포에악용 피싱취약 국제전화 /SMS/MMS 유발 개발사책임 Android Application 취약점진단을통해사용자와개발사모두의피해를줄일수있습니다. (OS 의취약점과달리개발사에게피해가크게전달 ) 4
1. 취약점분석의필요성 필요성 Android Application 을통한피해사례증가 5
2. Android OS & Application Android OS 구성 6
2. Android OS & Application Android OS - Zygote 7
2. Android OS & Application Android Application 구성 8
2. Android OS & Application Android Application - Intent 다른 Component(Activity, Service 등 ) 를호출 Component 를호출하기위해 ACTION, CATEGORY, DATA 등의정보포함 Explicit Intent ( 명시적 ) 호출대상 Component 의이름이명시되어있는 Intent 어떤 Component 를호출해야할지명시되어있는 Intent Implicit Intent ( 암시적 ) 호출대상 Component 가정확히정해지지않고특성만나열되어있는 Intent Component 의특성을알고있어야호출가능 9
10
1. 일반취약점 중요정보처리미흡 휴대폰정보 (IMEI, IMSI, Phone Number 등 ) 개인정보 / 위치정보 ID/Password, 계좌번호, SMS, 통화목록등중요정보 Application 구동에필요한중요설정정보, 결제정보등 중요정보에대한취급 / 처리미흡 중요정보평문저장 중요정보평문전송 중요정보메모리덤프 설정파일, XML 파일등에평문저장 SQLite Database 파일에평문저장 Application Source 에평문저장 암호화저장필요 ID/Password 정보등인증정보의평문전송 웹서버와통신하는중요정보를평문으로전송 Parameter 위 / 변조를통한다른취약점발생 암호화통신필요 11 중요정보에대해전역변수등에저장할경우암호화했다하더라도메모리덤프에취약 중요정보의경우사용후바로메모리에서제거필요
1. 일반 취약점 웹 취약점 Android Application과 연동 시 보안에 소홀해 지는 경향 발생 서버 설정, Web Application 보안 상태 등이 취약한 경우 일반 웹 서버보다 심각 SQL Injection, XSS, File Upload/Download, 인증 취약 Backup 파일 노출, 관리자 페이지 노출, 결제/DRM 등 다양한 취약점 발생 웹 서버와 연동 시 웹 취약점 SQL Injection File Upload/Download XSS 웹 서버가 Database에 저 장된 데이터를 Query를 통해 요청할 때 사용자가 입력한 입력 값 중 SQL Query 문자의 특수 문자 를 Filtering 하지 않아 발 생 File Upload: Server 내에 서 명령 수행이 가능한 Script 파일을 Upload하 여 Server 명령을 수행하 는 취약점 HTML 태그문자를 사용 자의 입력 값에서 Filtering 하지 않아 JavaScript 등을 악용하여 세션 탈취 등에 이용하는 취약점 특수 문자 Filtering 수행 필요 File Download: 프로그래 머가 의도한 파일이 아닌 서버 내의 중요 파일을 다운로드 받는 취약점 12 인증을 우회하여 높은 권 한 획득 가능
2. Android 기반 취약점 Android 기반 주요 취약점 Dalvik 또한 Java Virtual Machine Java 역 컴파일 가능 디버깅 시 출력했던 로그 그대로 출력 특정 Condition으로 로그를 막아 놓은 경우도 출력 가능 Native Code의 경우 Buffer Overflow 취약점 존재 Android OS 기반의 대표적 취약점들 Java 역 컴파일 불필요한 로그 출력 Java 언어의 특징 상 역 컴파일이 가능 분석이 나 취약점 찾기 용이 개발자가 개발 단계에서 출력했던 로그 정보를 그 대로 방치한 채 패키지를 만든 경우 발생 Java Code가 아닌 C, C++로 작성된 native code를 사용하기 위해 JNI를 사용 개발자가 특정 조건을 거 짓으로 만들어 로그를 출 력하지 못하게 한 경우 간단한 수정만으로 로그 출력 가능 C, C++에는 기본적으로 Buffer Overflow 취약점 이 존재하며 이 취약점이 발생할 경우 Application 의 모든 권한 도용 가능 난독화가 안되어 함수 이 름이나 변수 이름이 기능 을 유추하기 쉽게 설정된 경우 분석이나 취약점 찾 기 용이 13 Buffer Overflow
2. Android 기반 취약점 Intent 기반 취약점 Activity, Service 등에 Data를 전달하기 위해 Intent 사용 다른 Application에 기본적으로 Export 되어진 Activity, Service 등의 조작 가능 중요 기능에 대해 전달된 Intent에 대한 검증 혹은 인증 필요 Intent를 가로채고 수정하므로써 DoS, phishing, 권한 우회 등의 문제 야기 가능 Intent 조작을 통한 취약점 Broadcast Service Activity Broadcast Receiver를 등 록하여 Broadcast Intent 를 처리할 때 Intent를 검 증하지 않아 취약점 발생 sendbroadcast 악의적인 Service를 구현 하고 정상적인 Service가 처리해야 할 Intent를 대 신 처리하는 경우와 Intent를 조작하여 정상적 인 Service에 문제 발생 악의적인 Activity를 작성 하여 정상적인 Activity의 Intent 처리를 가로채거 나 Intent를 조작하여 비 정상적인 Activity가 실행 되도록 문제 발생 sendorderedbroadcast startservice startactivity sendstickybroadcast bindservice startactivityforresult 14
15
1. Pre-Requirements Android 개발환경설치 Emulator 및각종기본 Tool 을위해필요 Java SDK 설치 : JRE 가아닌 JDK 설치 http://java.sun.com/javase/downloads/index.jsp Eclipse 설치 : Eclipse IDE for Java Developers 버전설치 http://www.eclipse.org/downloads/ Android SDK 설치 : 최신버전설치 ( 디렉터리이름에한글포함금지 ) http://developer.android.com/sdk ADK 설치 : Android Development Tool Eclipse Help/Software Update : https://dl-ssl.google.com/android/eclipse/ 파일다운로드 : http://developer.android.com/sdk/adt_download.html Eclipse Android SDK 경로설정 SDK Manager 를통해 Android 버전별에뮬레이터및 SDK 선택 Download 16
2. Static Analysis 정적분석방법 APK DEX Manifest Disassemble Decompile Dedexer smali undx dex2jar apktool jar Disassemble Decompile Ida pro jaranalyzer Jreverse PRO Java Decompiler 17
2. Static Analysis smali/baksmali - Disassemble ODEX : Optimized DEX file dalvik machine 에서하드웨어에최적화된 DEX file 로 speed 향상을위해사용. Unsafe instruction 을사용하여빠른실행속도를가지나 dalvik 가상머신을 crash 시킬수있으므로사용에주의해야함 apk 파일과 odex 파일이존재할경우사용 Smali : assembler Baksmali : disassembler 다운로드경로 : http://code.google.com/p/smali/ 사용법 java -jar baksmali.jar -d system/framework -x Calculator.odex(odex 파일경로 ) baksmali -x Calculator.odex java -jar smali.jar -o classes.dex out Out of memory 에러발생시 Java 옵션에 -Xmx512m 사용 18
2. Static Analysis apktool - Disassemble apk 파일의 Decoding 및 Building 을돕는도구 Debugging 이나 reverse engineering 을위해사용 다운로드경로 http://code.google.com/p/android-apktool/ debug : http://code.google.com/p/android-apktool/wiki/smalidebugging 사용법 다운로드경로에서 apktool 다운로드 & install apk 디코딩실행 (out 폴더생성후 ) apktool d {apkname.apk} out out 폴더의 source file 과 resource file 수정 apk 빌드실행 apktool b d out out/dist/apkname.apk 생성 Jarsigner 나 sign.jar 를이용하여 apk Signning 수행 19
2. Static Analysis dex2jar - Decompile dex 파일을 jar 파일로변환하는도구 Dex2jar.jar 파일과함께 dex2jar batch / shell script 제공 간단한사용가능하지만코드손실이존재 dex2jar {classes.dex} undx 에비해최근에도업데이트가이루어지고있음 다운로드경로 : http://code.google.com/p/dex2jar/ jd-gui - Decompile class 파일아니 jar 파일을 java source 로 Decompile jd 의 GUI 버전 Jad 와병행사용 http://www.varaneckas.com/jad/ 다운로드경로 : http://java.decompiler.free.fr/?q=jdgui 20
3. Dynamic Analysis Log Monitoring (LogCat) Android 개발자들의디버깅을지원하기위해제공되는개발도구 진단에사용 개발단계에서사용되거나프로그램오류시발생하는각종 Log 출력가능 SDK 를설치하면서선택하여함께설치가능 21
3. Dynamic Analysis File System Monitoring Android Application 이실행중생성 / 변경 / 삭제하는파일이있는지를모니터링 adb shell 을통해가능 Busybox 사용하여모니터링 Application 사용경로의파일들의변화비교 (App 실행전 / 후 ) /data/data/{package name} Busybox 설치후모니터링 busybox 설치 : http://benno.id.au/blog/2007/11/14/android-busybox Application 을실행하기전 find 와 touch 사용 #find /data/data/{package name} > old.txt #touch /data/timestamp Application 을실행한후 find 사용 #find /data/data/{package name} newer /data/timestamp 22
3. Dynamic Analysis Network Monitoring Ad-hoc, Wifi & ARP Spoofing, Wireshark 단말설치, Proxy 사용등방법이용 http-proxy 옵션 proxy 주소및 port 지정 emulator 에서웹서핑시 proxy 에 intercept 23
3. Dynamic Analysis Memory Dump DDMS heap dump hprof-conv eclipse MAT plugin 24
3. Dynamic Analysis Intent Sniffing / Fuzzing Intent Sniffing Getting Intent Info Intent Fuzzing 25
3. Dynamic Analysis Debugging 필요도구 : Android SDK 환경, apktool, apk-sign, netbeans APK Tools 를이용하여디버깅모드 (-d 옵션 ) 로 Decoding apktool.bat d d {apkname.apk} out APK Tools 를이용하여디버깅모드로 Decoding 한것을디버깅모드로다시 Build ( 동적디버깅을위해필요 ) apktool.bat b d out out 폴더밑에 dist 폴더생성되고그안에새로운 apk 파일생성하고 Sign Netbeans 에서프로젝트추가 [New Project] -> [Java] -> [Java Project with Existing Source] 선택 프로젝트추가후 Android 버전에맞게 android.jar 파일추가 android.jar 는 Android SDK 설치경로에서찾을수있음 DDMS 에서디버깅할 Application 을선택하여열린 Port 번호확인 포트확인후 Netbeans 에서원격디버깅세팅 [Debug] -> [Attach Debugger] 선택 Java Debugger, localhost (127.0.0.1), Port 번호설정 DDMS 에서디버깅대상에초록버그모양표시여부확인 Netbeans 에서 Ctrl + Shift + F8 을이용하여 line break pointer 설정 26
3. Dynamic Analysis Debugging 27
4. Auto Auditing Taintdroid 4 level tracking 을통한 Monitoring Taintdroid tracking 방법 - Message-level tracking : IPC를통한프로세스간메시지통신을추적 - Variable-level tracking : 지역변수, 함수 Argument, Class, 배열등을통한정보전달을추적 - Method-level tracking : Native Method (JNI) 를통한정보전달을추적 - File-level tracking : File System에저장되는정보를추적 28
4. Auto Auditing 자동점검도구필요 다양한요구로인해수동점검만으로는불가능 자동점검도구필요 Android Application 은하루가다르게급속히증가 버전별점검필요 전문점검인력부족 / 연구부족 Application Source Code 양방대 PC 와마찬가지로악성행위를하는 Malware 가꾸준히증가 수동점검의경우점검기준이모두다름 표준점검항목필요 악성 / 취약 Application 에대한표준대응체제필요 자동점검도구를이용한표준점검항목점검및표준대응체제구축필요 ( 전문연구인력을통한자동점검도구연구및개발필요 ) 29
30
1. 취약점별대응방안 중요정보처리미흡대응방안 중요정보를파일, Database 에저장할경우암호화하여저장 중요정보를가지고통신할경우 SSL 과같은보안통신채널을사용 SSL 의경우에도자체서명이아닌서명기관을확인하도록조치 웹취약점대응방안 Android Application 와통신하는웹서버와 Database 서버의경우 URL 이노출될염려가적다고판단하여보안을소홀히하는경우가있으나 Android Application 을 Disassemble, Decompile 하면 URL 등의정보는쉽게획득가능 SQL Injection, XSS, File Upload/Download 등의취약점 각언어별로문자열 Filtering 을통해취약점을소스레벨에서수정 Backup File 노출, Admin Page 노출, Directory Indexing 등취약점 웹서버의설정을수정하거나불필요한페이지를제거하는등의조치를취하여취약점을수정 31
1. 취약점별대응방안 Android 기반주요취약점대응방안 불필요한로그출력 Release 버전의경우 log class 호출자체를제거 Buffer Overflow 복사할문자열의크기를버퍼크기와일치하는지검사 Java 역컴파일 난독화수행 ( 예 : ADT 8.0.1 부터지원하는 proguard 적용 ) http://developer.android.com/guide/developing/tools/proguard.html Intent 기반취약점대응방안 AndroidManifest.xml 파일의 permission 필드의 android:protectionlevel 을 Signature 혹은 SignatureOrSystem 레벨로설정 같은개발자가 Signing 한 Application 과 System Application 만권한사용가능 AndroidManifest.xml 파일의 activity, service, receiver 필드에서 android:exported 를 false 로설정 다른 Application 이해당 activity, service, receiver 를호출할수없음 중요한기능을수행하는 Intent Data 에 hash, 암호화등을수행하여인증 32
2. 결론 Android Application 점검방안 Android Application 의다양한취약점으로인해각종중요정보, 금전적손해발생, 악성행위에악용, Zombie Phone 으로 DDoS 에사용등심각한피해발생 잘못된 Application 설계 보안에위배되는 Source Code Native Code 의오류 불필요한권한의남용 기타설계 / 개발단계에서의보안오류 개발단계부터보안 Secure Coding Guide 마련 자동 Static Analysis 점검필요 Source Code Auditing 필요 Package 전체적설계오류 Storage 사용상보안오류 통신상보안오류 Android OS 특성에대한잘못된인지로인해발생하는보안오류 자동점검도구에의한 1 차점검 객관화 / 정형화된 Check List 필요 Android 전문진단인력을통한 2 차점검 보안에대한지속적인관심필요 33
감사합니다. Auditing Android Applications Q & A 34