1. 취약점 소개
○ 안드로이드에서 온라인/오프라인을 통해 데이터를 처리할 수 있도록 로컬 스토리지 제공
○ 애플리케이션 환경설정 정보, 외부 API 연동 및 인증을 위한 토큰 값, 연동 서버 정보 등을 로컬 스토리지에 저장
○ 로컬 스토리지에 데이터를 저장하는 경우 보안을 고려하지 않으면 평문 형태의 파일로 저장
○ 애플리케이션에서 저장되는 파일이나 데이터는 소유자만 접근 하도록 제한
○ 공격자가 접근 제한을 우회하거나 권한 상승에 성공하는 경우 평문으로 저장된 데이터 획득 가능
2. 데이터 저장
저장소 | 설명 |
Shared Preferences | ● 안드로이드 앱 설정(ID/PASS, 사용자 토큰 정보 등)들이 저장되는 저장소 |
SQLite Databases | ● 데이터베이스(컨텐츠 목록, 사용자 목록 등)에 데이터가 저장되는 저장소 |
Internal Storage | ● 내부 저장소 (위 두 저장소는 해당 저장소에 저장되어 있음) |
External Storage | ● 외부 저장소 |
○ 데이터를 저장하는 것은 많은 모바일 앱에서 필수적
○ 일부 앱은 데이터 저장소를 사용해 사용자 설정 또는 사용자 제공 데이터를 추적
○ 안드로이드 플랫폼에서 널리 사용되는 저장소 기술 목록
3. Shared Preferences
○ Key-value 쌍으로 앱의 환경 설정을 저장하는 데 사용되는 XML 파일
○ 일반적으로 boolean, float, int, long, string의 타입을 가짐
○ MODE_WORLD_READABLE를 사용하면 모든 애플리케이션이 XML 파일에 접근 가능
○ MODE_WORLD_READABLE 및 MODE_WORLD_WRITEABLE은 Android 4.2(API Level 17) 부터
더 이상 사용되지 않아, Android:targetSdkVersion 값이 17보다 작은 애플리케이션은 영향을 받음
○ 앱에서 액티비티가 호출되면 key.xml 파일에 제공된 데이터가 작성됨
○ 사용자 이름과 비밀번호는 아래 파일에 일반 텍스트로 저장됨
● /data/data/<package-name>/shared_prefs/key.xml
○ MODE_WORLD_READABLE을 사용하면 모든 애플리케이션이 key.xml의 컨텐츠에 접근 가능
4. SQLite Databases
○ 모바일 환경에서 일반적으로 사용되는 경량 파일 기반 데이터베이스 (key value 쌍으로 이뤄짐)
○ 안드로이드 SDK는 SQLite 데이터베이스를 기본적으로 지원함
○ 특정 애플리케이션의 SQLite 데이터베이스에 저장된 데이터는 기본적으로 안드로이드 보안 제한으로 인해
다른 애플리케이션에 접근할 수 엇음
○ 데이터베이스를 관리하는 데 사용되는 기본 패키지는 android.database.sqlite
○ 두 가지 종류인 Unencrypted & Encrypted로 나눠볼 수 있음
[ Unencrypted ]
○ 암호화 되지 않은 일반 텍스트가 저장됨
○ 액티비티가 호출되면 제공된 데이터로 privateNotSoSecure 데이터베이스 파일이 작성
○ 아래 경로의 일반 텍스트 파일에 저장
● /data/data/<package-name>/databases/privateNotSoSecure
○ MODE_PRIVATE를 사용해 접근 설정
[ Encrypted ]
○ 지정한 비밀번호로 암호화된 정보가 저장됨
○ SQLCipher 라이브러리를 사용하면 SQLite 데이터베이스를 비밀번호로 암호화 가능
○ 이런 경우, 비밀번호가 소스에 하드 코딩되어 있거나 Shared Preferences에 저장되어 있거나
코드 또는 파일 시스템의 다른 곳에 숨겨져 있는지 판별해야 함
○ 키를 검색하는 가장 안전한 방법
● 앱을 열면 사용자에게 PIN 또는 비밀번호로 데이터베이스의 암호를 해독하도록 요청
● 서버에 키를 저장하고 웹 서비스에서만 접근할 수 있도록 허용
5. Internal Storage
○ 내부 저장소는 파일을 저장하는데 사용
○ 각 애플리케이션은 /data/data/<package-name>와 같은 디렉토리를 생성해, 해당 디렉토리는 생성한
애플리케이션 전용이며 다른 애플리케이션은 접근할 수 없음
○ 사용자가 애플리케이션을 제거하면 내부 저장소에 저장된 파일도 제거됨
○ MODE_PRIVATE를 사용해 접근 설정
○ MODE_WORLD_READABLE 및 MODE_WORLD_WRITEABLE과 같은 모드는 보안 위협 발생
6. External Storage
○ 외부 저장소는 내부 저장소와 마찬가지로 파일을 저장하는데 사용
○ 이동식 저장 매체(예: 외부 SD 카드) 또는 내부일 수 있음
○ 모든 앱이 이 저장소에 접근하여 파일을 읽고 쓸 수 있기 때문에 민감한 파일은 저장해서는 안됨
○ 액티비티가 호출되면 파일이 작성되고 데이터가 외부 저장소의 일반 텍스트 파일에 저장됨
○ 또한 사용자가 애플리케이션을 제거할 때 애플리케이션 폴더 외부에 저장된 파일은 삭제되지 않음
'기반 지식 > Android' 카테고리의 다른 글
11. 녹스(Nox)에서 앱 SSL 자격증명 설치 (0) | 2024.12.21 |
---|---|
10. 안드로이드 dumpsys 패키지 정보 확인 (2) | 2024.12.20 |
8. GDA를 활용한 디컴파일 코드 분석 사례 (0) | 2024.12.13 |
7. Adroid 앱 코드 정적 분석 tool (0) | 2024.12.12 |
6. 모바일 취약점 진단 항목 (0) | 2024.12.09 |