2016년 11월 22일 화요일

‘디지털’ 증거의 ‘물리적’ 수집


[Tech Report] ‘디지털’ 증거의 ‘물리적’ 수집



  • AhnLab


  • 2013-04-09

디지털 포렌식 영역에서 점차 중요성이 커지고 있는 스마트폰 포렌식, 그 중에서도 안드로이드 운영체제(OS) 포렌식에 대해 월간안 3월호를 시작으로 자세히 살펴보고 있다.



지난 호에선 안드로이드 OS에 대한 전반적인 지식과 ‘콘텐트 프로바이더’를 통한 ‘논리적’ 증거 수집에 대해 살펴 보았다. 이번 호에서는 안드로이드 포렌식에서 중요한 부분을 차지하고 있는 ‘루팅(Rooting)’에 대해 갼략히 알아본 뒤, 이를 이용한 ‘물리적’ 수집 방법에 대해 살펴보고자 한다. 또한 획득한 증거를 분석하는 방법에 대해서도 설명하려 한다.

 

<연재 목차>

1부 : 안드로이드 OS, 숨겨진 속살을 파고들다(월간 안 3월호)

2부 : ‘디지털’ 증거의 ‘물리적’ 수집(이번 호) 

 

리눅스를 기반으로 제작된 안드로이드 OS는 리눅스와 동일한 사용자 권한 체계를 사용한다. 이 때문에 리눅스에서 관리자 권한 획득을 의미하는 ‘루트(root)’는 안드로이드 OS에서도 동일하게 사용된다. 월간 안 3월호 안드로이드 포렌식 1부 말미에서 언급했던 것처럼 확실한 안드로이드 포렌식을 위해 루팅(Rooting)이 필요한 경우가 있다. 루팅을 통해 데이터 파일에 접근하고 물리적으로 데이터를 수집할 수 있기 때문이다.

 

그러나 루팅된 스마트폰 사용 시 보안 위협에 노출될 가능성이 높기 때문에 안드로이드 스마트폰 제조사들은 관리자 권한 획득과 관련된 ‘su’ 명령을 삭제했다. 이로 인해 일반적인 방법으로는 안드로이드의 관리자 권한을 획득할 수 없다. 그렇다면 과연 안드로이드 환경 하에서 루팅을 통해 관리자 권한을 획득하려면 어떻게 해야 할까. 분석가 및 포렌식 분석을 위한 정보의 관점에서는 안드로이드 루팅 방법을 상세히 살펴보는 것이 필요하겠지만, 스마트폰 루팅을 통한 관리자 권한 획득 방법은 악용될 소지가 높은 만큼 불가피하게 루팅 방법의 종류 및 방법 등에 대해 간략하게 설명하고자 한다.



익스플로잇으로 일시적 권한 획득



일반적으로 알려진 루팅 수행 방법은 다음과 같이 크게 세 가지로 구분할 수 있다. 먼저 커널 취약점을 공격하는 ‘익스플로잇(Exploit)’을 사용하는 방법이다. 커널 취약점을 공격하는 익스플로잇을 실행시켜 일시적으로 관리자 권한을 획득하는 것이다. 이 같은 일시적인 권한 획득 방법은 기기가 재부팅되면 원래 상태로 되돌아가는 한계가 있다. 따라서 관리자 권한을 획득한 뒤에 증거 수집 작업을 진행하거나, 지속적인 루팅 상태를 유지하기 위해 ‘su’ 명령을 커널에 삽입하는 방법을 사용하기도 한다.



[그림 1]은 안드로이드 2.2 버전에서 익스플로잇을 통해 공격을 수행한 결과다. 공격 수행 과정을 간단히 요약하면 이렇다. 먼저 ADB를 통해서 익스플로잇 파일을 ‘/data/local/tmp’ 경로에 업로드한다. 이 경로는 모든 사용자에 대해 읽기와 쓰기, 실행 권한을 부여하므로 관리자 권한 없이도 파일을 업로드할 수 있다. 익스플로잇 파일을 업로드한 뒤에는 파일 실행을 위해 명령어 ‘chmod’로 실행 권한을 부여하고 익스플로잇을 실행시킨다. 공격이 모두 완료되면 ADB 연결을 끊고 다시 연결한다. 연결에 성공하면 [그림 1]과 같이 루트 권한 획득을 눈으로 확인할 수 있다.



 

