Цель программно-технической экспертизы бэкапа iPhone – это получение данных и артефактов из бэкапов iTunes без модифицирования какой-либо информации.
Программно-техническую экспертизу iPhone можно проводить на бэкапах, сделанных либо с помощью iTunes, либо непосредственно на работающем устройстве. В моей последней статье о программно-технической экспертизе iPhone подробно описаны методы экспертизы, а также технические трудности, с которыми сталкиваются при экспертизе работающего устройства. При программно-технической экспертизе работающего устройства телефон перезагружают, после чего информация, хранящаяся на телефоне, может модифицироваться. В особо важных расследованиях эксперты предпочитают анализировать бэкапы iPhone, полученные с помощью iTunes. При проведении резервного копирования iTunes использует протокол AFC (Apple file connection), причем процесс бэкапа не модифицирует никакой информации на iPhone, кроме записей о депонированных ключах. В настоящей статье с технической точки зрения описывается процедура извлечения данных и артефактов из бэкапов iPhone, а также сопутствующие проблемы, на которые стоит обратить внимание. Знание методов извлечения и анализа информации из бэкапов также будет полезным, если мы получили физический доступ не к телефону, а к компьютеру. Когда компьютер синхронизируется с iPhone, то большинство информации, скорее всего, скопируется на компьютер. Поэтому, получив доступ к файловой системе компьютера, мы также будем иметь доступ и к данным мобильного устройства.
Методы, описанные в данной статье, применимы ко всем устройствам Apple под управлением iOS 5.
Замечание: Для демонстрации используется iPhone 4 GSM под управлением iOS 5.0.1. Резервное копирование проводилось на Mac OS X Lion 10.6 с помощью iTunes 10.6.
Исследователи из Sogeti Labs выпустили open-source утилиты (с поддержкой iOS 5) для проведения программно-технической экспертизы. Утилиты позволяют расшифровать обычные и зашифрованные бэкапы iTunes. Далее в подробностях описываются результаты работы ученых из Sogeti Labs, а также приводится обзор утилит для восстановления бэкапа.
Бэкапы iOS:
Начиная с iOS 5, можно осуществить резервное копирование данных с iPhone либо на компьютер с помощью iTunes, либо в облачное хранилище с помощью iCloud. В настоящей статье дается краткое описание iCloud-бэкапов и приводится подробный анализ iTunes-бэкапов.
Бэкапы iCloud:
Имея учетную запись в Apple, можно посредством iCloud скопировать и восстановить содержимое iPhone через Wi-Fi/3G. Для резервного копирования доступны фотографии, данные приложений, настройки устройства, сообщения, почта и.т.д. iCloud по своей сути является бесплатным сервисом удаленного резервного копирования, который позволяет прозрачно для пользователя перемещать данные между различными устройствами Apple, такими как Mac, iPod и iPad. iCloud также предоставляет возможность отслеживать потерянный телефон, удаленно блокировать устройство и удаленно стирать данные с устройства. На бесплатное облачное хранилище накладывается ограничение в 5 Гб. Дополнительное место для хранения можно получить, ежегодно внося в Apple абонентскую плату. Аутентификация в iCloud производиться с помощью токена безопасности. Кроме того, токен используется и для шифрования данных при их передаче через Интернет. Аутентификация по токену устраняет необходимость хранения в iCloud паролей устройств. Apple также утверждает, что все данные в iCloud, кроме почты и заметок, хранятся на диске, который шифруется с помощью 128-битного алгоритма шифрования. Зашифрованные данные на диске расшифровываются на лету по запросу аутентифицированного устройства. Возможно также перенести резервную копию данных из iCloud на компьютер. Более подробное описание работы iCloud можно найти в документации Apple.
Облачное хранилище iCloud включается/выключается в настройках iPhone следующим образом: Settings -> iCloud -> Storage & Backup.
Переключатель iCloud бэкапа показан на Рисунке 1.
Рисунок 1
Данные пользователей в iCloud надежно защищены от хакеров, так как Apple предоставляет наилучший механизм аутентификации, обязуя пользователей использовать сложные пароли для предотвращения атаки перебором. До тех пор, пока пользователи используют сложные пароли, информация в iCloud находится в безопасности.
Бэкапы iTunes:
iTunes используют для резервного копирования данных с iPhone на компьютер. Когда iPhone впервые подключается и синхронизируется с компьютером, iTunes автоматически создает папку с именем UDID (уникальный идентификатор устройства – 40-значное шестнадцатеричное число) и копирует все содержимое устройства в только что созданную папку. iPhone можно синхронизовать с iTunes через Wi-Fi или USB. Если автоматическая синхронизация в iTunes отключена, то пользователю необходимо вручную запустить бэкап, когда устройство подключено к компьютеру. При последующих синхронизациях устройства iTunes только обновляет файлы в уже созданной папке для бэкапа. Во время первой синхронизации iTunes делает полную резервную копию устройства, а затем копирует и обновляет только модифицированные файлы. Кроме того, iTunes автоматически запускает бэкап при обновлении или восстановлении операционной системы на iPhone. При обновлении/восстановлении iOS iTunes создает дифференциальный бэкап в папке с именем [UDID] + ’-’ + [Time stamp]. Расположение бэкапа iTunes зависит от конкретной операционной системы на компьютере. Точные пути к бэкапу перечислены в Таблице 1.
Файлы бэкапов iTunes не зависят от платформы, и их можно перемещать из одной операционной системы в другую.
Операционная система |
Расположение бэкапа |
Windows XP |
C:\Documents and Settings\[user name]\Application Data\Apple Computer\MobileSync\Backup\ |
MAC OS X |
~/Library/Application Support/MobileSync/Backup/ (где ‘~’ – домашняя папка пользователя) |
Windows 7 |
C:\Users\[user name]\AppData\Roaming\Apple Computer\MobileSync\Backup\ |
Таблица 1
Если iPhone защищен паролем, то во время первого подключения к компьютеру iTunes потребует от пользователя ввести пароль (см. Рисунок 2) и разблокировать устройство перед началом синхронизации.
Рисунок 2
После разблокировки iPhone iTunes авторизует устройство, позволяет сделать бэкап и синхронизироваться с компьютером. До тех пор, пока устройство будет подключаться к одному и тому же компьютеру, iTunes не станет повторно запрашивать пароль для бэкапа и синхронизации. Во время бэкапа iTunes создает файл с именем UDID устройства и сохраняет в нем следующую информацию: Депонированную сумку с ключами (Escrow keybag), сертификат устройства, идентификатор хоста, сертификат хоста и закрытый ключ хоста. Депонированная сумка с ключами нужна для того, чтобы смежное устройство (обычно компьютер) смогло получить полный доступ к файловой системе iPhone (в обход функции iOS Data Protection), когда телефон заблокирован. Благодаря Депонированной сумке с ключами пользователю не нужно каждый раз разблокировывать телефон при бэкапе. Расположение Депонированной сумки с ключами зависит от конкретной операционной системы. Точные пути к Депонированной сумке с ключами приведены в Таблице 2.
Операционная система |
Расположение депонированных ключей |
Windows |
%AllUsersProfile%\Apple\Lockdown |
MAC OS X |
/private/var/db/lockdown/ |
Таблица 2
Депонированная сумка с ключами зашифрована на ключе 0x835 и, кроме того, защищена 32-битным паролем, хранящимся на iPhone. Пароль от Депонированной сумки с ключами находится в plist-файле ([Host ID].plist) в папке /private/var/root/Library/Lockdown/escrow_records на iPhone. Начиная с iOS 5, Депонированная сумка с ключами защищается еще и паролем пользователя. Дополнительная защита нужна для предотвращения атак на депонированные ключи. Ранее нарушитель мог обойти механизм защиты данных iPhone и расшифровать любой файл на устройстве, не зная пароля пользователя. Депонированная сумка с ключами является копией Системной сумки с ключами (System keybag), которая предназначена для шифрования данных на самом iPhone. Депонированная сумка с ключами позволяет iTunes получить доступ к защищенным файлам и элементам связки ключей, даже когда iPhone заблокирован.
Также во время каждого бэкапа iTunes создает Резервную сумку с ключами (Backup keybag), которая представляет собой коллекцию ключей классов защиты. Ключи классов защиты в Резервной сумке отличаются от ключей класса защиты из Системной сумки. Файлы бэкапа шифруются алгоритмом AES 256 в режиме CBC на уникальном ключе и нулевом IV. Ключи шифрования файлов зашифрованы на ключах классов защиты из Резервной сумки. Благодаря ключам классов защиты из Резервной сумки бэкапы находятся в безопасности. По умолчанию Резервная сумка с ключами шифруется на ключе 0x835, который вычисляется на основе аппаратного ключа (ключ UID). Поэтому даже если кому-то удастся получить доступ к бэкапу, то без знания аппаратного ключа расшифровать данные не получиться. Аппаратный же ключ можно получить, только имея физический доступ к устройству. Кроме того, так как файлы бэкапа зашифрованы на аппаратном ключе, то данные можно восстановить только на исходном устройстве. В iOS 4 появилась новая возможность, позволяющая восстанавливать зашифрованные бэкапы одного устройства на другом. Теперь зашифрованные бэкапы можно перемещать между различными устройствами с iOS. Переносимость достигнута за счёт того, что бэкап шифруется не на аппаратном ключе устройства, а на пароле пользователя. Нельзя перемещать только данные, зашифрованные на ключах классов защиты ThisDeviceOnly.
Для того чтобы создать зашифрованный бэкап, подсоедините устройство к компьютеру и выберите в iTunes “Зашифровать резервную копию iPhone” (“Encrypt iPhone Backup”). Во время шифрования iTunes попросит пользователя ввести пароль, как показано на Рисунке 3. Пароль пользователя нужен для шифрования всех файлов в бэкапе. Пароль от бэкапа iTunes сохраняет в базе данных связки ключей iPhone. Благодаря тому, что в зашифрованных бэкапах Резервная сумка с ключами зашифрована с помощью пароля, бэкапы можно расшифровать, не имея физического доступа к устройству.
Рисунок 3
iTunes создает резервную копию всего, что хранится на устройстве: контакты, SMS, фотографии, календари, музыка, журнал звонков, конфигурационные файлы, файлы базы данных, связка ключей, настройки сети, оффлайн кэш веб приложений, закладки браузера, cookies, данные приложений и.т.д. iTunes также копирует информацию об устройстве, такую как серийный номер, UDID, номер SIM-карты и телефонный номер.
В папке с бэкапом находится список файлов в нечитаемом формате. Имя каждого файла – это 40-значное шестнадцатеричное число; расширение у файлов отсутствует. Пример имени файла: f968421bd39a938ba456ef7aa096f8627662b74a.
На рисунке 4 показан бэкап устройства с iOS 5, который был сделан с помощью iTunes 10.6.
Рисунок 4
40-значное шестнадцатеричное имя файла представляет собой SHA1-хеш от строки “DomainName-filepath”, где DomainName– это соответствующее доменное имя, а filepath– путь к файлу. В iOS 5 все приложения и системные данные классифицируются по 12 доменам (11 системных доменов и 1 домен приложений). Список системных доменов можно найти в файле /System/Library/Backup/Domains.plist на iPhone. Содержимое файла Domains.plist показано на Рисунке 5.
Рисунок 5
Управление бэкапами изменялось с каждым принципиально новым релизом iTunes. Тем не менее, способ именования файлов бэкапа всегда оставался прежним.
Ниже представлено несколько примеров именования файлов бэкапа:
Пример 1: Имя файла бэкапа для изображений из адресной книги (cd6702cea29fe89cf280a76794405adb17f9a0ee) получено после хеширования строки “HomeDomain-Library/AddressBook/AddressBookImages.sqlitedb”.
*Online hash calculator - http://www.fileformat.info/tool/hash.htm?text=HomeDomain-Library%2FAddressBook%2FAddressBookImages.sqlitedb
Пример 2: AppDomain – это домен приложений, скачанных из AppStore. Резервная копия файла настроек Skype имеет имя bc0e135b1c68521fa4710e3edadd6e74364fc50a. Имя является SHA1-хешем строки “AppDomain-com.skype.skype-Library/Preferences/com.skype.skype.plist”.
*Online Hash calculator - http://www.fileformat.info/tool/hash.htm?text=AppDomain-com.skype.skype-Library%2FPreferences%2Fcom.skype.skype.plist
Пример 3: Имя резервной копии базы данных связки ключей - 51a4616e576dd33cd2abadfea874eb8ff246bf0e получено после хеширования “KeychainDomain-keychain-backup.plist”.
*Online Hash calculator - http://www.fileformat.info/tool/hash.htm?text=KeychainDomain-keychain-backup.plist
iTunes сохраняет/читает имена доменов и имена путей из метафайлов. Каждый бэкап iOS помимо непосредственно данных бэкапа содержит четыре метафайла: Info.plist, Manifest.plist, Status.plist и Manifest.mbdb.
Info.plist: Файл настроек, содержащий такую информацию об устройстве, как имя устройства, версия сборки, IMEI, телефонный номер, дата последнего бэкапа, версия продукта, тип продукта, серийный номер, настройки синхронизации, список установленных на устройство приложений и.т.д.
Manifest.plist: Файл настроек, содержащий дополнительную информацию для сторонних приложений, Резервную сумку с ключами, флаг защиты паролем (WasPasscodeSet), флаг шифрования бэкапа (IsEncrypted) и.т.д.
Status.plist: Файл настроек с информацией о бэкапе: состояние бэкапа, флаг полного бэкапа (IsFullBackup), дата бэкапа, версия бэкапа и.т.д.
Manifest.mbdb: Бинарный файл, содержащий информацию о всех других файлах в бэкапе, включая размер файлов и данные о структуре файловой системы. В ранних версиях iTunes управление структурой файла бэкапа осуществлялось с помощью двух файлов: Manifest.mbdx и Manifest.mbdb. Manifest.mbdx выступал в роли индексного файла, в котором индексировались все элементы из Manifest.mbdb. Начиная с iTunes 10, необходимость в индексном файле (mbdx) пропала, и для управления бэкапом достаточно только одного mbdb-файла.
Образец файла Manifest.mbdb показан на Рисунке 6. Так как файл Manifest.mbdb бинарный, то для его просмотра использовался Hex-редактор.
Рисунок 6
Заголовок файла Manifest.mbdb и формат записи показан в Таблице 3 и Таблице 4.
Заголовок: Заголовок mbdb-файла – это фиксированное шестибайтовое значение, сигнатура mbdb-файлов.
Тип |
Значение |
uint8[6] |
mbdb\5\0 |
Таблица 3
Запись: mbdb-файл содержит множество записей различного размера. Каждая запись несет определенную информацию о файле.
Тип |
Данные |
Описание |
string |
Domain |
Имя домена |
string |
Path |
Путь к файлу |
string |
Target |
Абсолютный путь для символьных ссылок |
string |
Digest |
SHA1-хеш Для папок и файлов из домена AppDomain обычно “0xff 0xff”, а для файлов из домена System обычно “0x00 0x14” |
string |
Encryption_key |
“0xff 0xff” для незашифрованных файлов |
uint16 |
Mode |
Определяет тип файла “0xa000” для символьной ссылки “0x4000” для папки “0x8000” для обычного файла |
uint64 |
inode number |
Номер в таблице дескрипторов |
uint32 |
User ID |
Обычно 501 |
uint32 |
Group ID |
Обычно 501 |
uint32 |
Last modified time |
Дата последнего изменения файла в формате Epoch |
uint32 |
Last accessed time |
Дата последнего доступа к файлу в формате Epoch |
uint32 |
Created time |
Дата создания файла в формате Epoch |
uint64 |
Size |
Длина файла ‘0’ для символьной ссылки и папки. Не ‘0’ для обычного файла |
uint8 |
Protected class |
Класс защиты данных (значения от 0x1 до 0xB ) |
uint8 |
Number of properties |
Количество свойств |
Таблица 4
В резервной копии бо̀льшая часть информации сохранена в файлах настроек, файлах базы данных sqlite и в файлах изображений. Файлы бэкапа можно просмотреть, добавив к их имени соответствующее расширение.
Пример: Добавив к файлу bc0e135b1c68521fa4710e3edadd6e74364fc50a расширение .plist, мы сможем просмотреть содержимое файла настроек Skype с помощью редактора.
Существует множество бесплатных утилит для чтения бэкапа iTunes. Некоторые из популярных утилит перечислены ниже.
MAC OS X - iPhone Backup Extractor - http://supercrazyawesome.com/
Windows – iPhone Backup Browser - http://code.google.com/p/iphonebackupbrowser/
Mac OS X & Windows – iBackupBot - http://www.icopybot.com/itunes-backup-manager.htm
Утилиты парсят mbdb-файл, а затем создают файловую структуру. На Рисунке 7 показано, как утилиты разгребают мусор в бэкапе и представляют его в удобочитаемом виде.
Рисунок 7
Некоторые из утилит эксплуатируют API мобильных устройств Apple. API поставляются вместе с iTunes. Тем не менее, набор информации, получаемый из резервной копии, ограничен, так как защищенные файлы в бэкапе шифруются.
Пример: Файл Keychain-backup.plist из бэкапа можно открыть редактором файлов настроек, но, как показано на Рисунке 8, содержимое файла зашифровано.
Рисунок 8
Механизм защиты данных, введенный в iOS 4, защищает конфиденциальную информацию в файлах и элементах связки ключей посредством дополнительного уровня шифрования. На основе пароля пользователя и специальных аппаратных ключей устройства генерируется набор ключей классов защиты, которые и защищают необходимую информацию. Разработчики используют API механизма защиты данных, чтобы добавить флаг защищенности к файлам и элементам связки ключей. На iPhone ключи классов защиты хранятся в Системной сумке с ключами. При каждом бэкапе iTunes генерирует новый набор ключей классов защиты и сохраняет их в Резервной сумке с ключами. Ключи классов защиты из Системной сумки отличаются от ключей классов защиты из Резервной сумки с ключами. Защищенные файлы и данные в бэкапе шифруются на ключах классов защиты из Резервной сумки с ключами. В обычном бэкапе Резервная сумка с ключами защищена ключом 0x835. В зашифрованных бэкапах Резервная сумка защищена паролем iTunes.
Защиту данных в файлах можно включить, установив значение атрибута NSFileProtection с помощью метода setAttributes:ofItemAtPath:error из класса NsFileManager. Список доступных для файлов классов защиты показан в Таблице 5.
Key id |
Класс защиты |
Описание |
1 |
NSProtectionComplete |
Файл доступен только после разблокировки устройства |
2 |
NSFileProtectionCompleteUnlessOpen |
· Файл доступен после разблокировки устройства (или) · Файл доступен, если его дескриптор оставался открытым до блокировки устройства |
3 |
NSFileProtectionCompleteUntilFirstUserAuthentication |
Файл доступен после первой разблокировки и до перезагрузки устройства |
4 |
NSProtectionNone |
Файл доступен, даже если устройство заблокировано |
5 |
NSFileProtectionRecovery |
Недокументировано |
Таблица 5
Защиту данных для элементов связки ключей можно включить, установив соответствующий класс защиты с помощью методов SecItemAdd или SecItemUpdate. Ключи классов защиты для элементов связки ключей определяют также, можно ли перемещать элементы связки ключей с одного устройства на другое. Список доступных классов защиты для элементов связки ключей приведен в Таблице 6.
Key id |
Класс защиты |
Описание |
6 |
kSecAttrAccessibleWhenUnlocked
|
Элемент связки ключей доступен только после разблокировки устройства |
7 |
kSecAttrAccessibleAfterFirstUnlock
|
Элемент связки ключей доступен после первой разблокировки и до перезагрузки устройства |
8 |
kSecAttrAccessibleAlways
|
Элемент связки ключей доступен, даже если устройство заблокировано |
9 |
kSecAttrAccessibleWhenUnlockedThisDeviceOnly
|
Элемент связки ключей доступен только после разблокировки, и элемент нельзя перемещать между устройствами |
10 |
kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly
|
Элемент связки ключей доступен после первой разблокировки устройства, и элемент нельзя перемещать между устройствами |
11 |
kSecAttrAccessibleAlwaysThisDeviceOnly
|
Элемент связки ключей доступен, даже если устройство заблокировано, и элемент нельзя перемещать между устройствами |
Таблица 6
Джин Сигвальд (Jean Sigwald) – исследователь из Sogeti ESEC – создал пакет open-source утилит для программно-технической экспертизы бэкапа. Утилиты позволяют расшифровать защищенные файлы из обычных и зашифрованных бэкапов. Далее в подробностях описывается принципы работы и использование утилит.
Ссылки
Вторую часть статьи можно посмотреть здесь
Никаких овечек — только отборные научные факты