프로젝트/AOS 모바일 앱 모의해킹

7. 취약한 콘텐츠 프로바이더 접근

real-again 2024. 12. 25. 09:00

1. 취약점 설명

출처 : https://techvidvan.com/tutorials/wp-content/uploads/2021/06/Content-provider-in-android.jpg

○ 콘텐츠 프로바이더는 다른 애플리케이션에서 데ㅣ터베이스, 파일에 접근 가능하도록 인터페이스 제공

○ 콘텐츠 프로바이더에 접근하기 위해 URL과 ContentResolver 필요

○ 애플리케이션은 ContentResolver를 이용해 콘텐츠 프로바이더 접근 가능하면 URL 이용

○ 콘텐츠 프로바이더가 외부에 노출된 경우 외부에서 접근하여 데이터를 조회하거나 변경 가능

 

외부에 노출된 provider 확인

○ 애플리케이션의 콘텐츠 프로바이더는 Androidmanifest.xml의 <provider> 요소에서 정의

  콘텐프 츠로바이더는 주소인 URI는 "content://authority/path"와 같은 형식으로 구성

  Authority는 콘텐츠 프로바이더의 주소, path는 데이터 위치에 대한 정보를 의미

    ● 제공자 클래스 이름(android:name) : ContentProvider를 구현하는 클래스

    ● 권한(android:authorities) : 시스템 내에서 제공자 전체를 식별하는 상징적 이름

    ● 시작 및 제어 특성 (android:exported) : 다른 애플리케이션이 제공자를 사용할 수 있게 해주는 플래그,

                                                                     true로 설정된 경우 외부에 노출

○ 취약점 진단 시 가장 많이 보는 부분 중 하나

 

2. 콘텐츠 프로바이더 취약점 확인

 

content:// 검색

○ 콘텐츠 프로바이더를 이용해 데이터에 접근하기 위해 URI 필요

    ● content:// 콘텐츠 URI로 식별

    ● user_dictionary 제공업체의 권한

    ● words 테이블의 경로

    ex) content://user_dictionary/words

 

○ 인시큐어 뱅크의 URL를 확인하기 위해 디컴파일 후 "content://"가 포함된 항목 검색
    ● TrackUserContentProider.smail 파일에서 "content://" 발견

    ●  content://com.android.insecurebankv2.TrackUserContentProvider/trackerusers

 

 

 

 

 

 

 

 

 

3. Drozer을 이용한 SQL Injection 공격

○ drozer에서 콘텐츠 프로바이더를 통해 SQL Injection 공격

로컬 스토리지에 포함된 데이터베이스 사용

SQL Injection 공격 가능 확인을 위해 --projection 옵션 뒤에 싱글쿼터(') 삽입

쿼리문 : SELECT <projection> FROM...

에러 메시지가 출력되었으며 메시지 안에 데이터 조회를 위한 쿼리 일부 포함

 

데이터베이스에 포함된 테이블 목록 확인

○ "* from SQLITE_MASTER where type='table';--" 구문을 추가해 테이블 목록 확인

○ URI를 통해 확인 했던 names 컬럼 포함 확인

○ 데이터베이스에 포함된 테이블 중 names 테이블 출력

"* from names;--" 구문을 추가해 names 테이블 출력

 ○ URI를 이용해 출력했던 내용과 동일한 결과 출력

Insert, delete 등 쿼리 전송 가능

 

4. 대응방안

○ Androidmanifest.xml에 선언된 android:exported 속성을 false로 설정

○ false로 설정되는 경우 외부의 영향을 받지 않음

False로 설정된 콘텐츠 프로바이더에 강제로 요청하는 경우 "Permission Denial" 메시지 출력