[그림 1] 익스플로잇을 통해 공격을 수행한 결과

 

 

커스터마징된 커널 이미지 플래싱



또 다른 루팅 방법으로는 커스터마이징(Customizing)된 커널 이미지를 플래싱하는 방법이 있다(스마트폰 이미지를 기기에 업로드하는 것을 일반적으로 플래싱(Flashing)이라고 한다.) 이 방법을 이용하면 루팅이 되었거나, 루팅이 가능한 커널 이미지를 플래싱해, 기존 커널 이미지를 덮어 씌운 뒤 관리자 권한을 득할 수 있다. 하지만 이 방법은 기종과 빌드 버전에 따라 서로 다른 커널 이미지를 제작해야 하는 번거로움이 있다.

 

커널 이미지 플래싱 방법 역시 수행 과정에서 한 가지 주의해야 할 점이 있다. 루팅을 수행하고 원래 상태로 되돌아가기 위해선 기존 원본 커널 이미지를 다시 업데이트 해야 한다. 때문에 루팅 작업을 수행하기 전, 원본 커널 이미지 준비를 잊지 말아야 한다.



리커버리 모드 update.zip 파일 사용



마지막으로 리커버리 모드에서 사용하는 ‘update.zip’ 파일을 사용하는 방법이다. 리커버리 모드란, 제조사에서 제공하는 또 다른 부팅 모드다. 이 모드에선 시스템 업데이트나 사용자 데이터 삭제 혹은 공장 초기화 등의 기능을 수행할 수 있다. 단 리커버리 모드로 부팅하는 법은 기기마다 모두 다르다.



update.zip 파일은 시스템 업데이트에 필요한 변경 내용만을 저장하는 이미지다. 따라서 시스템을 업데이트할 때 update.zip 파일을 사용하면 변경된 내용만 업데이트가 가능하다. 일반적으로 ‘sdcard’에 update.zip 파일을 복사하고 리커버리 모드에서 [그림 2]와 같이 ‘apply sdcard:update.zip’을 선택하면 update.zip 파일의 내용이 시스템에 업데이트된다.

 

 

[그림 2] 리커버리 모드에서 update.zip을 통한 시스템 업데이트

 

리커버리 모드에서는 그 이미지에 따라 해당 기능에 대한 메뉴 명이 달라질 수 있다. 특정 리커버리 모드에선 기능을 지원하지 않는 경우도 있다. 예컨대 구글의 레퍼런스폰인 넥서스 시리즈의 리커버리 모드에서는 해당 기능을 지원하지 않는다.



일반적인 update.zip 파일의 구조는 [그림 3]과 같다. ‘/META-INF/com/google/android’ 경로 아래에는 ‘update-binary’ 파일과 ‘updater-script’ 파일이 있다. 여기서 중요한 파일은 ‘updater-script’ 파일이다(안드로이드 1.6 버전 이전에는 파일 명이 ‘update-script’다). 이 파일은 수행할 작업의 목록을 수록하고 있는데, 수행 가능한 작업은 포맷, 마운트, 파일 복사, 파일 삭제, 프로그램 실행 등이다.

update-binary 파일은 C binary로 ‘updater-script’ 파일의 스크립트 언어를 파싱해 실행하는 역할을 수행한다. update-binary 파일은 사용자가 생성할 수 있는 파일은 아니다. 웹에서 다운받거나 이미 생성된 update.zip 파일에서 구해야 한다.

  

 

[그림 3] update.zip 파일의 구조

 

위의 방법을 한 문장으로 요약하면, update.zip 파일을 통해 루팅하기 위해선 su 명령을 기기의 ‘/system/bin/’ 폴더에 복사하도록 updater-script를 작성하고 리커버리 모드에서 실행시켜야 한다는 것이다.



