모바일/모바일 보안

단말기 내 중요정보 저장 여부

비니화이팅 2020. 10. 23. 00:35

취약점 개요

애플리케이션 사용 폴더 및 외부 저장소에 존재하는 파일 내 중요정보 저장 여부를 점검한다.

외부저장소에는 어떤 정보이든 서비스에 중요한 역할을 하는 정보를 저장해서는 안되며, 내부 저장소에 저장이 되더라도 암호화되어 안전하게 저장되어야 한다.

 

내부저장소와 외부저장소

안드로이드는 데이터를 저장할 때 내부 저장소와 내부 저장소로 나눌 수 있다.

내부 저장소

- 안드로이드 플랫폼, 시스템 등에서 사용되는 공간

- 안드로이드 API에 의해 권한이 통제

 

외부 저장소

- 애플리케이션 간 데이터 공유 가능

- WRITE_EXTERNAL_STROAGE 권한을 갖고 있는 애플리케이션은 설정에 따라 데이터를 읽고 쓰는 것이 가능

 

데이터를 저장하는 방법

1) Shared Preferences

- 원시 데이터를 저장하는 XML 파일로, bollean, float, int, long, string을 지원

 

2) 내부 저장소

- 안드로이드 플랫폼, 시스템 도구, 앱, 앱에서 사용하는 데이터가 저장되는 공간

- 안드로이드 보안 모델에 따라 보호받는 공간

- 일반사용자 권한으로 내부 저장소에 접근할 수 없음

- 각 앱은 자신의 패키지 이름과 일치하는 디렉터리를 생성하여 해당 디렉터리 안의 파일을 읽고 쓸 수 있음

- 영역에 저장된 데이터는 애플리케이션이 삭제될 때 함께 삭제

/ - 읽기 권한만 있는 루트 파일 시스템 디렉터리
- 부트와 관련된 설정 파일들을 참고한 초기 프로세스 정보가 포함
/system - 안드로이드 OS의 읽기 권한만 있는 홈 디렉터리
- HAL과 프레임워크가 포함되어 있는 라이브러리 파일, 데몬과 관련된 실행 파일, 폰트, 미디어, 시스템 앱들이 포함
/data - 쓰기, 읽기 권한이 있고 세팅과 설정을 할 수 있는 사용자 앱들과 상태 정보들이 포함된 파일 시스템 디렉터리
/cache - 쓰기, 읽기 권한이 있고 브라우저 캐시와 같이 일시적인 사용자의 상태정보가 포함
/system/app/앱 이름.apk - 시스템 앱들의 공간
- 최적화된 dex 코드는 /system/app/앱 이름.odex에 저장
- 세이프 모드로 부팅될 경우 이 파일 디렉터리에 있는 시스템들이 실행
/data/app/앱 이름.apk - 미리 등록되는 사용자 앱들의 공간
- 최적화된 dex 코드는 /data/dalvik-cache/앱 이름.odex에 저장
/data/app/<app-package-name>-1.apk - 사용자가 다운로드한 앱들의 공간
- 최적화된 dex코드는 /data/dalvik-cahce/data@app@<app-package-name>-1.apk@classes.dex로 저장
/mnt/secure/asec/<app-package-name>-1.asec - SD 카드에 숨어 있는 앱들의 공간
- 최적화된 dex 코드는 /data/dalvik-cacge.nbt@asec@<app-package-nam>-1@pkg.apk@classes.dex로 저장

 

3) 외부 저장소(SD 카드)

- /mnt/sdcard

- 앱 간 데이터 공유가 가능

- 저장되는 파일들은 어디서든 읽고 쓰기 가능

1) (애플리케이션)고유 영역

2) 공용 영역

- 사진, 비디오 등의 파일을 저장할 때 사용

- 삭제 시 애플리케이션에 영향을 받지 않음

 

4) SQLite 데이터베이스

- 안드로이드에서 사용하는 로컬 데이터베이스

- 확장자가 .DB로 끝나는 파일 기반 데이터베이스

- 파일은 /data/data/"애플리케이션 패키지명"/databases 경로에 생성

- 가상 디바이스를 사용할 경우 DDMS를 이용해 파일 구조 확인 가능, 실제 디바이스의 경우 보안상의 이유로 접근이 불가능

- 주로 서버와 통신하지 않는 간단한 앱을 만들 경우 SQLite를 사용

 

5) Network Connection

- 네트워크로 데이터를 저장하거나 불러오는 방법

