В прошлой статье я рассказал о режиме ограничения доступа к аксессуарам в устройствах под управлением iOS. В статье я акцентировал внимание на особенности iOS, которая ставит безопасность данных пользователя в зависимость от единственного «непреодолимого» защитного рубежа: кода блокировки экрана. Практически все защитные меры так или иначе завязаны на код блокировки. Apple периодически (по сложному расписанию) отключает в iPhone биометрику, заставляя пользователя вводить пасскод для разблокировки экрана. Включил или перезагрузил телефон – нужен код блокировки. Использовал режим SOS – код блокировки. Телефон не использовался несколько часов – снова код блокировки. Подключаешь к компьютеру – и опять введи код блокировки. Хочешь установить пароль на резервную копию? Начиная с iOS 13 и здесь нужен код блокировки.

Казалось бы, пользователю достаточно установить длинный и сложный код блокировки, чтобы полностью обезопасить устройство. Однако такое поведение ничем не отличается от гипотетической системы безопасности здания, в котором охраняется только вход – при этом двери в кабинеты всегда нараспашку, на компьютерах в офисах нет никаких паролей, а к внутренней сети с любого устройства можно получить неограниченный доступ, просто подключившись к сети Wi-Fi (конечно же, тоже совершенно открытой).

Фантастика? Действительно, описанное звучит странновато, но именно в таком состоянии находится сейчас система безопасности iOS. Фактически, вся защита целиком и полностью основана на единственном рубеже обороны, которым является код блокировки экрана – при единственном маленьком условии: учётная запись пользователя защищена двухфакторной аутентификацией.

Что можно сделать, зная код блокировки iPhone


Если известен код блокировки экрана, из iPhone можно извлечь практически все данные, включая пароли от учётных записей. Как это сделать? Создать резервную копию, защитив её паролем. А для чего здесь код блокировки? Вот последовательность шагов для создания такой резервной копии:

  1. Подключаем iPhone к компьютеру. Начиная с iOS 11, для подключения к компьютеру на iPhone нужно не просто нажать «согласен» на запрос подключения, но и ввести код блокировки.
  2. Запускаем iTunes или iOS Forensic Toolkit и смотрим, установлен ли пароль на резервную копию. Не установлен? Прекрасно, устанавливаем свой и создаём резервную копию! (Зачем устанавливать пароль – напишу отдельно; в двух словах, только в резервную копию с паролем попадают такие данные, как Связка ключей и некоторые другие). Может помешать только одно: начиная с iOS 13 для установки пароля на резервную копию нужно ввести код блокировки. Пароль установлен, а вам – неизвестен? Тоже не беда: начиная с iOS 11 пароль на резервную копию можно сбросить… введя на iPhone код блокировки экрана!

Код блокировки можно использовать для полноценного, неограниченного доступа к паролям из Связки ключей в самом iPhone. Более того, зная код блокировки, можно легко просмотреть все сохранённые пользователем пароли как в Связке ключей, так и в стороннем менеджере паролей, который подключён к системе автозаполнения iOS (например, Roboform).

Зная код блокировки, можно легко отвязать украденный телефон от iCloud. Для этого достаточно сменить пароль от iCloud прямо в настройках телефона; вводить оригинальный пароль владельца iPhone для этого вовсе не нужно. При минимальной сноровке пароль к iCloud меняется в несколько секунд, после чего Find my iPhone выключается моментально.

Посредством кода блокировки можно расшифровать базу данных паролей пользователя в iCloud, его сообщения SMS и iMessage, а также данные «Здоровья». Здесь есть тонкий момент: для доступа к этим данным нужно, чтобы учётная запись пользователя была защищена двухфакторной аутентификацией.

При чём здесь двухфакторная аутентификация?


