본문으로 바로가기

안드로이드·갤럭시·AOS 취약점진단/모의해킹 무료 강의 학식(hagsig)

 

가. 취약점 정의

- 안드로이드 앱은 로컬 스토리지에 파일을 저장할 수 있다.

- 환경설정 정보, 외부 API 연동 및 인증을 위한 토큰 값, 연동 서버 정보 등이 로컬 스토리지에 저장된다.

- 루팅 된 환경에서는 애플리케이션이 다른 애플리케이션의 디렉터리에 접근할 수 있으므로 데이터를 탈취할 수 있다.

- 중요 데이터가 평문 형태로 저장되어 제삼자에게 유출될 경우 2차피해로 이어질 수 있다.

 

1. 안드로이드 디바이스 디렉터리 구조

- 내부 저장소(Internal Storage)와 *외부 저장소(External Storage)로 구분된다.

*외부 저장소 : /mnt/sdcard, /sdcard

- 애플리케이션 삭제 시 내부 저장소에 저장된 파일은 삭제된다.

- 내부 저장소에 생성된 디렉토리는 생성한 애플리케이션 전용이며 다른 애플리케이션은 접근할 수 없다.

- 반면 외부 저장소에 생성된 파일 및 디렉터리는 모든 애플리케이션이 접근할 수 있다.

디렉터리 설명
/ - root 파일 시스템 디렉터리
- booting과 관련된 설정파일을 참고하여 초기 프로세스 정보가 포함
/system - 안드로이드 운영체제 홈 디렉터리
- 안드로이드 UI 및 사전에 설치된 앱이 포함되고 운영체제 파일이 존재
/data - 사용자 앱 상태 정보가 포함된 파일 시스템 디렉터리
/cache - 자주 사용하는 데이터 및 앱 컴포넌트를 저장하는 디렉터리로 읽기/쓰기 권한 존재
- 브라우저 캐시같이 일시적인 사용자의 상태정보가 포함
/system/app - 시스템에 의해 미리 설치된 앱 경로
/data/app - 사용자에 의해 설치된 앱 경로
/data/data/<package> - 설치 앱 패키지 경로, 루트 권한으로 접근 가능
- 애플리케이션 설치 시 해당 경로에 패키지 이름과 같은 디렉터리가 생성됨
- 해당 디렉토리는 생성한 애플리케이션 전용이며 다른 애플리케이션은 접근할 수 없음
/data/data/<package>/files - 애플리케이션이 소유한 데이터 또는 파일 저장
/data/data/<package>/lib - 애플리케이션에 요청하는 라이브러리 파일 저장
/data/data/<package>/databases - 설정 파일, 컨텐츠 파일 등의 쿼리 정보가 포함된 SQLlite 데이터베이스 파일
- SQLlite는 모바일 환경에서 일반적으로 사용되는 경량 파일 기반 데이터베이스이다
- 안드로이드 SDK는 SQLite 데이터베이스를 기본적으로 지원한다
- 특정 애플리케이션의 SQLite 데이터베이스에 저장된 데이터는 다른 애플리케이션에 접근할 수 없다
/data/data/<package>/cache - 브라우저 캐시같이 일시적인 사용자의 상태정보가 포함
/data/data/<package>/shared_prefs - XML 파일로 저장이 되며, 키(key)-값(value)으로 이루어져 있다.
- 앱의 환경설정이나 인증정보등이 저장
/mnt/sdcard
/sdcard
- External 또는 Internal SD Card 경로
- SD카드와 같은 외부 저장소를 말하며 내부 저장소와 마찬가지로 파일을 저장하는 데 사용됨
- 모든 앱이 이 저장소에 접근하여 파일을 읽고 쓸 수 있으므로 민감한 정보는 여기에 저장하면 안됨
- 애플리케이션을 제거해도 외부 저장소에 저장된 파일은 삭제되지 않음
/system/app/앱이름.apk - 시스템 앱 공간
- 세이프모드로 부팅이 될 시에는 시스템 앱들이 가능한 앱들이 실행
/data/app/앱이름.apk - 사용자가 다운로드한 앱들의 공간
/data/davik-cache  - dex 파일이 보관

 

※ 앱이 정확히 어느 경로에 파일을 저장 또는 변경하는지 알 수 없을 경우 아래의 명령어를 통해 찾을 수 있다.

//30분 이내 변경된 파일 검색
find / -type f -mmin -30 -ls

//30일 이내 변경된 파일 검색
find / -type f -mtime -30 -ls

 

나. 대응방법

