[안드로이드 모의해킹] 단말기 내 중요정보 저장 진단

직접 연구하여 작성한 자료입니다. 공식 출처가 명시되지 않은 자료의 무단 복제, 사용을 금지합니다.
공격 기법은 학습용, 허가된 환경에서 실습 바랍니다. 실 운영망 대상 공격은 처벌받습니다. (정보통신망법 제48조 1항)
학습자료 apk파일은 https://github.com/colfax0483/Vulnerable_apk 에서 clone할 수 있습니다.

1. 개요

앱이 설치되는 경로와 사용자 데이터가 분리되면, 앱과 사용자 데이터 간에 격리된 환경을 유지할 수 있다. 이를 통해 앱 간 서로의 데이터 접근을 방지하고, 민감한 정보의 유출을 예방할 수 있다. 그러나 루트 사용자는 데이터 경로와 관계없이 접근할 수 있어 보안에 취약할 수 있다.

동적 분석에서의 중요정보 저장 취약점 진단은 기능을 직접 실행하면서 데이터 보호 대책이 잘 마련되어 있는지 확인하는 과정이다. 데이터를 관찰하는 방법으로는 안드로이드 스튜디오의 'Device File Explorer'나 adb shell 명령어(cd, ls 등)를 사용할 수 있다.

단말기 내 중요정보 저장의 취약 여부를 판단할 때는 “정보”와 “기능” 두 가지 유형의 보호 대상이 안전하게 다루어지는지 살펴본다. 정보 접근 및 변경 권한이 인가된 사용자만 가능해야 하며, 정보는 인텐트, 파일, Shared Preferences 등을 통해 안전하게 저장 및 전송되어야 한다.

 

2. 진단방법

1)     앱 별 저장소(App-specific Storage)

시스템 기본 설치 앱은 ‘/system/app’ 경로 하위에 위치하고 사용자가 설치한 앱은 기본적으로 ‘/data/app’ 하위 경로에 저장된다. 설치 이후 사용자 데이터가 저장되는 위치는 ‘/data/data/[패키지명]’ 하위 경로에 저장된다.

APK 및 설치 시 디렉터리 구조

앱 실행 시 민감정보가 저장될 수 있는 경로를 살펴본다.

 

(1) /data/data/[패키지명]/cache

  - 앱의 캐시파일, 임시파일이나 빠른 데이터 접근을 위한 캐시파일이 저장된다.

  - 별도의 권한없이 파일의 생성, 삭제가 가능하다. 다른 앱이나 사용자가 접근할 수 없으며 추가 디스크 공간이 필요할 때 캐시 폴더 내의 데이터부터 삭제된다. 다음은 캐시 파일을 생성하는 코드 예제이다.

val cacheFile = File(context.getcacheDir(), "cache_temp.txt")

 

 (2) /data/data/[패키지명]/databases

  • 데이터베이스 관련 파일, 주로 SQLite 데이터베이스 파일이 저장된다.
  • 안드로이드는 SQLite를 내장형 데이터베이스로 사용하여 데이터를 저장하고 관리할 수 있다.

 

(3) /data/data/[패키지명]/files

  • 앱이 생성한 파일, 주로 사용자가 생성한 파일이나 다운로드한 파일, 앱 설정 등을 포함한다.
  • 별도의 권한 없이 파일의 생성, 삭제가 가능한다. 앱이 설치되어 있는 동안만 파일을 저장하고 유지한다. 앱이 삭제되면 경로 내 파일도 삭제된다.

 

(4) /data/data/[패키지명]/lib

  • 앱의 네이티브 코드 라이브러리가 저장된다.

 

(5) /data/data/[패키지명]/shared_prefs

  • SharedPreferences에는 앱의 설정이나 사용자 데이터, 상태 정보 등이 저장된다.
  • 앱에서 간단한 데이터를 키-값(key-value) 쌍의 형태로 저장하고 관리하는데 사용된다. 앱이 실행될 때 언어, 테마, 알림 설정 등 사용자가 기억하도록 설정한 값으로 실행하기 위한 값이 저장된다.
  • 사용자 세션 상태나 로그인 정보를 저장해서 자동로그인에 사용할 수 있어 앱을 종료 후 재실행할 때 로그인 상태를 유지하도록 할 수 있다.
  • SharedPreferences에 저장된 데이터는 복잡한 설정이 필요하지 않고 불러올 때 메모리에 캐시되기 때문에 속도가 빠르다는 장점이 있다.

 

2)     외부 저장소(External Storage)

SD카드와 같은 외부 저장소에 파일을 저장할 때에는 더 주의해야 한다. 외부 저장소 파일은 사용중인 앱 뿐만 아니라 ‘android.permission.WRITE_EXTERNAL_STORAGE’ 권한을 사용하도록 선언된 다른 모든 앱에 대해서도 읽기와 쓰기 권한이 허용된다. 개발의 용이성을 이유로 해당 권한을 선언한 이후 외부 저장소에 닷파일(.)이나, 임의의 폴더를 생성하여 파일을 저장하고 활용하기도 한다.

외부 메모리의 파일은 악성코드나 다른 앱에 의해 쉽게 변조되거나 삭제될 수 있다.

val externalFile = File(context.getExternalFilesDir({Environment Type}, "file.txt")

 

💡 안드로이드 API 29 이후 변경점
외부 저장소에 저장된 파일에 대해 더 세밀하게 제어하도록 ‘범위 지정 저장소(Scoped Storage)’ 개념이 도입되었다. 외부 저장소에 저장되는 파일에도 앱 별 디렉터리와 앱에서 만든 특정 유형의 미디어만 접근할 수 있도록 제한할 수 있다.
개발 반영 유예기간이 적용된 이후 API Level 30이상이 적용된 앱은 매니페스트에 선언된 WRITE_EXTERNAL_STORAGE 권한은 무시되며 ‘범위 지정 저장소’ 정책을 따라야 한다.
 
 

3. 진단기준

 
취약여부 설명
취약 앱 별 저장소 및 외부 저장소에 중요도가 높은 데이터가 저장되는 경우
양호 앱 별 저장소 및 외부 저장소에 중요도가 높은 데이터가 저장되지 않는 경우

 

 

출처

실습 코드 및 더 자세한 내용은 안드로이드 모의해킹 입문(https://bjpublic.tistory.com/261230)

 

안드로이드 모의해킹 입문

제목 안드로이드 모의해킹 입문부제 실습을 통한 취약점 진단저자 박도현출판사 비제이퍼블릭출간/배본가능일 2024년 6월 28일정가 27,000원페이지 360쪽판형 173*230ISBN 979-11-6592-285-6(93000) 관련분류

bjpublic.tistory.com

 

 

 

반응형