Хорошо, с тем, что именно доступно злоумышленнику, узнавшему код блокировки, мы разобрались. Но при чём здесь двухфакторная аутентификация?

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

  1. Для сброса пароля в iCloud (совпадает с паролем к учётной записи Apple ID). Сбросили пароль к iCloud, а дальше – по накатанной: отключили Find my iPhone, отвязав iPhone от iCloud lock; вытащили из облака фотографии (тут можно погуглить Celebgate), извлекли резервные копии, список звонков и так далее.
  2. Для доступа к паролям в облаке iCloud. Тут лишь отмечу, что пароли облачной связки ключей iCloud Keychain зашифрованы ключом, который зависит от кода блокировки. Кстати, код блокировки подойдёт от любого устройства, участвующего в синхронизации. Без двухфакторной аутентификации пароли просто не будут синхронизированы в облако, так что этот пункт здесь по праву.
  3. Данные «Здоровье». Сюда попадают данные об активности пользователя – число шагов, частота сердцебиения (если используются часы или трекер) и так далее. Очень полезная информация, если суметь ей грамотно распорядиться. Опять же, данные «Здоровья» попадают в облако в том и только в том случае, если включена двухфакторная аутентификация, а для их расшифровки потребуется ввести код блокировки.
  4. «Экранное время». Тут и ограничения, и статистика использования всех устройств пользователя и его детей. Опять же, облачная синхронизация не работает без 2FA.
  5. SMS и iMessage. Включить их синхронизацию в iCloud можно только с двухфакторной аутентификацией, для расшифровки традиционно нужен код блокировки.

«Какой ужас! Нет, я точно не буду включать двухфакторную аутентификацию, это просто опасно!» Логичное рассуждение? Честно говоря, не очень: включить двухфакторную аутентификацию с iPhone, зная его код блокировки, будет очень и очень просто, что возвращает нас к первому пункту. А вот выключить 2FA на сегодняшний день очень тяжело, практически невозможно.

Защита кода блокировки от атак методом перебора


При помощи кода блокировки злоумышленник (или правоохранительные органы) могут проделать ряд нежелательных для пользователя вещей. Код блокировки – практически единственный и последний оставшийся рубеж обороны. Если он падёт, злоумышленник сможет сделать как с самим iPhone, так и с данными в облаке практически что угодно – полный аналог здания, вся система безопасности которого ограничивается цифровым замком на входе. Дальше можно просто идти по цепочке: пароли от учётных записей из Связки ключей помогут войти в социальные сети; если найдётся пароль от учётной записи Google – можно получить доступ и к тем данным, которые накопили устройства пользователя с Android.

Apple обо всём этом известно. Вот уже долгое время при настройке iPhone или iPad вам будет предложено ввести код блокировки, состоящий из 6 цифр (раньше было всего 4). Да, включить 4-цифровой код блокировки можно, но безопасность такого шага сомнительна: 4-значные коды блокировки при помощи специальных средств можно взломать в течение получаса. А вот на перебор паролей, состоящих из 6 цифр, может уйти до 19 лет – это достаточно безопасно. Впрочем, известные нам решения используют своеобразные обходные пути: первые несколько сотен тысяч паролей в некоторых случаях (AFU, определённые поколения аппаратного обеспечения) перебираются заметно быстрее, а вместо полного перебора используются частотные словари.

А что насчёт аппаратной защиты от перебора? Во всех 64-разрядных устройствах с iOS присутствует подсистема безопасности Secure Enclave, аппаратная часто которого – Secure Element, — как раз и ограничивает скорость и число возможных попыток. На сегодняшний день защиту Secure Enclave сумели более-менее обойти для всех поколений iPhone и iPad, кроме последнего, основанного на SoC A12. В числе «безопасных» моделей – iPhone Xs, Xs Max и Xr. В этих моделях скорость перебора будет ограничена одним паролем за 10 минут; обойти это ограничение, насколько мне известно, производителям средств для взлома пока не удалось. А вот для более старых моделей, особенно в режиме AFU (After First Unlock, т.е. телефон был изъят у пользователя во включённом состоянии, и пользователь разблокировал его хотя бы раз после включения) скорость перебора выше в разы.

И что, правда можно выключить iCloud Lock, не зная пароля к iCloud?


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

Как это делается? Нужен сам iPhone и его код блокировки. Запустим системное приложение Find iPhone. В приложении — поле ввода пароля с надписью “Required”. Проигнорируем его, нажав на “Forgot Apple ID or password?”, и увидим запрос кода блокировки телефона:


Вводим код блокировки, а на следующем шаге устанавливаем новый пароль к iCloud:


Задача решена: пароль от Apple ID/iCloud нам теперь известен; iCloud lock можно отключить из настроек системы.