지금까지 간략하게 안드로이드 스마트폰을 루팅하는 방법에 대해 살펴보았다. 여러가지 다양한 루팅 방법이 이제껏 공개돼 왔지만 어느 하나 완벽하게 모든 기기에 대해 루팅을 수행할 순 없었다. 끊임없이 진행되는 운영체제 버전 업데이트는 제쳐놓고서라도, 수십 개의 서로 다른 제조사들이 만들어 내는 안드로이드 스마트폰들을 모두 루팅할 수 있는 방법을 찾기란 거의 불가능에 가깝기 때문이다. 결론적으로, 분석가는 자신이 분석하려는 기기의 운영체제 버전과 제조사에 따라 알맞은 루팅 방법을 찾아 분석을 진행해야 한다.



물리적 증거수집의 실제



만약 루팅에 성공했다면, ADB(Android Debug Bridge)를 통해 원하는 모든 데이터를 추출할 수 있다. 즉, 안드로이드 애플리케이션(응용 프로그램)에 있는 사용자 데이터들을 저장한 SQLite DB 파일에 접근해 파일을 추출하는 것이 가능하다는 얘기다.  

 

[표 1]는 표준 안드로이드 OS에서 기본적으로 저장되는 사용자의 데이터 경로를 표로 정리한 것이다. 안드로이드의 레퍼런스 스마트폰인 넥서스원을 대상으로 수집한 정보로, 기기에 따라 경로 정보는 조금씩 다를 수 있다.



[표 1] 표준 안드로이드 사용자의 데이터 경로

 

이외에 써드 파티(3rd Party) 애플리케이션들이 저장하는 각 데이터들이 있으나, 여기서 모든 애플리케이션의 데이터들을 다루는 것은 부적절하므로 생략한다.



기본적으로 사용자의 데이터는 userdata 파티션이 마운트되어 있는 ‘/data’ 경로 아래에 저장된다. 특히 애플리케이션이 생성하는 데이터들은 ‘/data/data/’ 아래에 저장된다. 여기서 하나 주의할 점은 이 경로들이 절대적인 것이 아니라, 제조사마다 조금씩 다를 수 있다는 점이다. 예를 들어 Galaxy S의 경우, 애플리케이션이 생성하는 데이터들이 ‘/dbdata/’ 경로 아래에 저장된다. 이 경로는 userdata 파티션 외에 별도 파티션을 만들어 마운트한 경로다.

 

 

이밖에 안드로이드 스마트폰은 내∙외장 SD카드를 사용해 데이터를 저장하기도 한다. 저장되는 데이터는 멀티미디어 데이터(사진, 동영상, 음악), 대용량 응용프로그램 데이터 등이 있다.



SD카드에 저장된 데이터를 수집하는 대표적인 방법은 기기의 USB 설정을 이용하는 것이다. [그림 4]와 같이 안드로이드 기기를 USB 케이블을 통해 PC에 연결하고 ‘USB 저장소 사용’을 설정하면 일반 USB와 같이 SD카드로 접근이 가능하다. SD카드를 PC에 연결해 USB처럼 접근하는 방법은 기기마다 모두 다르니, 검색을 해보거나 기기 매뉴얼에서 찾아야 한다.



위의 방법 외에도 SD카드는 ADB를 통해서도 접근이 가능하다. 일반적으로 SD카드는 ‘/sdcard’ 경로 아래 마운트돼 있다. 게다가 SD카드는 특별한 권한이 걸려있지 않기 때문에 루팅 여부와 관계없이 접근할 수 있다. 특히, ADB의 ‘pull’ 옵션을 사용하면 SD카드로부터 데이터를 PC로 바로 저장할 수 있다.



SD카드에 저장되는 가장 대표적인 데이터는 멀티미디어 파일이다. 보통 안드로이드의 기본 카메라는 사진과 동영상 파일을 ‘/sdcard/dcim/camera/’ 경로에 저장한다. 따라서 이 경로로 접근하면 사진, 동영상 파일을 수집할 수 있다.



