취약점 개요
앱에 입력하는 모든 입력값과 앱이 실행되는 모든 정보들이 메모리에 적재되어 실행된 후, 실행이 완료되면 다른 데이터들로 채워진다. 해당 이용자 단말기 메모리 영역에서 이용자 중요정보의 평문 노출 여부 점검한다.
Honeycomb이후 버전의 메모리 구조
안드로이드에서는 자바 가상머신 대신 달빅 가상머신을 사용하여 앱을 구현한다. 프로세스가 실행될 때마다 달빅 가상 머신을 사용하여 동작에 필요한만큼 메모리를 할당하고, 더 사용해야 한다면 프로세스당 허용된 메모리 내에서 할당한다. (허용된 메모리 한계 이상을 사용하면 OOM(Out Of Menory)에러가 발생한다.
애플리케이션이 실행되는 동안 참조하고 정보를 저장하는 메모리 영역은 "Dalvik heap allocated" 영역이므로 해당 영역을 확인해야 한다.
메모리 포렌식
메모리 내 민감 정보를 얻기 위해 "메모리 포렌식"이라는 기법을 사용한다. 해당 기법을 통해 획득 가능한 정보는 다음과 같으며 이를 바탕으로 복호화된 파일 콘텐츠, 사용자 패스워드, 임시 저장 데이터 등의 정보를 찾아낼 수 있으며 저장되지 않고 메모리에 로드되어 실행되는 악성프로그램에 대한 분석이 가능하다.
1) 프로세스, 스레드 정보
2) 모듈, 라이브러리 정보
3) 실행된 파일과 소켓 정보
4) 다양한 데이터 구조 정보 : OS, 소프트웨어, 파일 관련 정보
ADB를 이용한 진단
1. PID를 확인한다.
C:\Program Files (x86)\Nox\bin>adb -s 127.0.0.1:62001 shell
root@shamu:/ # ps | grep inse
u0_a38 2831 1539 887200 104716 ffffffff b7514355 S com.android.insecurebankv2
root@shamu:/ # exit
2. am 명령어의 dumpheap 옵션으로 힙 메모리를 추출한다.
C:\Program Files (x86)\Nox\bin>adb -s 127.0.0.1:62001 shell am dumpheap 2831 /sdcard/Download/insecurebankv2_mem
- 안드로이드 운영체제는 기본적으로 /하위폴더에 읽기권한만 부여하기 때문에 권한이 없으면 파일, 폴더를 생성할 수 없다.
3. 파일이 정상적으로 저장되었는지 확인한다.
C:\Program Files (x86)\Nox\bin>adb -s 127.0.0.1:62001 shell
root@shamu:/ # cd /sdcard/Download
root@shamu:/sdcard/Download # ls
insecurebankv2_mem
4. 해당 파일을 로컬 드라이브로 다운로드한다.
C:\Program Files (x86)\Nox\bin>adb -s 127.0.0.1:62001 pull /sdcard/Download/insecurebankv2_mem C:\Android
[100%] /sdcard/Download/insecurebankv2_mem
5. 포맷 변경
다운로드한 hprof 파일은 달빅 머신 특유의 포맷으로 생성하기 때문에 MAT(Memory Analyzer Tool)로 분석하기 위해서는 변환해야 한다.
C:\Users\hyebeen\AppData\Local\Android\Sdk\platform-tools>hprof-conv.exe hprof-conf C:\Android\insecurebankv2_mem C:\Android\NEW_insecurebankv2_mem
6. 헥사에디터로 확인
GDB를 이용한 진단
fridump