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


Оказывается, получить доступ почти к любому приложению с Touch ID легко, для этого достаточно знать только пароль от блокировки (passcode) самого устройства от Apple, сообщает лаборатория «Кадмус».


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




При таких обстоятельствах получается, что при использовании Touch ID интерфейсы авторизации в приложениях просто не играют никакой роли. Passcode из 4 или 6 цифр дает возможность получить полный доступ к любым приложениям.


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


Как это произошло?


Дело в том, что с момента появления iOS 7 функциональностью Touch ID могла пользоваться только сама Apple. В iOS 8 компания открыла доступ разработчикам к довольно ограниченному API, которое позволяло получить информацию лишь о том, известный отпечаток был использован или нет. Эта функциональность была предназначена скорее для подтверждения операций, а не для авторизации в приложениях, но все решили иначе.


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


В iOS 9 были открыты новые возможности в API для работы с Touch ID и появился метод контроля изменения состава отпечатков, но т.к. в сети уже были распространены примеры кода, эти возможности продолжают игнорировать почти все разработчики. Некоторые из них при обсуждении уязвимости до сих пор с уверенностью сообщают, что это приемлемый риск. Хотя логично, что если passcode достаточно чтобы попасть в приложение, зачем тогда вообще нужен экран авторизации.


Что делать разработчикам?


Исправление этой уязвимости стало возможным начиная еще с iOS 9.


Следуйте рекомендациям Apple, которые доступы в описании технологии и приведены в документации для разработчиков. Примерами приложений с этим типом защиты являются «Сбербанк Онлайн» или AppStore.


Если вы используете для авторизации KeyChain (а это более органично в рамках модели безопасности Apple), то, как правило, достаточно изменить всего одну строку кода, или дописать сценарий, использующий возможность определения изменения состава отпечатков.


Контроль авторизации по отпечатку в iOS 8

CFErrorRef error = NULL;
SecAccessControlRef sacObject = SecAccessControlCreateWithFlags(kCFAllocatorDefault,
kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly,
kSecAccessControlUserPresence, &error);

Контроль авторизации по отпечатку в iOS 9

CFErrorRef error = NULL;
SecAccessControlRef sacObject = SecAccessControlCreateWithFlags(kCFAllocatorDefault,
kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly,
kSecAccessControlTouchIDCurrentSet | kSecAccessControlDevicePasscode, &error);

Особенность заключается в использовании атрибута kSecAccessControlTouchIDCurrentSet, который защищает от использования новых отпечатков в iOS.


Эпилог


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


Также выглядит странным, что информация о новых моделях безопасности iOS не доводится до разработчиков.


Тем не менее, этот тип защиты авторизации возможен и работает начиная с iOS 9.