그러나 다른 다양한 응용프로그램이 생성하는 멀티미디어 파일들은 위의 경로에 저장되지 않는다. 이에 따라 외장 SD카드의 모든 멀티미디어 파일을 수집하기 위해서는 ‘/external-숫자.db' 파일의 내용을 참조해야 한다. 안드로이드 OS에서는 스캔 과정을 통해 외장 SD카드에 저장되는 모든 멀티미디어 파일(사진, 동영상, 음악)들을 /external-숫자.db 파일에 저장한다. 이 데이터베이스의 내용을 참조하면 외장 SD카드에 저장된 모든 멀티미디어 파일을 수집할 수 있다.



 

[그림 4] USB 연결을 통한 외장 SD카드 접근



기본적인 애플리케이션 데이터 분석



[표 1]에서 정리한 대부분의 데이터들은 SQLite DB 형태로 저장된다. 이는 ‘SQLite Expert’ 혹은 ‘SQLite Database Browser’ 같은 프로그램을 활용하면 내용을 확인할 수 있다.  



 

[그림 5] SQLite Expert(http://sqliteexpert.com)

 

위와 같은 도구를 이용해 데이터베이스의 내용을 확인한다고 하더라도, 그 의미를 파악하기란 쉽지 않다. 결국 이런 도구들로 분석가가 의미있는 정보를 캐내기 위해서는 데이터베이스 구조와 각 필드 값이 갖는 의미를 일일이 알고 있어야 한다. 다음의 설명을 통해서 안드로이드의 기본 애플리케이션 데이터베이스 구조를 비교적 상세히 알아보려는 이유가 바로 여기에 있다.



1) 연락처



연락처 정보는 ‘raw_contacts’ 테이블, ‘mimetypes’ 테이블, ‘group’ 테이블, ‘data’ 테이블을 조합해 구성한다. raw_contacts 테이블에는 연락처 객체 정보가 저장되며 group 테이블에는 연락처의 그룹 정보가 저장된다. mimetypes 테이블에는 연락처가 가질 수 있는 데이터의 타입 정보가 저장되며 data 테이블에는 각 연락처의 실제 데이터가 저장된다. 각 테이블에 대한 상세 설명은 다음과 같다.

 

 [표 2] raw_contacts 테이블 정보

 

 [표 3] group 테이블 정보

 

 [표 4] mimetypes 테이블 정보

 

 [표 5] data 테이블 정보

 

2) 통화 기록



통화 기록 정보는 연락처 정보와 같은 데이터베이스(contacts2.db)의 calls 테이블에 저장된다.

 [표 6] calls 테이블 정보

 

3) SMS



SMS 정보는 ‘mmssms.db' 파일의 sms 테이블에 저장된다. sms 테이블에 대한 상세 설명은 아래와 같다.

 [표 7] sms 테이블 정보

 

4) MMS



MMS 정보는 SMS 정보와 마찬가지로 ‘mmssms.db' 파일에 저장된다. 하나의 MMS 정보는 pdu 테이블과 addr 테이블, part 테이블이 조합돼 구성된다. pdu 테이블에는 MMS 문자의 객체 정보와 발∙수신 시간이, addr 테이블에는 전화번호와 발∙수신 정보가 저장된다. part 테이블에는 문자 내용이 저장된다. 각 테이블에 대한 상세 설명은 다음과 같다.

 

 [표 8] pdu 테이블 정보



 [표 9] addr 테이블 정보

 

 [표 10] part 테이블 정보

 

 

5) 일정



일정 정보는 ‘calendar.db' 파일의 Events 테이블과 Calendar 테이블에 저장된다. Calendar 테이블에는 일정을 포함하는 달력들의 정보가 저장되고 Events 테이블에는 각 일정들에 대한 정보가 담긴다. 각 테이블에 대한 상세 정보는 다음과 같다.

 [표 11] Calendar 테이블 정보

 

 [표 12] Events 테이블 정보

 

6) 메일



