SlideShare una empresa de Scribd logo
1 de 47
Descargar para leer sin conexión
01000011100010101000110010100101000111000000000011110011000000111110000000011101110111000111000110111001110001100100100001
00100010010000010000111000101010001100101001010001110000000000111100110000001111100000000111011101110001110001101110011100
0100001110001010100011
안드로이드 앱 개발 보안 팁
| 무료공개자료 |
01000011100010101000110010100101000111000000000011110011000000111110000000011101110111000111000110111001110001100100100001
00100010010000010000111000101010001100101001010001110000000000111100110000001111100000000111011101110001110001101110011100
0100001110001010100011
| 무료공개자료 |
01000011100010101000110010100101000111000000000011110011000000111110000000011101110111000111000110111001110001100100100001
00100010010000010000111000101010001100101001010001110000000000111100110000001111100000000111011101110001110001101110011100
0100001110001010100011
Contents
I. 문서의 개요
II. App Component 노출
III. WebView
IV. 정보유출
01000011100010101000110010100101000111000000000011110011000000111110000000011101110111000111000110111001110001100100100001
00100010010000010000111000101010001100101001010001110000000000111100110000001111100000000111011101110001110001101110011100
0100001110001010100011
 본 문서는 JSSEC의 가이드와 타이거팀의 모의해킹 경험등을 토대로 작성되었음
1. 작성개요 안드로이드 앱 개발 보안 팁
 본 문서는 JSSEC의 가이드와 타이거팀의 모의해킹 경험등을 토대로 작성되었음
