Вход по отпечатку пальца в устройства 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)
Boomburum
23.11.2016 17:35+2Эм, что-то я не понял — как, не зная passcode от системы смогли разблокировать айфон и добавить новый отпечаток в систему? На видео что-то странное — телефон сам не заблокирован, а только приложения отдельные. Может, конечно, это в последней версии iOS так, но у меня пароль или отпечаток защищают всю систему, без возможности зайти куда-либо. А отдельные приложения я «защищаю» отдельным твиком (джейлбрейк).
MaximChistov
23.11.2016 17:42+1статья выглядит как желтый пиар…
wrewolf
23.11.2016 17:46Есть разработчики приложений, которые так не считают и относятся с вниманием к безопасности, например Сбербанк.
wrewolf
23.11.2016 17:46+1Уязвимость работает в случаях, когда злоумышленнику известен пароль от iPhone либо пароль не установлен. Существуют ситуации, когда вы сообщаете свой пароль другим, ради удобства, либо его не составляет труда подсмотреть. На видео пароль снят, т.к. очевидно он был известен автору видео. Но это не значит, что в такой ситуации доступ должен быть открыт к приложениям. Пароль от iPhone защищает одну сущность, а приложения защищают уже свои интересы — у кого-то двухфакторная авторизация, у кого-то ее вовсе нет. Но если она есть, она не должна преодолеваться вот так просто.
Boomburum
23.11.2016 17:52То есть это не столько массовая уязвимость, а лишь относительно редкий случай, когда «злоумышленнику известен пароль» или когда «пароль не установлен» (это вообще странно). Говоря проще, «когда юзер забил на свою безопасность» — разработичики софта тут вряд ли виноваты и едва смогут полностью защитить такого пользователя.
wrewolf
23.11.2016 17:57«Массовая» означает, что этой уязвимости подвержены тысячи приложений и сотни миллионов их пользователей. Из 100%, кто подвержен этой проблеме, шанс реализоваться у нее, конечно, состоит в доле процента. Если разработчики позаботятся о защите, то этой доли не будет вообще.
Метод защиты есть в посте, он работает. Проведите эксперимент.
ishua
23.11.2016 18:20+1По моему достаточно стремный момент. У меня на банк-клиентах отдельный пароль (passcode или палец) никогда не использую, но вот если бы…
То достаточно посмотреть ваш passcode и украсть телефон и можно в банк клиенте делать какие угодно переводы денег, пароль от банклиента заменяется пальцем, смски подтверждений падают на телефон…
istui
23.11.2016 20:14Спасибо за информацию. Действительно, клиент-банк лучше защищать банальным (но отдельным и отличным от пасскода) пин-кодом. (Точнее, выбирать такой вариант пока баг не устранили).
shifttstas
24.11.2016 14:25+2Бред же, что бы добавить новый отпечаток = нужно знать пароль от устройства, не передаём пароль никому и будет всё хорошо
wrewolf
24.11.2016 16:12Ну вот от тебя не ожидал, не передаем, не значит, что его нельзя подсмотреть.
Существует правильный метод защиты, но повсеместно не используется разработчиками и пропускается на модерации приложений в AppStore.
Вот, что думает по этому поводу appleinsider в своем подкастеshifttstas
26.11.2016 00:22Нет ну я правда не вижу проблемы :) пароль пол зевательных iOS вводит КРАЙНЕ редко, ну а если считать это багом, то на уровне системы надо делать селектор сбрасывать ли авторизацию в приложениях или нет.
+о надомунности проблемы — если девайс перезагружается, то приложения просят пароль а потом уже разрешают Touch IDistui
26.11.2016 13:17а как после перезагрузки войти в систему, не введя пароль?
shifttstas
26.11.2016 14:23Никак, у вас часто случаются перезагрузки?
istui
26.11.2016 19:33Если начинаются тормоза, то перезагружаю, но не чаще раза в 1-1,5 месяца обычно. + обновления ОС
SLASH_CyberPunk
Желтизна…
1. если мне не изменяет память, то passcode должен отличаться от экрана разблокировки
2. если пользуетесь touchid — то установка passcode обязательна
3. многие пользователи свой passcode даже не помнят, а вы утверждаете, что его знает злоумышленник
4. и это явно не проблема apple, что разработчики пишут не секьюрный код
wrewolf
SLASH_CyberPunk
1. к сожалению, вот прям сейчас у меня не работает на телефоне тач, но тогда вы путаете момент, что для установки touchid необходим не passcode, а новый отдельный код на доступ именно к меню.
2. ввиду отличий этих кодов из п.1, данный пункт не актуален…
3. ввиду отличий этих кодов из п.1, данный пункт не актуален…
4. разработчики пишут приложения, читают документацию… тут полемика из серии «я напишу троян/вирус/т.п., а во всем виноват <подставить любого производителя железа/софта>»
wrewolf
Я не говорю, что для настройки нового пальца нужен отдельный пароль, хотя удостовериться в том, что палец принадлежит владельцу было бы логично, просто запросив пароль от iCloud. Но, этого не происходит. Поэтому каждый, кто знает passcode (или если он не установлен — есть и такие люди), может добавить новый отпечаток, который сработает в приложениях.
SLASH_CyberPunk
Чтобы войти в меню безопасности и добавить новый палец у меня телефон запрашивает отдельный passcode на данное меню, которое отличается от passcode на разблокировке экрана.
wrewolf
Для доступа к настройке Touch ID или passcode нужен passcode, а не что-либо другое.
SLASH_CyberPunk
https://support.apple.com/en-us/HT201304
wrewolf
Эти ограничения не играют значения в контексте проблемы. Это родительский контроль. Вы не заблокируете приложение хранителя паролей например (только если по возрастному ограничению), или не ограничите «паролем ограничений» смену или отключение passcode и добавление отпечатка.
Попробуйте протестировать описанный в посте метод.
istui
да, на Ограничения — отдельный пароль, но предотвратить смену пасскода или настройку тач айди через ограничения пока что нельзя…
ishua
В iphone есть только один passcode. Ну или скажите же где это вы настраиваете их два?
SLASH_CyberPunk
https://support.apple.com/en-us/HT201304