안녕하세요! 오늘은 '메모리 내 민감한 정보 저장' 에 대하여 인시큐어 뱅크앱을 통한 실습으로 알아보는 포스팅입니다.
['메모리 내 민감한 정보 저장' 이란?]
> 메모리는 주 기억 장치라고도 하며 물리적 메모리인 '램(RAM)'을 가리킵니다. 애플리케이션이 실행 중에 필요한 정보들이 여기에 저장기 때문에, 저희가 입력하는 모든 값과 앱의 모든 정보들이 메모리에 적재됩니다. 계속 적재되어 있는것은 아니고 메모리는 휘발성 이기 때문에 앱 종료시 RAM에 저장된 데이터들도 삭제됩니다! 문제는 이 데이터를 삭제전에 추출하기만 한다면 저희가 입력한 값들이 저장되어 있기때문에 보안에 매우 위험할 수 있다는 것입니다!
"메모리 포렌식" 을 통해 획득 가능한 정보
분류 | 설명 |
프로세스 , 스레드 정보 | 프로그램이나 파일이 실행 중이거나 이미 종료되었지만 메모리에 남아 있는 정보 추출 |
모듈, 라이브러리 정보 | 프로그램이나 파일이 실행 중이거나 이미 종료된 프로세스 관련 모듈 라이브러리 정보 추출 |
실행된 파일과 소켓 정보 | 실행 중이거나 이미 종료된 파일에 대한 정보와 네트워크 연결을 위해 사용되었거나 사용 중인 소켓 정보 추출 |
다양한 데이터 구조 | 메모리에만 존재하는 운영체제, 소프트웨어 및 파일과 관련된 다양한 데이터의 구조 정보 추출 |
1. 취약점 진단
1. 우선 Insecurebank 어플에 접속한 후 로그인을 해줍니다.
2. 그리고 계좌송금 서비스를 이용해 전송을 합니다. 이제 어플을 종료하지 않는 이상 메모리에는 저희가 로그인한 내역 , 송금한 내역이 남아있을 것 입니다.
3. 이후 메모리 덤프 파일을 얻기 위해서 cmd 로 와서 해당 명령어를 통해 인시큐어 뱅크 앱의 PID값을 알아냅니다.
(저의 경우엔 PID 값이 4704라고 뜨네요!)
> nox_adb shell (nox에 명령어창으로 접근)
> ps | grep inse ("inse"로 시작하는 패키지 명을 가진 현재 실행중인 어플의 정보를 출력한다)
4. 이후 해당 명령어를 통해 cmd창에서 nox기기의 sdcard/Download폴더에 메모리 덤프파일을 저장합니다.
> nox_adb shell am dumpheap [대상 어플의 PID값] [저장할 위치]
> exit (nox 창에서 나옴 , 다시 로컬 pc 명령어 창으로 돌아옴)
> nox_adb shell am dumpheap 4704 /sdcard/Download/insecurebankv2_mem
(덤프파일 추출후 NOX 기기내에 /sdcard/Download/insecurebankv2_mem 경로로 덤프파일 저장)
5. 이후 nox_adb shell 로 기기에 접속후 해당 경로로 가보면 메모리 덤프파일이 추출된 것을 확인하실 수 있습니다.
[ 참고로 sdcard 폴더는 사용자가 추가로 SD카드를 구매하여 확장할 수 있는 공간으로, 루팅을 안하더라도 기본적으로 쓰기 권한이 존재합니다! 그래서 이 경로로 메모리 파일 추출후 저장이 가능한 것!]
6. 덤프파일이 잘 저장된 것을 확인했으니 이제 로컬PC로 가져와 보겠습니다. 해당명령어를 통해 nox 기기 내부의 파일을 로컬PC로 가져올 수 있습니다.
> nox_adb pull [가져올 nox내부의 파일 경로] [가져온 파일을 저장할 로컬 PC경로]
> nox_adb pull /sdcard/Download/insecurebankv2_mem "D:\Insecure Bank"
7. 해당 경로로 이동해보면 메모리 덤프파일이 복사된 것을 확인하실 수 있습니다. 하지만 안드로이드 기기로부터 다운로드한 hprof 파일은 안드로이드에서 사용되는 달빅 머신 특유의 포맷으로 생성되기 때문에 분석할 수 있는 포맷으로 변환해줄 필요가 있습니다. 이를 위해서 안드로이드 SDK에 포함되어 있는 hprof-conv.exe 프로그램을 이용해서 포맷을 바꿔줘야 합니다!
8. hprof-conv.exe 파일은 로컬 PC에서 Appdata>local>Android>SDK>Platform-tools 에 hprof-conv.exe 존재합니다.
저의 경우엔 앱개발을 하기위해 Android Studio 를 설치했는데 거기에 hprof-conv.exe 파일이 있어서 그것을 사용해주었습니다!
9. hprof-conv.exe 가 있는 폴더로 오셔서 해당 명령어를 통해 포맷을 변경합니다.
> hprof-conv.exe [변환시킬 파일경로] [변환후 저장할 파일 경로와 이름]
> hprof-conv.exe "D:\Insecure Bank\insecurebankv2_mem" "D:\Insecure Bank\iNew_insecurebank2_mem"
10. 경로에 와보면 덤프파일이 변환 된 것을 확인하실수 있습니다! 이제 이 파일을 Hex_Editor로 분석해보겠습니다!
11. 포맷이 변환된 파일을 Hex_Editor로 열어서 검색창에 비밀번호 평문을 쳐보시면 보시는 바와 같이 로그인 했던 정보, 송금했던 정보가 평문으로 메모리에 저장되어 있는것을 확인하실 수 있습니다.
Dinesh@123$ 이라는 비밀번호를 검색 | 메모리 덤프파일에 저장된 것을 확인 |
2. 대응방안
> 메모리 내에 모든정보를 암호화 하기는 어려운 문제가 있을뿐 더러 메모리에 데이터를 저장 안할수는 없기에 100% 안전한 방법은 없습니다.
금융권에서는 '스마트폰 보안 안전 대책 이행 실태 점검 체크리스트' 항목 중에 "스마트폰 앱과 금융회사 전자 금융 서버 간의 종단 간 암호화 적용 여부" 점검에서 좀 더 확장하여 "확장 E2E(End to End)를 권고하고 있습니다.
이는 키보드로 입력하는 순간부터 암호화되어 최종적으로 체크하는 서버까지 암호가 되는 형태로 메모리 값을 가로채더라도 암호화 되어있기때문에 추가피해를 막을 수 있습니다.
긴 글 읽어주셔서 감사합니다!
'모바일 앱해킹(Android) > Insecure Bank' 카테고리의 다른 글
[Insecure Bank] 안드로이드 키보드 캐시 이슈 (0) | 2024.12.10 |
---|---|
[Insecure Bank] 안전하지 않은 로깅 메커니즘 취약점 (0) | 2024.12.08 |
[Insecure Bank] 애플리케이션 패칭 취약점 (0) | 2024.12.05 |
[Insecure Bank] 취약한 웹 뷰 실행 (0) | 2024.12.05 |
[Insecure Bank] 안전하지 않은 콘텐츠 프로바이더 접근 (0) | 2024.12.04 |