– 본 문서는 모바일앱 개발시 가장 기초적이고 이해하기 쉬운 주제만 다루었음
타이거팀의 모의해킹
경험과 노하우
Android Application Secure Design /Android Application Secure Design /
Secure Coding Guidebook by JSSEC
http://www.jssec.org/dl/android_securecoding_en_20140701.pdf
본 문서에서 다루는 주요 내용은 아래와 같음
2. 대상에 대한 전제 안드로이드 앱 개발 보안 팁
• 본 문서에서 다루는 주요 내용은 아래와 같음
루팅되지 않은 정상폰(서비스)에서 발생가능한 내용 기반
악의적인 앱이 정상앱에 가할 수 있는 공격들
WebView의 잘못된 사용으로 인한 피해
퍼미션 설정상의 실수 등으로 인한 피해 등
앱 개발시 이러한 사소한 실수가 어떤 문제를 야기할 수 있는가?
A C t W bVi 등을 다룰때 잘못된 코딩 문제점을 도출하였음
3. 3대 취약점 안드로이드 앱 개발 보안 팁
• App Component, WebView 등을 다룰때 잘못된 코딩 문제점을 도출하였음
App Component 노출
1. 의도치 않는 Activity 노출
2. 다른 앱(APP)에서 Local Server 접근
3 의도치 않는 C t t P id 노출3. 의도치 않는 Content Provider 노출
WebView
4. File Scheme
5. addJavascriptInterface
6. 중요정보 Broadcasting
정보 유출 7. 중요정보 Logging
8. SD 카드에 중요 정보 저장
안드로이드 앱 개발 보안 팁
App Component
1. 의도치 않는 Activity 노출
2. 다른 앱(APP)에서 Local Server 접근
노출
2. 다른 앱(APP)에서 Local Server 접근
3. 의도치 않는 Content Provider 노출
A d id A 은 크게 4가지 컴포넌트를 가지며 I t t를 통해 통신을 수행함
2. App Component 노출 안드로이드 앱 개발 보안 팁
• Android App은 크게 4가지 컴포넌트를 가지며 Intent를 통해 통신을 수행함
Android App의 4대 구성요소
Activity
Content
Provider
ServiceIntent
Broadcast
1 의도치 않는 A ti it 노출
2. App Component 노출 안드로이드 앱 개발 보안 팁
• 1. 의도치 않는 Activity 노출
– 3rd Party Twitter Client에서 발생한 보안 취약점
– 글 등록화면 (Activity)이 export 되어 있어 intent 메시지를 통해서 등록 가능
1. 정상적인 사용자가 로 file://sdcard/.../PrivatePhoto.jpg file://mal/.../taehikim.jpg
컬에 저장된 파일을
2. APP을 통해서
3 트위터에 업로드할 수
3rd 3rd
3. 트위터에 업로드할 수
있는 기능
1. 악성앱이 임의의 파일
을 만들어서
2. APP을 통해서
Intent Message Intent Message
3
twitter
client
3
twitter
client
3. 트위터에 업로드할 수
있는 기능
twitter 자
동 로그인
1 의도치 않는 A ti it 노출
2. App Component 노출 안드로이드 앱 개발 보안 팁
• 1. 의도치 않는 Activity 노출
– AnroidManifest.xml 에서 export 설정 해결방안
명시적으로 private로 선언하라.
(android : exported=“false”)
AnroidManifest.xml
file://mal/.../taehikim.jpg
…
<activity
android:name=“.PicUploadActivity”
…
android:exported=“false” />
…
3rd
twitte
r
clientclient
1 의도치 않는 A ti it 노출
2. App Component 노출 안드로이드 앱 개발 보안 팁
• 1. 의도치 않는 Activity 노출
– 소스코드에서 호출자 체크 코드로 해결방안
위처럼 Intent 호출 패키지명을 체크하는 방식도 있으나
“exported = false”를 사용하는 것이 더욱 바람직하다.
2 비정상 방법으로 연동 S 접근
2. App Component 노출 안드로이드 앱 개발 보안 팁
• 2. 비정상 방법으로 연동 Server 접근
– 하이브리드(Hybrid) 형태로 앱을 개발할 경우 연동하는 서버에도 보안설정이 반
드시 필요함
모바일앱이 로컬 또는 별도의 서버와 통신을 통해 정보들을 주고 받는 경우,
모바일앱이 하이브리드(Hybrid) 방식인 경우
바일앱이 컬 는 별 의 서버와 통신을 통해 정 들을 주 받는 경우,
서버측에 데이터 관리 및 단말기와 연동되는 인터페이스 관리가 매우 중요함
서버측 연결 정보 및 경로 정보는 모바일앱 분석을 통해서 쉽게 획득이 가능함서버측 연결 정보 및 경로 정보는 모바일앱 분석을 통해서 쉽게 획득이 가능함
2 비정상 방법으로 연동 S 접근
2. App Component 노출 안드로이드 앱 개발 보안 팁
• 2. 비정상 방법으로 연동 Server 접근
– 기본적인 보안 설정 뿐만 아니라 시큐어코딩도 반드시 이루어져야 함
서버측 보안설정 미흡으로 인한 컨텐츠 노출
문서, 음원, 사진 등의 파일들을 다룰때 디렉토리
인덱싱 등과 같은 서버측 보안 설정 미흡으로 인
한 정보 유출 가능성이 존재함한 정보 유출 가능성이 존재함
임의 접근을 통해서 컨텐츠를 불법적으로 획득
가능함
서버측 취약점으로 인해 악의적인 컨텐츠를 업
로드하고 배포할 경우 심각한 피해 발생 가능
2 비정상 방법으로 연동 S 접근
2. App Component 노출 안드로이드 앱 개발 보안 팁
• 2. 비정상 방법으로 연동 Server 접근
– 소스 코드 분석을 통해서 Web Interface 발견
– 직접 호출로 통해서 접근 가능성 및 취약성 여부 체크
경로 직접 호출
Sql Injection 취약점 발견 :Sql Injection 취약점 발견 :
http://192.168.0.80:6543/HackMePal/service/servicepath/userlist?userid=admin
2 비정상 방법으로 연동 S 접근
2. App Component 노출 안드로이드 앱 개발 보안 팁
• 2. 비정상 방법으로 연동 Server 접근
– SQL Injection 공격이 가능하여 데이터베이스 정보 유출 성공
해당 시스템은
거의 대부분의
URL에서 가능함
2 비정상 방법으로 연동 S 접근
2. App Component 노출 안드로이드 앱 개발 보안 팁
• 2. 비정상 방법으로 연동 Server 접근
2 비정상 방법으로 연동 S 접근
2. App Component 노출 안드로이드 앱 개발 보안 팁
• 2. 비정상 방법으로 연동 Server 접근
– 비정상 접근 시도 문제 해결 방안
인증과 권한에 대한 체크 로직 반드시 구현
불필요한 접근은 IP 레벨에서 차단
서버측 인터페이스에 대해서도 모든 유효성 검증 코드 구현
(웹 프로그램 개발보안 가이드라인 준수)(웹 프로그램 개발보안 가이드라인 준수)
제공되는 다양한 컨텐츠에 대한 보호 대책 고민 (암호화, DRM 등)제 되 다 에 대 대책 화 등
3 의도치 않는 C t t P id 노출
2. App Component 노출 안드로이드 앱 개발 보안 팁
• 3. 의도치 않는 Content Provider 노출
– Content Provider는 하나 이상의 APP에서 File 또는 DB 등을 공유하기 위해서
사용함
– 여러앱이 데이터를 조회하거나 변경할 수 있음
취약한 APP취약한 APP
Content Provider
A APP
DATA 읽기 및
변조가 가능함
DATA
B APP
3 의도치 않는 C t t P id 노출
2. App Component 노출 안드로이드 앱 개발 보안 팁
• 3. 의도치 않는 Content Provider 노출
– 악의적인 앱 역시 Content Provider를 통해서 정보에 대한 접근이 가능함
취약한 APP A APPDATA 읽기 및취약한 APP
Content Provider
A APPDATA 읽기 및
변조가 가능함
B APP
DATA
Malicious
APP
3 의도치 않는 C t t P id 노출
2. App Component 노출 안드로이드 앱 개발 보안 팁
• 3. 의도치 않는 Content Provider 노출
– 메모, 사진들, TODO 리스트, 녹음 메모 등 DB나 파일등에 저장되는 모든 데이터
가 공격대상
3 의도치 않는 C t t P id 노출
2. App Component 노출 안드로이드 앱 개발 보안 팁
• 3. 의도치 않는 Content Provider 노출
3 의도치 않는 C t t P id 노출
2. App Component 노출 안드로이드 앱 개발 보안 팁
• 3. 의도치 않는 Content Provider 노출
– Content Provider 사용시 고려사항들
데이터를 공유하고자 하는 APP의 범위를 지정하라.1
• 불특정하고 많은 수의 앱
• 같은 signature를 가진 앱으로 한정하기
• 특정 퍼미션을 가진 앱으로 한정하기
데이터의 내용2
• 다른 앱과 공유하고자 하는 내용은 무엇인가?다 앱과 공유하 자 하 내용 무엇 가
공유를 통해서 얻고자 하는 것이 무엇인가3
• 단순한 데이터 공유인가?
• 데이터 추가, 편집, 삭제등을 허용하고자 하는가?
3 의도치 않는 C t t P id 노출
2. App Component 노출 안드로이드 앱 개발 보안 팁
• 3. 의도치 않는 Content Provider 노출
– Content Provider 사용시 고려사항들
Android 4.2(API17) 부터 Content Provider는 명시적으로 해당
불특정하고 많은 수의 앱
( ) 부터 는 명시적 해당
속성을 설정하지 않는다면 private으로 처리됨
따라서 android:minSdkVersion 값 체크가 필요하고 android:targetSdkVersion 값따라서, android:minSdkVersion 값 체크가 필요하고 android:targetSdkVersion 값
이 17이상일 경우에는 아래와 같이 설정해야 함
3 의도치 않는 C t t P id 노출
2. App Component 노출 안드로이드 앱 개발 보안 팁
• 3. 의도치 않는 Content Provider 노출
– Content Provider 사용시 고려사항들
같은 Signature를 가진 APP으로 접근 제한
3 의도치 않는 C t t P id 노출
2. App Component 노출 안드로이드 앱 개발 보안 팁
• 3. 의도치 않는 Content Provider 노출
– Content Provider 사용시 고려사항들
특별한 퍼미션 설정을 가진 APP으로 제한
3 의도치 않는 C t t P id 노출
2. App Component 노출 안드로이드 앱 개발 보안 팁
• 3. 의도치 않는 Content Provider 노출
– APP 실행시 Content Provider 고려 포인트
Content Provider 사용이 정말로 필요한가?1
• 필요하지 않다면, 사용하지 마라
Content Provide를 private로 설정하라2
• AndroidManifest.xml에서 “android:exported=false”로 설정하라
3 의도치 않는 C t t P id 노출
2. App Component 노출 안드로이드 앱 개발 보안 팁
• 3. 의도치 않는 Content Provider 노출
– APP 실행시 Content Provider 고려 포인트
Content Provider를 private로 설정하라
AndroidManifest.xml에서 “android:exported”의 속성을 지정하라에서 p 의 속성을 지정하라
하지만, Android2.2(API8) 또는 이전 버전에서는 명시적으로 “android:exported=false”
로 선언해도 Content Provider가 다른앱에서 접근이 가능하다
W bVi 관련 주요 취약점
안드로이드 앱 개발 보안 팁
• WebView 관련 주요 취약점
WebView
4. File Scheme
WebView
5. addJavascriptInterface
4 Fil S h
3. WebView 안드로이드 앱 개발 보안 팁
• 4. File Scheme
– Vulnerable Code
4 Fil S h
3. WebView 안드로이드 앱 개발 보안 팁
• 4. File Scheme
– WebView 실행시 경로를 입력받아 처리시 다양한 악의적인 경로 입력이 가능함
1. 정상적으로 앱을 이용 http://www.naver.com
http://www.xxx.com/exploit.html
file://sdcard/exploit.html
할 경우 User 또는 하
드코딩된 경로를 인텐
트 메시지로 전달
1. Intent 메시지를 통해
서 WebView Activity
를 실행할 때,
Intent Message Intent Message
APP
트 메시지로 전달
2. 해당 Activity는 받은
메시지의 경로를 접속
2. 악의적 컨텐츠가 있는
URI를 전달하여
3. 해당 스크립트를 통해
Intent Message
Activity public
WebView
• enabledJavascript
• any URI passed
APP
Intent Message
WebView
• enabledJavascript
• any URI passed메시지의 경로를 접속
하여 결과를 화면에 보
여줌
정보 유출 가능
• any URI passed
DB
• Cookie
• cache
• any URI passed
DB
• Cookie
• cache
A k데이터 유출 Attacker
Server
데이터 유출
가능
4 Fil S h
3. WebView 안드로이드 앱 개발 보안 팁
• 4. File Scheme
– Vulnerable Code
http://www.xxx.com/exploit.html
file://sdcard/exploit.html
Intent Message 전달 코드 (예시)
// / p
String pkg = “ko.vulnerable.android.app”;
St i l k “ D L h A ti it ”
Intent Message
String cls = pkg + “.DummyLauncherActivity”;
String uri = “file:///[exploit html file]”;
WebView
• enabledJavascript
• any URI passed
Intent intent = new Intent();
intent.setClassName(pkg, cls);
intent.putExtra(“url”, uri);p ( , );
this.startActivity(intent);
4 Fil S h
3. WebView 안드로이드 앱 개발 보안 팁
• 4. File Scheme
– Vulnerable Code
http://www.xxx.com/exploit.ht
ml
Intent Message 전달 코드 (예시)
…
String turl = getIntent().getStringExtra(“url”);
webView.loadUrl(turl);
file://sdcard/exploit.html
String pkg = “ko.vulnerable.android.app”;
St i l k “ D L h A ti it ”
webView.loadUrl(turl);
Intent Message
String cls = pkg + “.DummyLauncherActivity”;
String uri = “file:///[exploit html file]”;
WebView
• enabledJavascript
• any URI passed
Intent intent = new Intent();
intent.setClassName(pkg, cls);
intent.putExtra(“url”, uri);p ( , );
this.startActivity(intent);
4 Fil S h
3. WebView 안드로이드 앱 개발 보안 팁
• 4. File Scheme
– 악의적 웹 페이지에 자바스크립트 코드로 정보 유출 시도 코드
<script>
악성 코드를 통한 정보유출 가능 코드
sc pt
var target = “file:///data/data/ko.vulnerable.android.app/databases/webview.db";
var xhr = new XMLHttpRequest();
xhr.overrideMimeType(“text/plain; charset=iso-8859-1”);yp ( /p ; );
xhr.open(“GET”, target, true);
xhr.onreadystatechange = function(){
취약한 APP의 리소스에 접근 및
y g (){
var data = xhr.responseText;
…
외부로 유출 등이 가능함
4 Fil S h
2. App Component 노출 안드로이드 앱 개발 보안 팁
• 4. File Scheme
– 코드를 안전하게 처리하는 방법
URI로 File scheme 입력시입력시
대응코드
Javascript는 가급적 사용하지Javascript는 가급적 사용하지
않는 것이 바람직함
Android 4.1 이후부터 추가로 지원된 메쏘드
- WebSettings#setAllowFileAccessFromFileURLs
- WebSettings#setAllowUniversalAccessFromFileURLs
5 ddJ i tI t f
2. App Component 노출 안드로이드 앱 개발 보안 팁
• 5. addJavascriptInterface
– 원격에서 임의의 명령을 수행할 수 있는 취약점 발견
CVE-2013-4710
참고] http://www.rapid7.com/db/modules/exploit/android/browser/webview_addjavascriptinterface
5 ddJ i tI t f
2. App Component 노출 안드로이드 앱 개발 보안 팁
• 5. addJavascriptInterface
– 악의적인 앱 설치를 유도하는 자바스크립트 코드
모바일 앱의 코드모바일 앱의 코드
열람할 웹페이지 코드
나누어진 APK 파일을 강제로 저장시키고 백그라운드로 앱 설치하는 스크립트 코드
정보유출과 관련된 주요 취약점
안드로이드 앱 개발 보안 팁
• 정보유출과 관련된 주요 취약점
6 중요정보 Broadcasting
정보 유출
6. 중요정보 Broadcasting
7. 중요정보 Logging
8. SD 카드에 중요 정보 저장
6 중요정보 B d ti
4. 정보유출 안드로이드 앱 개발 보안 팁
• 6. 중요정보 Broadcasting
– LINE에서 가지고 있었던 취약점으로 메시지 수신시 해당 메시지를 브로드캐스
팅한 문제점임 3. 브로드캐스팅 메시지를 받도록 처리로 캐 팅 메시지를 받도록 처리
할 경우 메시지 내용 열람이 가능
Broadcast
receiver
1. 라인 메시지 전달
…
…
Broadcast
receiver
2. 메시지 수신시 브로드캐스팅하여 메시지 처리
(사전에 악성앱 설치되었다고 가정)
6 중요정보 B d ti
4. 정보유출 안드로이드 앱 개발 보안 팁
• 6. 중요정보 Broadcasting
– Fixed
3. 브로드캐스팅 메시지를 받도록 처리로 캐 팅 메시지를 받도록 처리
할 경우 메시지 내용 열람이 가능
Broadcast
receiver
1. 라인 메시지 전달
…
…
FIXED
Broadcast
receiver
2. 메시지 수신시 브로드캐스팅하여 메시지 처리
(사전에 악성앱 설치되었다고 가정)
6 중요정보 B d ti
4. 정보유출 안드로이드 앱 개발 보안 팁
• 6. 중요정보 Broadcasting
– Broadcasting 메시지 처리시에는 Intent 메시지 목적지를 제한하는 것이 바람직
함
명시적으로 I t t 메시지의 목적지를 제한
Broadcast
receiver
명시적으로 Intent 메시지의 목적지를 제한
명시적 Intent 사용
…
…
명시적 Intent 사용
- 사용하고자 하는 APP에서만 Broadcast receiver
를 받고 싶다면 Intent 사용시 명시적으로 사용
하라
Broadcast
receiver
하라
- 목적지 클래스를 제한하라
6 중요정보 B d ti
4. 정보유출 안드로이드 앱 개발 보안 팁
• 6. 중요정보 Broadcasting
– 명시적 인텐트 메시지로 전달하는 것이 바람직함
public class ActivityA extends Activity {
명시적 인텐트 예시
p y y {
.
.
.
호출할 클래스 지정
public void onClick(View view) {
Intent i = new Intent(this, ActivityB.class);
final EditText editText1 = (EditText) findViewById(R.id.editText1);
String myString = editText1.getText().toString();
i.putExtra("qString", myString); startActivity(i);
}
}
7 중요정보 L i
4. 정보유출 안드로이드 앱 개발 보안 팁
• 7. 중요정보 Logging
– 시스템에서 개발자가 의도적으로 등 다양한 이유로 로그가 발생함
• Log.d (Debug) : 테스트, 동작등이 의도대로 되는지 알아보기 위해서 사용
• Log.e (Error) : 가장 심각한 문제가 발생했을때 사용g ( ) 가장 심각한 문제가 발생했을때 사용
• Log.i (Info) : 진행 과정을 모니터링하기 위해서 주로 사용
• Log.v (Verbose) : 동작 여부를 최대한 자세히 살펴볼 목적으로 남기는 로그
Log w (Warn) : 심각하지는 않지만 꼭 확인이 필요한 경고로 심각보다 낮을때 사용• Log.w (Warn) : 심각하지는 않지만, 꼭 확인이 필요한 경고로 심각보다 낮을때 사용
7 중요정보 L i
4. 정보유출 안드로이드 앱 개발 보안 팁
• 7. 중요정보 Logging
– 로그 메시지중 특히 개발자가 디버깅 목적으로 남긴 메시지의 경우 반드시 삭제
필요
– 앱 분석시 디버깅 메시지에서 중요하거나 민감한 정보가 자주 노출됨
릴리즈(Release) 버전을 배포때에는
반드시 디버그 로깅이나 중요 정보 출력 코드를 삭제해야 함
(릴리즈 버전에서 중요 정보 노출 코드가 다수 발견됨)
7 중요정보 L i
4. 정보유출 안드로이드 앱 개발 보안 팁
• 7. 중요정보 Logging
– Android 4.0 이하에서는 해당 퍼미션이 설정된 경우 다른 앱에서도 로그를 읽기
가 가능했음
– Android 4.1 이상에서는 해당 문제가 해결되었음
7 중요정보 L i
4. 정보유출 안드로이드 앱 개발 보안 팁
• 7. 중요정보 Logging
– 로깅(Logging)
• 로그 출력시 민감한 정보를 출력하지 말아야 한다.
• 필요하다면 별도의 로그 클래스를 제작하여 필요에 따라 로깅 기능을 활성화/비활성화 하도록필 하다면 별 의 클래 를 제작하여 필 에 따라 깅 기능을 활성화/비활성화 하 록
하라
8 SD 카드에 중요 정보 저장
4. 정보유출 안드로이드 앱 개발 보안 팁
• 8. SD 카드에 중요 정보 저장
– SD카드에 앱과 관련된 중요하거나 민감한 정보 저장은 위험함
데이터 유출 시나리오데이터 유출 시나리오
1. 사용자가 사용하는 앱을 통해 중요 정보를 저장
APP
1. 사용자가 사용하는 앱을 통해 중요 정보를 저장
2. 앱이 해당 정보를 SD Card에 저장
3. 악의적인 앱이 SD Card의 해당 정보에 접근
4 접근한 정보를 외부로 유출
SD Card
4. 접근한 정보를 외부로 유출
예) 사진, 대화내역, 녹음파일, 인증서 등Other APP
(malware)
8 SD 카드에 중요 정보 저장
4. 정보유출 안드로이드 앱 개발 보안 팁
• 8. SD 카드에 중요 정보 저장
– 반드시 SD카드에 저장이 필요한 경우에는 제한적인 방법을 이용하는 것이 바람
직함
• 생성한 파일을 다른 앱과 공유를 하지 말 것
• 파일 생성시 MODE PRIVATE 옵션으로 생성할 것파일 생성시 _ 옵션 생성할 것
MODE_WORLD_READABLE, MODE_WORLD_WRITABLE 옵션 사용 자제 (API17에서 삭제)
내장 저장소(/data/data/package/files/)에 저장• 내장 저장소(/data/data/package/files/)에 저장
• 데이터베이스(SQLite)에 저장
• 네트워크 통해서 서버에 저장
• 만약 앱간에 파일 공유가 필요할 경우에는 IPC(ContentProvider)를 통해서 공유
01000011100010101000110010100101000111000000000011110011000000111110000000011101110111000111000110111001110001100100100001
00100010010000010000111000101010001100101001010001110000000000111100110000001111100000000111011101110001110001101110011100
01000011100010101000110010100101000111000000000011110011000000111110000000011101110111000111000110111001110001100100100001
00100010010000010000111000101010001100101001010001110000000000111100110000001111100000000111011101110001110001101110011100

Más contenido relacionado

Similar a 모바일앱 개발에서 개발자가 알아야할 팁

Mobile security & security testing - Speaker at CSS Serminar
Mobile security & security testing - Speaker at CSS SerminarMobile security & security testing - Speaker at CSS Serminar
Mobile security & security testing - Speaker at CSS SerminarYongjun Park
 
Olleh 마켓 어플리케이션 검증 v02
Olleh 마켓 어플리케이션 검증 v02Olleh 마켓 어플리케이션 검증 v02
Olleh 마켓 어플리케이션 검증 v02Minno Lee
 
앱 인벤터 테스트 장치 설정 매뉴얼
앱 인벤터 테스트 장치 설정 매뉴얼앱 인벤터 테스트 장치 설정 매뉴얼
앱 인벤터 테스트 장치 설정 매뉴얼Jeonghye Yang
 
포티파이 안전한 애플리케이션 구축 및 운영방안
포티파이 안전한 애플리케이션 구축 및 운영방안포티파이 안전한 애플리케이션 구축 및 운영방안
포티파이 안전한 애플리케이션 구축 및 운영방안TJ Seo
 
보안 위협 형태와 악성코드 분석 기법
보안 위협 형태와 악성코드 분석 기법보안 위협 형태와 악성코드 분석 기법
보안 위협 형태와 악성코드 분석 기법Youngjun Chang
 
AWS를 위한 도커, 컨테이너 (이미지) 환경 보안 방안 - 양희선 부장, TrendMicro :: AWS Summit Seoul 2019
AWS를 위한 도커, 컨테이너 (이미지) 환경 보안 방안 - 양희선 부장, TrendMicro :: AWS Summit Seoul 2019AWS를 위한 도커, 컨테이너 (이미지) 환경 보안 방안 - 양희선 부장, TrendMicro :: AWS Summit Seoul 2019
AWS를 위한 도커, 컨테이너 (이미지) 환경 보안 방안 - 양희선 부장, TrendMicro :: AWS Summit Seoul 2019Amazon Web Services Korea
 
웨일 보안 이야기
웨일 보안 이야기웨일 보안 이야기
웨일 보안 이야기NAVER D2
 
보안 위협과 악성코드 분석 기법
보안 위협과 악성코드 분석 기법보안 위협과 악성코드 분석 기법
보안 위협과 악성코드 분석 기법Youngjun Chang
 
[TECHCON 2019: MOBILE - Android]4.쪼개지고 나누어지는 안드로이드
[TECHCON 2019: MOBILE - Android]4.쪼개지고 나누어지는 안드로이드[TECHCON 2019: MOBILE - Android]4.쪼개지고 나누어지는 안드로이드
[TECHCON 2019: MOBILE - Android]4.쪼개지고 나누어지는 안드로이드NAVER Engineering
 
[2014 CodeEngn Conference 10] 심준보 - 급전이 필요합니다
[2014 CodeEngn Conference 10] 심준보 -  급전이 필요합니다[2014 CodeEngn Conference 10] 심준보 -  급전이 필요합니다
[2014 CodeEngn Conference 10] 심준보 - 급전이 필요합니다GangSeok Lee
 
안드로이드 기반 SNS 어플리케이션의 코드 변조를 통한 취약점 분석 및 보안 기법 연구
안드로이드 기반 SNS 어플리케이션의 코드 변조를 통한 취약점 분석 및 보안 기법 연구안드로이드 기반 SNS 어플리케이션의 코드 변조를 통한 취약점 분석 및 보안 기법 연구
안드로이드 기반 SNS 어플리케이션의 코드 변조를 통한 취약점 분석 및 보안 기법 연구Sangho LEE
 
Project of kshield_jr_open_seminar
Project of kshield_jr_open_seminarProject of kshield_jr_open_seminar
Project of kshield_jr_open_seminarfromitive
 
[4th revolution] new technology security education material] android security...
[4th revolution] new technology security education material] android security...[4th revolution] new technology security education material] android security...
[4th revolution] new technology security education material] android security...james yoo
 
