안드로이드·갤럭시·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 설치 및 실행방법 정리
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 다운로드, 디바이스 연결 및 파일 송수신 명령어 정리
- 애플리케이션 *내부 저장소 설치 디렉터리로 이동. 루트권한이 없을 시 접근할 수 없음.
*내부 저장소 설치 디렉토리 경로 : /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
'Mobile App 취약점 진단 · 모의해킹 > AOS App 취약점 진단 · 모의해킹' 카테고리의 다른 글
[AOS 취약점 진단] 06강 - 로컬저장소 내 평문 저장된 중요정보 확인(Text File 실습) (0) | 2023.12.02 |
---|---|
[AOS 취약점 진단] 06강 - 로컬저장소 내 평문 저장된 중요정보 확인(SQLlite Database 실습) (0) | 2023.12.02 |
[AOS 취약점 진단] 05강 - 하드코딩된 중요정보 확인(실습 3) (0) | 2023.11.18 |
[AOS 취약점 진단] 05강 - 하드코딩된 중요정보 확인(실습 2) (0) | 2023.11.18 |
[AOS 취약점 진단] 05강 - 하드코딩된 중요정보 확인(실습 1) (0) | 2023.11.18 |