- 로컬 저장소에 저장된 데이터는 노출될 우려가 있으므로 최소한의 정보만 저장한다.
- 중요정보를 저장해야 하는 경우 안전한 암호화 알고리즘을 이용하여 저장한다.

분류 미국(NIST) 일본(CRYPTREC) 유럽(ECRYPT) 국내
대칭키 암호 알고리즘 AES-128/192/256
3TDEA
AES-128/192/256
Camellia-128/192/256
AES-128/192/256
Camellia-128/192/256
Serpent-128/192/256
SEED
HIGHT
ARIA-128/192/256
LEA-128/192/256
공개키 암호 알고리즘
(메시지 암·복호화)
RSA
(사용 권고하는
키길이 확인 필요)
RSAS-OAEP RSAS-OAEP RSAES
일방향 암호 알고리즘 SHA-224/256/384/512 SHA-256/384/512 SHA-224/256/384/512
Whirlpool
SHA-224/256/384/512

출처 : 개인정보의 안정성 확보조치 기준 해설서, KISA, 2020.12.

 

다. 취약점 진단 실습

1. 분석 대상 앱 설치

- 실습을 위해 DIVA 애플리케이션을 설치한다.

※ DIVA 앱이 설치되어있지 않은 사람은 아래의 글을 참고하여 앱을 설치하길 바란다.

[AOS App 취약점 진단 · 모의해킹] - 안드로이드 DIVA 설치 및 실행방법 정리

 

안드로이드 DIVA 설치 및 실행방법 정리

1. 안드로이드 DIVA 란? - 안드로이드(Android, AOS)에서 사용하는 애플리케이션(Application, App)에 대해 취약점 진단을 실습할 수 있는 환경을 제공한다. - 2016년 이후 업데이트가 중단되었다. 2. 실습할

hagsig.tistory.com

 

2. DIVA 앱 실행

- 3.INSECURE DATA STORAGE - PART 1 → 아이디(ID, username)와 패스워드(password) 입력 → SAVE

 

3. 저장된 데이터 확인

- ADB를 이용하여 디바이스에 접근한다.

※ NOX 에뮬레이터의 경우 adb connect 127.0.0.1:62001 명령어를 입력하여 연결할 수 있다.

adb connect 127.0.0.1:62001 #NOX일경우 해당 명령어를 통해 연결 가능
adb devices #디바이스 리스트 및 연결가능 여부가 출력됨
adb shell #디바이스에 연결

 

※ adb에 대한 자세한 사용방법은 아래의 게시글을 참고하자.

[AOS App 취약점 진단 · 모의해킹] - adb 다운로드, 디바이스 연결 및 파일 송수신 명령어 정리

 

adb 다운로드, 디바이스 연결 및 파일 송수신 명령어 정리

가. Android Debug Bridge(adb) 정의 - adb(안드로이드 디버그 브릿지)는 기기와 통신할 수 있도록 지원하는 다목적 명령줄 도구이다. - 디바이스에서 다양한 명령어를 실행하는 데 사용할 수 있는 Unix Shel

hagsig.tistory.com

 

- 애플리케이션 *내부 저장소 설치 디렉터리로 이동. 루트권한이 없을 시 접근할 수 없음.

*내부 저장소 설치 디렉토리 경로 : /data/data/[package_name]

cd /data/data/jakhar.aseem.diva #패키지 이름은 앱과 비슷하므로 유추가 가능함

 

- *ls -alR 명령어를 입력, SAVE 버튼을 눌렀을 때의 시간으로 AccessTime이 변경된 파일을 찾는다.

*ls -alR : 하위 디렉토리 경로에 있는 모든 파일 및 폴더를 리스트 형태로 출력한다. 

 

- shared_prefs 디렉터리에 존재하는 xml파일에서 위에서 입력한 아이디/패스워드가 평문으로 저장된 것을 확인할 수 있음.

cat /data/data/jakhar.aseem.diva/shared_prefs/jakhar.aseem.diva_preferences.xml

 

라. 참고 URL

- Shared Preferences 설명 페이지

https://developer.android.com/training/data-storage/shared-preferences?hl=ko

 

SharedPreferences로 단순 데이터 저장하기  |  Android 개발자  |  Android Developers

DataStore는 로컬 데이터를 저장하는 최신 방법을 제공합니다. SharedPreferences 대신 DataStore를 사용해야 합니다. 자세한 내용은 DataStore 가이드를 참고하세요. SharedPreferences로 단순 데이터 저장하기 컬

developer.android.com