- SQLite 데이터베이스, 간단한 텍스트 파일 등을 보낼 수 있음

 

/data/data/"앱 이름"

- 앱에 대한 정보를 가장 많이 획득할 수 있는 디렉터리는 "/data/data/앱이름"

root@shamu:/ # ls -ld /data/data/com.android.insecurebankv2
drwxr-x--x u0_a38   u0_a38            2020-10-22 22:15 com.android.insecurebankv2

 

앱의 대략적인 디렉터리 구조

root@shamu:/data/data/com.android.insecurebankv2 # ls -l
drwxrwx--x u0_a38   u0_a38            2020-10-22 22:15 app_textures
drwx------ u0_a38   u0_a38            2020-10-22 22:15 app_webview
drwxrwx--x u0_a38   u0_a38            2020-10-22 22:15 cache
drwxrwx--x u0_a38   u0_a38            2020-10-22 20:54 databases
lrwxrwxrwx install  install           2020-10-22 20:54 lib -> /data/app-lib/com.android.insecurebankv2
drwxrwx--x u0_a38   u0_a38            2020-10-22 22:15 shared_prefs
files - 관리자가 내부적으로 사용하는 파일 저장
(so, data, init 파일 등)
lib - 애플리케이션에 요청하는 라이브러리 파일
(so  파일)
databases - 설정 파일, 콘텐츠 파일 등의 쿼리 정보가 포함된 SQLite 데이터베이스 파일
(db 파일)
* sqlite db파일은 안드로이드에서 사용하는 로컬 데이터베이스
cache - 쓰기, 읽기 권한이 있고 브라우저 캐시와 같이 일시적인 사용자의 상태정보가 포함
share_prefs - XML 파일로 저장되며, 앱에 공유되는 설정 파일
* 디렉터리 내 OOO_preferences.xml에 앱의 설정 파일들이 포함되어 있음(암호화된 패스워드, IP주소)

 

SDCard stroage 확인

1. 외부저장소에 접근하여 어떤 디렉터리, 파일이 존재하는지 확인

C:\Program Files (x86)\Nox\bin>adb -e shell
root@shamu:/ # cd /mnt/sdcard
root@shamu:/mnt/sdcard # ls -l
drwxrwx--- root     sdcard_r          2020-10-22 20:46 Alarms
drwxrwx--x root     sdcard_r          2020-10-22 20:46 Android
drwxrwx--- root     sdcard_r          2020-10-22 20:54 Apps
drwxrwx--- root     sdcard_r          2020-10-22 20:46 DCIM
drwxrwx--- root     sdcard_r          2020-10-22 22:18 Download
drwxrwx--- root     sdcard_r          2020-10-22 20:46 Movies
drwxrwx--- root     sdcard_r          2020-10-22 20:46 Music
drwxrwx--- root     sdcard_r          2020-10-22 20:46 Notifications
drwxrwx--- root     sdcard_r          2020-10-22 20:51 Pictures
drwxrwx--- root     sdcard_r          2020-10-22 20:46 Podcasts
drwxrwx--- root     sdcard_r          2020-10-22 20:46 Ringtones
-rw-rw---- root     sdcard_r       60 2020-10-22 22:17 Statements_jack.html
root@shamu:/mnt/sdcard # cat Statements_jack.html

Message:Success From:999999999 To:555555555 Amount:777
<hr>root@shamu:/mnt/sdcard #

- 사용자의 거래 아이디와 거래한 금액이 평문으로 저장되어 있는 것을 확인할 수 있다.

 

Local stroage 확인

1. 취약점 도출 가능성이 있는 파일 추출

root@shamu:/data/data/com.android.insecurebankv2/shared_prefs # ls
WebViewChromiumPrefs.xml
com.android.insecurebankv2_preferences.xml
mySharedPreferences.xml
root@shamu:/data/data/com.android.insecurebankv2/shared_prefs #


C:\Program Files (x86)\Nox\bin>adb pull /data/data/com.android.insecurebankv2/shared_prefs/mySharedPreferences.xml
[100%] /data/data/com.android.insecurebankv2/shared_prefs/mySharedPreferences.xml

 

2. 추출한 파일 확인

 

3. 복호화 및 디코딩

- apk-tool을 이용하여 smali코드를 확인했더니 키 값이 하드코딩되어 있는 것을 확인하였다. 이를 이용하여 복호화하였다.

AES : aesencryption.net/devglan.com/online-tools/aes-encryption-decryption

Base64 : www.base64decode.org/