Уязвимость старых моделей: почему опасно выбрасывать телефон?
Меня зовут Виталий, в Positive Technologies я занимаюсь расследованиями инцидентов, произошедших с мобильными устройствами. Всего мобильной криминалистикой занимаюсь уже больше шести лет. За это время я исследовал много разных телефонов: от самых простых вариантов — без запароленного доступа к содержимому, до телефонов с разбитым экраном, поврежденным интерфейсным разъемом, утопленных, заблокированных и сброшенных. Много среди них было и айфонов.
Недавно, перебирая вещи в квартире, я наткнулся на свой старый айфон, который долгое время пылился на полке. Включив устройство, я увидел не слишком обнадеживающее сообщение: «iPhone отключен. Подключитесь к iTunes». Оно чаще всего говорит о том, что доступ к данным безвозвратно утерян.
На мобильных устройствах компании Apple после ввода 10 неправильных комбинаций пароля удаляются ключи шифрования, и получить доступ к пользовательским данным становится достаточно проблематично, а иногда и в принципе невозможно. Извлечь информацию из устройства в такой ситуации возможно лишь до загрузки ОС устройства.
На устройствах на базе процессоров А5–А11 (iPhone 4S — iPhone X) имеется аппаратная уязвимость, которая позволяет получить доступ к содержимому устройства в режиме BFU (Before First Unlock) с использованием эксплойта checkm8.
О возможности извлечения данных из телефонов в состоянии «iPhone отключен. Подключитесь к iTunes» написано достаточно много статей (для примера, раз, два и три), но обобщенной информации о том, какой конкретно набор данных можно извлечь и, что не менее важно, где все это можно увидеть, я не нашел. Поэтому решил написать эту статью.
Статья носит исключительно информационный характер и не является инструкцией или призывом к совершению противоправных действий. Наша цель — рассказать о существующих уязвимостях, которыми могут воспользоваться злоумышленники, предостеречь пользователей и дать рекомендации по защите личной информации. Автор не несет ответственности за использование опубликованной информации. Помните, что нужно следить за защищенностью своих данных.
Итак, у нас есть мобильный телефон iPhone 5s (А1533), доступ к памяти которого заблокирован после 10 неудачных попыток ввода пароля.
С помощью уязвимости checkm8 можно извлечь данные из связки ключей (keychain) и файловой системы в режиме BFU. Эта информация может быть получена с использованием различных инструментов: Elcomsoft iOS Forensic Toolkit, UFED 4PC и др.
Процесс анализа можно автоматизировать и использовать как платные инструменты (например, «Мобильный криминалист Эксперт Плюс», «UFED Physical Analyzer»), так и опенсорсные (например, «iLEAPP»). К сожалению, не всегда они позволяют обрабатывать все типы данных в автоматическом режиме, поэтому какие-то артефакты приходится просматривать вручную.
Во время изучения извлеченных данных выясняется, что исследователю могут быть доступны технические сведения об устройстве, а также информация об авторизованных в системе аккаунтах пользователей.
Для удобства я сгруппировал данные, которые оказываются доступными для исследователя, по блокам. Всего их получилось три: артефакты мобильного устройства, пользовательские данные и артефакты приложений. Что включает каждый из пунктов, перечислю подробнее.
Информация об установленной версии iOS и номере сборки. Ее обычно можно посмотреть в следующих файлах:
\private\var\installd\Library\MobileInstallation\LastBuildInfo.plist
\System\Library\CoreServices\SystemVersion.plist
\private\var\mobile\Library\Preferences\com.apple.locationd.plist
В найденном мобильном устройстве была установлена iOS 12.4.3, сборка 16G130. Эта информация очень важна в контексте анализа артефактов мобильного телефона, поскольку в зависимости от версии ОС в извлеченных данных может содержаться разный объем сведений.
IMEI устройства и номер телефона. Информация хранится в этом файле:
\private\var\wireless\Library\Preferences\com.apple.commcenter.device_specific_nobackup.plist
ReportedPhoneNumber хранит информацию о телефонном номере, который был зарегистрирован в системе.
imei — уникальный идентификатор мобильного устройства.
meid — то же, что и IMEI, но для устройств, работающих на CDMA-сетях.
ReportedSubscriberIdentity — ICCID сим-карты.
Информация о модели и сетевых подключениях устройства:
\private\var\preferences\SystemConfiguration\NetworkInterfaces.plist
Информация о настройках приложения Find My iPhone:
\private\var\mobile\Library\Preferences\com.apple.icloud.findmydeviced.FMIPAccounts.plist
Информация об устройстве, последней созданной резервной копии устройства на компьютере, настройках резервного копирования в iCloud:
\private\var\root\Library\Lockdown\data_ark.plist
DeviceName — имя устройства.
com.apple.mobile.data_sync-Contacts → AccountNames — информация о синхронизации контактов с iCloud.
Информация о резервной копии устройства (создавалась локально или в iCloud), времени создания, ошибках:
\private\var\root\Library\Preferences\com.apple.MobileBackup.plist
RetryAfter — дата и время, когда можно повторить попытку создания резервной копии.
BackupIsDelayed — дата и время, когда резервное копирование было отложено.
DrySpellFollowUpItem — дата и время, когда запланировано следующее резервное копирование.
FailureCount — количество неудачных попыток резервного копирования.
Информация об обновлениях устройства:
\private\var\mobile\MobileSoftwareUpdate\restore.log
targertOSVersion — устанавливаемая версия ОС.
deviceClass — тип устройства.
storageCapacity — объем памяти.
currentOSVersion — текущая версия ОС.
eventTime — время события.
batteryLevel — уровень заряда аккумулятора при установке обновления.
deviceModel — модель устройства.
result — успешно ли было выполнено.
Настройки сетевой конфигурации системы:
\private\var\preferences\SystemConfiguration\preferences.plist
Model — модель устройства.
Network → LocalHostName — имя, присвоенное устройству в локальной сети, которое позволяет другим устройствам в этой сети идентифицировать его.
System → ComputerName — имя, отображаемое в настройках мобильного телефона в разделе «Об этом устройстве».
IMEI устройства, номер телефона, настройки сети, идентификаторы сим-карты (ICCID, IMSI):
\private\var\wireless\Library\Preferences\com.apple.commcenter.plist
mdn (Mobile Directory Number) — абонентский номер телефона.
ts (Timestamp) — временная метка.
label-id — уникальный идентификатор, который может использоваться для отслеживания или идентификации данной записи в системе.
Информация о местоположении абонента (тут также можно посмотреть информацию о серийном номере устройства):
\private\var\root\Library\Caches\locationd\consolidated.db
Информация о сим-картах (ICCID, MSISDN), которые использовались в устройстве, в том числе даты их последнего использования:
\private\var\wireless\Library\Databases\CellularUsage.db
subscriber_id — ICCID устройства.
subscriber_mdn — номер мобильного телефона.
last_update_time — дата их использования в формате Unix.
Информация об AirDrop ID устройства:
\private\var\mobile\Library\Preferences\com.apple.sharingd.plist
Информация с настройками и предпочтениями из приложения «Настройки» (Settings). Из интересного: здесь могут содержаться данные о кэшированной учетной записи пользователя в Apple ID:
\private\var\mobile\Library\Preferences\com.apple.Preferences.plist
cachediCloudTitle — имя пользователя.
cachediCloudUsername — адрес электронной почты, связанный с учетной записью iCloud пользователя.
Информация о подключенных и спаренных Bluetooth-устройствах:
\private\var\containers\Shared\SystemGroup\GUID\Library\Database\com.apple.MobileBluetooth.ledevices.paired.db
Name — имя устройства.
Address, ResolvedAddress — MAC-адрес устройства.
LastSeenTime и LastConnectionTime — метки времени, указывающие, когда в последний раз было осуществлено обнаружение и подключение к устройству.
Информация о конфигурации приложения «Сообщения» (Messages). В этом файле также может храниться информация об абонентском номере телефона:
\private\var\mobile\Library\Preferences\com.apple.imservice.SMS.plist
DisplayName — отображаемое имя учетной записи.
LoginAs — указывает, как пользователь входит в систему. В данном случае это номер телефона.
OnlineAccounts, ActiveAccounts, Status — информация об идентификаторе учетной записи.
Информация о точках Wi-Fi, к которым ранее подключалось устройство:
\private\var\preferences\SystemConfiguration\com.apple.wifi.plist
SSID_STR — имя сети.
lastUpdated — дата и время последнего обновления информации.
BSSID — MAC-адрес точки доступа.
Информация об избранных контактах пользователя:
\private\var\mobile\Library\Preferences\com.apple.mobilephone.speeddial.plist
Name — имя контакта из записной книжки.
ABDatabaseUUID — уникальный идентификатор записи.
Value — номер телефона контакта.
Информация об учетных записях пользователя в приложении FaceTime:
\private\var\mobile\Library\Preferences\com.apple.conference.plist
phoneNumberRegistrationSubscriptionLabel — уникальный идентификатор.
registration.savedAccountName — сохраненное имя учетной записи.
Информация о заблокированных контактах пользователя:
\private\var\mobile\Library\Preferences\com.apple.cmfsyncagent.plist
_kCMFItemPhoneNumberCountryCodeKey — код страны.
_kCMFItemPhoneNumberUnformattedKey — номер телефона.
Информация об учетных записях, которые использовались на устройстве (iCloud, Apple ID и других):
\private\var\mobile\Library\Accounts\Accounts3.sqlite
Информация об учетной записи iCloud, используемой в Home Sharing. Home Sharing (домашний обмен) — это функция, доступная на устройствах Apple, которая позволяет пользователям делиться своей медиатекой (музыкой, фильмами, телепередачами и т. д.) с другими устройствами в одной сети:
\private\var\mobile\Library\Preferences\com.apple.homesharing.plist
homeSharingAppleID — Apple ID, используемый для домашнего обмена.
homeSharingGroupID — идентификатор группы для домашнего обмена.
Информация о кэшированных статусах аутентификации пользователя в Apple ID. Этот файл может быть использован для получения информации о том, когда такие приложения, как iMessage, FaceTime, впервые устанавливали связь с другими зарегистрированными Apple ID устройствами:
\private\var\mobile\Library\Preferences\com.apple.identityservices.idstatuscache.plist
При этом это необязательно подтверждает тот факт, что произошел диалог между пользователями: при создании черновиков сообщений и последующем удалении сообщения происходит аутентификация пользователя в Apple ID, и эти данные заполняются в plist-файле.
tel — номер телефона.
LookupDate — дата поиска.
Чтобы проверить, не было ли устройство заражено шпионским ПО Pegasus, часто анализируют именно этот plist-файл: https://github.com/AmnestyTech/investigations/tree/master/2021-07-18_nso.
Однако, стоит учитывать, что начиная с iOS 14.7.0 информация об аутентификации пользователей в этот файл не попадает.
В файле с содержимым связки ключей (keychain) хранится информация об учетных записях пользователя, которая также важна для расследования. Стоит учитывать, что связка ключей пользователя шифруется. Чтобы ее проанализировать, нужно дешифровать содержимое.
Информация об особо важных контактах пользователя в приложении «Почта» (Mail) на iOS:
\private\var\mobile\Library\Mail\VIPs.plist
EmailAddresses — информация о почтовом ящике особо важного контакта.
Очень интересный каталог \private\var\mobile\Library\Logs с различными файлами журналов устройства.
Файл \private\var\mobile\Library\Logs\mobileactivationd\mobileactivationd.log содержит информацию о процессе активации устройства, включая успешные и неудачные попытки активации, временные метки.
Каталог \private\var\mobile\Library\Logs\CrashReporter содержит файлы журналов сбоев приложений (crash reports). Эти файлы создаются системой, когда приложение неожиданно завершает свою работу или сталкивается с ошибкой.
Файлы, расположенные в каталоге \private\var\mobile\Library\Logs\CrashReporter\WiFi\WiFiManager, хранят информацию о сбоях компонентов управления Wi-Fi.
Из этих файлов можно получить сведения о геопозиции Wi-Fi-точки и приблизительном местонахождении устройства в указанный период времени.
Журнал \private\var\installd\Library\Logs\MobileInstallation\mobile_installation.log содержит информацию об установке приложений: в нем можно найти записи о процессе установки, обновления и удаления приложений.
Информация о разрешениях для приложений: доступ к камере, микрофону, местоположению, контактам:
\private\var\mobile\Library\TCC\TCC.db
service — тип разрешения.
client — приложение.
Информация о приложениях, использующих сервисы геолокации:
\private\var\root\Library\Caches\locationd\clients.plist
ru.yandex.mobile.search — идентификатор пакета приложения.
ReceivingLocationInformationTimeStopped — время, когда получение информации о местоположении было остановлено.
Очень интересный каталог со всеми установленными приложениями \private\var\mobile\Containers\Data\Application.
В этом каталоге был обнаружен подкаталог с GUID приложения WhatsApp. В нем содержится подкаталог \Library\Logs с информацией об изменении версии приложения (с 2.19.51 по 2.19.120), номере телефона пользователя, времени отправки и получения сообщений (без текста самих сообщений).
Подкаталог \Library\Caches\ChatMedia, содержащий папки с номерами телефонов абонентов, с которыми пользователь обменивался медиафайлами.
В файле \private\var\mobile\Library\Assistant\CustomVocabulary\ net.whatsapp.WhatsApp\0000000000000000000000000000000000000000\ContactGroupNameType\SentVocabulary.plist содержится кэшированная информация о названиях групп в приложении WhatsApp.
В файле \private\var\mobile\Containers\Data\Application\GUID Telegram\Library\SyncedPreferences\ph.telegra.Telegraph.plist хранится информация об учетной записи (используемом номере телефона) в мессенджере Telegram.
В каталоге \private\var\mobile\Containers\Data\Application\GUID Webkit\Library\WebKit\WebsiteData была найдена информация о веб-контенте приложения Safari: были получены сведения о ресурсах, на которые заходил пользователь.
Интересный каталог \private\var\mobile\Media, используемый для хранения медиафайлов и других данных пользователя. В этом каталоге я обнаружил файл \Downloads\downloads.28.sqlitedb с информацией о загруженных файлах (тип файла, ссылка на ресурс, с которого осуществлялась загрузка).
В каталоге Purchases хранится содержимое файлов. В нашем случае это аудиофайл и обложка альбома в формате JPEG.
Каталог Recordings содержит подкаталоги с указанием даты и времени создания аудиозаписи в приложении «Диктофон».
Как видите, из некоторых айфонов даже после 10 неудачных попыток ввода пароля все же можно извлечь информацию, которая будет полезна не только для личного использования, но и при проведении расследований. Стоит учитывать, что есть много разных нюансов, которые будут определять возможности исследователя. Например, версия ОС устройства, наличие аппаратных уязвимостей, наличие на устройстве разных приложений, какие у них версии и т. д. Поэтому это не исчерпывающий перечень артефактов, которые можно получить с девайса.
Чтобы вам было проще ориентироваться, какая информация оказывается доступна из айфона в состоянии «iPhone отключен. Подключитесь к iTunes», я составил таблицу с данными, которые мне удалось получить в рамках текущего исследования.
Файл или каталог | Информация |
\private\var\installd\Library\MobileInstallation\LastBuildInfo.plist | Установленная версия iOS, номер сборки |
\System\Library\CoreServices\SystemVersion.plist | |
\private\var\mobile\Library\Preferences\com.apple.locationd.plist | |
\private\var\wireless\Library\Preferences\com.apple.commcenter.device_specific_nobackup.plist | IMEI устройства, номер телефона |
\private\var\preferences\SystemConfiguration\preferences.plist | Настройки сетевой конфигурации системы |
\private\var\wireless\Library\Preferences\com.apple.commcenter.plist | IMEI устройства, номер телефона, настройки сети, идентификаторы сим-карты (ICCID, IMSI) |
\private\var\mobile\Library\Preferences\com.apple.preferences.datetime.plist | Настройки временной зоны мобильного телефона |
\private\var\root\Library\Caches\locationd\consolidated.db | Местоположение абонента, информация о серийном номере устройства |
\private\var\wireless\Library\Databases\CellularUsage.db | Сим-карты (ICCID, MSISDN), которые использовались в устройстве, в том числе дата их последнего использования |
\private\var\mobile\Library\Preferences\com.apple.sharingd.plist | AirDrop ID устройства |
\private\var\mobile\Library\Preferences\com.apple.Preferences.plist | Настройки и предпочтения приложения «Настройки» (Settings). Здесь может содержаться информация о кэшированной учетной записи пользователя в Apple ID |
\private\var\preferences\SystemConfiguration\NetworkInterfaces.plist | Информация о модели и сетевых подключениях устройства |
\private\var\containers\Shared\SystemGroup\GUID\Library\Database\com.apple.MobileBluetooth.ledevices.paired.db | Подключенные и спаренные Bluetooth-устройства |
\private\var\mobile\Library\Preferences\com.apple.icloud.findmydeviced.FMIPAccounts.plist | Настройки приложения Find My iPhone |
\private\var\mobile\Library\Preferences\com.apple.imservice.SMS.plist | Конфигурация приложения «Сообщения» (Messages). Здесь также может храниться информация об абонентском номере телефона |
\private\var\preferences\SystemConfiguration\com.apple.wifi.plist | Wi-Fi-точки, к которым ранее подключалось устройство |
\private\var\mobile\Library\Mail\VIPs.plist | Особо важные контакты пользователя в приложении «Почта» (Mail) на iOS |
\private\var\mobile\Library\Preferences\com.apple.mobilephone.speeddial.plist | Избранные контакты пользователя |
\private\var\root\Library\Lockdown\data_ark.plist | Информация об устройстве, последней созданной резервной копии устройства на компьютере, настройках резервного копирования в iCloud |
\private\var\root\Library\Preferences\com.apple.MobileBackup.plist | Резервная копия устройства (создавалась локально или в iCloud), время создания, ошибки |
\private\var\mobile\MobileSoftwareUpdate\restore.log | Обновления устройства |
\private\var\mobile\Library\Preferences\com.apple.conference.plist | Учетные записи пользователя в приложении FaceTime |
\private\var\mobile\Library\Logs\... | Файлы журналов устройства |
\private\var\mobile\Library\Logs\mobileactivationd\mobileactivationd.log | Информация о процессе активации устройства, включая успешные и неудачные попытки активации, временные метки |
\private\var\mobile\Library\Logs\CrashReporter | Файлы журналов сбоев приложений (crash reports) |
\private\var\mobile\Library\Logs\CrashReporter\WiFi\WiFiManager | Информация о сбоях компонентов управления Wi-Fi. Из этих файлов можно получить сведения о геопозиции Wi-Fi-точки и приблизительном местонахождении устройства в определенный период времени |
\private\var\installd\Library\Logs\MobileInstallation\mobile_installation.log | Записи о процессе установки, обновления и удаления приложений |
\private\var\mobile\Library\Preferences\com.apple.cmfsyncagent.plist | Заблокированные контакты пользователя |
\private\var\mobile\Library\TCC\TCC.db | Выдаваемые разрешения для приложений (доступ к камере, микрофону, местоположению, контактам) |
\private\var\root\Library\Caches\locationd\clients.plist | Информация о приложениях, использующих сервисы геолокации |
\private\var\mobile\Library\Accounts\Accounts3.sqlite | Учетные записи, которые использовались на устройстве (iCloud, Apple ID, других приложений) |
\private\var\mobile\Library\Preferences\com.apple.homesharing.plist | Информация об учетной записи iCloud, используемой в Home Sharing |
Хочу также поделиться ссылками на ресурсы SANS с полезными для проведения расследований ресурсами:
К сожалению, единственный способ полностью защитить себя от эксплуатации этой уязвимости – это отказаться от использования устройств, которые ей подвержены (iPhone 4S — iPhone X). При отсутствии такой возможности, установите на айфон самые последние доступные обновления. Это поможет снизить риск утечки конфиденциальной информации и повысит общую безопасность ваших данных.
На этом все. Возможно, теперь кто-то из вас задумается, выбрасывать ли старый айфон после покупки новой модели.
Спойлер: мы раскрываем их любимые трюки