보안/모바일 포렌식

[9장]안드로이드 데이터 추출 기법

haerim9.9 2025. 10. 14. 16:58

이 글은 아래의 책 9장을 읽고 공부 목적으로 작성됨.

사티시 봄미세티, 「모바일 포렌식」, 에이콘출판, 2015


기기 이미징: 기기의 물리 또는 논리적 수집 과정

물리적 이미지: 기기 메모리의 비트 단위 복사본

 

비트 단위 이미지(-> 삭제된 파일과 접근 불가능한 파일도 복사, 즉 모든 데이터 복사) ≠ 기기 상의 콘텐츠를 복사해 붙여넣은 것(-> 사용 가능한 보이는 파일, 숨겨진 파일, 시스템 관련 파일만 복사 -> 논리적 이미지)

 

  • 데스크탑에서의 이미징: 하드 드라이브를 제거해 write blocker에 연결, 비트 단위 포렌식 이미지를 도구로 얻어냄. -> 원본 하드디스크 보호됨.
  • 안드로이드 기기에서의 이미징: 데이터를 담고 있는 모든 영역을 쉽게 분리할 수 없음. 모든 상호 작용이 기기의 상태에 변화를 만듦. -> 기기가 켜진 상태로 수집되면 기기에 변화를 주지 않고 분석하는 것이 불가능함.

 

안드로이드 기기의 파일 저장 공간

  • 내부 저장소(internal storage): 내장된 비휘발성 메모리
  • 외부 저장소(external storage): 분리 가능한 저장 공간
    단 SD 카드와 같은 제거 가능한 공간을 가지지 않는 대신 가용한 저장 공간을 내/외부 저장소로 나누기도 함. -> 항상 분리 가능하지X.

조사가 어떻게 진행될지 모름. -> 기기에서 가능한 많은 데이터를 즉시 수집, 즉 전체 물리적 데이터 수집 후 법원이 허용하는 영역만 조사하는 것이 좋음.

 

안드로이드 기기에서 데이터 수집 기법: 수동 데이터 추출, 논리적 데이터 추출, 물리적 데이터 추출

 

1) 수동 데이터 추출

일반적인 유저 인터페이스를 사용해 메모리에 존재하는 데이터에 접근하는 방식. 각 화면이 캡처되어 증거로 제출될 수 있음.

단점: 운영체제가 접근 가능한 파일들만 조사 가능함.

주의 사항: 잘못된 버튼을 누르거나 데이터를 추가 또는 삭제하지 않도록 해야 함.

-> 수동 데이터 추출은 일반적으로 마지막 수단으로 사용되어야 함.

 

기기의 이미지를 얻기 위해 안드로이드 기기를 루팅해야 함. 루팅하면 슈퍼유저 권한을 획득, 모든 데이터에 접근 가능해짐.

-> 그러나 안드로이드 기기를 루팅하는 건 데이터를 삭제하는 등의 변화를 줄 수 있고, 따라서 이전에 조사하지 않는 기기에 대해 테스트를 해야 함.

 

루팅된 안드로이드 기기에서 포렌식 이미지를 얻는 과정

  1. 안드로이드 터미널 애뮬레이터(Android Terminal Emulator) 애플리케이션 설치, abd를 통해 설치하는 것을 추천
    -> 설치가 완료되면 리눅스 명령어 대부분을 기기에서 실행 가능
  2. 명령어 실행
    안드로이드 기기의 파일 시스템은 /dev 파티션 내의 다른 위치에 저장되어 있음.
    -> mount 명령어 입력: /system, /data, /cache 파티션이 마운트된 블록 확인 가능(대부분의 데이터가 /data와 /system 파티션에 존재.)
  3. dd 명령어 사용: 기기의 미가공 이미지를 생성하는 데 사용. 저수준 데이터를 복사해 비트 단위 이미지 생성에 도움.
    dd if=/dev/block/파일명(데이터 파티션) of=/sdcard/tmp.image
  4. 새로운 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: 다른 애플리케이션에 데이터를 공유하는 매커니즘을 가능하게 함. 하나 이상이 테이블 형태로 외부 애플리케이션에 데이터를 제공.

