Программно-техническая экспертиза iPhone на iOS 5

Программно-техническая экспертиза iPhone на iOS 5

Целью программно-технической экспертизы (ПТЭ, forensics) iPhone является извлечение данных и артефактов из iPhone без изменения информации на устройстве.

  Автор: Satish Bommisetty

Целью программно-технической экспертизы (ПТЭ, forensics) iPhone является извлечение данных и артефактов из iPhone без изменения информации на устройстве.

ПТЭ iPhone может быть выполнена на резервных копиях, создаваемых iTunes (атака на доверительно хранимые ключи), или прямо на работающем устройстве. Данная статья объясняет технические процедуры и проблемы, связанные с извлечением данных с работающего iPhone.

Для ПТЭ использовалась GSM-модель iPhone 4 c iOS 5.

Исследователи из Sogeti Labs выпустили инструменты с открытым кодом для ПТЭ (с поддержкой iOS 5), позволяющие выполнять восстановление низкоуровневых данных с iPhone. Приведенная ниже информация дает общее представление об их исследовании и использовании инструментов ПТЭ для iPhone.

Этапы ПТЭ iPhone:

  • Создание и загрузка инструментов ПТЭ на устройство без повреждения цифровых доказательств
  • Установка соединения между компьютером и iPhone
  • Обход парольной защиты iPhone
  • Чтение зашифрованной файловой системы
  • Восстановление удаленных файлов

1. Создание и загрузка инструментов программно-технической экспертизы

Представьте себе компьютер, защищенный паролем на уровне операционной системы. В этом случае мы можем получить доступ к данным на его жестком диске, загрузившись с live CD, или путем извлечения диска и подключения его к другой машине. В случае iPhone роль диска играет встроенное устройство. Поэтому будет нелегко вытащить чипы (жесткий диск) и манипулировать их данными. Чтобы выполнить ПТЭ iPhone, мы используем подход с live CD. Поскольку iPhone имеет лишь один последовательный порт, для доступа к диску устройства мы загрузим свою операционную систему (ОС) через USB. Однако здесь возникает проблема, потому что iPhone загружает только подписанные Apple прошивки.

Чтобы создать и загрузить инструмент для ПТЭ, нам прежде всего нужно разобраться с функциями iPhone на уровне ОС. iOS (известная прежде как iPhone OS) – это операционная система, которая установлена на всех устройствах Apple, то есть iPhone, iPod, Apple TV и iPad. iOS упакована в zip-файл (поставляется с расширением .ipsw), который содержит загрузчики, ядро, системное ПО, разделяемые библиотеки и встроенные приложения.

В процессе загрузки iPhone проходит через цепочку доверия (показана на рисунке ниже), которая состоит из упорядоченной последовательности проверок RSA-подписей компонентов ПО.

Рисунок 1. Цепочка доверия в Нормальном режиме

BootRom – это постоянное запоминающее устройство (ПЗУ, ROM) и первый этап загрузки устройства, работающего под iOS. BootRom содержит все корневые сертификаты для проверки подписей на следующем этапе.

iPhone может работать в трех режимах: Нормальном Режиме, Режиме Восстановления и Режиме DFU.

В Нормальном Режиме BootRom выполняет некоторую инициализацию и загружает низкоуровневый загрузчик (LLB), проверяя его подпись. Подпись LLB позволяет проверить и загрузить загрузчик второго уровня (iBoot). Подпись iBoot позволяет проверить ядро и дерево устройств. Подпись ядра позволяет проверять все пользовательские приложения.

В режиме DFU процесс загрузки iPhone связан с прохождением последовательности проверок, показанной ниже. Подпись BootRom позволяет проверить загрузчики второго уровня (iBSS, iBEC). Подпись загрузчика второго уровня проверяет ядро, а подпись ядра проверяет Ramdisk.

Рисунок 2. Цепочка доверия в режиме DFU

