이 글은 아래의 책 9장을 읽고 공부 목적으로 작성됨.
사티시 봄미세티, 「모바일 포렌식」, 에이콘출판, 2015
기기 이미징: 기기의 물리 또는 논리적 수집 과정
물리적 이미지: 기기 메모리의 비트 단위 복사본
비트 단위 이미지(-> 삭제된 파일과 접근 불가능한 파일도 복사, 즉 모든 데이터 복사) ≠ 기기 상의 콘텐츠를 복사해 붙여넣은 것(-> 사용 가능한 보이는 파일, 숨겨진 파일, 시스템 관련 파일만 복사 -> 논리적 이미지)
- 데스크탑에서의 이미징: 하드 드라이브를 제거해 write blocker에 연결, 비트 단위 포렌식 이미지를 도구로 얻어냄. -> 원본 하드디스크 보호됨.
- 안드로이드 기기에서의 이미징: 데이터를 담고 있는 모든 영역을 쉽게 분리할 수 없음. 모든 상호 작용이 기기의 상태에 변화를 만듦. -> 기기가 켜진 상태로 수집되면 기기에 변화를 주지 않고 분석하는 것이 불가능함.
안드로이드 기기의 파일 저장 공간
- 내부 저장소(internal storage): 내장된 비휘발성 메모리
- 외부 저장소(external storage): 분리 가능한 저장 공간
단 SD 카드와 같은 제거 가능한 공간을 가지지 않는 대신 가용한 저장 공간을 내/외부 저장소로 나누기도 함. -> 항상 분리 가능하지X.
조사가 어떻게 진행될지 모름. -> 기기에서 가능한 많은 데이터를 즉시 수집, 즉 전체 물리적 데이터 수집 후 법원이 허용하는 영역만 조사하는 것이 좋음.
안드로이드 기기에서 데이터 수집 기법: 수동 데이터 추출, 논리적 데이터 추출, 물리적 데이터 추출
1) 수동 데이터 추출
일반적인 유저 인터페이스를 사용해 메모리에 존재하는 데이터에 접근하는 방식. 각 화면이 캡처되어 증거로 제출될 수 있음.
단점: 운영체제가 접근 가능한 파일들만 조사 가능함.
주의 사항: 잘못된 버튼을 누르거나 데이터를 추가 또는 삭제하지 않도록 해야 함.
-> 수동 데이터 추출은 일반적으로 마지막 수단으로 사용되어야 함.
기기의 이미지를 얻기 위해 안드로이드 기기를 루팅해야 함. 루팅하면 슈퍼유저 권한을 획득, 모든 데이터에 접근 가능해짐.
-> 그러나 안드로이드 기기를 루팅하는 건 데이터를 삭제하는 등의 변화를 줄 수 있고, 따라서 이전에 조사하지 않는 기기에 대해 테스트를 해야 함.
루팅된 안드로이드 기기에서 포렌식 이미지를 얻는 과정
- 안드로이드 터미널 애뮬레이터(Android Terminal Emulator) 애플리케이션 설치, abd를 통해 설치하는 것을 추천
-> 설치가 완료되면 리눅스 명령어 대부분을 기기에서 실행 가능 - 명령어 실행
안드로이드 기기의 파일 시스템은 /dev 파티션 내의 다른 위치에 저장되어 있음.
-> mount 명령어 입력: /system, /data, /cache 파티션이 마운트된 블록 확인 가능(대부분의 데이터가 /data와 /system 파티션에 존재.) - dd 명령어 사용: 기기의 미가공 이미지를 생성하는 데 사용. 저수준 데이터를 복사해 비트 단위 이미지 생성에 도움.
dd if=/dev/block/파일명(데이터 파티션) of=/sdcard/tmp.image - 새로운 SD 카드 삽입: 이미지 파일을 카드에 복사
2) 논리적 데이터 추출
파일 시스템에 접근해 기기에 존재하는 데이터를 추출하는 방식. 대부분의 기기에서 동작 가능, 사용하기 쉬움. 이 경우에도 루팅이 되어있어야 함.
논리적 데이터 추출의 방법: abd pull 명령어 사용, content provider 사용
*adb: 명령행 도구, 정보를 추출하기 위해 기기와 통신하는 것을 도움.
1. adb pull 명령어
adb를 통해 안드로이드 기기에 접근하려면 USB 디버깅 옵션이 켜져 있어야 함.
애플리케이션 데이터 저장 위치
- Shared preferences: key-value 쌍으로 이뤄진 데이터가 XML 포맷으로 저장됨. /dat 디렉토리의 shared_pref 폴더에 저장.
- 내부 저장소: 개인 소유 데이터가 저장됨. 기기의 내부 메모리에 위치. 다른 애플리케이션에선 접근X.
- 외부 저장소: 공개된 데이터가 저장됨. /sdcard 디렉토리에서 찾을 수 있음.
- SQLite 데이터베이스: 보통 .db 확장자로 저장됨. /data/data/PackageName/ 데이터베이스에서 찾을 수 있음. 해당 파일에 존재하는 데이터는 SQLite 브라우저 혹은 명령어를 통해 볼 수 있음.
도구
adb pull <device_path> <local_path>
- adb pull 명령어: 데이터를 뽑아낼 수 있음.
- SQLite 브라우저(SQL Browser): 추출된 데이터를 분석하는 과정을 돕는 도구, .sqlite, .sqlite3, .sqlitedb, .db, .db3 확장자를 가진 데이터베이스 파일을 탐색할 수 있게 해줌.
정보 추출
- /data 디렉토리 추출: adb.exe pull /data c:\temp
- 기기 정보 추출 -> /system에 있는 bulid.prop 파일: cat build.prop
- 통화 기록 추출 -> /data/data/com.android.providers.contacts/databases/에 있는 contacts2.db 파일: adb.exe pull /data/data/com.android.providers.contacts/databases/contacts C:\temp
- SMS/MMS 추출 -> /data/data/com.android.providers.telephony/databases에 있는 mmssms.db 파일: db.exe pull /data/data/com.android.providers.telephony C:\teinp
- 브라우저 히스토리 추출 -> /data/data/com.android.browser에 있는 browser2.db 파일
2. content provider 사용
content provider: 다른 애플리케이션에 데이터를 공유하는 매커니즘을 가능하게 함. 하나 이상이 테이블 형태로 외부 애플리케이션에 데이터를 제공.
루팅 여부 관계 없이 모두 동작함.
- https://github.com/viaforensics/ android-forensics/downloads에서 AFLogical OSE 1.5.2 다운
- USB 디버깅 모드 활성화, 기기 워크스테이션에 연결
- 아래 명령어로 기기 인식되는지 확인
adb.exe devices - 홈 디렉토리에서 AFLogical OSE 앱 저장, 다른 명령어를 통해 기기에 설치
adb.exe - 애플리케이션이 설치되면 앱에 있는 Capture 버튼 클릭
- 앱이 컨텐트 프로바이더로부터 데이터 추출 시작, 추출이 끝나면 Data extraction completed 메시지 출력됨
- 추출된 데이터는 SD 카드 내 forensics 폴더에 CSV 파일로 저장됨
- 같은 디렉토리에 존재하는 info.xml 파일은 IMEI 번호, IMSI 번호, 안들외드 버전, 설치된 애플리케이션 정보 등을 제공
3) 물리적 데이터 추출
물리적 데이터 추출의 방법: JTAG, 칩오프
1. JTAG(joint Test Action Group)
기기의 전체 물리 이미지를 수집할 수 있음.
주의 사항: 기기가 잘못 다뤄지면 손상을 입을 수 있음. 훈련 및 경험 필요.
JTAG 방법을 통한 포렌식 단계
- JTAG에서 TAPs(device Test Access Ports)이 기기의 CPU에 접근하기 위해 사용됨. TAP이 확인되고 연결이 CPU에 도달하면 어떤 패드가 어떤 기능을 담당하는지 알아냄.
- 리드 선을 적절한 연결 핀에 납땜, 다른 한쪽은 CPU를 제어할 수 있는 기기에 연결함.
- CPU 구동을 위해 전원을 공급.
- NAND 플래시의 전체 바이너리 덤프 추출 가능.
- 포렌식 기법과 도구를 사용해 추출된 데이터 분석.
2. 칩오프(chip-off)
기기에서 NAND 플래시 칩을 제거하여 정보를 추출하는 방법.
해당 기법은 기기를 사용하지 못하게 만듦. 이는 기기에 NAND 플래시를 재부착하는 것이 어렵기 때문, 플래시 재부착 과정을 re-building이라고 부름.
-> 기기가 심각하게 손상을 입었거나 접근이 불가능할 때 가장 유용함.
칩 오프 기법을 통한 포렌식 단계
- 어떤 칩이 사용자 데이터를 담고 있는지 알기 위해 모든 칩이 조사되어야 함. 칩이 결정되면 NAND 플래시가 기기로부터 물리적으로 제거됨.
- 칩의 연결부가 제 기능을 하기 위해 칩을 깨끗하게 하고 복구.
- 특정 NAND 플래시 칩을 지원한느 하드웨어에 칩을 삽입, 칩을 읽음. 미가공 데이터를 .bin 파일로 수집.
- 수집한 데이터는 포렌식 기법과 도구로 분석.
메모리 카드 이미징
윈헥스(WinHex)를 사용한 SD 카드 이미징 과정
- 메모리 카드 연결: SD 카드를 메모리 슬롯에서 제거 후 포렌식 워크스테이션에 카드 리더기로 연결
- 카드에 쓰기 보호 적용: 원헥스의 Options > Edit Mode의 write-protected 모드를 선택
- 해시 값 계산: Tools > Compute hash
- 디스크 이미지 생성: File > Create Disk Image의 Raw image 옵션을 선택해 이미지 생성
'보안 > 모바일 포렌식' 카테고리의 다른 글
| [논문]Automated forensic analysis of mobile applications on Android devices (0) | 2025.10.29 |
|---|---|
| [11장]안드로이드 앱 분석과 포렌식 도구 개요 (0) | 2025.10.14 |
| [논문]The Android Forensics Automator(AnForA) (1) | 2025.10.01 |
| [1장]모바일 포렌식 입문 (0) | 2025.09.30 |