가장 심각한 웹 애플리케이션 보안 위험 10가지-2013
가장 심각한 웹 애플리케이션 보안 위험 10가지-2013가장 심각한 웹 애플리케이션 보안 위험 10가지-2013
가장 심각한 웹 애플리케이션 보안 위험 10가지-2013봉조 김
 
지능형지속위협공격 최신동향 분석
지능형지속위협공격 최신동향 분석지능형지속위협공격 최신동향 분석
지능형지속위협공격 최신동향 분석한익 주
 
IBM 보안솔루션 앱스캔_App Scan Source Edition
IBM 보안솔루션 앱스캔_App Scan Source EditionIBM 보안솔루션 앱스캔_App Scan Source Edition
IBM 보안솔루션 앱스캔_App Scan Source Edition은옥 조
 
2일차 20140402
2일차 201404022일차 20140402
2일차 20140402Jake Yoon
 
[Seoultech] Mobile Security &amp; Security Testing(Eng)
[Seoultech] Mobile Security &amp; Security Testing(Eng)[Seoultech] Mobile Security &amp; Security Testing(Eng)
[Seoultech] Mobile Security &amp; Security Testing(Eng)ri3box
 

Similar a 모바일앱 개발에서 개발자가 알아야할 팁 (20)

Mobile security & security testing - Speaker at CSS Serminar
Mobile security & security testing - Speaker at CSS SerminarMobile security & security testing - Speaker at CSS Serminar
Mobile security & security testing - Speaker at CSS Serminar
 