В ходе обновления iOS Ramdisk загружается в оперативную память и загружает все остальные компоненты ОС. В ходе ПТЭ мы создадим свой Ramdisk со всеми нашими инструментами и загрузим его в энергозависимую память iPhone. Проверки подписей, реализованные на различных этапах загрузки, не позволяют нам загрузить наш собственный Ramdisk напрямую. Чтобы загрузить его, нам понадобится обойти все эти проверки. Если мы сможем скомпрометировать одно звено в цепочке доверенной загрузки, то сможем полностью контролировать все следующие за ним этапы. Сообщество хакеров нашло несколько уязвимостей в BootRom, которые позволяют нам запустить свой собственный загрузчик и контролировать все дальнейшие проверки подписей. Помимо проверки подписей, на каждом этапе используеися шифрование. Соответствующие ключи шифрования можно извлечь инструментами джейлбрейка.

Создание собственного Ramdisk

Сначала мы создадим свой ramdisk, содержащий все наши инструменты для ПТЭ, и наложим на ядро патч, изменяющий процедуру проверки Ramdisk. Позднее мы используем джейлбрейк, чтобы загрузить наше пропатченное ядро за счет исправления проверок подписей в BootRom.

С помощью инструмента ПТЭ, выпущенного Sogeti Labs, мы сможем построить Ramdisk только в Mac OS X. Инструмент состоит из скриптов на Питоне, нескольких исполняемых файлов и нескольких скриптов командной оболочки.

Чтобы запустить инструменты, сначала нам нужно установить необходимые зависимости (используйте в OS X терминале приведенные ниже команды).

Загрузите ldid, выдайте права на выполнение и переместите его в директорию /usr/bin.

curl -O http://networkpx.googlecode.com/files/ldid 
chmod +x ldid 
sudo mv ldid /usr/bin/ 

Загрузите и установите OSXFuse.

curl -O -L https://github.com/downloads/osxfuse/osxfuse/OSXFUSE-2.3.4.dmg 
hdiutil mount OSXFUSE-2.3.4.dmg 
sudo installer -pkg /Volumes/FUSE\ for\ OS\ X/Install\ OSXFUSE\ 2.3.pkg -target / 
hdiutil eject /Volumes/FUSE\ for\ OS\ X/

Загрузите и установите модули Питона: pycrypto, M2crypto, construct и progressbar.

sudo ARCHFLAGS='-arch i386 -arch x86_64' easy_install pycrypto 
sudo easy_install M2crypto construct progressbar

