Что такое двухфакторная аутентификация и протокол FIDO U2F

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

Меняются предпочтения пользователей в выборе того или иного сервиса. Если раньше выбор падал на наиболее удобный вариант, то теперь — на максимально защищённый.

Для обеспечения безопасности изобрели мультифакторную аутентификацию (MFA) и ее упрощенный вариант – двухфакторную (2FA): первый рубеж защиты – логин и пароль, т.е. то, что знает и помнит пользователь, а второй – это то, что есть только у этого пользователя: SMS, Email, one-time password (OTP/TOTP/HOTP) приложения, криптографические токены, биометрические данные. Наиболее дешёвые и удобные способы — приложение и SMS. Вводим логин и пароль на сайте, после чего получаем на мобильный телефон SMS с кодом. Вводим код, и у нас есть доступ к данным.

Мир 2FA сегодня

С момента появления 2FA прошло уже достаточно много времени, большинство крупных интернет-сервисов широко ее используют. 2FA «шагнула» в финтех: невозможно уже себе представить онлайн платежи без подтверждений и авторизации, например, через SMS.

И, как ни странно, при таком широком распространении 2FA у пользователей до сих пор крадут и компрометируют учетные записи. Попробуем разобраться в недостатках методов 2FA и их уязвимостях.

  • Фишинг. Практически все 2FA решения уязвимы к MITM (men in the middle) атакам, и соответственно фишингу.
  • Безопасность. Для примера рассмотрим SMS, на данный момент самое популярное решение 2FA на рынке. Интернет пестрит историями о перевыпусках сим-карт в России, США, ЮАР, Великобритании и других странах. К тому же специальные технические средства, доступные уже и не только спецслужбам, а также методы социальной инженерии еще никто не отменял.
  • Стоимость. Криптографические токены, отлично себя зарекомендовавшие с точки зрения безопасности — достаточно недешевое удовольствие. Их покупка ложится на плечи конечных пользователей, редкий сервис берет их оплату и доставку пользователю на себя. Даже отправка SMS стоит денег. Таким образом, внедрение и использование 2FA могут позволить себе далеко не все.
  • Совместимость. Далеко не все операционные системы имеют в своем составе драйвера для работы криптографических токенов. Далеко не все пользователи хотят возиться с поиском и их установкой.
  • Удобство использования. Пользователям лень вводить одноразовые пароли. Разблокируй экран телефона, открой сообщение или OTP программу, прочитай код, введи его, ошибись, повтори все сначала — это стандартный алгоритм взаимодействия пользователя и двухфакторной аутентификации.

Сегодняшние 2FA-решения не в состоянии надежно защитить пользователя, зачастую сложны в применении, дороги и не универсальны.

FIDO U2F

В 2007 году PayPal попыталась внедрить 2FA с отправкой OTP через SMS. Несмотря на то, что на тот момент этот способ был прогрессивным и достаточно безопасным, темпы его внедрения были катастрофично низки. Большинство пользователей просто проигнорировало возможность увеличить безопасность своих данных.

Исследуя возможности по внедрению биометрических технологий, PayPal совместно с Validity Sensors, первыми озвучили мысль о том, что пора создать отраслевой стандарт, который бы поддерживал все аппаратные средства аутентификации. В 2013 году был основан FIDO (Fast IDentity Online) — альянс, ставящий себе задачей именно создание такого стандарта. Множество крупных компаний, таких как Google, ARM, Bank of America, Master Card, Visa, Microsoft, Samsung, LG, Dell и RSA стали его членами.

На данный момент, основные цели, которые FIDO ставит перед собой — это простые в использовании, безопасные, приватные и стандартизированные решения.

Результатом деятельности FIDO пока стали два стандарта: U2F (Universal Second Factor) и UAF (Universal Authentication Framework для биометрической аутентификации).

Что из себя представляет U2F?

U2F — это открытый, бездрайверный протокол, изначально разрабатываемый компаниями Google и Yubico и использующий для двухфакторной аутентификации специальные USB, NFC, Bluetooth LE устройства или SIM-карту (спецификации еще в разработке), которые хранят ключи и самостоятельно выполняют криптографические операции.

На данный момент поддержка U2F реализована в браузерах Chrome и Edge, а также в OS Windows 10.

Протокол основан на challenge-response аутентификации с помощью электронной цифровой подписи.

Со стороны пользователя

С точки зрения пользователя работа с протоколом достаточно тривиальна. Пользователь вводит логин и пароль, вставляет в компьютер USB (или использует Bluetooth или NFC) U2F устройство (нажимает на нем кнопку, вводит пин-код, проходит биометрическую проверку или не делает ничего) и успешно проходит аутентификацию.

Углубление в протокол U2F

Взаимодействие с U2F-клиентом (например, браузером или Windows 10) проходит следующим образом:

Рассмотрим работу протокола подробнее.

Пользователь вводит логин и пароль, сервер проверяет учетные данные и, если они верны, генерирует случайный challenge и отправляет его клиентскому ПО, которое, в свою очередь, передает его U2F-устройству. U2F-устройство ожидает участия пользователя для подтверждения дальнейших операций (как говорилось выше, например, нажатия кнопки на устройстве) и затем, возвращает клиентскому ПО подписанный challenge, который передается дальше на сервер для сверки подписи.

Для защиты от фишинга клиентское ПО добавляет к challenge origin URL, TLS channel ID перед отправкой U2F устройству, а сервер, после получения подписи, сверяет полученные данные.

Чтобы не подписывать все подряд одной парой ключей (что, естественно приведет от компрометации одного аккаунта какого-либо сервиса до компрометации сразу всех аккаунтов, использующих данное U2F-устройство), при регистрации сервер передает вместе с challenge параметры application ID и random seed, на основе которых U2F-устройство и генерирует уникальную пару Registering Dependent Keys. Причем ее способ генерации не описан в протоколе и полностью отдан на усмотрение изготовителя устройства.

За счет того, что пара ключей уникальна для каждой регистрации, становится возможным использовать совместно одно U2F-устройство для множества аккаунтов.

Для того, чтобы защитить U2F-устройство от клонирования, стандарт предусматривает в нем встроенный счетчик. Каждая подпись и регистрация увеличивает состояние счетчика на единицу. Состояние счетчика подписывается и возвращается зависимой стороне вместе с response. Если U2F-устройство будет клонировано, то состояние счетчика клонированного устройства будет меньше, чем состояние счетчика оригинального устройства, что вызовет ошибку во время верификации.

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

В ситуации, когда пользователь находится вдали от своего устройства, вредоносное программное обеспечение может попытаться атаковать устройство. Для защиты от этого U2F-стандарт требует, чтобы все операции подписания challenge активировались пользователем. Т.е. пользователь обязан подтвердить свое решение на двухфакторную аутентификацию. Как уже говорилось выше, это может быть простое нажатие на кнопку, ввод пин-кода, снятие отпечатка пальца или что-то другое.
Заключение

U2F — это хорошо продуманная, сильная, открытая и стандартизированная технология. Из крупных внедрений U2F можно отметить сервисы Google, Github, Dropbox, а также государственные сайты Великобритании.

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

Об авторе

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