Olleh 마켓 어플리케이션 검증 v02
Olleh 마켓 어플리케이션 검증 v02Olleh 마켓 어플리케이션 검증 v02
Olleh 마켓 어플리케이션 검증 v02
 
앱 인벤터 테스트 장치 설정 매뉴얼
앱 인벤터 테스트 장치 설정 매뉴얼앱 인벤터 테스트 장치 설정 매뉴얼
앱 인벤터 테스트 장치 설정 매뉴얼
 
포티파이 안전한 애플리케이션 구축 및 운영방안
포티파이 안전한 애플리케이션 구축 및 운영방안포티파이 안전한 애플리케이션 구축 및 운영방안
포티파이 안전한 애플리케이션 구축 및 운영방안
 
보안 위협 형태와 악성코드 분석 기법
보안 위협 형태와 악성코드 분석 기법보안 위협 형태와 악성코드 분석 기법
보안 위협 형태와 악성코드 분석 기법
 
AWS를 위한 도커, 컨테이너 (이미지) 환경 보안 방안 - 양희선 부장, TrendMicro :: AWS Summit Seoul 2019
AWS를 위한 도커, 컨테이너 (이미지) 환경 보안 방안 - 양희선 부장, TrendMicro :: AWS Summit Seoul 2019AWS를 위한 도커, 컨테이너 (이미지) 환경 보안 방안 - 양희선 부장, TrendMicro :: AWS Summit Seoul 2019
AWS를 위한 도커, 컨테이너 (이미지) 환경 보안 방안 - 양희선 부장, TrendMicro :: AWS Summit Seoul 2019
 
