amadoh4ck@gmail - krnetkrnet 2012 android application -intent 다른component(activity, service...

34
㈜라온시큐리티 ㈜라온시큐리티 2012. 06. 26. 양정규 [email protected]

Upload: others

Post on 26-Apr-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: amadoh4ck@gmail - KRnetKRnet 2012 Android Application -Intent 다른Component(Activity, Service 등)를호출 Component를호출하기위해ACTION, CATEGORY, DATA 등의정보포함

㈜라온시큐리티㈜라온시큐리티

2012. 06. 26. 양정규

[email protected]

Page 2: amadoh4ck@gmail - KRnetKRnet 2012 Android Application -Intent 다른Component(Activity, Service 등)를호출 Component를호출하기위해ACTION, CATEGORY, DATA 등의정보포함

KRnet 2012

목차목차

2

Page 3: amadoh4ck@gmail - KRnetKRnet 2012 Android Application -Intent 다른Component(Activity, Service 등)를호출 Component를호출하기위해ACTION, CATEGORY, DATA 등의정보포함

KRnet 20123

Page 4: amadoh4ck@gmail - KRnetKRnet 2012 Android Application -Intent 다른Component(Activity, Service 등)를호출 Component를호출하기위해ACTION, CATEGORY, DATA 등의정보포함

KRnet 2012

필요성 – 다양한 이유로 인해 Android Application 취약점 분석 필요

Android Application 취약점 진단을 통해 사용자와 개발사모두의 피해를 줄일 수 있습니다. (OS의 취약점과 달리 개발사에게 피해가 크게 전달)

• 좀비 단말(DDoS)• Worm & Virus 배포에 악용

• 피싱 취약

• 개인정보 유출• 위치정보 유출• 사생활 노출

• App Store 검증절차 미흡

• 자체 서명 인증허용

• Smart Phone 사용 증가

• Smart 가전에적용 추세

• 지속적 사용 증가 예상

• 국제전화/SMS/MMS 유발

• 개발사 책임

4

1. 1. 취약점취약점 분석의분석의 필요성필요성

Page 5: amadoh4ck@gmail - KRnetKRnet 2012 Android Application -Intent 다른Component(Activity, Service 등)를호출 Component를호출하기위해ACTION, CATEGORY, DATA 등의정보포함

KRnet 2012

필요성 – Android Application을 통한 피해 사례 증가

5

1. 1. 취약점취약점 분석의분석의 필요성필요성

Page 6: amadoh4ck@gmail - KRnetKRnet 2012 Android Application -Intent 다른Component(Activity, Service 등)를호출 Component를호출하기위해ACTION, CATEGORY, DATA 등의정보포함

KRnet 2012

Android OS 구성

6

2. Android OS & Application2. Android OS & Application

Page 7: amadoh4ck@gmail - KRnetKRnet 2012 Android Application -Intent 다른Component(Activity, Service 등)를호출 Component를호출하기위해ACTION, CATEGORY, DATA 등의정보포함

KRnet 2012

Android OS - Zygote

7

2. Android OS & Application2. Android OS & Application

Page 8: amadoh4ck@gmail - KRnetKRnet 2012 Android Application -Intent 다른Component(Activity, Service 등)를호출 Component를호출하기위해ACTION, CATEGORY, DATA 등의정보포함

KRnet 2012

2. Android OS & Application2. Android OS & Application

Android Application 구성

8

Page 9: amadoh4ck@gmail - KRnetKRnet 2012 Android Application -Intent 다른Component(Activity, Service 등)를호출 Component를호출하기위해ACTION, CATEGORY, DATA 등의정보포함

KRnet 2012

Android Application - Intent

다른 Component(Activity, Service 등)를 호출Component를 호출하기 위해 ACTION, CATEGORY, DATA 등의 정보 포함

9

2. Android OS & Application2. Android OS & Application

Explicit Intent (명시적)호출 대상 Component의 이름이 명시 되어 있는 Intent어떤 Component를 호출해야 할 지 명시 되어 있는 Intent

Implicit Intent (암시적)호출 대상 Component가 정확히 정해지지 않고 특성만 나열되어 있는 IntentComponent의 특성을 알고 있어야 호출 가능

Page 10: amadoh4ck@gmail - KRnetKRnet 2012 Android Application -Intent 다른Component(Activity, Service 등)를호출 Component를호출하기위해ACTION, CATEGORY, DATA 등의정보포함

KRnet 201210

Page 11: amadoh4ck@gmail - KRnetKRnet 2012 Android Application -Intent 다른Component(Activity, Service 등)를호출 Component를호출하기위해ACTION, CATEGORY, DATA 등의정보포함

KRnet 2012

1. 1. 일반일반 취약점취약점

중요정보 처리 미흡

휴대폰 정보 (IMEI, IMSI, Phone Number 등)개인정보/위치정보ID/Password, 계좌번호, SMS, 통화 목록 등 중요정보Application 구동에 필요한 중요 설정 정보, 결제 정보 등

11

중요중요 정보에정보에 대한대한 취급취급//처리처리 미흡미흡

중요정보 평문 저장

•설정 파일, XML 파일 등에 평문 저장

•SQLite Database 파일에평문 저장

•Application Source에 평문 저장

•암호화 저장 필요

중요정보 평문 전송

•ID/Password 정보 등 인증 정보의 평문 전송

•웹 서버와 통신하는 중요정보를 평문으로 전송

•Parameter 위/변조를 통한 다른 취약점 발생

•암호화 통신 필요

중요정보 메모리 덤프

•중요정보에 대해 전역 변수 등에 저장할 경우 암호화 했다 하더라도 메모리 덤프에 취약

•중요 정보의 경우 사용후 바로 메모리에서 제거필요

Page 12: amadoh4ck@gmail - KRnetKRnet 2012 Android Application -Intent 다른Component(Activity, Service 등)를호출 Component를호출하기위해ACTION, CATEGORY, DATA 등의정보포함

KRnet 2012

1. 1. 일반일반 취약점취약점

웹 취약점

12

웹웹 서버와서버와 연동연동 시시 웹웹 취약점취약점

SQL Injection

•웹 서버가 Database에 저장된 데이터를 Query를통해 요청할 때 사용자가입력한 입력 값 중 SQL Query 문자의 특수 문자를 Filtering 하지 않아 발생

•특수 문자 Filtering 수행필요

File Upload/Download

•File Upload: Server 내에서 명령 수행이 가능한Script 파일을 Upload하여 Server 명령을 수행하는 취약점

•File Download: 프로그래머가 의도한 파일이 아닌서버 내의 중요 파일을다운로드 받는 취약점

XSS

•HTML 태그문자를 사용자의 입력 값에서Filtering 하지 않아JavaScript 등을 악용하여세션 탈취 등에 이용하는취약점

•인증을 우회하여 높은 권한 획득 가능

Android Application과 연동 시 보안에 소홀해 지는 경향 발생서버 설정, Web Application 보안 상태 등이 취약한 경우 일반 웹 서버보다 심각SQL Injection, XSS, File Upload/Download, 인증 취약Backup 파일 노출, 관리자 페이지 노출, 결제/DRM 등 다양한 취약점 발생

Page 13: amadoh4ck@gmail - KRnetKRnet 2012 Android Application -Intent 다른Component(Activity, Service 등)를호출 Component를호출하기위해ACTION, CATEGORY, DATA 등의정보포함

KRnet 2012

2. 2. Android Android 기반기반 취약점취약점

Android 기반 주요 취약점

Android OS Android OS 기반의기반의 대표적대표적 취약점들취약점들

Java 역 컴파일

• Java 언어의 특징 상 역컴파일이 가능 분석이나 취약점 찾기 용이

•난독화가 안되어 함수 이름이나 변수 이름이 기능을 유추하기 쉽게 설정된경우 분석이나 취약점 찾기 용이

불필요한 로그 출력

•개발자가 개발 단계에서출력했던 로그 정보를 그대로 방치한 채 패키지를만든 경우 발생

•개발자가 특정 조건을 거짓으로 만들어 로그를 출력하지 못하게 한 경우간단한 수정만으로 로그출력 가능

Buffer Overflow

•Java Code가 아닌 C, C++로 작성된 native code를 사용하기 위해JNI를 사용

•C, C++에는 기본적으로Buffer Overflow 취약점이 존재하며 이 취약점이발생할 경우 Application의 모든 권한 도용 가능

13

Dalvik 또한 Java Virtual Machine Java 역 컴파일 가능디버깅 시 출력했던 로그 그대로 출력특정 Condition으로 로그를 막아 놓은 경우도 출력 가능Native Code의 경우 Buffer Overflow 취약점 존재

Page 14: amadoh4ck@gmail - KRnetKRnet 2012 Android Application -Intent 다른Component(Activity, Service 등)를호출 Component를호출하기위해ACTION, CATEGORY, DATA 등의정보포함

KRnet 2012

2. 2. Android Android 기반기반 취약점취약점

Intent 기반 취약점

Intent Intent 조작을조작을 통한통한 취약점취약점

Broadcast

•Broadcast Receiver를 등록하여 Broadcast Intent를 처리할 때 Intent를 검증하지 않아 취약점 발생

•sendBroadcast

•sendOrderedBroadcast

•sendStickyBroadcast

Service

•악의적인 Service를 구현하고 정상적인 Service가처리해야 할 Intent를 대신 처리하는 경우와Intent를 조작하여 정상적인 Service에 문제 발생

•startService

•bindService

Activity

•악의적인 Activity를 작성하여 정상적인 Activity의Intent 처리를 가로채거나 Intent를 조작하여 비정상적인 Activity가 실행되도록 문제 발생

•startActivity

•startActivityForResult

14

Activity, Service 등에 Data를 전달하기 위해 Intent 사용다른 Application에 기본적으로 Export 되어진 Activity, Service 등의 조작 가능중요 기능에 대해 전달된 Intent에 대한 검증 혹은 인증 필요Intent를 가로채고 수정하므로써 DoS, phishing, 권한 우회 등의 문제 야기 가능

Page 15: amadoh4ck@gmail - KRnetKRnet 2012 Android Application -Intent 다른Component(Activity, Service 등)를호출 Component를호출하기위해ACTION, CATEGORY, DATA 등의정보포함

KRnet 201215

Page 16: amadoh4ck@gmail - KRnetKRnet 2012 Android Application -Intent 다른Component(Activity, Service 등)를호출 Component를호출하기위해ACTION, CATEGORY, DATA 등의정보포함

KRnet 2012

1. Pre1. Pre--RequirementsRequirements

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/

16

Android SDK 설치 : 최신 버전 설치 (디렉터리 이름에 한글 포함 금지)http://developer.android.com/sdk

ADK 설치 : Android Development ToolEclipse 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

Page 17: amadoh4ck@gmail - KRnetKRnet 2012 Android Application -Intent 다른Component(Activity, Service 등)를호출 Component를호출하기위해ACTION, CATEGORY, DATA 등의정보포함

KRnet 2012

22. Static Analysis. Static Analysis

정적 분석 방법

17

APK

DEX

Disassemble Decompile

Dedexer smali undx

jar

Disassemble Decompile

Ida proJava

DecompilerJava

DecompilerjarAnalyzer Jreverse PRO

Manifest

dex2jar

apktool

Page 18: amadoh4ck@gmail - KRnetKRnet 2012 Android Application -Intent 다른Component(Activity, Service 등)를호출 Component를호출하기위해ACTION, CATEGORY, DATA 등의정보포함

KRnet 2012

22. . Static AnalysisStatic Analysis

smali/baksmali - Disassemble

18

ODEX : Optimized DEX file – dalvik machine 에서 하드웨어에 최적화된 DEX file로 speed 향상을 위해 사용. Unsafe instruction 을 사용하여 빠른 실행 속도를 가지나 dalvik 가상 머신을 crash 시킬 수 있으므로 사용에 주의해야 함apk 파일과 odex 파일이 존재할 경우 사용Smali : assemblerBaksmali : 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 사용

Page 19: amadoh4ck@gmail - KRnetKRnet 2012 Android Application -Intent 다른Component(Activity, Service 등)를호출 Component를호출하기위해ACTION, CATEGORY, DATA 등의정보포함

KRnet 2012

22. . Static AnalysisStatic Analysis

apktool - Disassemble

19

apk 파일의 Decoding 및 Building을 돕는 도구Debugging이나 reverse engineering을 위해 사용

다운로드 경로http://code.google.com/p/android-apktool/debug : http://code.google.com/p/android-apktool/wiki/SmaliDebugging

사용법다운로드 경로에서 apktool 다운로드 & installapk 디코딩 실행 (out 폴더 생성 후)

apktool d {apkname.apk} outout 폴더의 source file 과 resource file 수정apk 빌드 실행

apktool b –d outout/dist/apkname.apk 생성Jarsigner나 sign.jar 를 이용하여 apk Signning 수행

Page 20: amadoh4ck@gmail - KRnetKRnet 2012 Android Application -Intent 다른Component(Activity, Service 등)를호출 Component를호출하기위해ACTION, CATEGORY, DATA 등의정보포함

KRnet 2012

jd-gui - Decompile

20

dex2jar - Decompile

dex 파일을 jar 파일로 변환하는 도구Dex2jar.jar 파일과 함께 dex2jar batch / shell script 제공간단한 사용 가능하지만 코드 손실이 존재

dex2jar {classes.dex}undx에 비해 최근에도 업데이트가 이루어지고 있음

22. . Static AnalysisStatic Analysis

다운로드 경로 : http://code.google.com/p/dex2jar/

class파일아니 jar 파일을 java source로 Decompile jd의 GUI 버전Jad와 병행 사용 – http://www.varaneckas.com/jad/

다운로드 경로 : http://java.decompiler.free.fr/?q=jdgui

Page 21: amadoh4ck@gmail - KRnetKRnet 2012 Android Application -Intent 다른Component(Activity, Service 등)를호출 Component를호출하기위해ACTION, CATEGORY, DATA 등의정보포함

KRnet 2012

3. 3. Dynamic AnalysisDynamic Analysis

21

Log Monitoring (LogCat)

Android 개발자들의 디버깅을 지원하기 위해 제공되는 개발 도구 진단에 사용

개발단계에서 사용되거나 프로그램 오류 시 발생하는 각종 Log 출력 가능SDK를 설치하면서 선택하여 함께 설치 가능

Page 22: amadoh4ck@gmail - KRnetKRnet 2012 Android Application -Intent 다른Component(Activity, Service 등)를호출 Component를호출하기위해ACTION, CATEGORY, DATA 등의정보포함

KRnet 2012

3. 3. Dynamic AnalysisDynamic Analysis

22

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-busyboxApplication을 실행하기 전 find와 touch 사용

#find /data/data/{package name} > old.txt#touch /data/timestamp

Application을 실행한 후 find 사용#find /data/data/{package name} –newer /data/timestamp

Page 23: amadoh4ck@gmail - KRnetKRnet 2012 Android Application -Intent 다른Component(Activity, Service 등)를호출 Component를호출하기위해ACTION, CATEGORY, DATA 등의정보포함

KRnet 2012

3. 3. Dynamic AnalysisDynamic Analysis

23

Network Monitoring

http-proxy 옵션proxy 주소및 port 지정

emulator에서 웹 서핑시proxy에 intercept

Ad-hoc, Wifi & ARP Spoofing, Wireshark 단말 설치, Proxy 사용 등 방법 이용

Page 24: amadoh4ck@gmail - KRnetKRnet 2012 Android Application -Intent 다른Component(Activity, Service 등)를호출 Component를호출하기위해ACTION, CATEGORY, DATA 등의정보포함

KRnet 2012

3. 3. Dynamic AnalysisDynamic Analysis

24

Memory Dump

DDMS heap dump hprof-conv eclipse MAT plugin

Page 25: amadoh4ck@gmail - KRnetKRnet 2012 Android Application -Intent 다른Component(Activity, Service 등)를호출 Component를호출하기위해ACTION, CATEGORY, DATA 등의정보포함

KRnet 2012

3. 3. Dynamic AnalysisDynamic Analysis

25

Intent Sniffing / Fuzzing

Intent Sniffing Getting Intent Info Intent Fuzzing

Page 26: amadoh4ck@gmail - KRnetKRnet 2012 Android Application -Intent 다른Component(Activity, Service 등)를호출 Component를호출하기위해ACTION, CATEGORY, DATA 등의정보포함

KRnet 2012

3. 3. Dynamic AnalysisDynamic Analysis

26

Debugging

필요 도구 : Android SDK 환경, apktool, apk-sign, netbeans

APK Tools를 이용하여 디버깅 모드(-d 옵션)로 Decodingapktool.bat d –d {apkname.apk} out

APK Tools를 이용하여 디버깅 모드로 Decoding한 것을 디버깅 모드로 다시 Build(동적 디버깅을 위해 필요)apktool.bat b –d outout 폴더 밑에 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 설정

Page 27: amadoh4ck@gmail - KRnetKRnet 2012 Android Application -Intent 다른Component(Activity, Service 등)를호출 Component를호출하기위해ACTION, CATEGORY, DATA 등의정보포함

KRnet 2012

3. 3. Dynamic AnalysisDynamic Analysis

27

Debugging

Page 28: amadoh4ck@gmail - KRnetKRnet 2012 Android Application -Intent 다른Component(Activity, Service 등)를호출 Component를호출하기위해ACTION, CATEGORY, DATA 등의정보포함

KRnet 2012

44. Auto Auditing. Auto Auditing

Taintdroid – 4 level tracking을 통한 Monitoring

28

- Message-level tracking : IPC를 통한 프로세스간 메시지 통신을 추적

- Variable-level tracking : 지역변수, 함수 Argument, Class, 배열 등을 통한 정보 전달을 추적

- Method-level tracking : Native Method (JNI) 를 통한 정보 전달을 추적

- File-level tracking : File System에 저장되는 정보를 추적

Taintdroid tracking 방법

Page 29: amadoh4ck@gmail - KRnetKRnet 2012 Android Application -Intent 다른Component(Activity, Service 등)를호출 Component를호출하기위해ACTION, CATEGORY, DATA 등의정보포함

KRnet 2012

44. Auto Auditing. Auto Auditing

자동 점검 도구 필요

29

자동 점검 도구를 이용한 표준 점검 항목 점검 및 표준 대응체제 구축 필요(전문 연구 인력을 통한 자동 점검 도구 연구 및 개발 필요)

• 수동 점검의 경우 점검 기준이모두 다름

• 표준 점검 항목필요

• PC와 마찬가지로 악성행위를하는 Malware 가꾸준히 증가

• 전문 점검 인력부족/ 연구 부족

• Application Source Code 양방대

• Android Application은하루가 다르게급속히 증가

• 버전 별 점검필요

• 악성 / 취약Application에대한 표준 대응체제 필요

다양한 요구로 인해 수동 점검만으로는 불가능 자동 점검 도구 필요

Page 30: amadoh4ck@gmail - KRnetKRnet 2012 Android Application -Intent 다른Component(Activity, Service 등)를호출 Component를호출하기위해ACTION, CATEGORY, DATA 등의정보포함

KRnet 201230

Page 31: amadoh4ck@gmail - KRnetKRnet 2012 Android Application -Intent 다른Component(Activity, Service 등)를호출 Component를호출하기위해ACTION, CATEGORY, DATA 등의정보포함

KRnet 2012

1. 1. 취약점취약점 별별 대응대응 방안방안

중요정보 처리 미흡 대응 방안

중요정보를 가지고 통신할 경우 SSL 과 같은 보안 통신 채널을 사용SSL의 경우에도 자체 서명이 아닌 서명기관을 확인하도록 조치

중요정보를 파일, Database에 저장할 경우 암호화하여 저장

웹 취약점 대응 방안

Android Application와 통신하는 웹 서버와 Database 서버의 경우 URL이 노출될염려가 적다고 판단하여 보안을 소홀히 하는 경우가 있으나 Android Application을Disassemble, Decompile하면 URL등의 정보는 쉽게 획득 가능

SQL Injection, XSS, File Upload/Download 등의 취약점각 언어별로 문자열 Filtering을 통해 취약점을 소스레벨에서 수정

Backup File 노출, Admin Page 노출, Directory Indexing 등 취약점웹 서버의 설정을 수정하거나 불필요한 페이지를 제거하는 등의 조치를 취하

여 취약점을 수정

31

Page 32: amadoh4ck@gmail - KRnetKRnet 2012 Android Application -Intent 다른Component(Activity, Service 등)를호출 Component를호출하기위해ACTION, CATEGORY, DATA 등의정보포함

KRnet 2012

1. 1. 취약점취약점 별별 대응대응 방안방안

Android 기반 주요 취약점 대응 방안

Java 역 컴파일 난독화 수행 (예: ADT 8.0.1 부터 지원하는 proguard 적용)http://developer.android.com/guide/developing/tools/proguard.html

불필요한 로그 출력 Release 버전의 경우 log class 호출 자체를 제거

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

Buffer Overflow 복사할 문자열의 크기를 버퍼 크기와 일치하는 지 검사

Page 33: amadoh4ck@gmail - KRnetKRnet 2012 Android Application -Intent 다른Component(Activity, Service 등)를호출 Component를호출하기위해ACTION, CATEGORY, DATA 등의정보포함

KRnet 2012

2. 2. 결결론론

Android Application 점검 방안

33

Android Application의 다양한 취약점으로 인해 각종 중요정보, 금전적 손해 발생, 악성행위에 악용, Zombie Phone으로 DDoS에 사용 등 심각한 피해 발생

잘못된 Application 설계보안에 위배되는 Source CodeNative Code의 오류불필요한 권한의 남용기타 설계/개발 단계에서의 보안 오류

개발단계부터 보안Secure Coding Guide 마련자동 Static Analysis 점검 필요Source Code Auditing 필요

Package 전체적 설계 오류Storage 사용상 보안 오류통신상 보안 오류Android OS 특성에 대한 잘못된 인지

로 인해 발생하는 보안 오류

자동 점검 도구에 의한 1차 점검객관화/정형화된 Check List 필요Android 전문 진단 인력을 통한 2차

점검보안에 대한 지속적인 관심 필요

Page 34: amadoh4ck@gmail - KRnetKRnet 2012 Android Application -Intent 다른Component(Activity, Service 등)를호출 Component를호출하기위해ACTION, CATEGORY, DATA 등의정보포함

KRnet 2012

감사합니다.

Auditing Android Applications

Q & A

34