Альтернативный способ не требует использовать приложение Find My Phone. Заходим в Apple ID в настройках устройства, после чего открываем пункт Password & Security:


Далее – Change Password. Будет запрос кода блокировки устройства:


После этого меняем пароль от iCloud / Apple ID:


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


В настройках Trusted Phone Number указывается тот номер телефона, на который будут приходить SMS для двухфакторной аутентификации. Именно этот номер владелец сможет использовать для восстановления доступа к учётной записи, если злоумышленник сменит пароль от Apple ID.

Удалить единственный номер нельзя, но злоумышленника это не остановит. Первым шагом будет добавлен новый «доверенный номер телефона», вторым – удаляется старый, принадлежавший бывшему владельцу учётной записи. С этого момента – действительно всё: быстро восстановить доступ к учётной записи у оригинального владельца устройства уже не получится. В лучшем случае это удастся сделать после длительной процедуры верификации, за время которой следы украденного устройства успеют затеряться.

Как было бы правильно?


С моей точки зрения, система безопасности iOS сейчас оставляет желать много лучшего. Единственный рубеж обороны – совершенно недостаточная защита. (Здесь упомяну о защите паролем «Экранного времени»; она не совершенна, но лучше, чем ничего. Как-нибудь я расскажу об этой защите подробнее.)

Как можно усилить безопасность? Я бы предложил следующие меры.

  1. «Вернуть, как было в iOS 10»: до версии iOS 11 никто и никак не мог сбросить пароль на локальную резервную копию. Забыл пароль? Можно сделать бэкап в iCloud и сбросить телефон к заводским настройкам; пароль на резервную копию сбрасывался. А вот просто изъять iPhone, узнать код блокировки и вытащить резервную копию было нельзя: пароль на бэкап можно было установить длинный и очень сложный (всё равно вводить его приходится один раз при установке и второй – при восстановлении устройства), а его взлом – чрезвычайно медленный, порядка сотни попыток в секунду с использованием аппаратного ускорения на GPU.
  2. Не разрешать добавлять или убирать доверенные номера телефона без подтверждения пароля к iCloud. Сейчас для добавления нового доверенного номера, на который можно получить код 2FA, достаточно просто ввести код блокировки iPhone.
  3. Запретить сброс пароля к Apple ID/iCloud посредством кода блокировки. Попробуйте как-нибудь сменить или сбросить пароль от учётной записи Google – убедитесь, что систему восстановления доступа можно сделать и удобной, и безопасной.
  4. И уж тем более не разрешать отключение Find my iPhone после сброса пароля. Здесь опять же отправлю к Google: достаточно сменить (даже не сбросить, просто сменить!) пароль к Google Account, и отключить защиту FRP (Factory Reset Protection) не получится в течение трёх суток: период вполне достаточный, чтобы успеть что-то предпринять по поводу украденного устройства. Особенное значение этот момент приобретает в свете того, что грабители теперь не просто отнимают смартфон у жертвы, а заставляют сообщить им код блокировки, моментально меняя пароль от облака и отвязывая устройство от iCloud.

Можно ли как-то самостоятельно усилить безопасность iOS? Корпоративные пользователи могут воспользоваться системой Apple Configurator, в которой можно установить ограничения на манипуляции с учётной записью. Конечным пользователям имеет смысл устанавливать пароль «Экранного времени». Если не увлекаться самоограничениями, то опыт использования устройства не пострадает, но пароль к резервной копии сбросить уже не удастся: помимо кода блокировки экрана, система запросит ввести ещё и пароль «Экранного времени». Кроме того, можно настроить ограничения таким образом, что без пароля «Экранного времени» не получится сменить пароль от учётной записи или удалить её с iPhone.

