Logical 획득/IOS
목차
파일 전송 프로토콜 사용[편집]
로지컬 획득 프로그램[편집]
- 1. USBMuxd
- 로지컬 획득을 위해서는 공통적으로 USBMuxd라는 과정이 반복되어야 한다. PC와 iDevice가 통신하려면 iDevice가 USB pipe를 통하여 PC와 연결되고 PC와 iDevice가 통신할 수 있도록 하는 USBMuxd 과정이 진행된다.
- 로지컬 획득을 위해서는 공통적으로 USBMuxd라는 과정이 반복되어야 한다. PC와 iDevice가 통신하려면 iDevice가 USB pipe를 통하여 PC와 연결되고 PC와 iDevice가 통신할 수 있도록 하는 USBMuxd 과정이 진행된다.
아래 그림과 같이 USBMux Client인 PC가 iDevice와 응답을 주고받으면서 잘 연결되었는지 확인한다. 연결이 이루어졌으면 iDevice가 PC에 Device ID를 전송하고 PC는 USB Pipe를 통한 TCP 연결 요청을 보낸다.
- 2. 통신 개요
- 로지컬 획득 프로그램에서 서비스생성을 위한 프로세스를 개시하면 iDevice가 연결된 PC를 신뢰할 수 있는지 검증하는 Pairing 과정이 실행되고 검증이 완료되면 iDevice가 PC에 통신 포트 번호를 전송한다.
- 로지컬 획득 프로그램에서 서비스생성을 위한 프로세스를 개시하면 iDevice가 연결된 PC를 신뢰할 수 있는지 검증하는 Pairing 과정이 실행되고 검증이 완료되면 iDevice가 PC에 통신 포트 번호를 전송한다.
서비스 생성 후에는 iDevice에 요청된 서비스를 실행하는 데몬 프로세스가 동작하고 이 프로세스와 통신할 수 있는 TCP socket 핸들이 로지컬 획득 프로그램에 반환된다.
- 3. 프로그램 종류
- USBMuxd 과정을 구현한 오픈 소스를 기반으로 한 로지컬 획득 프로그램으로 Libimobiledevice[1]가 있다.
- USBMuxd 과정을 구현한 오픈 소스를 기반으로 한 로지컬 획득 프로그램으로 Libimobiledevice[1]가 있다.
Libimobiledevice는 Nikias Bassen이 개발한 크로스 플랫폼 소프트웨어 라이브러리로 iDevice가 지원하는 대부분의 프로토콜을 지원한다.
- Pymobiledevice[2]는 Libimobiledevice를 파이썬으로 구현한 프로그램으로 iDevice가 지원하는 프로토콜 중에서 가장 중요한 프로토콜인
- Pymobiledevice[2]는 Libimobiledevice를 파이썬으로 구현한 프로그램으로 iDevice가 지원하는 프로토콜 중에서 가장 중요한 프로토콜인
AFC, MobileBackup2, File Relay, Installation Proxy, House Arrest 등을 지원한다.
신뢰성 검증[편집]
각 프로토콜 별로 어떤 종류의 데이터가 획득되는지 테스트하기 위하여 오픈소스로 구현된 프로토콜 획득 프로그램인 Libimobiledevice와 Pymobiledevice를 사용하였고 각각의 프로토콜 별 구현된 기능을 신뢰할 수 있는지에 대하여 검증하였다.
- 1 검증 방법
- 각 프로토콜을 이용하여 데이터를 획득한 후에 아래 그림과 같이 dd 명령어를 사용하여 iOS 기기의 데이터 파티션 영역 “rdisk0s1s2”에 대한 이미징을 수행하였다. 각 프로토콜 별 획득 데이터와 덤프한 이미지에 있는 데이터를 비교하여 일치하는지 확인하였다.
- 2 검증 결과
- 2-1 AFC
- AFC 서비스를 이용하여 “/var/mobile/Media” 경로에 있는 데이터를 획득할 수 있다. 아래그림은 AFC를 이용하여 획득한 DCIM 내의 그림 파일과 덤프이미지에서 획득한 DCIM 내의 그림 파일을 EnCase로 확인한 화면이다.
- AFC 서비스를 이용하여 “/var/mobile/Media” 경로에 있는 데이터를 획득할 수 있다. 아래그림은 AFC를 이용하여 획득한 DCIM 내의 그림 파일과 덤프이미지에서 획득한 DCIM 내의 그림 파일을 EnCase로 확인한 화면이다.
두 방식 동일하게 IMG_0001.JPG, IMG_0002.JPG, IMG_0003.JPG 세 개의 파일이 추출되었다.
- 2-2 Mobile Backup2
- Mobile Backup2 서비스를 이용하여 획득한 데이터와 덤프 이미지에 저장된 데이터를 비교한 결과 두 방식의 저장된 데이터가 동일하였다.
- Mobile Backup2 서비스를 이용하여 획득한 데이터와 덤프 이미지에 저장된 데이터를 비교한 결과 두 방식의 저장된 데이터가 동일하였다.
- 2-2 Mobile Backup2
아래 그림은 MobileBackup2를 이용하여 획득한 데이터 중 “Data\wireless\Library\Preferences” 경로에 있는 데이터를 iTools로 열람한 화면과 덤프 이미지에 저장된 같은 경로의 데이터를 EnCase로 열람한 화면이다.
- 2-3. File Relay
- File Relay 서비스를 이용하면 위의 표에 있는 데이터를 획득할 수 있다. File Relay 서비스를 이용하여 획득한 데이터와 덤프 이미지에 저장된 데이터를 비교한 결과 두 방식의 저장된 데이터가 동일하였다.
- File Relay 서비스를 이용하면 위의 표에 있는 데이터를 획득할 수 있다. File Relay 서비스를 이용하여 획득한 데이터와 덤프 이미지에 저장된 데이터를 비교한 결과 두 방식의 저장된 데이터가 동일하였다.
- 2-3. File Relay
아래 그림은 File Relay를 이용하여 획득한 데이터 중 “/Library/Preferences/SystemConfiguration” 경로에 있는 데이터를 리눅스 운영체제에서 열람한 화면과 덤프 이미지에 저장된 같은 경로의 데이터를 EnCase로 열람한 화면이다.
- 2-4 Installation Proxy
- Installation Proxy 서비스를 이용하여 iOS 기기에 설치되어 있는 애플리케이션 목록을 획득할 수 있다.
- Installation Proxy 서비스를 이용하여 iOS 기기에 설치되어 있는 애플리케이션 목록을 획득할 수 있다.
- 2-4 Installation Proxy
아래 그림은 iPhone 기기에 실제 설치된 애플리케이션과 Installation Proxy를 이용하여 애플리케이션 목록을 출력한 화면이다.
실제 기기에 설치된 애플리케이션과 Installation Proxy를 이용하여 출력한 목록에 있는 애플리케이션이 일치하였다.
AFC (Apple File Connection)[편집]
1. 특징
- AFC는 iOS 기기와 iTunes 간에 파일 교환을 위해 사용되는 서비스로 /var/mobile/Media 이하에 있는 파일 및 디렉토리의 입출력 서비스를 제공한다.
2. 조건
- AFC 프로토콜을 사용하기 위해서는 iOS 기기의 비밀번호 해제가 필요하다. 아이폰 5S의 경우 지문인식이 설정되어있다면 해제해야한다. 또한 iOS 기기가 컴퓨터에 연결될 때 “이 컴퓨터를 신뢰하시겠습니까?” 라는 메시지가 뜨면 “신뢰”를 클릭하여야 한다.
3. 데이터 획득 방법
- 3-1. AFC 서비스 생성
- AFC 서비스는 “com.apple.afc” 서비스를 호출하여 시작된다.
- 3-2 데이터 획득
- 아래 표에 명시된 API를 이용하여 “/var/mobile/Media” 내의 디렉토리를 재귀적으로 순회하면서 데이터를 획득한다.
구분 | API | 설명 |
---|---|---|
디렉토리 |
AFC_OP_MAKE_DIR | 디렉토리 생성 |
AFC_OP_READ_DIR | 디렉토리 읽기 | |
AFC_OP_REMOVE_PATH | 디렉토리 삭제 | |
AFC_OP_RENAME_PATH | 디렉토리 이름 변경 | |
파일 |
AFC_OP_FILE_OPEN | 파일 열기 |
AFC_OP_FILE_CLOSE | 파일 닫기 | |
AFC_OP_READ_FILE | 파일 일기 | |
AFC_OP_WRITE_FILE | 파일 쓰기 | |
AFC_OP_FILE_SEEK | 파일 포인터 이동 | |
AFC_OP_FILE_TELL | 파일 포인터 위치 읽기 | |
AFC_OP_GET_FILE_INFO | 파일 정보 얻기 | |
기타 |
AFC_OP_GET_DEVINFO | 기기 정보 얻기 |
- 3-3 데이터 획득 과정
- 명령 프롬프트에서 “afc.py”를 입력하여 Pymobiledevice의 afc 프로토콜을 실행시킨다.
- ls 명령어로 디렉토리 목록을 확인한 후 원하는 디렉토리로 이동한다.
- “pull <파일이름>” 명령어로 데이터를 획득한다. 데이터는 “afc.py”가 존재하는 폴더 내에 저장된다.
Mobile Backup2[편집]
1. 특징
MobileBackup2는 iOS 기기의 “/var/mobile/Media”, “/var/mobile/Library”, “/var/mobile/Applications”에 존재하는 사용자 데이터 및 설정 정보를 고속으로 백업하는 서비스이다.
MobileBackup (com.apple.mobilebackup)은 iOS 4 이전 버전에서 사용된 프로토콜이고 iOS 4 부터는 mobilebackup2 (com.apple.mobilebackup2) 프로토콜이 사용된다.
SMS, 통화기록, 애플리케이션 데이터 등 다양한 사용자 정보 획득이 가능하지만 사용자가 백업 암호를 설정한 경우 모든 데이터가 AES-256-CBC 알고리즘으로 암호화되어 획득되고,
증거로서 가치가 있는 “/var/tmp”, “/var/mobile/Library/SafeHarbor”, “/Library/Logs/CrashReport” 및 “/var/mobile/Media” 경로의 일부 데이터를 획득하지 않는 문제가 있다.
MobileBackup2 서비스로 백업된 데이터는 SHA1으로 인코딩된 이름으로 아래 표에 있는 사용자 컴퓨터의 디렉토리에 저장된다.
SHA1으로 인코딩된 파일의 iOS 기기 내의 경로는 Backup 디렉토리 내의 Manifest.mbdb 파일을 참조하여 디코딩할 수 있다.
운영체제 | 백업 경로 |
---|---|
Windows XP |
C:\Documents and Settings\[UserName]\Application Data\Apple Computer\MobileSync\Bakcup |
Windows 7/8 |
C:\Users\[UserName]\AppData\Roaming\Apple Computer\MobileSync\Backup |
Mac OS X |
~\Library\Application Support\MobileSync\Backup |
2. 조건
Mobile Backup2 프로토콜을 사용하기 위해서는 iOS 기기의 비밀번호 해제가 필요하다. 아이폰 5S의 경우 지문인식이 설정되어있다면 해제해야한다.
또한 iOS 기기가 컴퓨터에 연결될 때 “이 컴퓨터를 신뢰하시겠습니까?” 라는 메시지가 뜨면 “신뢰”를 클릭하여야 한다.
3. 데이터 획득 방법
- (가) MobileBackup2 서비스 생성
- MobileBackup2 서비스는 “com.apple.mobilebackup2” 서비스를 호출하여 시작된다.
- (나) Info.plist 파일 생성
기기 이름, GUID, 전화번호, 제품 종류, 제품 버전 등이 저장되는 Info.plist 파일을 생성한다.
- (다) 데이터 획득
- MobileBackup2 서비스는 정해진 프로토콜에 따라 송수신하며 데이터를 획득한다.
- (라) 데이터 획득 과정
- 명령 프롬프트에서 “idevicebackup2.exe backup [경로]”를 입력하여 libimobiledevice의 mobilebackup2 프로토콜을 실행시킨다. “[경로]”에는 백업 파일이 저장될 경로를 입력한다.
아래 그림과 같이 데이터를 송수신하며 지정한 경로에 데이터를 백업한다.
데이터 백업이 완료된다.
아래 그림과 같이 지정한 경로에 데이터가 백업되어 있는 것을 확인할 수 있다.
File Relay[편집]
1. 특징
File Relay는 연결된 iOS 기기에서 아래 표에 정의된 데이터 소스를 백업하여 cpio.gz로 묶어서 반환해주는 서비스이다.
다음 표는 File Relay가 백업하는 데이터 소스 목록이다. File Relay 서비스는 백업 암호 잠김 유무에 상관없이 tmp, cahce, SafeHarbor 등 증거로서 가치가 있는 데이터를 획득할 수 있다는 장점이 있다.
데이터 소스 | 파일/디렉토리 |
---|---|
AppleSupport |
/var/logs/AppleSupport |
Caches |
/var/mobile/Library/Caches |
CrashReporter |
/Library/Logs/CrashReporter /var/mobile/Library/Logs/CrashReporter |
Mobile WirelessSync |
/var/mobile/Library/Logs/MobileWirelessSync |
Lockdown |
/var/root/Library/Lockdown 이하 activation_records, data_ark.plist, par_records /Library/Logs/lockdownd.log |
MobileInstallation |
/var/mobile/Library/MobileInstallation 이하 ArchivedApplication.plist, ApplicationAttributes.plist, SafeHarbor.plist |
SafeHarbor |
/var/mobile/Library/SafeHarbor |
Network |
/var/log 아래 ppp, racoon.log, eapolclient.en0.log |
System Configuration |
/Library/Preferences /SystemConfiguration |
UserDatabases |
/var/mobile/Library 이하 Addressbook, CallHistory, Mail/Envelope Index, SMS, NOtes |
VPN |
/var/log/racoon.log |
WiFi |
/var/lo/wifimanager.log /var/lo/eapolclient.en0.log |
tmp |
/var/tmp |
unknown |
/var/mobile/Media |
2. 조건
FileRelay 프로토콜을 사용하기 위해서는 iOS 기기의 비밀번호 해제가 필요하다. 아이폰 5S의 경우 지문인식이 설정되어있다면 해제해야한다.
또한 iOS 기기가 컴퓨터에 연결될 때 “이 컴퓨터를 신뢰하시겠습니까?” 라는 메시지가 뜨면 “신뢰”를 클릭하여야 한다.
3. 데이터 획득 방법
- (가) File Relay 서비스 생성
- File Relay 서비스는 “com.apple.mobile.file_relay” 서비스를 호출하여 시작된다.
- (나) File Relay 데이터 요청
- 데이터 소스는 하나 이상의 조합으로 표현이 가능하다. File Relay 서비스가 제공하는 모든 데이터를 한 번에 획득하려면 아래 그림과 같이 sources 키를 “All“로 설정하면 된다.
- 데이터 소스는 하나 이상의 조합으로 표현이 가능하다. File Relay 서비스가 제공하는 모든 데이터를 한 번에 획득하려면 아래 그림과 같이 sources 키를 “All“로 설정하면 된다.
“All”로 데이터를 요청할 경우 이전 표에는 식별되지 않았지만 /var/mobile/Media 경로의 DCIM, PhotoData, PhotoStreamsData 디렉토리의 데이터가 획득된다.
4. 데이터 획득 과정 명령 프롬프트에서 “file_relay.py”를 입력하여 Pymobiledevice의 file relay 프로토콜을 실행시킨다.
데이터는 “file_relay.py”가 존재하는 폴더에 fileRelayTest.gz 라는 압축파일로 저장된다. gz 파일은 백업을 위한 대용량 압축 파일이다.
이 파일은 리눅스에서 zcat 명령어를 사용하여 압축을 해제할 수 있다. 아래 그림과 같이 리눅스 터미널에서 “zcat [파일명] | cpio –idmv”를 입력하여 압축을 해제한다.
아래 그림과 같이 압축이 해제되어 Library 폴더와 var 폴더가 생긴 것을 볼 수 있다.
Installation Proxy[편집]
1. 특징
Installation Proxy는 Applications 디렉토리에 설치된 앱을 관리하는 서비스이다. 설치된 애플리케이션 리스트, 기기에 애플리케이션 인스톨 ․업그레이드․ 언인스톨, 보관된 애플리케이션 리스트 등의 기능을 수행한다.
또한 “ApplicationArchives” 디렉토리에 ZIP으로 애플리케이션을 압축하여 보관하고 언인스톨하는 기능도 수행한다. 따라서 Installation Proxy 서비스를 이용하여 iOS 기기에 어떤 애플리케이션이 설치되었는지 확인할 수 있다.
2. 조건
Installation Proxy 프로토콜을 사용하기 위해서는 iOS 기기의 비밀번호 해제가 필요하다. 아이폰 5S의 경우 지문인식이 설정되어있다면 해제해야한다.
또한 iOS 기기가 컴퓨터에 연결될 때 “이 컴퓨터를 신뢰하시겠습니까?” 라는 메시지가 뜨면 “신뢰”를 클릭하여야 한다.
3. 데이터 획득 방법
- (가) installation_proxy 서비스 생성
- Installation proxy 서비스는 “com.apple.mobile.installation_proxy” 서비스를 호출하여 시작된다.
- (나) iDevice에 설치된 앱 목록 요청
- 아래 그림은 패킷을 사용하여 “/var/mobile/Applications” 아래 설치된 전체 애플리케이션 목록을 요청하는 과정이다.
4. 데이터 획득 과정
명령 프롬프트에서 “apps.py -l”을 입력하여 Pymobiledevice의 Installation Proxy 프로토콜을 실행시킨다. 아래 그림과 같이 iOS 기기에 설치되어 있는 애플리케이션 목록을 획득할 수 있다.
House Arrest[편집]
1. 특징
House Arrest는 앱스토어(AppStore)에서 구매한 애플리케이션이 저장된 디렉토리 (/var/mobile/Applications) 내부 파일의 획득을 위해 사용하는 서비스이다.
House Arrest 서비스는 요청된 애플리케이션의 디렉토리 접근만 허용하므로 이 서비스를 사용하기 전에 Installation Proxy 서비스를 이용하여 iOS 기기에 어떤 애플리케이션이 설치되어 있는지 먼저 확인해야 한다.
2. 조건
House Arrest 프로토콜을 사용하기 위해서는 iOS 기기의 비밀번호 해제가 필요하다. 아이폰 5S의 경우 지문인식이 설정되어있다면 해제해야한다.
또한 iOS 기기가 컴퓨터에 연결될 때 “이 컴퓨터를 신뢰하시겠습니까?” 라는 메시지가 뜨면 “신뢰”를 클릭하여야 한다.
3. 데이터 획득 방법
- (가) House Arrest 서비스 생성
- House Arrest 서비스는 “com.apple.mobile.house_arrest” 서비스를 호출하여 시작된다.
- (나) 애플리케이션의 루트 디렉토리 접근 권한 획득
- 아래 그림과 같이 정의된 패킷을 mobile_house_arrest에 전송하여 사용자가 접근하고자 하는 애플리케이션 디렉토리의 접근 권한을 획득한다.
- (다) 데이터 획득
- AFC 서비스와 동일하게 표에 기술된 API를 이용하여 “/var/mobile/Applications” 아래 설치된 애플리케이션 디렉토리를 순회하면서 획득한다.
4. 데이터 획득 과정
Installation Proxy 프로토콜을 실행시켜서 iOS 기기에 설치되어 있는 애플리케이션 목록을 획득한다. 획득한 목록 중에서 앱스토어에서 다운로드한 애플리케이션이 존재하는지 확인한다.
아래 그림과 같이 명령 프롬프트에서 “apps.py –a [애플리케이션 이름]” 을 입력하여 Pymobiledevice의 House Arrest 프로토콜을 실행시킨다.
아래 그림과 같이 ls 명령어로 데이터 목록을 확인한다.
“pull <파일이름>” 명령어로 데이터를 획득한다. 데이터는 “apps.py”가 존재하는 폴더 내에 저장된다.
iTunes 사용[편집]
1. 특징
iTunes는 애플사가 만든 멀티미디어 플레이어 및 아이팟용 동기화 프로그램이다. 아이튠즈는 컴퓨터 내의 음악과 동영상을 관리하고, 아이튠즈 스토어와 앱스토어에 접속하여
음악이나 뮤직 비디오, 영화, 앱 등을 구매할 수 있으며, 아이팟과 애플 TV 등 아이튠즈와 연동되는 장치에 데이터를 전송하고 관리하며 iOS를 업그레이드 할 수 있는 기능을 갖고 있다.
iTunes는 iOS 기기에 있는 대부분의 데이터를 백업할 수 있다. 백업되는 정보로는 구입한 음악, TV 프로그램, App 및 카메라 롤의 사진 및 비디오, 장비 설정(예: 전화 즐겨찾기, 배경화면 및 Mail, 연락처, 캘린더 계정),
App 데이터, 홈 화면 및 App 구성, 메시지(iMessage, SMS 및 MMS), 벨소리 등이 있다.
2. 과정
기기를 연결하고 아래 그림의 “지금 백업”을 클릭한다. 다른 백업 경로를 설정하지 않는 한 백업된 데이터는 “C:\Users\[UserName]\AppData\Roaming\Apple Computer\MobileSync\Backup“ 경로에 저장된다.
3. 획득한 데이터
iTunes로 백업된 데이터는 SHA1으로 인코딩된 이름으로 MobileBackup2 서비스와 마찬가지로 [표 6-9]에 있는 사용자 컴퓨터의 디렉토리에 저장된다.
SHA1으로 인코딩된 파일의 iOS 기기 내의 경로는 Backup 디렉토리 내의 Manifest.mbdb 파일을 참조하여 디코딩할 수 있다.