루팅 여부 관계 없이 모두 동작함.

 

  1. https://github.com/viaforensics/ android-forensics/downloads에서 AFLogical OSE 1.5.2 다운
  2. USB 디버깅 모드 활성화, 기기 워크스테이션에 연결
  3. 아래 명령어로 기기 인식되는지 확인
    adb.exe devices
  4. 홈 디렉토리에서 AFLogical OSE 앱 저장, 다른 명령어를 통해 기기에 설치
    adb.exe
  5. 애플리케이션이 설치되면 앱에 있는 Capture 버튼 클릭
  6. 앱이 컨텐트 프로바이더로부터 데이터 추출 시작, 추출이 끝나면 Data extraction completed 메시지 출력됨
  7. 추출된 데이터는 SD 카드 내 forensics 폴더에 CSV 파일로 저장됨
  8. 같은 디렉토리에 존재하는 info.xml 파일은 IMEI 번호, IMSI 번호, 안들외드 버전, 설치된 애플리케이션 정보 등을 제공

 

 

3) 물리적 데이터 추출

물리적 데이터 추출의 방법: JTAG, 칩오프

 

1. JTAG(joint Test Action Group)

기기의 전체 물리 이미지를 수집할 수 있음.

주의 사항: 기기가 잘못 다뤄지면 손상을 입을 수 있음. 훈련 및 경험 필요.

 

JTAG 방법을 통한 포렌식 단계

  1. JTAG에서 TAPs(device Test Access Ports)이 기기의 CPU에 접근하기 위해 사용됨. TAP이 확인되고 연결이 CPU에 도달하면 어떤 패드가 어떤 기능을 담당하는지 알아냄.
  2. 리드 선을 적절한 연결 핀에 납땜, 다른 한쪽은 CPU를 제어할 수 있는 기기에 연결함.
  3. CPU 구동을 위해 전원을 공급.
  4. NAND 플래시의 전체 바이너리 덤프 추출 가능.
  5. 포렌식 기법과 도구를 사용해 추출된 데이터 분석.

 

2. 칩오프(chip-off)

기기에서 NAND 플래시 칩을 제거하여 정보를 추출하는 방법.

해당 기법은 기기를 사용하지 못하게 만듦. 이는 기기에 NAND 플래시를 재부착하는 것이 어렵기 때문, 플래시 재부착 과정을 re-building이라고 부름.

-> 기기가 심각하게 손상을 입었거나 접근이 불가능할 때 가장 유용함.

 

칩 오프 기법을 통한 포렌식 단계

  1. 어떤 칩이 사용자 데이터를 담고 있는지 알기 위해 모든 칩이 조사되어야 함. 칩이 결정되면 NAND 플래시가 기기로부터 물리적으로 제거됨.
  2. 칩의 연결부가 제 기능을 하기 위해 칩을 깨끗하게 하고 복구.
  3. 특정 NAND 플래시 칩을 지원한느 하드웨어에 칩을 삽입, 칩을 읽음. 미가공 데이터를 .bin 파일로 수집.
  4. 수집한 데이터는 포렌식 기법과 도구로 분석.

 


메모리 카드 이미징

 

윈헥스(WinHex)를 사용한 SD 카드 이미징 과정

  1. 메모리 카드 연결: SD 카드를 메모리 슬롯에서 제거 후 포렌식 워크스테이션에 카드 리더기로 연결
  2. 카드에 쓰기 보호 적용: 원헥스의 Options > Edit Mode의 write-protected 모드를 선택
  3. 해시 값 계산: Tools > Compute hash
  4. 디스크 이미지 생성: File > Create Disk Image의 Raw image 옵션을 선택해 이미지 생성