Загрузите и установите Mercurial (http://mercurial.selenic.com/), чтобы получить следующий исходный код из репозитория.

hg clone https://code.google.com/p/iphone-dataprotection/  
cd iphone-dataprotection 
make -C img3fs/

Загрузите redsn0w для получения ключей шифрования, необходимых для расшифровки Ramdisk и ядра.

curl -O -L https://sites.google.com/a/iphone-dev.com/files/home/redsn0w_mac_0.9.9b8.zip 
unzip redsn0w_mac_0.9.9b5.zip 
cp redsn0w_mac_0.9.9b5/redsn0w.app/Contents/MacOS/Keys.plist .

Чтобы исправить проверки сигнатур в ядре, передайте в качестве параметра ipsw-файл вашей iOS 5 скрипту kernel_patcher.py.

python python_scripts/kernel_patcher.py IOS5_IPSW_FOR_YOUR_DEVICE

Указанный выше скрипт создает пропатченное ядро и скрипт командной оболочки для создания Ramdisk

sh ./make_ramdisk_n88ap.sh

После запуска данный скрипт командной оболочки загрузит инструменты для ПТЭ и добавит их на Ramdisk. Образ Ramdisk использует обычную файловую систему HFS+, родную для Mac, поэтому будет довольно просто добавить туда файлы. Все вышеупомянутые шаги создадут пропатченное ядро и специальный Ramdisk с инструментами для ПТЭ. Замечание: я уже создал пропатченное ядро и специальный Ramdisk для iPhone 4. Вы можете напрямую загрузить эти файлы и пропустить все указанные выше шаги.

Ссылка для скачивания - http://www.4shared.com/folder/dKmG68Im/iPhone_Forensics.html

Загрузка инструментов

Чтобы загрузить инструменты для ПТЭ, передайте ipsw-файл iOS 5, пропатченное ядро и созданный Ramdisk на вход утилите redsn0w. Соедините устройство с компьютером с помощью USB-кабеля и запустите указанную ниже команду. Следуйте указаниям redsn0w, чтобы загрузить устройство в режиме DFU. В этом режиме redsn0w эксплуатирует уязвимость BootRom и загружает пропатченное ядро и специальный Ramdisk на устройство.

./redsn0w_mac_0.9.9b5/redsn0w.app/Contents/MacOS/redsn0w -i 
iOS5_IPSW_FOR_YOUR_DEVICE -r myramdisk.dmg -k kernelcache.release.n88.patched 

Если процесс завершится неудачно с ошибкой "No identifying data fetched", убедитесь, что компьютер подключен к Интернет. После завершения работы redsn0w Ramdisk загрузится в подробном режиме.

2. Установка подключения устройства к компьютеру

После загрузки Ramdisk возможности сетевого взаимодействия (например, Wi-Fi) по умолчанию отключены. Поэтому для взаимодействия устройства с компьютером мы выберем иной путь, который Apple использует в iTunes. USBMUX – протокол, используемый iTunes для связи с загруженным iPhone и координирования доступа других приложений к своим службам. Технология USB-мультиплексирования позволяет устанавливать TCP-подобное соединение через порт USB по протоколу SSL. Данный канал iTunes использует в сервисе AFC для передачи файлов. Однако, в нашем случае мы установим по этому каналу SSH-соединение для запуска на устройстве командной оболочки.

SSH работает на порту 22. Скрипт Tcprelay.py перенаправляет трафик с порта 22 на порт 2222.

python usbmuxd-python-client/tcprelay.py -t 22:2222 1999:1999 

Теперь SSH доступен по адресу localhost:2222.

ssh -p 2222 root@localhost 
password: alpine 

Теперь мы получим доступ к файловой системе. Задачу усложняет то, что каждый файл зашифрован на своем уникальном ключе, привязанном к конкретному iOS-устройству. Кроме того, механизм защиты данных, появившийся в iOS 4, добавляет еще один слой шифрования, который не позволяет получить доступ к защищенным файлам и элементам цепочки ключей, когда устройство заблокировано. Защита данных достигается комбинацией аппаратного шифрования и программного ключа. Каждый iPhone (>3gs) содержит чип (AES-процессор), который осуществляет шифрование с помощью набора жестко зашитых ключей (UID, GID). ОС устройства не может прочитать эти ключи, но может использовать сгенерированные на основе UID (0x835 и 0x89B) ключи для шифрования и расшифрования. Программный ключ защищен паролем и используется для снятия блокировки устройства каждый раз, когда у пользователя появляется в том потребность. Итак, чтобы получить доступ к защищенным файлам, нам сначала нужно обойти парольную защиту.

3. Обход парольных ограничений iPhone.

Раньше (при версии iOS < 4), пароль хранился в файле, который можно было удалить напрямую по SSH. После введения технологии защиты данных (начиная с iOS 4), пароль используется для зашифрования защищенных файлов и элементов цепочки ключей устройства. Итак, чтобы расшифровать данные, нам нужно предоставить верный пароль.

Проверка пароля производится на двух уровнях: на уровне приложения springboard и на уровне ядра. Атака полным перебором, производимая на уровне springboard, приводит к блокировке устройства, задержкам отклика, а иногда даже к гарантированному удалению данных устройства. Тем не менее, эти защитные механизмы не применимы на уровне ядра (метод AppleKeyStore) и это открывает путь для атак перебором. Чтобы сделать такие атаки менее практичными, парольный ключ, вырабатываемый из пользовательского пароля, привязан к аппаратному UID ключу. Итак, атака полным перебором может быть проведена только непосредственно на устройстве, поскольку невозможно заготовить предвычисленные значения (вроде радужных таблиц) в оффлайн-режиме.

python python_scripts/demo_bruteforce.py

Порт 1999, открытый с помощью tcprelay.py, используется скриптом, перебирающим пароли. Скрипт соединяется с запущенным с Ramdisk демоном restored_external, собирает основную информацию об устройстве (серийный номер, UDID, и. т. д.), уникальные ключи устройства (0x835 и 0x89B), загружает системную "сумку с ключами" (keybag) и пытается подобрать пароль (из 4 цифр).

Представленная ниже таблица показывает среднее время, необходимое на подбор пароля полным перебором для паролей разной сложности.

Сложность пароля Время подбора
4 цифры 18 минут
4 цифры/буквы 51 часов
5 цифр/букв 8 лет
8 цифр/букв 13,000 лет

4. Чтение зашифрованной файловой системы

После успешного подбора пароля скрипт автоматически загрузит связку ключей. Связка ключей – база данных Sqlite, которая хранит конфиденциальную информацию вашего устройства. Связка ключей зашифрована аппаратным ключом. Связка ключей также определяет то, какие приложения могут получать доступ к тем или иным данным. Каждое приложение на вашем устройстве имеет уникальный идентификатор приложения (называемый также entitlement). Сервис связки ключей на основе идентификатора определяет, к каким данным приложение может получить доступ. По умолчанию приложение может обращаться только к данным, ассоциированным с идентификатором этого приложения. Позднее Apple ввела понятие групп связки ключей. Теперь приложения, которые принадлежат к одной группе, могут разделять элементы связки ключей. Существует два пути получения доступа ко всем элементам связки ключей. Первый состоит в написании приложения и включении его во все группы. Второй путь состоит в написании приложения и выдачи ему entitlement-а com.apple.keystore.access-keychain-keys.

Содержимое базы данных связки ключей можно получить с помощью скрипта keychain_tool.py

python python_scripts/keychain_tool.py -d [UDID]/keychain-2.db [UDID]/[DATAVOLUMEID].plist 

Чтобы сделать дамп файловой системы, запустите скрипт командной оболочки dump_data_partition

./dump_data_partition.sh 

Скрипт считывает с устройства файловую систему и копирует ее в директорию UDID в виде файла образа (.dmg). Этот файл образа можно открыть с помощью модифицированного HFSExplorer, который умеет расшифровывать файлы на лету. Чтобы расшифровать их раз и навсегда, можно использовать скрипт emf_decrypter.py.

python python_scripts/emf_decrypter.py [UDID]/[data_DATE].dmg 

Скрипт расшифровывает все файлы из файла образа файловой системы. Чтобы посмотреть расшифрованные файлы, смонтируйте файловую систему следующей командой.

Hdituil mount [UDID]/[data_DATE].dmg 

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

5. Восстановление удаленных файлов

Удаление файла на iPhone приводит лишь к удалению ссылки на него. Поэтому удаленные файлы можно восстановить. Чтобы восстановить удаленный файл, запустите скрипт emf_undelete.py.

python python_scripts/emf_undelete.py [UDID]/[data_DATE].dmg

Данная техника позволяет восстанавливать ценную информацию вроде истории звонков, удаленных изображений, SMS, контактов, голосовых и почтовых сообщений.

Видео

http://www.youtube.com/watch?v=2Fs6ee1yeq4&context=C32aee7aADOEgsToPDskLQueZ3j9YDdlXdGSYdCN26


Список источников:
  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. ‘Handling iOS encryption in forensic investigation’ by Jochem van Kerkwijk http://staff.science.uva.nl/~delaat/rp/2010-2011/p26/report.pdf
  4. iPhone Forensics by Jonathan Zdziarski http://shop.oreilly.com/product/9780596153595.do
  5. iPhone forensics white paper http://viaforensics.com/education/white-papers/iphone-forensics/
  6. Keychain dumper http://labs.neohapsis.com/2011/02/28/researchers-steal-iphone-passwords-in-6-minutes-true- but-not-the-whole-story/
  7. 25C3: Hacking the iPhone http://www.youtube.com/watch?v=1F7fHgj-e_o
  8. iPhone wiki http://theiphonewiki.com

Ваша приватность умирает красиво, но мы можем спасти её.

Присоединяйтесь к нам!