Блог для Trusted.Plus

Принципы работы двухфакторной аутентификации



За последние примерно 30 лет мы решили, что использование пары «пароль-имя пользователя» это удачный компромисс между удобством и безопасностью. У вас есть некоторые знания, которых нет ни у кого другого, поэтому, должно быть, именно вы пытаетесь войти в систему.

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

Типы двухфакторной аутентификации


Сервер может использовать любой из этих трех вариантов, чтобы убедиться, что вы являетесь владельцем доверенного устройства:

  • Ваш номер телефона (по СМС)
  • Программный ключ (также известный как TOTP)
  • Аппаратный ключ

Хотя их реализация немного отличается, процесс аутентификации для всех них очень похож:

  1. Пользователь отправляет свое имя пользователя и пароль на сервер для аутентификации, как обычно.
  2. Сервер подтверждает правильность учетных данных и запрашивает второй фактор от пользователя.
  3. В случае первых двух методов это одноразовый пароль (OTP);.
  4. Пользователь предоставляет OTP, и сервер, наконец, аутентифицирует пользователя.

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

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

Смысл создания подобных «одноразовых паролей» (или “one time password”, сокращённо OTP) заключается в том, чтобы доказать, что вы являетесь владельцем телефонного номера в файле, уникальном для пользователя.

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

Однако у этого подхода есть некоторые недостатки. Несмотря на то, что последние рекомендации NIST не исключают использование SMS в качестве второго канала аутентификации, некоторые эксперты, такие как Брайан Кребс, не советуют использовать их для подтверждения личности.

Телефонные номера никогда не предполагалось использовать в целях безопасности. Ваш номер телефона предназначен для публичного раскрытия — злоумышленнику не составит труда его узнать. Следовательно, у них много вариантов получить OTP: социальная инженерия, фишинг или даже атака оператора.

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

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

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

Почему же тогда она так широко используется? Применение двухфакторной аутентификации в целом низкое (согласно отчету за 2018 год, менее 10% пользователей Gmail используют 2FA), поэтому повышая уровень ее внедрения, использовать то, с чем пользователи уже хорошо знакомы, например SMS, желательно.
Тем не менее, есть способ сохранить плюсы двухфакторной аутентификации через SMS, убрав при этом все минусы: с помощью программного обеспечения двухфакторной аутентификации. Теперь оператор больше не участвует в процессе, но коды по-прежнему можно считать с телефона пользователя.

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

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

Итак, сегодня мы приоткроем завесу и посмотрим, как она работает, как генерируются коды, от чего она защищает и от чего не защищает.

Как работает программная двухфакторная аутентификация с TOTP (или “time-based one-time password”)


Основное различие между программной 2FA и SMS 2FA заключается в том, что коды генерируются на доверенном устройстве пользователя, а не отправляются по SMS.

Для этого ключ (то есть случайная строка) заранее передается между сервером и устройством пользователя. Обычно это означает сканирование QR-кода через защищенное соединение.

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

Для постоянного обновления пароля к ключу добавляется текущее время; в противном случае пароль станет вторым паролем, уязвимым для повторных атак, а не вторым фактором. Вот почему этот метод также известен как TOTP 2FA или одноразовый пароль с учетом времени.

Почему 2FA лучше двухфакторной SMS аутентификации?


Программная 2FA лучше, чем SMS 2FA по нескольким причинам. С точки зрения безопасности, атакуемая площадь уменьшается, поскольку начальное число передается по защищенному каналу, а не через SMS, что не очень безопасно.

Окно возможностей для злоумышленника также сокращается, поскольку код меняется чаще — каждые 30 секунд (и до 90 секунд, поскольку в протоколе указан запас в один шаг в обоих направлениях с учетом задержек соединения). Это не значит, что это невозможно — в 2019 году при атаке на известные каналы YouTube использовался обратный прокси-сервер, чтобы жертва поверила, что она входит на законный сайт Google, и передала учетные данные пользователя, включая код TOTP, на законный сайт так быстро, что код TOTP оставался действительным. Тем не менее, менее изощренные атаки осуществить сложнее.

Она также лучше оценивается по показателю юзабилити. Можно хранить seeds (код или парольная фраза) на любом количестве устройств, и для их работы не требуется сотовая связь — кроме телефонов, их можно хранить в смарт-часах, планшетах и ​​компьютерах.

Для чего подходит программная двухфакторная аутентификация, а для чего она не годится


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

В эссе 2005 года, актуальном до сих пор очень, Шнайер говорит, что 2FA защищает пользователей от пассивных угроз, таких как подслушивание, которые были актуальны в 90-х, сейчас же они не так распространены.

Егор Хомаков, генеральный директор охранной фирмы Sakurity, согласен с ним и утверждает, что 2FA обеспечивает безопасность , генерируясь надежное начальное число, из которого получаются TOTP, а не сам второй фактор, поэтому программная двухфакторная аутентификация на практике заменяет менеджеры паролей.

С другой стороны, Трой Хант говорит, что в этом споре теряется суть, и он считает, что внедрение любого вида 2FA, даже SMS 2FA, всегда полезно.

Даже если двухфакторная аутентификация не является идеальной заменой хороших паролей и кибер гигиены, это не значит, что она бесполезна. Системный администратор, не способный убедить сотрудников использовать диспетчер паролей, все же может заставить их использовать 2FA. То же самое относится и к разработчикам приложений, которые могут многое потерять, если клиенты будут использовать небезопасные пароли или произойдет утечка данных — например, Hey.com требует, чтобы пользователи сервиса применяли 2FA.

