본문으로 바로가기

안드로이드·갤럭시·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 앱 권한 설정

- 설정 → 애플리케이션 → Diva → 권한 → '저장' 권한 활성화

 

3. DIVA 앱 실행

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

※ '저장' 권한을 활성화하지 않으면 SAVE 버튼 클릭 시 "File error occurred"라는 오류(에러) 문구가 출력되며 저장을 실패한다.

 

 

4. 저장된 데이터 확인

- 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

 

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

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

 

- cat 명령어를 통해 .uinfo.txt 파일의 데이터를 확인해 보니 위에서 입력한 아이디/패스워드가 저장되어 있음을 확인할 수 있다.

cat /sdcard/.uinfo.txt