본문으로 바로가기

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

 

가. 취약점 정의

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

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

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

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

 

1. 내부 저장소(Internal Storage)

- 애플리케이션 설치 시 /data/data/ 경로에 패키지 이름과 같은 디렉터리가 생성된다.

- 해당 디렉토리는 생성한 애플리케이션 전용이며 다른 애플리케이션은 접근할 수 없다.

- 애플리케이션을 제거하면 내부 저장소에 저장된 파일도 삭제된다.

 

1-1. Shared Preferences

- SharedPreferences 객체는 키(key)-값(value) 쌍이 포함된 파일을 가리키며, 앱의 환경설정이나 인증정보 등을 저장하는데 사용된다.

- /data/data/[package_name]/shared_prefs/ 경로에 .xml 확장자 파일로 저장된다.

 

1-2. SQLite Databases

- 모바일 환경에서 일반적으로 사용되는 경량 파일 기반 데이터베이스이다.
- 안드로이드 SDK는 SQLite 데이터베이스를 기본적으로 지원한다.
- 특정 애플리케이션의 SQLite 데이터베이스에 저장된 데이터는 다른 애플리케이션에 접근할 수 없다.
- /data/data/[package_name]/databases/ 경로에 .db 확장자 파일로 저장된다.

 

2. 외부 저장소(External Storage)

- SD카드와 같은 외부 저장소를 말하며 내부 저장소와 마찬가지로 파일을 저장하는 데 사용된다.
- 모든 앱이 이 저장소에 접근하여 파일을 읽고 쓸 수 있으므로 민감한 정보는 여기에 저장하면 안된다.

- 애플리케이션을 제거해도 외부 저장소에 저장된 파일은 삭제되지 않는다.

- /sdcard 또는 /mnt/sdcard 경로에 저장된다.

 

나. 대응방법

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

분류 미국(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 앱 실행

- 4.INSECURE DATA STORAGE - PART 2 → 아이디(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 : 하위 디렉토리 경로에 있는 모든 파일 및 폴더를 리스트 형태로 출력한다. 

 

- databases 디렉터리에 존재하는 ids2 파일의 데이터를 확인하기 위해 *pull 명령어를 사용한다.

*pull : 디바이스 내에 존재하는 파일을 PC로 추출하는 명령어.

- journal 파일은 SQLlite에서 write 이전으로 되돌아가고자 할 때 사용하는 롤백파일이므로 무시한다.

exit #adb pull 명령어를 사용하기위해 디바이스와 연결을 끊는다.
adb pull /data/data/jakhar.aseem.diva/databases/ids2

 

- 추출한 파일은 adb 폴더 내에 저장되어 있다.

- 'DB Browser for SQLite' 프로그램을 실행한 뒤 ids2 파일을 읽어온다.

프로그램이 설치되어있지 않다면 아래의 글을 참고하여 설치하도록 한다.

[iOS App 취약점 진단 · 모의해킹] - [iOS 취약점 진단] 03강 - 진단 도구 설치

 

[iOS 취약점 진단] 03강 - 진단 도구 설치

1. Cydia(시디아) - 탈옥을 성공하면 자동으로 설치되며, 앱 스토어에서 지원하지 않는 앱을 다운로드할 수 있다. - iOS가 지원하지 못하는 기능을 Cydia를 이용하여 설치할 수 있는데 이를 Tweak(트윅)

hagsig.tistory.com

 

- 데이터 보기 → myuser 테이블 선택

- 평문 저장된 아이디/패스워드를 확인할 수 있다.