Самая большая проблема с 2FA заключается в том, что она дает ложное чувство безопасности людям, которые мало заботятся о безопасности, у них же, как правило, нет хороших паролей (Трой также согласен с этим). Мошенники будут пытаться этим воспользоваться.

Итак, нужно понимать, что программная двухфакторная аутентификация не делает вас неуязвимыми, а всего лишь помогает. И если вы везде, где можете, используете отличные пароли, вот несколько сценариев, в которых использование 2FA может вас защитить:

  1. Повторное использование пароля. Вы никогда повторно не используйте пароли, даже при включении 2FA... но в случае, если вы вынуждены по какой-либо причине повторять пароли, наличие разных кодов доступа для каждого используемого вами приложения дает вам дополнительную защиту.
  2. Взлом пароля. Если ваш пароль был каким-то образом взломан, второй фактор может защитить вашу учетную запись в течение достаточного времени, чтобы вы могли сменить пароль, прежде чем злоумышленник причинит больше проблем.
  3. Кейлоггеры на ненадежных устройствах. Кейлоггер может записать как ваш пароль, так и код TOTP, но к тому времени, когда злоумышленник снова попытается войти в вашу учетную запись, ваш код TOTP изменится. (Предполагается, что вы храните seeds на доверенном устройстве и вводите коды доступа вручную.)
  4. Использование социальной инженерии (или что-то вроде того). Злоумышленник может обманом заставить вас сообщить ему ваш пароль и даже пароль и код TOTP, но окно возможностей намного меньше. Однако хитрый мошенник знает, что должен действовать быстро, чтобы это обойти.

И от чего не защищает:

  1. Фишинг с более изощренными MITM-атаками. Если злоумышленник создает поддельный веб-сайт с обратным прокси-сервером и успешно фиширует пользователя, он может перейти через учетные данные пользователя на законный веб-сайт и войти в систему.
  2. Фишинг или социальная инженерия сотрудника сайта, к которому вам нужен доступ. Если сотрудник с помощью социальной инженерии предоставил доступ к серверной части службы для атаки, ваша учетная запись может быть скомпрометирована независимо от того, включена ли у вас двухфакторная аутентификация или нет. Это произошло с Twitter в позапрошлом году — несколько аккаунтов были взломаны, некоторые некоторые с будучи включенной двухфакторной аутентификацией, при помощи фишинговой атаки, нацеленной на сотрудников Twitter.
  3. Утечки паролей и «сидов» (seeds, начальных чисел). Любой может сгенерировать ваши коды TOTP, если у них есть ваш seed. Однако для входа в свою учетную запись потребуются как seeds, так и ваш пароль (который, надеюсь, хеширован).

Где хранить seeds 2FA?


Несколько мыслей на прощание о том, где хранить ваши seeds, даже если трудно дать общие рекомендации, поскольку каждому человеку нужно оценивать свои возможные угрозы индивидуально. Независимо от того, какой путь вы выберете, вот два неоспоримых принципа:

  • не раздражает
  • работа не зависит от действий человека

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

И, конечно же, крайне важно, чтобы эти seeds  хранились в безопасности и где-то, где третьи лица не могут получить к ним доступ. Если сохранить их в менеджере паролей, они будут недоступны без вашего мастер-пароля.

Если вы предпочитаете использовать отдельное приложение для аутентификации, проверьте, какие функции безопасности они предлагают. Некоторым для раскодирования потребуется PIN-код или отпечаток пальца, другие будут полагаться на безопасность, обеспечиваемую самим устройством (например, путем хранения их в пространстве памяти, ограниченном приложением, обычно недоступном, если на устройство не включены права root и/или нет джейлбрейков (jailbreaks), поэтому убедитесь, что разработчик заслуживает доверия, а само устройство защищено.

И второй пункт: хранение seeds в автономном режиме делает их более безопасными, но может и создать огромные проблемы в случае потери устройства, на котором хранятся seeds, а у вас нет резервной копии. Тогда вы во власти администраторов, способных дать вам второй шанс вернуть контроль над вашей учетной записью. По крайней мере, вам придется провести некоторое время со специалистом службы поддержки и отправить ему необходимые документы, чтобы доказать, что вы тот, за кого себя выдаете.

По этой причине важно иметь резервные копии ваших seeds. Некоторые приложения, такие как Authy, будут создавать облачные резервные копии и синхронизировать их с другими вашими устройствами. Большинство облачных менеджеров паролей могут делать то же самое.

Если вы беспокоитесь о том, чтобы хранить свои seeds и пароль в одном месте, спросите себя:

Какие риски вы несете, размещая их там же, где и ваши пароли, и стоят ли они того?

Это правда, что если вы не защитите свой менеджер паролей с помощью 2FA (либо с помощью seed, хранящегося в другом приложении, либо с помощью аппаратного ключа), злоумышленнику нужно будет знать только ваш мастер-пароль, чтобы получить ваши seeds.

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

Теперь, если вы хотите защитить сам менеджер паролей с помощью 2FA, тогда да, вам нужно использовать второе приложение для хранения seeds менеджера паролей (сейчас вы можете решить, черт возьми, просто хранить все свои seeds вместо этого там — ваше право) — или, возможно, с помощью аппаратного ключа как наиболее безопасным видом двухфакторной аутентификации.

Автор: Артур Беллор, пишущий специалист по кибербезопасности

Переведено со статьи, полный текст доступен по ссылке.

Статьи