취약점 개요

컨텐트 프로바이더(Content Provider)는 현재 앱이 가지고 있는 정보를 다른 앱에게 공유해주는 컴포넌트이다.


예를 들면, 카카오톡 앱을 설치하게 되면 전화번호 목록을 조회하는 앱에 존재하는 컨텐트 프로바이더를 사용해 주소록의 정보를 가지고 온다.


만약, 컨텐트 프로바이더의 접근 권한이 설정이 되어 있지 않으면 모든 앱이 내부 저장소의 중요한 정보를 획득할 가능성이 존재한다.


취약점 진단

AndroidManifest.xml 파일을 보면 컨텐트 프로바이더는 1개 사용하고 있다. 사용된 컨텐트 프로바이더의 이름은 .TrackUserContentProvider이고, 현재 외부에 노출된 상태이다.



드로저로 노출된 컨텐트 프로바이더의 개수를 보면 소스코드에서 확인한 것과 동일하게 1개의 컨텐트 프로바이더가 노출되어 있다.


○ run app.package.attacksurface com.android.insecurebankv2'



노출된 컨텐트 프로바이더의 정보를 보면 접근 권한이 제한되어 있지 않고, 컨텐트 프로바이더의 절대 경로를 확인할 수 있다.


○ run app.provider.info -a com.android.insecurebankv2



외부 앱에서 저근 가능한 URI는 총 2개이다. 컨텐트 프로바이더는 쿼리 명령어를 이용해 DB에 존재하는 데이터를 조회할 수 있다.


○ run scanner.provider.finduris -a com.android.insecurebankv2



접근 가능한 URI를 지정하여 쿼리를 조회해보면 현재 앱에 로그인한 사용자의 아이디가 출력된다.


○ run app.provider.query content://com.android.insecurebankv2.TrackUserContentProvider/trackerusers/



대응 방안 및 검증

컨텐트 프로바이더 취약점은 AndroidManifest.xml에 <provider> 태그 내의 android:exported 속성이 true로 설정되어 있다.

컨텐트 프로바이더 취약점
AndroidManifest.xml에 구현되어 있는 <provider> 태그 내의 android:exported="true" 속성을 "false"로 변경
Permission 속성을 이용한 접근 제어

AndroidManifest.xml에 구현되어 있는 <provider> 태그 내의 android:exported="true" 속성을 "false"로 변경한다.



정상적으로 보안 조치가 적용되었는지 드로저로 노출된 컴포넌트를 보면 컨텐트 프로바이더는 외부에 노출되지 않는다.



▶ Android Drozer 설치 및 사용법

▶ 안드로이드 컴포넌트 취약점 (Android Activity)

▶ 안드로이드 컴포넌트 취약점 (Android Broadcast Receiver)

▶ 안드로이드 백업 취약점 (Android Backup)

▶ 안드로이드 메모리 노출 취약점 (메모리 덤프)

▶ 안드로이드 난독화 (코드 보호 기법)

▶ 안드로이드 루팅 탐지 우회 (Frida Hooking)

  • 카카오톡-공유
  • 네이버-블로그-공유
  • 네이버-밴드-공유
  • 페이스북-공유
  • 트위터-공유
  • 카카오스토리-공유