Поделиться с друзьями
-->

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


  1. SLASH_CyberPunk
    23.11.2016 17:15

    Желтизна…
    1. если мне не изменяет память, то passcode должен отличаться от экрана разблокировки
    2. если пользуетесь touchid — то установка passcode обязательна
    3. многие пользователи свой passcode даже не помнят, а вы утверждаете, что его знает злоумышленник
    4. и это явно не проблема apple, что разработчики пишут не секьюрный код


    1. wrewolf
      23.11.2016 17:18
      +1

      1. passcode = пароль разблокировки iPhone
      2. да, но в ряде ситуаций обычные люди не уделяют достаточно внимания защите пароля. У многих, кто пользуется iPhone с ранних моделей это всего 4 цифры и набирают его достаточно часто, и сообщают другим. Я не говорю про опытных разработчиков.
      3. все помнят. Touch ID отключается, т.к. есть ограничения:
        • если устройство было недавно перезагружено;
        • если отпечаток пальца не был распознан пять раз подряд;
        • если устройство не разблокировалось в течение более 8 часов;
        • если passcode не был использован в течении 6 дней;
        • если вы пытаетесь открыть вкладку «Touch ID и пароль» в меню «Настройки».

      4. скорее ответственность за это в той или иной мере распределена между разработчиками и Apple. Разработчики не в курсе метода защиты. Слово kSecAccessControlTouchIDCurrentSet гугл находит всего 96 страниц по всему интернету.


      1. SLASH_CyberPunk
        23.11.2016 17:25

        1. к сожалению, вот прям сейчас у меня не работает на телефоне тач, но тогда вы путаете момент, что для установки touchid необходим не passcode, а новый отдельный код на доступ именно к меню.
        2. ввиду отличий этих кодов из п.1, данный пункт не актуален…
        3. ввиду отличий этих кодов из п.1, данный пункт не актуален…
        4. разработчики пишут приложения, читают документацию… тут полемика из серии «я напишу троян/вирус/т.п., а во всем виноват <подставить любого производителя железа/софта>»


        1. wrewolf
          23.11.2016 17:35

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


          1. SLASH_CyberPunk
            23.11.2016 17:46

            Чтобы войти в меню безопасности и добавить новый палец у меня телефон запрашивает отдельный passcode на данное меню, которое отличается от passcode на разблокировке экрана.


            1. wrewolf
              23.11.2016 17:57
              +1

              Для доступа к настройке Touch ID или passcode нужен passcode, а не что-либо другое.


              1. SLASH_CyberPunk
                23.11.2016 18:44
                -1

                https://support.apple.com/en-us/HT201304


                1. wrewolf
                  23.11.2016 19:24

                  Эти ограничения не играют значения в контексте проблемы. Это родительский контроль. Вы не заблокируете приложение хранителя паролей например (только если по возрастному ограничению), или не ограничите «паролем ограничений» смену или отключение passcode и добавление отпечатка.
                  Попробуйте протестировать описанный в посте метод.


                1. istui
                  23.11.2016 20:10
                  +1

                  да, на Ограничения — отдельный пароль, но предотвратить смену пасскода или настройку тач айди через ограничения пока что нельзя…


            1. ishua
              23.11.2016 18:14
              +1

              В iphone есть только один passcode. Ну или скажите же где это вы настраиваете их два?


              1. SLASH_CyberPunk
                23.11.2016 18:44
                -1

                https://support.apple.com/en-us/HT201304


  1. Boomburum
    23.11.2016 17:35
    +2

    Эм, что-то я не понял — как, не зная passcode от системы смогли разблокировать айфон и добавить новый отпечаток в систему? На видео что-то странное — телефон сам не заблокирован, а только приложения отдельные. Может, конечно, это в последней версии iOS так, но у меня пароль или отпечаток защищают всю систему, без возможности зайти куда-либо. А отдельные приложения я «защищаю» отдельным твиком (джейлбрейк).


    1. MaximChistov
      23.11.2016 17:42
      +1

      статья выглядит как желтый пиар…


      1. wrewolf
        23.11.2016 17:46

        Есть разработчики приложений, которые так не считают и относятся с вниманием к безопасности, например Сбербанк.


    1. wrewolf
      23.11.2016 17:46
      +1

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


      1. Boomburum
        23.11.2016 17:52

        То есть это не столько массовая уязвимость, а лишь относительно редкий случай, когда «злоумышленнику известен пароль» или когда «пароль не установлен» (это вообще странно). Говоря проще, «когда юзер забил на свою безопасность» — разработичики софта тут вряд ли виноваты и едва смогут полностью защитить такого пользователя.


        1. wrewolf
          23.11.2016 17:57

          «Массовая» означает, что этой уязвимости подвержены тысячи приложений и сотни миллионов их пользователей. Из 100%, кто подвержен этой проблеме, шанс реализоваться у нее, конечно, состоит в доле процента. Если разработчики позаботятся о защите, то этой доли не будет вообще.

          Метод защиты есть в посте, он работает. Проведите эксперимент.


        1. ishua
          23.11.2016 18:20
          +1

          По моему достаточно стремный момент. У меня на банк-клиентах отдельный пароль (passcode или палец) никогда не использую, но вот если бы…
          То достаточно посмотреть ваш passcode и украсть телефон и можно в банк клиенте делать какие угодно переводы денег, пароль от банклиента заменяется пальцем, смски подтверждений падают на телефон…


      1. navion
        23.11.2016 22:55
        +1

        либо пароль не установлен

        Touch ID не работает без пароля.


  1. istui
    23.11.2016 20:14

    Спасибо за информацию. Действительно, клиент-банк лучше защищать банальным (но отдельным и отличным от пасскода) пин-кодом. (Точнее, выбирать такой вариант пока баг не устранили).


  1. shifttstas
    24.11.2016 14:25
    +2

    Бред же, что бы добавить новый отпечаток = нужно знать пароль от устройства, не передаём пароль никому и будет всё хорошо


    1. wrewolf
      24.11.2016 16:12

      Ну вот от тебя не ожидал, не передаем, не значит, что его нельзя подсмотреть.
      Существует правильный метод защиты, но повсеместно не используется разработчиками и пропускается на модерации приложений в AppStore.
      Вот, что думает по этому поводу appleinsider в своем подкасте


      1. shifttstas
        26.11.2016 00:22

        Нет ну я правда не вижу проблемы :) пароль пол зевательных iOS вводит КРАЙНЕ редко, ну а если считать это багом, то на уровне системы надо делать селектор сбрасывать ли авторизацию в приложениях или нет.
        +о надомунности проблемы — если девайс перезагружается, то приложения просят пароль а потом уже разрешают Touch ID


        1. istui
          26.11.2016 13:17

          а как после перезагрузки войти в систему, не введя пароль?


          1. shifttstas
            26.11.2016 14:23

            Никак, у вас часто случаются перезагрузки?


            1. istui
              26.11.2016 19:33

              Если начинаются тормоза, то перезагружаю, но не чаще раза в 1-1,5 месяца обычно. + обновления ОС