보안개구리
6. 안전하지 않은 컨텐츠 프로바이더 접근 본문
[개 요]
콘텐츠 프로바이더(Content Providers)는 안드로이드 애플리케이션 간에 데이터를 공유하고 관리하는 인터페이스입니다. 안드로이드의 모든 애플리케이션은 기본적으로 다른 애플리케이션이 자신의 데이터에 접근하는 것을 금지하지만, 컨텐츠 프로바이더를 사용하면 다른 애플리케이션이 지정된 권한 내에서 데이터에 접근할 수 있습니다.
모든 컨텐츠 프로바이더는 AndroidManifest.xml의 <provider> 요소에 정의되며, 접근을 위해서는 URI와 콘텐츠 리졸버(Content Resolver)가 필요하며 컨텐츠 리졸버를 통해 다른 애플리케이션의 컨텐츠 프로바이더에 접근할 수 있습니다.
이때 보안이 취약한 경우, 공격자는 민감한 데이터에 접근하거나 이를 변경할 수 있습니다.
[진단 과정]
1) AndroidManifest.xml 파일에서 <provider> 요소의 android:exported="true" 설정을 확인하여 외부 접근 가능성을 점검합니다. 접근 권한은 com.android.insecurebankv2.TrackUserContentProvider로 설정되어 있습니다.
2) 컨텐츠 프로바이더에 접근하기 위해 URI를 확인합니다. 이는 소스 코드 확인이나 drozer를 사용하여 가능합니다.
- 명령어: run scanner.provider.finduris -a com.android.insecurebankv2
3) URI를 통해 content://com.android.insecurebankv2.TrackUserContentProvider/trackerusers 경로의 데이터베이스 정보를 확인합니다. 정확한 확인을 위해 dinesh 계정으로 로그인을 시 추가되는 것을 보아 해당 정보들은 아마 로그인 기록으로 추측됩니다.
- 명령어: run app.provider.query content://com.android.insecurebankv2.TrackUserContentProvider/trackerusers
4) 콘텐츠 프로바이더는 대상 애플리케이션의 데이터베이스나 데이터 등을 확인할 수 있기 때문에 drozer를 이용하여 SQL Injection이나 경로 탐색 등의 공격도 수행할 수 있습니다. SQL Injection 가능성을 drozer로 테스트합니다. ' 입력 시 DB 에러가 발생함을 확인합니다.
- 명령어: run app.provider.query content://com.android.insecurebankv2.TrackUserContentProvider/trackerusers --projection "'"
5) SQL Injection 공격으로 데이터베이스 테이블 목록을 확인하고, 다른 테이블 내용을 조회할 수도 있습니다.
- 명령어: run app.provider.query content://com.android.insecurebankv2.TrackUserContentProvider/trackerusers --projection " * from SQLITE_MASTER where type='table';-- "
[대응 방안]
o 콘텐츠 프로바이더를 통해 애플리케이션의 데이터가 유출되지 않도록 하기 위해서는 manifest 파일에 프로바이더 선언 시 exported를 false로 선언해야 합니다.
'앱 진단(Android) > Insecurebank 실습' 카테고리의 다른 글
8. 취약한 암호화 실행 (0) | 2024.07.08 |
---|---|
7. 안전하지 않은 웹 뷰 실행(작성 중) (0) | 2024.07.08 |
5. 루팅 탐지 및 우회 (0) | 2024.07.08 |
4. 액티비티 컴포넌트 취약점 (0) | 2024.07.07 |
3. 로컬 암호화 이슈(Local Encryption Issue) (0) | 2024.07.07 |