Сегодня мы поговорим о малоизвестных особенностях iOS, связанных с защитой резервных копий, обходом этой защиты и защитой от неё. Система резервного копирования iOS – воистину вне конкуренции. Ничего подобного в плане подробности, универсальности и безопасности локальных резервных копий у конкурентов в стане Android нет. В Android резервные копии создаются исключительно в облаке; локальные же резервные копии в этой системе оставляют желать много лучшего. В рамках этой статьи мы поговорим о локальных резервных копиях и их защите.
Для пользователя резервная копия – удобный и простой способ перенести данные на новое устройство или восстановить уже имеющееся после сброса к заводским настройкам. Для экспертов-криминалистов резервные копии iOS — не менее удобный, универсальный и простой способ извлечь из хорошо защищённого хранилища устройства копию данных. В резервные копии попадает множество важной информации: и данные большинства приложений, и логины с паролями, которые пользователь сохранил в браузере Safari и сторонних приложениях, и пароли к Wi-Fi, и резервные копии часов Apple Watch, и данные об активности пользователя (шаги, сердцебиение в заданный момент времени). Попадают в резервные копии и многие другие вещи, жизненно необходимые для расследования преступлений. В руках злоумышленника резервная копия превращается в опасное оружие. Логины и пароли из Связки ключей позволяют получить доступ к учётным записям, переписке и финансам пользователя. Чтобы этого не произошло, Apple позволяет пользователю установить пароль на резервные копии.
Если пароль установлен, вся резервная копия целиком будет зашифрована стойким ключом, который генерируется на основе пароля. Шифрование происходит внутри устройства; если пароль установлен, то незашифрованные данные просто не покидают телефон. Соответственно, какую бы программу для снятия резервной копии вы ни использовали, результат будет один: зашифрованная резервная копия.
Шифрование локальных резервных копий в iOS настолько стойкое, что даже с использованием аппаратного ускорения нам не удалось получить скорость перебора больше нескольких десятков паролей в секунду. Соответственно, лобовая атака бесполезна даже если используется несложный пароль из 7 знаков. Впрочем, даже при наличии стойкого пароля на шифрование из телефона можно извлечь фотографии и медиа-файлы, если его экран можно разблокировать.
До выхода iOS 11 длинный и сложный пароль на резервную копию был абсолютной защитой; никакой возможности удалить или поменять пароль, не введя предварительно старый, в старых версиях системы не существовало. В iOS 11 ситуация изменилась.
Если злоумышленнику известен пароль блокировки экрана, он сможет использовать его для сброса пароля к резервной копии. После сброса можно подключить телефон к компьютеру и извлечь все данные, а также расшифровать все пароли из связки ключей. На сайте Apple даются подробные инструкции, как нужно действовать для сброса пароля на резервную копию:
В iOS 11 или более поздней версии можно создать зашифрованную резервную копию устройства, сбросив пароль. Чтобы сделать это, нужно выполнить следующие действия.
Вы не сможете использовать ранее созданные зашифрованные резервные копии, но можете использовать iTunes для резервного копирования текущих данных и установить новый пароль резервной копии.
На устройстве с iOS 10 или более ранней версии сброс пароля невозможен.
Лёгкость, с которой злоумышленник может обойти самый сложный и длинный пароль на резервную копию, всего лишь введя код блокировки экрана, неприятно поражает. Однако от этой угрозы можно уберечься. Механизмом защиты здесь станут Ограничения родительского контроля (iOS 11) или пароль Экранного времени (iOS 12 и более поздние).
Допустим, ваш iPhone попал в руки злоумышленника. Предположим, злоумышленнику удалось подсмотреть ваш код блокировки; теперь он пытается отвязать телефон от облака, а заодно извлечь копию данных, получив доступ к паролям из Связки ключей. Защититься от такого развития событий можно при помощи пароля Экранного времени. Подробно о возможностях контроля Экранного времени можно почитать в статье Apple Использование родительского контроля на устройствах iPhone, iPad и iPod touch ребенка. Нас же сейчас интересует другая возможность этой системы: защитить телефон от сброса пароля на резервную копию.
Как ни странно, ограничить возможность сброса пароля к локальной резервной копии iOS достаточно просто: всё, что нужно сделать, это установить пароль Экранного времени как таковой. Сложность такого пароля невелика: единственный доступный вариант – это PIN-код из 4 цифр. Тем не менее, такая защита в целом достаточно надёжна. Поскольку этот пароль используется очень редко и отличается от кода блокировки устройства, его невозможно случайно подсмотреть. Этот код понадобится в исключительно редких случаях, когда вы захотите изменить настройки или отключить ограничения. Вы можете установить случайный код, записав его на оставленной дома бумажке – и это будет вполне безопасно.
Что произойдёт, если теперь попытаться сбросить пароль на резервную копию? На первом шаге – никаких отличий: система запросит пароль блокировки устройства. А вот сразу после этого будет запрошен дополнительный 4-значный пароль Экранного времени. Эта мера безопасности вполне способна не только отвадить любопытных, но и защитить iPhone от целенаправленных попыток взлома.
Пароль Экранного времени сохраняется на самом устройстве. Подобрать его за разумное время невозможно: невеликое пространство из 10,000 комбинаций защищается системой прогрессирующими задержками между попытками ввода. После нескольких неудачных попыток система ограничит скорость перебора паролей Экранного времени, вводя прогрессивные задержки в 1, 5, 15 и 60 минут. После 10 неудачных попыток каждая следующая попытка может быть предпринята не ранее, чем через час после предыдущей; перезагрузка устройства не поможет ускорить процесс. Таким образом, все 10,000 комбинаций можно перебрать за 416 дней.
Однако есть и более интересные способы. Сразу оговорюсь: первый из них работает только тогда, когда пароль на резервную копию не установлен или известен, а второй – если на iPhone можно установить джейлбрейк (включая аппаратный — checkra1n).
Способ 1: извлечь из резервной копии
В iOS 7-11 этот пароль (там он носит название Restrictions) хранится в виде хэша. Алгоритм относительно стойкий (pbkdf2-hmac-sha1, но количество итераций относительно невелико). С учётом того, что пароль этот состоит всегда и только из 4 цифр, полный перебор хэша на компьютере занимает несколько секунд. Сам хэш хранится в файле com.apple.restrictionspassword.plist, который попадает в бэкап. Соответственно, пароль Restrictions можно вскрыть, если у нас есть (одно из):
В iOS 12 (здесь это пароль Экранного времени, или Screen Time) хранится в открытом виде. Нет, безопасность от этого хуже не стала: пароль переместили в Связку ключей. Тем не менее, класс защиты паролю Экранного времени назначили минимальный: он не привязан к устройству. Минимальный класс защиты назначен умышленно. Сделано это для того, чтобы при восстановлении нового iPhone из бэкапа пароль Экранного времени устанавливался автоматически (таким образом Apple закрыли потенциальную возможность снять пароль Экранного времени путём создания резервной копии, сброса устройства и последующего восстановления из резервной копии). Записи Связки ключей с более высокими классами защиты не попадают в резервные копии или попадают, но защищаются аппаратным ключом устройства (то есть, могут быть восстановлены только на то же самое устройство).
Чтобы достать пароль Экранного времени, нужно:
Способ 2: через джейлбрейк
Очевидно, что первый способ сработает лишь тогда, когда пароль на резервную копию не установлен или известен. Если же пароль на резервную копию установлен, но неизвестен, то единственный оставшийся способ узнать пароль Экранного времени – получить доступ к Связке ключей (keychain). Для старых версий iOS нужна копия файловой системы.
Для iOS 7-11 нужно:
Для iOS 12:
Нужно ли это делать? Не уверен: если удалось установить джейлбрейк, то, во-первых, все пароли можно извлечь и так, без посредника в виде резервной копии. Во-вторых, пароль на резервную копию можно узнать, расшифровав Связку ключей: пароль на резервную копию (так же, как и пароль Экранного времени) хранится там в открытом виде. Впрочем, если цель – снять ограничения Экранного времени, то такой подход вполне годится.
One more thing
Что интересно, пароль Экранного времени хранится также и в облаке iCloud, но только в том случае, если вы включили двухфакторную аутентификацию и активировали опцию Screen Time “Share across devices”. Сам ключ при этом не попадает в Облачную связку ключей, а хранится отдельно (примерно в том же виде, что и ключ восстановления доступа к зашифрованным томам FileVault 2). Извлечь его из iCloud (и просмотреть) можно посредством Elcomsoft Phone Breaker. Для этого вам понадобится всё перечисленное ниже:
А вот сценарий со сбросом устройства и последующим восстановлением его из «облачной» резервной копии мы не проверяли, поэтому я не могу точно сказать, активируется ли пароль Экранного времени, если создать резервную копию в iCloud, сбросить iPhone и восстановиться из облака.
Вот мы и подошли к последнему пункту. Если ваша цель – максимально обезопасить устройство, то в ваших интересах сделать так, чтобы пароль Экранного времени ни сбросить, ни узнать было нельзя.
Хорошая новость в том, что защитить пароль Экранного времени от обывателя и даже профессионального взломщика довольно просто: достаточно установить длинный и стойкий пароль на резервную копию, после чего просто поддерживать устройство в актуальном состоянии, устанавливая свежие версии iOS сразу после их выхода. Джейлбрейки для новых версий iOS выходят далеко не сразу. Иногда между выходом обновления iOS и появлением для неё работоспособного джейлбрейка проходят месяцы.
Опасаться можно сценария, когда украденное устройство (с известным злоумышленнику кодом блокировки) будет положено на полку в ожидании появления джейлбрейка, либо если для вашего телефона (iPhone 8, 8 Plus, iPhone X или более старое поколение) есть аппаратный джейлбрейк checkra1n. Здесь, однако, может помочь стандартная «Стереть [устройство]», выполненное в портале Find my iPhone. Дело в том, что для установки джейлбрейка требуется сначала подписать IPA-файл, а потом и подтвердить цифровую подпись непосредственно на самом iPhone. Подтверждение цифровой подписи происходит на сервере Apple; то есть, злоумышленнику придётся разрешить украденному у вас iPhone выйти в интернет. В этот момент с большой вероятностью сработает команда на стирание устройства.
Злоумышленники могут решить эту проблему, используя специальные конфигурации роутера, в которых будет запрещён доступ к узлам, ответственным за функционал Find My iPhone. Кроме того, вместо обычного сертификата для подписи джейлбрейка могут использовать сертификат разработчика, который не требует выхода iPhone в сеть для подтверждения цифровой подписи.
Плохая же новость в том, что для ряда устройств с уязвимостью в загрузчике (BootRom) с известным злоумышленнику кодом блокировки экрана можно и получить доступ к файловой системе, и расшифровать Связку ключей.
Elcomsoft iOS Forensic Toolkit – специализированный инструмент для проведения криминалистического анализа устройств, работающих под управлением Apple iOS. Для анализа доступна вся пользовательская и системная информация, а также зашифрованные данные из системного хранилища (связка ключей).