웨일 보안 이야기
웨일 보안 이야기웨일 보안 이야기
웨일 보안 이야기
 
[PandoraCube] APK를 출시한다면
[PandoraCube] APK를 출시한다면[PandoraCube] APK를 출시한다면
[PandoraCube] APK를 출시한다면
 
보안 위협과 악성코드 분석 기법
보안 위협과 악성코드 분석 기법보안 위협과 악성코드 분석 기법
보안 위협과 악성코드 분석 기법
 
[TECHCON 2019: MOBILE - Android]4.쪼개지고 나누어지는 안드로이드
[TECHCON 2019: MOBILE - Android]4.쪼개지고 나누어지는 안드로이드[TECHCON 2019: MOBILE - Android]4.쪼개지고 나누어지는 안드로이드
[TECHCON 2019: MOBILE - Android]4.쪼개지고 나누어지는 안드로이드
 
[2014 CodeEngn Conference 10] 심준보 - 급전이 필요합니다
[2014 CodeEngn Conference 10] 심준보 -  급전이 필요합니다[2014 CodeEngn Conference 10] 심준보 -  급전이 필요합니다
[2014 CodeEngn Conference 10] 심준보 - 급전이 필요합니다
 
안드로이드 기반 SNS 어플리케이션의 코드 변조를 통한 취약점 분석 및 보안 기법 연구
안드로이드 기반 SNS 어플리케이션의 코드 변조를 통한 취약점 분석 및 보안 기법 연구안드로이드 기반 SNS 어플리케이션의 코드 변조를 통한 취약점 분석 및 보안 기법 연구
안드로이드 기반 SNS 어플리케이션의 코드 변조를 통한 취약점 분석 및 보안 기법 연구
 
Project of kshield_jr_open_seminar
Project of kshield_jr_open_seminarProject of kshield_jr_open_seminar
Project of kshield_jr_open_seminar
 
[4th revolution] new technology security education material] android security...
[4th revolution] new technology security education material] android security...[4th revolution] new technology security education material] android security...
[4th revolution] new technology security education material] android security...
 
2014 pc방화벽 시온
2014 pc방화벽 시온2014 pc방화벽 시온
2014 pc방화벽 시온
 
가장 심각한 웹 애플리케이션 보안 위험 10가지-2013
가장 심각한 웹 애플리케이션 보안 위험 10가지-2013가장 심각한 웹 애플리케이션 보안 위험 10가지-2013
가장 심각한 웹 애플리케이션 보안 위험 10가지-2013
 
지능형지속위협공격 최신동향 분석
지능형지속위협공격 최신동향 분석지능형지속위협공격 최신동향 분석
지능형지속위협공격 최신동향 분석
 
IBM 보안솔루션 앱스캔_App Scan Source Edition
IBM 보안솔루션 앱스캔_App Scan Source EditionIBM 보안솔루션 앱스캔_App Scan Source Edition
IBM 보안솔루션 앱스캔_App Scan Source Edition
 
2일차 20140402
2일차 201404022일차 20140402
2일차 20140402
 
[Seoultech] Mobile Security &amp; Security Testing(Eng)
[Seoultech] Mobile Security &amp; Security Testing(Eng)[Seoultech] Mobile Security &amp; Security Testing(Eng)
[Seoultech] Mobile Security &amp; Security Testing(Eng)
 