Комментарии (8)


  1. IgorKh
    02.08.2019 13:29
    +3

    Что-то я вообще не понял посыла статьи: «Зная пароль от девайса ты можешь получить к нему доступ». Ну да, в чем проблема? Точно так же и с сейфами и с любыми системами безопасности. Можно ли обойти «ввод пароля» и получить доступ к информации — нет, все зашифровано, а доступ к ключам можно получить только через ввод пароля.

    Ну допустим, ок, все на локскрине — плохая практика, вы можете предложить что-то получше?


    1. kablag
      02.08.2019 14:20
      +2

      так ведь в конце статьи автор предлагает «Как было бы правильно?»


      1. IgorKh
        02.08.2019 14:29
        +1

        В статье — про icloud, вроде как «отвязать» его от телефона, сделать независимым сервисом, а я имел в виду «если ли варианты получше для самого девайса».
        Потому что, имхо, проблема с icloud, слегка притянута за уши. Там и физический досуп к телефону нужно иметь и знать на него пароль. В таком случае icloud — уже не такая большая проблема, условный взломщик и так получил все что можно и нельзя.


        1. v_katalov
          02.08.2019 15:57

          Я ниже постарался ответить на некоторые вопросы, но коротко повторюсь: на данный система безопасности iCloud оставляет желать лучшего. Респект Apple за множество положительных изменений за последние годы, но часть их решений откровенно неправильные. А некоторые проблемы мы и сами, честно говоря, не знаем как решать. Ну например, для учётных записей с включенной двухфакторной аутентификацией сервис FindMyPhone («Find My» в iOS 13) доступен для второго фактора. С одной стороны, это правильно, поскольку ваш единственный телефон, который вы потерали, и мог быть этим фактором. С другой — кто-то, зная только ваш логин в клауд (но не зная пароля), может вызвать блокировку вашего аккаунта, совершив ряд попыток входа с неправильным паролем.


        1. Oleg_Afonin Автор
          02.08.2019 16:00
          +1

          Нет, в статье не об этом. Если говорить об «отвязке», то «отвязывается» не облако от телефона, а телефон — от облака. Телефон «привязывается» к облаку для защиты от кражи. Даже если грабитель сбросит телефон, настроить его заново не получится без вмешательства в аппаратную часть (только для старых моделей, для новых и она не поможет). Для того, чтобы отвязать телефон от облака, нужно будет ввести пароль от iCloud (Apple ID) оригинального владельца. Если же известен код блокировки, то пароль от облака оригинального владельца больше не нужен. Кстати, подобным недостатком страдают и смартфоны на Android: там для отключения FRP достаточно убрать безопасную блокировку экрана (код блокировки, паттерн и т.п.), после чего FRP также отключается.


    1. v_katalov
      02.08.2019 15:51
      -1

      Нет, совсем не так, боюсь что вы правда не совсем поняли.

      Прежде всего, пасскод на телефон действитиельно является отличным средством защиты самого аппарата — взломать его крайне тяжело и мало кому доступно.

      Но есть два важных нюанса. Во-первых, даже зная пасскод, извлечь *все* данные из аппарата крайне непросто, как это ни удивительно. Для этого надо или ставить джейл (что не всегда возможно), или пользоваться опять же вышеупомянытыми средствами Cellebrite или GrayKey.

      Во-вторых, проблема в том, что в ситуации с 2FA пасскод становится *единственным* средством защиты всего, включая клаудную учётную запись, даже если у вас установлен стойкий пароль к iCloud. А клауд — это больше чем содержимое конкретного телефона, а и данные с других устройств (включая даже Мак), плюс пароли из облачной связки ключей (где могут быть пароли к другим учётным записям, кредитные карты и прочее), плюс данные о здоровье, плюс история геолокации, плюс много чего ещё. Ну и конечно, можно удалённо стереть или заблокировать все устройства.

      Да, пасскод трудно добыть. Но если у злоумышленника (ну или правоохранительных органов) будет ваш аппарат и пасскод от него (неважно, каким способом полученный) — всё, условно это конец вашей безопасности.

      Я помню, когда мы несколько лет назад сделали первую версию программы для скачивания клаудных бэкапов, было довольно много зубоскальства — мол, ну тоже мне новость, если пароль от клауда известен, и так есть полный доступ. Нет, это тоже не так (причём *сильно* не так). Всё что можно сделать стандартными средствами, это восстановиться из клаудного бэкапа на другой аппарат (и/или настроить его на синхронизацию).

      С другой стороны — проколы в реализации системы безопасности iCloud привели к Celebgate (только после этого Apple добавили 2FA для облачных резервных копий).

      В общем, тема очень объёмная и интересная.


  1. site6893
    02.08.2019 16:09

    почему же код «блокировки», если везде в статье по смыслу это код «разблокировки»?


    1. v_katalov
      02.08.2019 17:50

      Вопрос терминологии, это естественно одно и то же.