D2
Администратор
- Регистрация
- 19 Фев 2025
- Сообщения
- 4,380
- Реакции
- 0
В iOS 18 появилась новая функция безопасности: перезагрузка бездействия (inactivity reboot). От чего она защищает и как работает? В этом посте мы рассмотрим все подробности вплоть до расширения ядра и Secure Enclave Processor.
А вы знали, что первый ввод пароля после включения телефона сильно отличается от его дальнейшего ввода для разблокировки телефона?
При первом вводе пароля разблокируется хранилище ключей в Secure Enclave Processor (SEP), шифрующем пользовательские данные на iPhone.
Состояние до первого ввода пароля называется Before First Unlock (BFU). Из-за шифрования пользовательских данных iPhone ведёт себя немного иначе при последующих разблокировках. Вы увидите, что Face ID и Touch ID не работают, и требуется ввод пароля. Но можно заметить и более тонкие отличия: поскольку пароли Wi-Fi зашифрованы, iPhone не будет подключаться к сетям Wi-Fi. Если SIM не защищена PIN-кодом, то iPhone сможет подключаться к сотовым сетям. Это означает, что вы сможете получать телефонные вызовы. Однако при получении вызова, даже если номер есть в контактах, имя контакта не будет отображаться, потому что контакты ещё не дешифрованы. Аналогично, при получении уведомлений о новых сообщениях вы увидите, что получили сообщения, но их предпросмотр будет недоступен. Можете попробовать сами!
В состоянии After First Unlock (AFU) пользовательские данные уже дешифрованы. Даже когда вы видите экран блокировки, некоторые ключи остаются доступными операционной системе. Благодаря этому сохраняется подключение к сетям Wi-Fi, и можно видеть предпросмотр сообщений в уведомлениях даже при заблокированном iPhone.
Хоть это и удобно, состояние AFU более подвержено атакам. Нападающий, который каким-то образом сможет обойти экран блокировки, сможет и получить доступ к дешифрованным данным. Для обхода экрана блокировки нападающему необязательно знать пароль. Уязвимости безопасности внутри iOS могут позволить нападающим добиться исполнения кода и извлечения данных из iPhone, даже когда он кажется «заблокированным».
Нападающие с физическим доступом к iPhone имеют больший выбор уязвимостей безопасности. Поверхность атаки больше, а потому нападающие могут использовать уязвимости в стеке USB или внутри беспроводных протоколов, например, Wi-Fi, Bluetooth или сотовой связи, или даже использовать более инвазивные аппаратные атаки, требующие вскрытия устройства. Такое увеличение поверхности атаки обычно удешевляет эксплойты этих уязвимостей на сером рынке, поскольку потенциально увеличивает предложение. Ещё один удешевляющий атаки фактор — это время: уязвимости, публично известные поставщику и пропатченные в новых версиях ПО, не разблокируют новые iPhone, но могут разблокировать iPhone, находившиеся в состоянии AFU так долго, что не смогли обновить ПО.
В сценариях с участием правоохранительных органов многие важные данные доступны экспертам по цифровой криминалистике в состоянии AFU. Правоохранительные органы пользуются этим и часто отставляют изъятые iPhone включёнными, но изолированными от Интернета до момента извлечения данных. Это время может быть необходимо для того, чтобы подождать появления эксплойта или по юридическим причинам, например, для получения ордера.
Однако воры и другие преступники тоже заинтересованы в получении такого доступа после кражи устройства. Он даёт им доступ к банковским счетам и другой ценной информации, намного превосходящей по стоимости цену самого iPhone, или данных, которые можно использовать для шантажа. Люди часто используют один и тот же пароль многократно, и доступ к аккаунту iCloud может позволить вору сбросить блокировку активации устройства, что повысит стоимость его перепродажи.
В недавней новостной статье 404 media (доступ к ней платный, но самая важная информация также содержится в твите) сообщается о документе правоохранительных органов США про подозрительные перезагрузки iPhone. В этом документе присутствуют два интересных утверждения:
Особенно важным было бы второе утверждение, если бы оно оказалось правдой. Если бы кто-то разобрался, как это работает, то это стало бы «универсальным телевизионным пультом» для iPhone, беспроводным образом вызывающим перезагрузку одновременно сотен iPhone. Действительно ли Apple могла встроить такую функцию в iPhone?
Я немного знаю о беспроводной экосистеме Apple, поэтому крайне заинтересовался этим и решил исследовать вопрос!
Когда Apple добавляет новые функции, она обычно не очень хорошо их прячет. ПО Apple содержит множество отладочных строк, которые могут намекать о новой функциональности. Blacktop ведёт репозиторий git найденных в iOS строк; в этом репозитории есть очень удобная история версий. Я решил сделать самое ленивое, что мог придумать: просто поискал текст «reboot».
Бинго, кажется, нам нужно третье вхождение: «inactivity_reboot». Любопытно, что оно находится в keybagd: этот демон связан с хранилищем ключей, которое разблокируется при первой разблокировке.
Второй поиск только inactivity reboot показал, что эта строка начала встречаться в iOS 18.1 и iOS 18.2. В iOS 18.2 строку «inactivity_reboot» сменили на «inactivity_reboot_enabled», что намекает о дополнительных потенциальных изменениях в новых бетах iOS 18.2.
Пока мне было непонятно только одно: через какое время срабатывает inactivity reboot? В новой статье 404 media утверждается, что через 3-4 дня. Я обновил свой SRD до последней беты и снял таймлапс.
Оказалось, что inactivity reboot срабатывает ровно через три дня (72 часа). iPhone выполняет её вне зависимости от подключения к Wi-Fi. Это подтверждает мои подозрения о том, что эта функция никак не связана с беспроводной связью.
Давайте выполним реверс-инжиниринг изменений! Какие гарантии безопасности они обеспечивают?
Вот краткое описание обнаруженного мной:
В оставшейся части поста я расскажу, как выяснил всё это, и какие последствия для безопасности это несёт.
После поиска в ipsw-diffs я знал, что при перезапуске выводятся какие-то сообщения лога. Начав изучать их статически, я уже знал, что мне самому придётся выполнять их логгинг.
После того, как мой телефон перезагрузился спустя три дня, я запустил sysdiagnose и поискал эти сообщения. Если будете делать это сами, разблокируйте устройство перед выполнением sysdiagnose. В противном случае события до перезапуска будут отсутствовать.
В сообщениях AppleSEPKeyStore рядом с моментом inactivity reboot присутствуют следующие записи:
Для дополнительного контекста приведу неотфильтрованные сообщения лога до инициации перезапуска:
Самое новое ядро iOS можно Скачать
Безопасность до и после первой разблокировки
А вы знали, что первый ввод пароля после включения телефона сильно отличается от его дальнейшего ввода для разблокировки телефона?
При первом вводе пароля разблокируется хранилище ключей в Secure Enclave Processor (SEP), шифрующем пользовательские данные на iPhone.
Состояние до первого ввода пароля называется Before First Unlock (BFU). Из-за шифрования пользовательских данных iPhone ведёт себя немного иначе при последующих разблокировках. Вы увидите, что Face ID и Touch ID не работают, и требуется ввод пароля. Но можно заметить и более тонкие отличия: поскольку пароли Wi-Fi зашифрованы, iPhone не будет подключаться к сетям Wi-Fi. Если SIM не защищена PIN-кодом, то iPhone сможет подключаться к сотовым сетям. Это означает, что вы сможете получать телефонные вызовы. Однако при получении вызова, даже если номер есть в контактах, имя контакта не будет отображаться, потому что контакты ещё не дешифрованы. Аналогично, при получении уведомлений о новых сообщениях вы увидите, что получили сообщения, но их предпросмотр будет недоступен. Можете попробовать сами!
В состоянии After First Unlock (AFU) пользовательские данные уже дешифрованы. Даже когда вы видите экран блокировки, некоторые ключи остаются доступными операционной системе. Благодаря этому сохраняется подключение к сетям Wi-Fi, и можно видеть предпросмотр сообщений в уведомлениях даже при заблокированном iPhone.
Хоть это и удобно, состояние AFU более подвержено атакам. Нападающий, который каким-то образом сможет обойти экран блокировки, сможет и получить доступ к дешифрованным данным. Для обхода экрана блокировки нападающему необязательно знать пароль. Уязвимости безопасности внутри iOS могут позволить нападающим добиться исполнения кода и извлечения данных из iPhone, даже когда он кажется «заблокированным».
Нападающие с физическим доступом к iPhone имеют больший выбор уязвимостей безопасности. Поверхность атаки больше, а потому нападающие могут использовать уязвимости в стеке USB или внутри беспроводных протоколов, например, Wi-Fi, Bluetooth или сотовой связи, или даже использовать более инвазивные аппаратные атаки, требующие вскрытия устройства. Такое увеличение поверхности атаки обычно удешевляет эксплойты этих уязвимостей на сером рынке, поскольку потенциально увеличивает предложение. Ещё один удешевляющий атаки фактор — это время: уязвимости, публично известные поставщику и пропатченные в новых версиях ПО, не разблокируют новые iPhone, но могут разблокировать iPhone, находившиеся в состоянии AFU так долго, что не смогли обновить ПО.
Слухи о перезапусках iPhone
В сценариях с участием правоохранительных органов многие важные данные доступны экспертам по цифровой криминалистике в состоянии AFU. Правоохранительные органы пользуются этим и часто отставляют изъятые iPhone включёнными, но изолированными от Интернета до момента извлечения данных. Это время может быть необходимо для того, чтобы подождать появления эксплойта или по юридическим причинам, например, для получения ордера.
Однако воры и другие преступники тоже заинтересованы в получении такого доступа после кражи устройства. Он даёт им доступ к банковским счетам и другой ценной информации, намного превосходящей по стоимости цену самого iPhone, или данных, которые можно использовать для шантажа. Люди часто используют один и тот же пароль многократно, и доступ к аккаунту iCloud может позволить вору сбросить блокировку активации устройства, что повысит стоимость его перепродажи.
В недавней новостной статье 404 media (доступ к ней платный, но самая важная информация также содержится в твите) сообщается о документе правоохранительных органов США про подозрительные перезагрузки iPhone. В этом документе присутствуют два интересных утверждения:
- iPhone с iOS 18 перезапускаются даже при полной изоляции от беспроводных сетей.
- iPhone с iOS 18 приказывают другим iPhone с более старыми версиями iOS перезагружаться по беспроводному соединению!
Особенно важным было бы второе утверждение, если бы оно оказалось правдой. Если бы кто-то разобрался, как это работает, то это стало бы «универсальным телевизионным пультом» для iPhone, беспроводным образом вызывающим перезагрузку одновременно сотен iPhone. Действительно ли Apple могла встроить такую функцию в iPhone?
Я немного знаю о беспроводной экосистеме Apple, поэтому крайне заинтересовался этим и решил исследовать вопрос!
Обнаружение Inactivity Reboot
Когда Apple добавляет новые функции, она обычно не очень хорошо их прячет. ПО Apple содержит множество отладочных строк, которые могут намекать о новой функциональности. Blacktop ведёт репозиторий git найденных в iOS строк; в этом репозитории есть очень удобная история версий. Я решил сделать самое ленивое, что мог придумать: просто поискал текст «reboot».
Бинго, кажется, нам нужно третье вхождение: «inactivity_reboot». Любопытно, что оно находится в keybagd: этот демон связан с хранилищем ключей, которое разблокируется при первой разблокировке.
Второй поиск только inactivity reboot показал, что эта строка начала встречаться в iOS 18.1 и iOS 18.2. В iOS 18.2 строку «inactivity_reboot» сменили на «inactivity_reboot_enabled», что намекает о дополнительных потенциальных изменениях в новых бетах iOS 18.2.
Пока мне было непонятно только одно: через какое время срабатывает inactivity reboot? В новой статье 404 media утверждается, что через 3-4 дня. Я обновил свой SRD до последней беты и снял таймлапс.
Оказалось, что inactivity reboot срабатывает ровно через три дня (72 часа). iPhone выполняет её вне зависимости от подключения к Wi-Fi. Это подтверждает мои подозрения о том, что эта функция никак не связана с беспроводной связью.
Реверс-инжиниринг Inactivity Reboot
Давайте выполним реверс-инжиниринг изменений! Какие гарантии безопасности они обеспечивают?
Вот краткое описание обнаруженного мной:
- Secure Enclave Processor (SEP) отслеживает время последней разблокировки телефона. Если это время последней разблокировки превышает три дня, SEP сообщает модулю ядра AppleSEPKeyStore, что время исчерпано.
- Модуль ядра AppleSEPKeyStore приказывает пользовательскому пространству инициировать перезапуск. Далее SpringBoard надлежащим образом завершает все процессы пользовательского пространства. Это предотвращает потенциальную потерю данных при перезапуске.
- Если модуль ядра AppleSEPKeyStore обнаруживает, что iPhone по-прежнему включён после того, как должна была выполниться перезагрузка, возникает паника ядра. Такое может происходить, только если кто-нибудь пытается вмешаться в inactivity reboot.
- Модуль ядра AppleSEPKeyStore записывает переменную NVRAM aks-inactivity. После перезапуска iPhone keybagd считывает эту переменную и если она установлена, отправляет Apple событие аналитики, включив в него информацию о том, как долго iPhone не разблокировался.
В оставшейся части поста я расскажу, как выяснил всё это, и какие последствия для безопасности это несёт.
Индикаторы в Sysdiagnose
После поиска в ipsw-diffs я знал, что при перезапуске выводятся какие-то сообщения лога. Начав изучать их статически, я уже знал, что мне самому придётся выполнять их логгинг.
После того, как мой телефон перезагрузился спустя три дня, я запустил sysdiagnose и поискал эти сообщения. Если будете делать это сами, разблокируйте устройство перед выполнением sysdiagnose. В противном случае события до перезапуска будут отсутствовать.
В сообщениях AppleSEPKeyStore рядом с моментом inactivity reboot присутствуют следующие записи:
Для дополнительного контекста приведу неотфильтрованные сообщения лога до инициации перезапуска:
Реверс-инжиниринг расширения ядра SEPKeyStore
Самое новое ядро iOS можно Скачать
View hidden content is available for registered users!