메일 정보는 메일 목록 정보와 메일 내용 정보 등 크게 두 가지다. 메일 목록과 기타 설정 정보는 ‘EmailProvider.db' 파일에, 메일 내용 정보는 ‘EmailProviderBody.db' 파일에 각각 저장된다. Account 테이블에는 메일을 연동시킬 때 입력한 계정 정보(메일 주소)가, HostAuth 테이블에는 연동에 사용되는 프로토콜, URL, 포트, 로그인 아이디∙패스워드가 각각 저장된다. Mailbox 테이블에는 메일을 담고 있는 메일함 정보가 저장된다. Message 테이블에는 메일 목록 정보, Attachment 테이블에는 첨부파일 정보, Body 테이블에는 메일 내용이 저장된다. 각 테이블에 대한 상세 설명은 다음과 같다.

 

 [표 13] Account 테이블 정보

 

 [표 14] HostAuth 테이블 정보

 

 [표 15] Mailbox 테이블 정보

 

 [표 16] Message 테이블 정보

 

 [표 17] Attachment 테이블 정보

 

 [표 18] Body 테이블 정보

 

7) 웹 브라우저



웹 브라우저 정보는 다음의 세 가지 파일에 저장된다. ‘browser.db' 파일에는 웹 히스토리 정보를 비롯해 즐겨찾기 정보, 검색어 정보가 저장되며 ‘webView.db' 파일에는 쿠키, Form Data, Form URL, password 정보가 각각 저장된다. ‘webViewCache’ 파일에는 웹 캐시 정보가 저장된다.

 [표 19] bookmarks 테이블 정보

 

 [표 20] searches 테이블 정보

 

 [표 21] cookies 테이블 정보

 

 [표 22] formurl 테이블 정보

 

 [표 23] formdara 테이블 정보

 

‘formdata’ 란 웹 페이지 내에서 Form을 통해 입력한 데이터들을 말한다. 예를 들어 네이버 영어사전 웹 페이지 내에서 '입력 Form'에 기재된 데이터들은 아래 [그림 6]과 같이 저장된다. 해당 페이지와 formdata 맵핑(mapping)은 formurl 테이블의 url 정보를 통해 이뤄진다. 



 

 [그림 6] Form Data의 예

 

 [표 24] password 테이블 정보

 

 [표 25] cache 테이블 정보

 

8) 알람



알람 정보는 ‘alarm.db' 파일의 alarms 테이블에 저장된다.

 [표 26] alarms 테이블 정보

 

9) 다운로드



다운로드 정보는 사용자가 웹 브라우저나 메일, 마켓 등에서 다운로드한 파일이나 응용프로그램에 대한 정보다. ‘downloads.db' 파일의 downloads 테이블에 저장된다.

 

 [표 27] downloads 테이블 정보

 

10) 구글 지도



구글 지도 정보는 위치 검색 정보와 즐겨찾기 정보 등 두 가지로 구성된다. 위치 검색 정보는 ‘search_history.db' 파일에, 즐겨찾기 정보는 ’DATA_STARRING’ 파일에 각각 저장된다. 각 정보에 대한 상세 설명은 다음과 같다.



 [표 28] suggestions 테이블 정보



구글 지도의 즐겨찾기 정보의 경우, SQLite 데이터베이스를 사용하지 않는다. 대신 독자적인 포맷으로 다음과 같이 저장된다.

  

[그림 7] 구글 지도의 즐겨찾기 정보

 

파일 안에 저장되는 정보는 URL 정보다. 해당 정보를 웹 브라우저에 입력하면 구글 지도 서비스를 통해 위치를 확인할 수 있다. 보통 즐겨찾기 URL 정보에는 위도∙경도 정보가 인자로 포함되지만 해당 검색어가 구글 데이터베이스에 등록된 회사나 상점일 경우 ‘CID(Company ID)’가 인자로 포함된다.