모바일앱 개발에서 개발자가 알아야할 팁

  • 1. 01000011100010101000110010100101000111000000000011110011000000111110000000011101110111000111000110111001110001100100100001 00100010010000010000111000101010001100101001010001110000000000111100110000001111100000000111011101110001110001101110011100 0100001110001010100011 안드로이드 앱 개발 보안 팁 | 무료공개자료 | 01000011100010101000110010100101000111000000000011110011000000111110000000011101110111000111000110111001110001100100100001 00100010010000010000111000101010001100101001010001110000000000111100110000001111100000000111011101110001110001101110011100 0100001110001010100011 | 무료공개자료 |
  • 2. 01000011100010101000110010100101000111000000000011110011000000111110000000011101110111000111000110111001110001100100100001 00100010010000010000111000101010001100101001010001110000000000111100110000001111100000000111011101110001110001101110011100 0100001110001010100011 Contents I. 문서의 개요 II. App Component 노출 III. WebView IV. 정보유출 01000011100010101000110010100101000111000000000011110011000000111110000000011101110111000111000110111001110001100100100001 00100010010000010000111000101010001100101001010001110000000000111100110000001111100000000111011101110001110001101110011100 0100001110001010100011
  • 3.  본 문서는 JSSEC의 가이드와 타이거팀의 모의해킹 경험등을 토대로 작성되었음 1. 작성개요 안드로이드 앱 개발 보안 팁  본 문서는 JSSEC의 가이드와 타이거팀의 모의해킹 경험등을 토대로 작성되었음 – 본 문서는 모바일앱 개발시 가장 기초적이고 이해하기 쉬운 주제만 다루었음 타이거팀의 모의해킹 경험과 노하우 Android Application Secure Design /Android Application Secure Design / Secure Coding Guidebook by JSSEC http://www.jssec.org/dl/android_securecoding_en_20140701.pdf
  • 4. 본 문서에서 다루는 주요 내용은 아래와 같음 2. 대상에 대한 전제 안드로이드 앱 개발 보안 팁 • 본 문서에서 다루는 주요 내용은 아래와 같음 루팅되지 않은 정상폰(서비스)에서 발생가능한 내용 기반 악의적인 앱이 정상앱에 가할 수 있는 공격들 WebView의 잘못된 사용으로 인한 피해 퍼미션 설정상의 실수 등으로 인한 피해 등 앱 개발시 이러한 사소한 실수가 어떤 문제를 야기할 수 있는가?
  • 5. A C t W bVi 등을 다룰때 잘못된 코딩 문제점을 도출하였음 3. 3대 취약점 안드로이드 앱 개발 보안 팁 • App Component, WebView 등을 다룰때 잘못된 코딩 문제점을 도출하였음 App Component 노출 1. 의도치 않는 Activity 노출 2. 다른 앱(APP)에서 Local Server 접근 3 의도치 않는 C t t P id 노출3. 의도치 않는 Content Provider 노출 WebView 4. File Scheme 5. addJavascriptInterface 6. 중요정보 Broadcasting 정보 유출 7. 중요정보 Logging 8. SD 카드에 중요 정보 저장
  • 6. 안드로이드 앱 개발 보안 팁 App Component 1. 의도치 않는 Activity 노출 2. 다른 앱(APP)에서 Local Server 접근 노출 2. 다른 앱(APP)에서 Local Server 접근 3. 의도치 않는 Content Provider 노출
  • 7. A d id A 은 크게 4가지 컴포넌트를 가지며 I t t를 통해 통신을 수행함 2. App Component 노출 안드로이드 앱 개발 보안 팁 • Android App은 크게 4가지 컴포넌트를 가지며 Intent를 통해 통신을 수행함 Android App의 4대 구성요소 Activity Content Provider ServiceIntent Broadcast
  • 8. 1 의도치 않는 A ti it 노출 2. App Component 노출 안드로이드 앱 개발 보안 팁 • 1. 의도치 않는 Activity 노출 – 3rd Party Twitter Client에서 발생한 보안 취약점 – 글 등록화면 (Activity)이 export 되어 있어 intent 메시지를 통해서 등록 가능 1. 정상적인 사용자가 로 file://sdcard/.../PrivatePhoto.jpg file://mal/.../taehikim.jpg 컬에 저장된 파일을 2. APP을 통해서 3 트위터에 업로드할 수 3rd 3rd 3. 트위터에 업로드할 수 있는 기능 1. 악성앱이 임의의 파일 을 만들어서 2. APP을 통해서 Intent Message Intent Message 3 twitter client 3 twitter client 3. 트위터에 업로드할 수 있는 기능 twitter 자 동 로그인
  • 9. 1 의도치 않는 A ti it 노출 2. App Component 노출 안드로이드 앱 개발 보안 팁 • 1. 의도치 않는 Activity 노출 – AnroidManifest.xml 에서 export 설정 해결방안 명시적으로 private로 선언하라. (android : exported=“false”) AnroidManifest.xml file://mal/.../taehikim.jpg … <activity android:name=“.PicUploadActivity” … android:exported=“false” /> … 3rd twitte r clientclient
  • 10. 1 의도치 않는 A ti it 노출 2. App Component 노출 안드로이드 앱 개발 보안 팁 • 1. 의도치 않는 Activity 노출 – 소스코드에서 호출자 체크 코드로 해결방안 위처럼 Intent 호출 패키지명을 체크하는 방식도 있으나 “exported = false”를 사용하는 것이 더욱 바람직하다.
  • 11. 2 비정상 방법으로 연동 S 접근 2. App Component 노출 안드로이드 앱 개발 보안 팁 • 2. 비정상 방법으로 연동 Server 접근 – 하이브리드(Hybrid) 형태로 앱을 개발할 경우 연동하는 서버에도 보안설정이 반 드시 필요함 모바일앱이 로컬 또는 별도의 서버와 통신을 통해 정보들을 주고 받는 경우, 모바일앱이 하이브리드(Hybrid) 방식인 경우 바일앱이 컬 는 별 의 서버와 통신을 통해 정 들을 주 받는 경우, 서버측에 데이터 관리 및 단말기와 연동되는 인터페이스 관리가 매우 중요함 서버측 연결 정보 및 경로 정보는 모바일앱 분석을 통해서 쉽게 획득이 가능함서버측 연결 정보 및 경로 정보는 모바일앱 분석을 통해서 쉽게 획득이 가능함
  • 12. 2 비정상 방법으로 연동 S 접근 2. App Component 노출 안드로이드 앱 개발 보안 팁 • 2. 비정상 방법으로 연동 Server 접근 – 기본적인 보안 설정 뿐만 아니라 시큐어코딩도 반드시 이루어져야 함 서버측 보안설정 미흡으로 인한 컨텐츠 노출 문서, 음원, 사진 등의 파일들을 다룰때 디렉토리 인덱싱 등과 같은 서버측 보안 설정 미흡으로 인 한 정보 유출 가능성이 존재함한 정보 유출 가능성이 존재함 임의 접근을 통해서 컨텐츠를 불법적으로 획득 가능함 서버측 취약점으로 인해 악의적인 컨텐츠를 업 로드하고 배포할 경우 심각한 피해 발생 가능
  • 13. 2 비정상 방법으로 연동 S 접근 2. App Component 노출 안드로이드 앱 개발 보안 팁 • 2. 비정상 방법으로 연동 Server 접근 – 소스 코드 분석을 통해서 Web Interface 발견 – 직접 호출로 통해서 접근 가능성 및 취약성 여부 체크 경로 직접 호출 Sql Injection 취약점 발견 :Sql Injection 취약점 발견 : http://192.168.0.80:6543/HackMePal/service/servicepath/userlist?userid=admin
  • 14. 2 비정상 방법으로 연동 S 접근 2. App Component 노출 안드로이드 앱 개발 보안 팁 • 2. 비정상 방법으로 연동 Server 접근 – SQL Injection 공격이 가능하여 데이터베이스 정보 유출 성공 해당 시스템은 거의 대부분의 URL에서 가능함
  • 15. 2 비정상 방법으로 연동 S 접근 2. App Component 노출 안드로이드 앱 개발 보안 팁 • 2. 비정상 방법으로 연동 Server 접근
  • 16. 2 비정상 방법으로 연동 S 접근 2. App Component 노출 안드로이드 앱 개발 보안 팁 • 2. 비정상 방법으로 연동 Server 접근 – 비정상 접근 시도 문제 해결 방안 인증과 권한에 대한 체크 로직 반드시 구현 불필요한 접근은 IP 레벨에서 차단 서버측 인터페이스에 대해서도 모든 유효성 검증 코드 구현 (웹 프로그램 개발보안 가이드라인 준수)(웹 프로그램 개발보안 가이드라인 준수) 제공되는 다양한 컨텐츠에 대한 보호 대책 고민 (암호화, DRM 등)제 되 다 에 대 대책 화 등
  • 17. 3 의도치 않는 C t t P id 노출 2. App Component 노출 안드로이드 앱 개발 보안 팁 • 3. 의도치 않는 Content Provider 노출 – Content Provider는 하나 이상의 APP에서 File 또는 DB 등을 공유하기 위해서 사용함 – 여러앱이 데이터를 조회하거나 변경할 수 있음 취약한 APP취약한 APP Content Provider A APP DATA 읽기 및 변조가 가능함 DATA B APP
  • 18. 3 의도치 않는 C t t P id 노출 2. App Component 노출 안드로이드 앱 개발 보안 팁 • 3. 의도치 않는 Content Provider 노출 – 악의적인 앱 역시 Content Provider를 통해서 정보에 대한 접근이 가능함 취약한 APP A APPDATA 읽기 및취약한 APP Content Provider A APPDATA 읽기 및 변조가 가능함 B APP DATA Malicious APP
  • 19. 3 의도치 않는 C t t P id 노출 2. App Component 노출 안드로이드 앱 개발 보안 팁 • 3. 의도치 않는 Content Provider 노출 – 메모, 사진들, TODO 리스트, 녹음 메모 등 DB나 파일등에 저장되는 모든 데이터 가 공격대상
  • 20. 3 의도치 않는 C t t P id 노출 2. App Component 노출 안드로이드 앱 개발 보안 팁 • 3. 의도치 않는 Content Provider 노출
  • 21. 3 의도치 않는 C t t P id 노출 2. App Component 노출 안드로이드 앱 개발 보안 팁 • 3. 의도치 않는 Content Provider 노출 – Content Provider 사용시 고려사항들 데이터를 공유하고자 하는 APP의 범위를 지정하라.1 • 불특정하고 많은 수의 앱 • 같은 signature를 가진 앱으로 한정하기 • 특정 퍼미션을 가진 앱으로 한정하기 데이터의 내용2 • 다른 앱과 공유하고자 하는 내용은 무엇인가?다 앱과 공유하 자 하 내용 무엇 가 공유를 통해서 얻고자 하는 것이 무엇인가3 • 단순한 데이터 공유인가? • 데이터 추가, 편집, 삭제등을 허용하고자 하는가?
  • 22. 3 의도치 않는 C t t P id 노출 2. App Component 노출 안드로이드 앱 개발 보안 팁 • 3. 의도치 않는 Content Provider 노출 – Content Provider 사용시 고려사항들 Android 4.2(API17) 부터 Content Provider는 명시적으로 해당 불특정하고 많은 수의 앱 ( ) 부터 는 명시적 해당 속성을 설정하지 않는다면 private으로 처리됨 따라서 android:minSdkVersion 값 체크가 필요하고 android:targetSdkVersion 값따라서, android:minSdkVersion 값 체크가 필요하고 android:targetSdkVersion 값 이 17이상일 경우에는 아래와 같이 설정해야 함
  • 23. 3 의도치 않는 C t t P id 노출 2. App Component 노출 안드로이드 앱 개발 보안 팁 • 3. 의도치 않는 Content Provider 노출 – Content Provider 사용시 고려사항들 같은 Signature를 가진 APP으로 접근 제한
  • 24. 3 의도치 않는 C t t P id 노출 2. App Component 노출 안드로이드 앱 개발 보안 팁 • 3. 의도치 않는 Content Provider 노출 – Content Provider 사용시 고려사항들 특별한 퍼미션 설정을 가진 APP으로 제한
  • 25. 3 의도치 않는 C t t P id 노출 2. App Component 노출 안드로이드 앱 개발 보안 팁 • 3. 의도치 않는 Content Provider 노출 – APP 실행시 Content Provider 고려 포인트 Content Provider 사용이 정말로 필요한가?1 • 필요하지 않다면, 사용하지 마라 Content Provide를 private로 설정하라2 • AndroidManifest.xml에서 “android:exported=false”로 설정하라
  • 26. 3 의도치 않는 C t t P id 노출 2. App Component 노출 안드로이드 앱 개발 보안 팁 • 3. 의도치 않는 Content Provider 노출 – APP 실행시 Content Provider 고려 포인트 Content Provider를 private로 설정하라 AndroidManifest.xml에서 “android:exported”의 속성을 지정하라에서 p 의 속성을 지정하라 하지만, Android2.2(API8) 또는 이전 버전에서는 명시적으로 “android:exported=false” 로 선언해도 Content Provider가 다른앱에서 접근이 가능하다
  • 27. W bVi 관련 주요 취약점 안드로이드 앱 개발 보안 팁 • WebView 관련 주요 취약점 WebView 4. File Scheme WebView 5. addJavascriptInterface
  • 28. 4 Fil S h 3. WebView 안드로이드 앱 개발 보안 팁 • 4. File Scheme – Vulnerable Code
  • 29. 4 Fil S h 3. WebView 안드로이드 앱 개발 보안 팁 • 4. File Scheme – WebView 실행시 경로를 입력받아 처리시 다양한 악의적인 경로 입력이 가능함 1. 정상적으로 앱을 이용 http://www.naver.com http://www.xxx.com/exploit.html file://sdcard/exploit.html 할 경우 User 또는 하 드코딩된 경로를 인텐 트 메시지로 전달 1. Intent 메시지를 통해 서 WebView Activity 를 실행할 때, Intent Message Intent Message APP 트 메시지로 전달 2. 해당 Activity는 받은 메시지의 경로를 접속 2. 악의적 컨텐츠가 있는 URI를 전달하여 3. 해당 스크립트를 통해 Intent Message Activity public WebView • enabledJavascript • any URI passed APP Intent Message WebView • enabledJavascript • any URI passed메시지의 경로를 접속 하여 결과를 화면에 보 여줌 정보 유출 가능 • any URI passed DB • Cookie • cache • any URI passed DB • Cookie • cache A k데이터 유출 Attacker Server 데이터 유출 가능
  • 30. 4 Fil S h 3. WebView 안드로이드 앱 개발 보안 팁 • 4. File Scheme – Vulnerable Code http://www.xxx.com/exploit.html file://sdcard/exploit.html Intent Message 전달 코드 (예시) // / p String pkg = “ko.vulnerable.android.app”; St i l k “ D L h A ti it ” Intent Message String cls = pkg + “.DummyLauncherActivity”; String uri = “file:///[exploit html file]”; WebView • enabledJavascript • any URI passed Intent intent = new Intent(); intent.setClassName(pkg, cls); intent.putExtra(“url”, uri);p ( , ); this.startActivity(intent);
  • 31. 4 Fil S h 3. WebView 안드로이드 앱 개발 보안 팁 • 4. File Scheme – Vulnerable Code http://www.xxx.com/exploit.ht ml Intent Message 전달 코드 (예시) … String turl = getIntent().getStringExtra(“url”); webView.loadUrl(turl); file://sdcard/exploit.html String pkg = “ko.vulnerable.android.app”; St i l k “ D L h A ti it ” webView.loadUrl(turl); Intent Message String cls = pkg + “.DummyLauncherActivity”; String uri = “file:///[exploit html file]”; WebView • enabledJavascript • any URI passed Intent intent = new Intent(); intent.setClassName(pkg, cls); intent.putExtra(“url”, uri);p ( , ); this.startActivity(intent);
  • 32. 4 Fil S h 3. WebView 안드로이드 앱 개발 보안 팁 • 4. File Scheme – 악의적 웹 페이지에 자바스크립트 코드로 정보 유출 시도 코드 <script> 악성 코드를 통한 정보유출 가능 코드 sc pt var target = “file:///data/data/ko.vulnerable.android.app/databases/webview.db"; var xhr = new XMLHttpRequest(); xhr.overrideMimeType(“text/plain; charset=iso-8859-1”);yp ( /p ; ); xhr.open(“GET”, target, true); xhr.onreadystatechange = function(){ 취약한 APP의 리소스에 접근 및 y g (){ var data = xhr.responseText; … 외부로 유출 등이 가능함
  • 33. 4 Fil S h 2. App Component 노출 안드로이드 앱 개발 보안 팁 • 4. File Scheme – 코드를 안전하게 처리하는 방법 URI로 File scheme 입력시입력시 대응코드 Javascript는 가급적 사용하지Javascript는 가급적 사용하지 않는 것이 바람직함 Android 4.1 이후부터 추가로 지원된 메쏘드 - WebSettings#setAllowFileAccessFromFileURLs - WebSettings#setAllowUniversalAccessFromFileURLs
  • 34. 5 ddJ i tI t f 2. App Component 노출 안드로이드 앱 개발 보안 팁 • 5. addJavascriptInterface – 원격에서 임의의 명령을 수행할 수 있는 취약점 발견 CVE-2013-4710 참고] http://www.rapid7.com/db/modules/exploit/android/browser/webview_addjavascriptinterface
  • 35. 5 ddJ i tI t f 2. App Component 노출 안드로이드 앱 개발 보안 팁 • 5. addJavascriptInterface – 악의적인 앱 설치를 유도하는 자바스크립트 코드 모바일 앱의 코드모바일 앱의 코드 열람할 웹페이지 코드 나누어진 APK 파일을 강제로 저장시키고 백그라운드로 앱 설치하는 스크립트 코드
  • 36. 정보유출과 관련된 주요 취약점 안드로이드 앱 개발 보안 팁 • 정보유출과 관련된 주요 취약점 6 중요정보 Broadcasting 정보 유출 6. 중요정보 Broadcasting 7. 중요정보 Logging 8. SD 카드에 중요 정보 저장
  • 37. 6 중요정보 B d ti 4. 정보유출 안드로이드 앱 개발 보안 팁 • 6. 중요정보 Broadcasting – LINE에서 가지고 있었던 취약점으로 메시지 수신시 해당 메시지를 브로드캐스 팅한 문제점임 3. 브로드캐스팅 메시지를 받도록 처리로 캐 팅 메시지를 받도록 처리 할 경우 메시지 내용 열람이 가능 Broadcast receiver 1. 라인 메시지 전달 … … Broadcast receiver 2. 메시지 수신시 브로드캐스팅하여 메시지 처리 (사전에 악성앱 설치되었다고 가정)
  • 38. 6 중요정보 B d ti 4. 정보유출 안드로이드 앱 개발 보안 팁 • 6. 중요정보 Broadcasting – Fixed 3. 브로드캐스팅 메시지를 받도록 처리로 캐 팅 메시지를 받도록 처리 할 경우 메시지 내용 열람이 가능 Broadcast receiver 1. 라인 메시지 전달 … … FIXED Broadcast receiver 2. 메시지 수신시 브로드캐스팅하여 메시지 처리 (사전에 악성앱 설치되었다고 가정)
  • 39. 6 중요정보 B d ti 4. 정보유출 안드로이드 앱 개발 보안 팁 • 6. 중요정보 Broadcasting – Broadcasting 메시지 처리시에는 Intent 메시지 목적지를 제한하는 것이 바람직 함 명시적으로 I t t 메시지의 목적지를 제한 Broadcast receiver 명시적으로 Intent 메시지의 목적지를 제한 명시적 Intent 사용 … … 명시적 Intent 사용 - 사용하고자 하는 APP에서만 Broadcast receiver 를 받고 싶다면 Intent 사용시 명시적으로 사용 하라 Broadcast receiver 하라 - 목적지 클래스를 제한하라
  • 40. 6 중요정보 B d ti 4. 정보유출 안드로이드 앱 개발 보안 팁 • 6. 중요정보 Broadcasting – 명시적 인텐트 메시지로 전달하는 것이 바람직함 public class ActivityA extends Activity { 명시적 인텐트 예시 p y y { . . . 호출할 클래스 지정 public void onClick(View view) { Intent i = new Intent(this, ActivityB.class); final EditText editText1 = (EditText) findViewById(R.id.editText1); String myString = editText1.getText().toString(); i.putExtra("qString", myString); startActivity(i); } }
  • 41. 7 중요정보 L i 4. 정보유출 안드로이드 앱 개발 보안 팁 • 7. 중요정보 Logging – 시스템에서 개발자가 의도적으로 등 다양한 이유로 로그가 발생함 • Log.d (Debug) : 테스트, 동작등이 의도대로 되는지 알아보기 위해서 사용 • Log.e (Error) : 가장 심각한 문제가 발생했을때 사용g ( ) 가장 심각한 문제가 발생했을때 사용 • Log.i (Info) : 진행 과정을 모니터링하기 위해서 주로 사용 • Log.v (Verbose) : 동작 여부를 최대한 자세히 살펴볼 목적으로 남기는 로그 Log w (Warn) : 심각하지는 않지만 꼭 확인이 필요한 경고로 심각보다 낮을때 사용• Log.w (Warn) : 심각하지는 않지만, 꼭 확인이 필요한 경고로 심각보다 낮을때 사용
  • 42. 7 중요정보 L i 4. 정보유출 안드로이드 앱 개발 보안 팁 • 7. 중요정보 Logging – 로그 메시지중 특히 개발자가 디버깅 목적으로 남긴 메시지의 경우 반드시 삭제 필요 – 앱 분석시 디버깅 메시지에서 중요하거나 민감한 정보가 자주 노출됨 릴리즈(Release) 버전을 배포때에는 반드시 디버그 로깅이나 중요 정보 출력 코드를 삭제해야 함 (릴리즈 버전에서 중요 정보 노출 코드가 다수 발견됨)
  • 43. 7 중요정보 L i 4. 정보유출 안드로이드 앱 개발 보안 팁 • 7. 중요정보 Logging – Android 4.0 이하에서는 해당 퍼미션이 설정된 경우 다른 앱에서도 로그를 읽기 가 가능했음 – Android 4.1 이상에서는 해당 문제가 해결되었음
  • 44. 7 중요정보 L i 4. 정보유출 안드로이드 앱 개발 보안 팁 • 7. 중요정보 Logging – 로깅(Logging) • 로그 출력시 민감한 정보를 출력하지 말아야 한다. • 필요하다면 별도의 로그 클래스를 제작하여 필요에 따라 로깅 기능을 활성화/비활성화 하도록필 하다면 별 의 클래 를 제작하여 필 에 따라 깅 기능을 활성화/비활성화 하 록 하라
  • 45. 8 SD 카드에 중요 정보 저장 4. 정보유출 안드로이드 앱 개발 보안 팁 • 8. SD 카드에 중요 정보 저장 – SD카드에 앱과 관련된 중요하거나 민감한 정보 저장은 위험함 데이터 유출 시나리오데이터 유출 시나리오 1. 사용자가 사용하는 앱을 통해 중요 정보를 저장 APP 1. 사용자가 사용하는 앱을 통해 중요 정보를 저장 2. 앱이 해당 정보를 SD Card에 저장 3. 악의적인 앱이 SD Card의 해당 정보에 접근 4 접근한 정보를 외부로 유출 SD Card 4. 접근한 정보를 외부로 유출 예) 사진, 대화내역, 녹음파일, 인증서 등Other APP (malware)
  • 46. 8 SD 카드에 중요 정보 저장 4. 정보유출 안드로이드 앱 개발 보안 팁 • 8. SD 카드에 중요 정보 저장 – 반드시 SD카드에 저장이 필요한 경우에는 제한적인 방법을 이용하는 것이 바람 직함 • 생성한 파일을 다른 앱과 공유를 하지 말 것 • 파일 생성시 MODE PRIVATE 옵션으로 생성할 것파일 생성시 _ 옵션 생성할 것 MODE_WORLD_READABLE, MODE_WORLD_WRITABLE 옵션 사용 자제 (API17에서 삭제) 내장 저장소(/data/data/package/files/)에 저장• 내장 저장소(/data/data/package/files/)에 저장 • 데이터베이스(SQLite)에 저장 • 네트워크 통해서 서버에 저장 • 만약 앱간에 파일 공유가 필요할 경우에는 IPC(ContentProvider)를 통해서 공유