07.11.2012

Программно-техническая экспертиза бэкапа iPhone(часть 2)

image

Цель программно-технической экспертизы бэкапа iPhone – это получение данных и артефактов из бэкапов iTunes без модифицирования какой-либо информации.

Автор: Satish Bommisetty

Первая часть статьи

Установка

На Mac OS X скачайте и установите необходимые модули Питона (pycrypto, M2crypto, construct и progressbar).

Загрузите и установите Mercurial (http://mercurial.selenic.com/) для загрузки исходного кода iphone-dataprotection из репозитория Google.

Расшифровка обычных бэкапов:

В обычных бэкапах ключи классов защиты хранятся в Резервной сумке с ключами и шифруются на ключе 0x835. Для того чтобы получить ключи классов защиты из Резервной сумки с ключами, нужно знать ключ 0x835. Проблема заключается в том, что ключ 0x835 вычисляется только на самом устройстве. Следовательно, расшифровка защищенных файлов из обычного бэкапа невозможна без получения доступа к устройству. Поэтому, если физического доступа к устройству не будет, то при программно-технической экспертизе бэкапа мы получим меньше информации по сравнению с тем, если бы таким доступом мы обладали.

Ниже по шагам описано, как расшифровать файлы из обычного бэкапа, если мы получим физический доступ к устройству. При загрузке iOS служба ядра IOAESAccelerator вычисляет ключ 0x835, шифруя фиксированное число 01010101010101010101010101010101 на ключе UID. UID – это уникальный для каждого устройства аппаратный ключ шифрования, зашитый в чип AES. iOS не может напрямую прочитать аппаратный ключ (UID), но может использовать UID для вычисления ключа 0x835 в режиме ядра. UID также недоступен для пользовательских приложений и библиотек. Ограничение на доступ к UID можно обойти, пропатчив службу ядра IOAESAccelerator.

Шаги извлечения ключа 0x835 из iPhone

1. Сделайте jailbreak вашего iPhone

*Если вы не хотите делать jailbreak вашего телефона, то для получения ключей шифрования следуйте шагам, описанным в статье “Программно-техническая экспертиза iPhone”.

2. На iPhone установите OpenSSH из Cydia. OpenSSH позволяет подключиться к устройству по SSH.

3. На рабочей станции Mac OS X скачайте утилиты device_infos, kernel_patcher и Cyberduck.

4. Подсоедините iPhone и рабочую станцию к одной Wi-Fi сети.

5. На OS X запустите Cyberduck и подсоединитесь к iPhone, набрав его IP адрес и используя root в качестве логина, а alpine в качестве пароля.

6. Скопируйте исполняемые файлы device_infos и kernel_patcher в корневую папку iPhone.

7. Запустите терминал на MAC и подсоединитесь к iPhone по SSH, набрав его IP адрес и используя root в качестве логина, а alpine в качестве пароля.

8. Чтобы изменить права для device_infos и kernel_patcher, выполните на SSH терминале следующие команды

9. Пропатчте службу ядра IOAESAccelerator, чтобы появилась возможность использовать аппаратный ключ шифрования (UID) из пользовательских процессов. Скрипт kernel_patcher модифицирует ядро и применяет необходимые патчи к службе IOAESAccelerator.

*Если ядро уже пропатчено, то скрипт выдаст сообщение kernel patching failed.

*Скрипт kernel_patcher работает только на устройствах с iOS 5.

10. Запустите скрипт device_infos с параметром key835. Скрипт вычисляет ключ 0x835 и показывает его на мониторе. Если запустить device_infos без параметра, то скрипт вычислит все ключи шифрования и сохранит их в plist-файле (Рисунок 9).

Рисунок 9

Как только ключ 0x835 получен, можно расшифровать Резервную сумку с ключами и достать ключи классов защиты данных. Позже с помощью ключей классов защиты данных мы расшифруем защищенные файлы в бэкапе.

11. На терминале с Mac OS X перейдите в папку iphone-dataprotection. Запустите скрипт backup_tool.py, передав ему в качестве параметра путь к папке с бэкапом iTunes.

*Если параметр output_path не указан, то скрипт создаст папку [iPhone UDID]_extract в папке с бэкапом и извлечет файлы во вновь созданную папку.

В бэкапе база данных связки ключей sqlite хранится в виде plist-файла (Keychain-backup.plist). Содержимое plist-файла зашифровано на ключах классов защиты элементов связки ключей. Поэтому элементы связки ключей можно прочитать только после их расшифровки.

Запустите скрипт keychain_tool.py и введите значение ключа 0x835. Скрипт расшифрует Резервную сумку с ключами, достанет ключи классов защиты с идентификаторами от 6 до 11 (перечислены в Таблице 6) и расшифрует элементы связки ключей.

Скрипт делает дамп всех паролей, сертификатов и закрытых ключей из файла бэкапа связки ключей.

Расшифровка зашифрованных бэкапов:

В зашифрованных бэкапах ключи классов защиты перемещаемых данных (идентификаторы с 6 по 8 в Таблице 6) хранятся в Резервной сумке с ключами и защищены паролем iTunes; ключи классов защиты ThisDeviceOnly (идентификаторы с 9 по 11 в Таблице 6) также хранятся в Резервной сумке с ключами, но помимо пароля iTunes защищены еще и ключом 0x835. В большинстве случаев данные из зашифрованного бэкапа перемещаемы, так как они защищены только паролем iTunes и не привязаны к конкретному устройству. Каждый файл в бэкапе шифруется алгоритмом AES 256 в режиме CBC на уникальном ключе. Ключи шифрования файлов хранятся в Резервной сумке с ключами и защищаются паролем iTunes. Для того чтобы, расшифровать Резервную сумку с ключами, забрать ключи классов защиты и расшифровать файлы бэкапа необходимо знать пароль iTunes. Если же узнать пароль iTunes не представляется возможным, то и информации при проведении программно-технической экспертизы мы получим гораздо меньше. iTunes не накладывает каких-либо ограничений на сложность пароля, и поэтому можно попробовать провести атаку перебором и угадать пароль. Зашифрованные бэкапы привносят дополнительные сложности в процесс извлечения данных, а при достаточно сложном пароле процедура расшифровки бэкапа может вообще оказаться невозможной.

iTunes сохраняет зашифрованный пароль от бэкапа в связке ключей iPhone. Если пароль от бэкапа неизвестен, но физический доступ к устройству у нас есть, мы сможем узнать пароль от бэкапа, прочитав элементы связки ключей. На iPhone с jailbreak’ом все элементы связки ключей можно получить с помощью утилиты keychain_dumper. Использование утилиты описано в посте keychain-dumper-usage.

Утилиты наподобие iPhone Backup Extractor и iPhone Backup Browser с зашифрованными бэкапами лучше не использовать, так как такие утилиты только читают и парсят Manifest.mbdb файл и составляют файловую структуру. Но сами файлы открыть не получится, так как их содержимое зашифровано.

Ниже по шагам расписана процедура расшифровки файлов из зашифрованного бэкапа при условии, что пароль iTunes нам известен.

Запустите утилиту backup_tool.py и введите пароль iTunes. Если пароль неизвестен, то модифицируйте скрипт и добавьте к нему скрипт подбора пароля перебором. В качестве входного параметра скрипт Backup_tool.py получает введенный пользователем пароль. Скрипт затем расшифровывает Резервную сумку с ключами, достает все ключи шифрования и расшифровывает файлы в бэкапе.

*Если параметр output_path не указан, то скрипт создаст папку [iPhone UDID]_extract в папке с бэкапом и извлекет файлы во вновь созданную папку.

В зашифрованном бэкапе база данных связки ключей sqlite хранится в виде plist-файла (Keychain-backup.plist). Содержимое plist-файла зашифровано на ключах классов защиты перемещаемых данных и ключах классов защиты ThisDeviceOnly.

Чтобы прочитать перемещаемые элементы связки ключей, запустите скрипт keychain_tool.py и введите пароль iTunes.

Чтобы прочитать элементы связки ключей классов ThisDeviceOnly, запустите скрипт keychain_tool.py и введите ключ 0x835.

Скрипт делает дамп всех паролей, сертификатов и закрытых ключей из файла бэкапа связки ключей.

Программно-техническая экспертиза файлов бэкапа позволяет экспертам получить доступ ко всей информации, содержащейся на телефоне до момента снятия резервной копии. Возможно также, что в анализируемой системе будут более старые версии файлов бэкапа или другие бэкапы iPhone с ценной информацией.

Чтобы просмотреть список доступных бэкапов, откройте iTunes, перейдите в меню Edit‑>Preferences (на Windows) или iTunes->Preferences (на Mac) и выберите вкладку Devices. На вкладке отображены все доступные бэкапы (см. Рисунок 10).

Рисунок 10

iTunes предоставляет возможность удалять файлы бэкапа. Для удаления существующего бэкапа iPhone, в окне Device Preferences (окно показано на рисунке выше), выберите нужный бэкап и нажмите на кнопку Delete Backup… Чтобы восстановить удаленный бэкап, эксперты могут воспользоваться различными утилитами восстановления данных. Восстановить удаленные файлы с компьютера гораздо легче, чем с телефона.

В бэкапе iPhone хранится много пользовательской информации. В Таблице 7 перечислены типичные файлы, которые могут представлять интерес для экспертов.

Имя файла

Описание

AddressBook.sqlitedb

Контакты и личные данные (имя, email, дата рождения, место работы и.т.п.)

AddressBookImages.sqlitedb

Изображения из адресной книги

Calendar.sqlitedb

Календарь и события

Call_history.db

Журнал входящих и исходящих звонков, в том числе номера телефонов и время звонка

Sms.db

SMS и MMS-сообщения и время получения/отправления сообщений

Voicemail.db

Сообщения голосовой почты

Sfari/Bookmarks.db

Сохраненные URL-адреса

Safari/History.plist

История поиска в Интернете

Notes.sqlite

Данные приложения Apple Notes

Maps/History.plist

История поиска местоположений

Maps/Bookmarks.plist

Сохраненные местоположения

consolidated.db

История GPS-поиска

En_GB-dynamic-text.dat

Кэш клавиатуры

com.apple.accountsettings.plist

Данные всех email-аккаунтов приложения Apple Email

com.apple.network.identification.plist

Информация о беспроводной сети (IP-адрес, IP-адрес маршрутизатора, SSID и метки времени)

Таблица 7

Наряду с файлами, перечисленными в Таблице 7, в бэкапе iPhone содержатся файлы сторонних приложений. Конфиденциальная информация из файлов сторонних приложений также может быть интересна экспертам.

Пример: Facebook и LinkedIn сохраняют токены для аутентификации и cookies в plist-файлах на устройстве. При бэкапе iTunes копирует plist-файлы с устройства в папку бэкапа. В таких случаях анализ бэкапа даст доступ к токенам, которые, в свою очередь, позволят зайти в приложение без ввода имени пользователя и пароля. Более подробную информацию о получении plist-файлов Facebook можно найти в блоге scoopz.

Во время бэкапа iTunes делает резервную копию только существующих файлов. Хотя и нет возможности восстановить удаленные данные с iPhone, эксперты предпочитают анализировать именно резервные копии, поскольку такой анализ не привносит никаких изменений в информацию, хранящуюся на работающем устройстве.

Видео

http://www.youtube.com/watch?v=cqj4Z8VkJyU&feature=plcp

Текст видео - http://securitylearn.files.wordpress.com/2012/06/analysis-of-ios-backups-video-transcript.docx

Заключение

Методы, описанные в статье, показывают, что программно-техническая экспертиза последних версий бэкапа iPhone также возможна. Но без физического доступа к устройству количество получаемой из бэкапа информации ограничено. С каждой принципиально новой версией iTunes Apple изменяет процедуру резервного копирования. Поэтому написание скриптов для расшифровки бэкапов iTunes всегда сопряжено с трудностями.

Ссылки

  1. iPhone data protection in depth by Jean-Baptiste Bédrune, Jean Sigwald 

    http://esec-lab.sogeti.com/dotclear/public/publications/11-hitbamsterdam-iphonedataprotection.pdf

  2. iPhone data protection tools 

    http://code.google.com/p/iphone-dataprotection/

  3. iPhone wiki 

    http://theiphonewiki.com

  4. Processing iPhone backups 

    http://www.appleexaminer.com/iPhoneiPad/iPhoneBackup/iPhoneBackup.html

или введите имя

CAPTCHA