다음 그림은 즐겨찾기로 등록된 URL(http://maps.google.com/?cid=15469662836763013479)을 웹 브라우저를 통해 확인한 내용이다.



 

[그림 8] 즐겨찾기 정보 확인

 

 

멀티미디어 데이터, 저장 위치 파악해야



앞서 언급한 바와 같이, 안드로이드 OS는 멀티미디어 데이터(사진, 동영상, 오디오)를 기본적으로 SD카드에 저장하나 그 외의 멀티미디어 데이터들은 SD카드 내에서도 응용프로그램마다 다르게 저장된다. 따라서 SD카드 내에 존재하는 멀티미디어 데이터들을 분석하기 위해선 먼저 각 멀티미디어 데이터들의 저장 위치부터 파악해야 한다.



안드로이드 OS는 주기적으로 SD카드를 전체 스캔해 멀티미디어 파일의 저장 위치를 ‘external-숫자.db’ 파일에 저장한다. 다음 그림은 ‘external-숫자.db’ 파일의 테이블 구조다.

 

 

[그림 9] ‘external-숫자.db’ 파일의 테이블 구조의 예



각 테이블의 이름을 살펴보면 어떠한 정보를 저장하는지 쉽게 유추가 가능하다. 예를 들어 images 테이블에는 사진 파일의 위치 정보가, video 테이블에는 동영상 파일의 위치 정보가 각각 저장된다. audio_meta 테이블은 오디오 파일의 위치 정보를 저장한다.



기기에 따라 사진, 동영상, 오디오 파일 외의 파일들의 정보를 저장하는 경우도 있다. 삼성 Galaxy 시리즈의 경우 사진, 동영상, 오디오 파일 외에 워드 파일(doc)과 안드로이드 응용 프로그램 설치 파일(apk) 등의 정보를 추가 저장한다. 다음은 각 멀티미디어 테이블들이 가지는 공통적인 필드에 대한 설명이다.



 [표 29] 멀티미디어 테이블 정보

 

위치 정보 분석도 가능



이번에는 안드로이드 스마트폰 내에서 획득할 수 있는 위치 정보에 대해 설명하겠다. 분석 대상은 기기에 상관없이 기본적으로 얻을 수 있는 정보를 대상으로 한다.



1) GPS 캐시 정보



GPS 캐시 정보는 GPS에서 마지막으로 수신된 위치 정보를 저장하고 있다. 이 때문에 하나의 위치 정보만 저장이 된다.



 [표 30] CachedPosition 테이블 정보

 

CachedPosition 테이블에 저장된 정보는 위도, 경도, 시간 정보이므로 사용자가 해당 시간에 특정 위치에 있었다는 증거로 활용할 수 있다.



2) Wi-Fi 정보



기본적으로 안드로이드 스마트폰은 데이터 통신을 위해 Wi-Fi 연결을 지원한다. 사용자가 특정 Wi-Fi에 접속하면 접속한 Wi-Fi AP의 SSID 정보와 MAC 주소가 기기 안에 자동 저장된다.



SSID 정보의 경우, 텍스트 형태로 ‘wpa_supplicant.conf’ 파일에 저장된다. 해당 파일은 ‘/data/misc/wifi/wpa_supplicant.conf’ 경로에 위치한다. 일반적으로 관리자가 Wi-Fi AP의 SSID를 설정할 때, Wi-Fi AP가 위치한 장소 이름을 그대로 따오는 경우가 많다. 이를 테면 ‘Westin Conference 3rd Floor’ 나 ‘LAX OneWorld Lounge’ 와 같이 건물 이름이나 구역 이름을 그대로 사용하는 것이다. ‘wpa_supplicant.conf’에서 수집한 SSID 정보를 통해 사용자가 해당 장소에서 Wi-Fi에 접속한 사실을 알 수 있게 되는 셈이다. 다음 그림은 ‘wpa_supplicant.conf’ 파일에 저장된 SSID 정보의 한 예다.

 

[그림 10] wpa_supplicant.conf 파일에 저장된 SSID 정보의 예



또한 MAC 주소는 ‘cache.wifi’ 파일에 저장된다. 해당 파일은  ‘/data/data/com.google.android.location/files/cache.wifi’ 경로에 자리한다. 다음 그림은 ‘cache.wifi’ 파일 안에 저장된, 접속했던 Wi-Fi MAC 주소들이다.

 

