취약점 소개
애플리케이션이 실행되면 일정량의 메모리를 차지하고 실행 중에 필요한 정보들이 저장됩니다.
안드로이드에서 프로세스가 생성되면 달빅 가상 머신을 사용해 해당 프로세스가 동작에 필요한 만큼 메모리를 할당하고, 더 사용해야 한다면 프로세스당 허용된 메모리 한계 안에서 필요한 만큼의 메모리를 할당합니다.
인시큐어뱅크 앱을 통해 메모리 영역에서 어떤 방법으로 데이터를 추출하고, 어떤 데이터들이 노출되는지 확인해보겠습니다.
취약점 분석
명령어 : < adb shell > -> < ps | grep inse >
위 명령어로 쉘에 접속해 현재 실행중인(메모리에 올라와있는) 인시큐어뱅크의 프로세스 ID를 알아냅니다.(3938)
명령어 : < adb shell am dumpheap 3938 /sdcard/Download/insecurebank_mem >
위 명령어로 인시큐어뱅크의 메모리 힙 부분을 덤프하여 파일로 추출해 /sdcard/Download/ 경로로 저장했습니다.
/sdcard 에 저장한 이유는, 사용자가 추가로 SD 카드를 구매하여 확장할 수 있는 공간으로, 루트가 아니더라도 쓰기 권한이 존재하기 때문입니다.
덤프가 정상적으로 되었다면, 해당 파일을 adb pull 명령어를 사용해서 PC로 받아옵니다.
명령어 : < adb pull /sdcard/Download/insecurebank_mem [다운로드경로] >
디바이스로부터 다운로드한 hprof 파일은 안드로이드에서 사용되는 달빅 머신 특유 포맷으로 생성되기 때문에 이클립스에서 지원하는 MAT(Memory Analyzer Tool)과 같은 프로그램으로 분석하기 위해선 변환이 필요합니다.
안드로이드SDK에 포함되어 있는 hprof-conv.exe 를 이용해 포맷을 바꿔주겠습니다.
C:\%안드로이드 sdk 설치 위치%\android-sdk\platfrom-tools 경로로 이동합니다.
platform-tools 디렉터리 안에 hprof-conv.exe를 실행시켜 줍니다.
명령어 : < hprof-conv.exe [메모리덤프파일 경로] [새로운 메모리덤프 파일 경로] >
아래와 같이 new_insecurebank_mem 파일이 생성된 것을 볼 수 있습니다.
해당 new_insecurebank_mem 파일을 HxD 로 열어 보겠습니다.
위 그림에 나와있듯이 평문으로 유저ID와 Password가 메모리에 올라와 있었습니다.
취약점 대응 방안
많은 모바일 서비스의 특성상 사용자들은 모두 아이디와 패스워드를 저장하고 사용하길 원합니다. 서비스를 이용할때 마다 계정정보를 입력하지 않는다는 것은 어딘가에 계정 정보가 저장되어 있다는 것이고, 이는 메모리에 정보가 남아 있다는 의미입니다.
이를 서버에 저장된 안전한 키로 암호화하여 저장하면 위협은 줄어들지만, 그렇지 않은 서비스 앱들이 많습니다. 루팅 권한을 획득했을 때 다양한 비밀번호들이 메모리 영역에 저장되어 있으므로 2차 피해가 발생할 수 있는 취약점 입니다.
금융권에서는 "스마트폰 보안 안전 대책 이행 실태 점검 체크리스트" 항목 중 종단 간 암호화End-to-End 적용 여부를 체크합니다.
공격자들이 중간에 메모리값을 가로채더라도 암호화된 상태를 유지하는 것을 권장합니다.
'Android' 카테고리의 다른 글
앱 취약점 - < 인자 전달값 조작 > 분석 (0) | 2021.08.19 |
---|---|
앱 취약점 - < 안전하지 않은 HTTP 통신 > 분석 (0) | 2021.08.19 |
앱 취약점 - < 루팅 탐지 및 우회 > 분석 (0) | 2021.08.16 |
앱 취약점 - 로컬 암호화 이슈 분석 (0) | 2021.08.14 |
앱 취약점 - 취약한 인증 메커니즘 분석 및 대응 방안 (0) | 2021.08.13 |