[그림 11] ‘cache.wifi’ 파일 안에 저장된 MAC 주소 정보

 

이렇게 수집된 Wi-Fi MAC 주소는 다음에 설명할 기지국 Cell Tower ID 정보와 함께 GPS 정보로 변환해 위치 정보로 활용할 수 있다.



3) 기지국 정보



안드로이드 스마트폰 안에는 기기가 접속했던 기지국들의 Cell Tower ID 정보가 캐시 형태로 남겨져 있다. Cell Towser ID 정보란 기지국 고유의 ID를 말한다. Cell ID의 형식은 ‘MCC:MNC:LAC:Cell_ID’다. MMC는 나라 정보를 가리키며 MNC는 통신사 정보를 뜻한다. 그리고 LAC는 지역 정보, Cell_ID는 기지국 정보를 각각 가리킨다.



Cell Tower ID 정보는 ‘cache.cell’ 파일 안에 저장된다 파일의 경로는 ‘/data/data/com.google.android.location/files/cache.cell’ 이다. 다음 [그림 12]는 cache.cell 파일 안에 저장된 Cell Tower ID 이다.

 

 

[그림 12] cache.cell 파일 안에 저장된 Cell Tower ID 정보

 

수집된 Cell Tower ID 정보는 앞서 설명한 Wi-Fi AP의 MAC 주소와 함께 위치 정보로 활용할 수 있다. 구글에서는 전세계 안드로이드 폰에서 수집한 위치 정보를 통해 Cell Tower와 AP들의 위치를 데이터베이스에 저장하고 있다. 아울러 이 정보를 활용할 수 있도록 구글 기어 지오로케이션 (Google Gear Geolocation) API를 제공한다.



Cell Tower ID 정보나 Wi-Fi AP의 Mac 주소를 알고 있다면 구글 기어 지오로케이션 API를 통해 해당 정보를 GPS 정보로 변환할 수 있다. 변환된 GPS 정보는 지도 상의 특정 위치를 나타내므로 사용자의 위치 히스토리를 구성하는 데에 활용할 수 있다. [그림 13]은 구글 기어 지오로케이션 API를 사용해 Cell Tower ID 정보와 Wi-Fi AP의 Mac 주소를 입력했을 경우의 결과 값으로 GPS 위치 정보를 받아오는 예다.

 



 

 [그림 13] 구글 기어 지오로케이션 API 사용의 예

 

구글 기어 지오로케이션(Google Gear Geolocation) API를 사용해 MAC 주소를 GPS 정보로 변환하는 도구는 ‘http://www.codeproject.com/KB/IP/GoogleGeoLocator.aspx’에서 다운받을 수 있다. 해당 도구는 주변에 위치한 Wi-Fi AP의 MAC 주소를 활용, 사용자의 현재 위치를 계산한다. 



 

[그림 14] 구글 기어 지오로케이션 API 사용 도구

 

이를 통해 계산된 GPS 위치 정보는 다음 그림과 같이 ‘구글 지도’를 통해 확인할 수 있다.

 

[그림 15] 구글 지도를 통한 위치 정보 확인

 

4) 사진 안에 저장된 위치 정보



안드로이드 기본 카메라로 사진을 찍을 경우, 카메라의 위치 저장 설정을 통해 사진의 위치 정보를 저장할 수 있다. 위치 저장을 설정하면 GPS가 동작하게 되고 사진 안에 ‘Exif’ 형식으로 위도와 경도 정보, GPS 수신 시간이 자동 저장된다. 이를 통해 사용자의 위치 히스토리를 구성할 수 있다.

 

[그림 16] 위치 저장 설정과 사진 안에 저장된 GPS 위치 정보

 

삭제된 데이터를 복구하려면?



그렇다면 안드로이드 기기 내에 저장돼 있던 정보가 삭제되었을 때, 복구하는 방법은 무엇일까. 안드로이드에서의 삭제 데이터 복구는 SQLite 데이터베이스 내의 삭제 레코드 복구와 SD카드 내의 삭제된 파일 복구 등 두 가지 방법이 있다.



1) SQLite 데이터베이스의 삭제된 레코드 복구



앞에서 설명했듯, 안드로이드 운영체제는 중요한 데이터의 대부분을 SQLite 데이터베이스 형태로 저장한다. 중요 데이터의 대부분은 SQLite 데이터베이스의 레코드 형태로 존재하는 것이다.



만약 사용자의 데이터를 삭제했을 경우, SQLite 데이터베이스는 해당 레코드가 위치한 부분을 비할당 영역으로 변경한다. 이렇게 비할당 영역으로 변경된 부분은 다른 레코드가 덮어쓰거나, SQLite 데이터베이스의 가비지 컬렉션(비할당 영역을 정리하는 작업) 작업이 수행되기 전까지 파일 내에 그대로 남아 있다. 이에 따라 비할당 영역에 남아 있는 레코드들을 복구하면 삭제된 데이터도 복구가 가능하다. 하지만 특정 SQLite 데이터베이스는 삭제된 레코드들을 바로 가비지 컬렉션하기 때문에 데이터 복구를 수행할 수 없다. 다음은 각 주요 정보 별 삭제 데이터 복구 가능성을 정리한 것이다.



 [표 31] SQLite 삭제 데이터 복구 여부

 

SQLite 삭제 레코드 복구에 대한 자세한 정보는 ‘2010 디지털 포렌식 기술 워크숍’에서 발표된 바 있는 ‘삭제된 SQLite 데이터베이스의 레코드 복구 연구’ 를 참조하기 바란다.



2) SD카드의 삭제된 파일 복구



안드로이드 OS는 USB 설정을 통해 SD카드와 PC의 연결을 지원한다. 이 방식을 사용해 SD카드와 PC를 연결하면 기존 USB와 동일하게 사용할 수 있다. 또한 안드로이드 SD카드는 FAT32 파일 시스템을 사용한다.



 

[그림 17] SD카드 파일 시스템 확인

 

따라서 기존 하드디스크에서 사용했던 파일 시스템의 메타데이터 복구와 카빙을 통한 복구 방식을 모두 그대로 적용할 수 있다. 다음 그림은 상용 삭제 데이터 복구 도구인 ‘Recovery My Files’을 사용해 SD카드 내 삭제 데이터를 복구하는 장면이다.

 

[그림 18] ‘Recovery My Files’를 통한 SD카드 내 삭제 데이터 복구

 

지금까지 안드로이드 OS에서의 루팅의 의미와 수행 방법, 루팅을 통해 수집한 데이터에 대한 분석 방법 등에 대해 살펴보았다.



다음 호에서는 또 다른 안드로이드 포렌식 방법인 이미징 작업에 대해 알아보도록 한다. 그리고 안드로이드 스마트폰에서 사용하는 파일 시스템인 YAFFS2 와 Ext4에 대해서도 다루도록 하겠다.@










  • AhnLab 로고



  • 솔루션서비스팀 오정훈 연구원




이 정보에 대한 저작권은 AhnLab에 있으며 무단 사용 및 도용을 금합니다.

단, 개인이 비상업적인 목적으로 일부 내용을 사용하는 것은 허용하고 있으나, 이 경우 반드시 출처가 AhnLab임을 밝혀야 합니다.

기업이 이 정보를 사용할 때에는 반드시 AhnLab 의 허가를 받아야 하며, 허가 없이 정보를 이용할 경우 저작권 침해로 간주되어 법적인 제재를 받을 수 있습니다. 자세한 내용은 컨텐츠 이용약관을 참고하시기 바랍니다.

정보 이용 문의 : contents@ahnlab.com


홈페이지 jQuery 라이브러리에서 CVE-2019-11358 취약점 패치 여부 확인 방법

현재 홈페이지에서 사용 중인 jQuery 라이브러리가 CVE-2019-11358 취약점 패치를 적용했는지 확인하는 방법은 다음과 같습니다. 1. jQuery 버전 확인 홈페이지 소스 코드를 확인하여 jQuery 라이브러리 버전을 직접 확인합니다. 웹 ...