Глиф Учебники

Урок 3. Двухфакторная аутентификация

Курс «Кибербезопасность» · урок 3 из 10 · 5 минут чтения

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

Три вида факторов

Фактор — способ доказать, что вы — это вы. Их три вида:

Двухфакторная защита — это два фактора разных видов. Два пароля подряд — по-прежнему один вид: их можно украсть одним и тем же способом.

Знание что вы знаете пароль, PIN-код Владение что у вас есть телефон, SIM-карта, ключ безопасности Свойство чем вы являетесь отпечаток, лицо пароль + код из приложения разные виды — два фактора пароль + секретный вопрос оба — знание: один вид
Три вида факторов: знание, владение и свойство; пароль с кодом из приложения — два разных вида, пароль с секретным вопросом — один и тот же вид.

Какие бывают вторые шаги

СпособКак работаетНадёжность
Код в SMS или звонкеСайт присылает код на номер телефонаСлабее остальных, но лучше, чем ничего
Приложение-генераторПриложение показывает код, который меняется каждые 30 секундХорошая
Подтверждение в приложенииНа телефон приходит запрос «Это вы входите?»Хорошая, если не подтверждать всё подряд
Ключ безопасностиМаленькое USB- или NFC-устройство, касание подтверждает входСамая высокая, защищает от фишинга
Ключ доступа (passkey)Вход по отпечатку или PIN-коду телефона, ключ хранится в устройствеОчень высокая, защищает от фишинга

Почему SMS — самый слабый способ

И всё же SMS гораздо лучше, чем один пароль. Если сайт не умеет ничего другого — включайте SMS.

Приложение-генератор

Приложение-генератор (его ещё называют аутентификатором) показывает шестизначные одноразовые коды — по английской аббревиатуре TOTP. Код живёт 30 секунд, потом появляется новый. Интернет приложению не нужен: код вычисляется из секрета и текущего времени.

Подойдут, например:

Как подключить приложение к аккаунту:

  1. В настройках безопасности аккаунта выберите приложение-аутентификатор.
  2. Сайт покажет QR-код. Отсканируйте его приложением — в нём появится строка с кодом.
  3. Введите текущий код на сайте, чтобы подтвердить, что всё работает.
  4. Сохраните резервные коды, которые выдаст сайт (о них ниже).

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

Для любопытных: как получается код

QR-код содержит секрет — случайный набор байтов, который знают только сайт и приложение. Обе стороны делят текущее время на отрезки по 30 секунд, берут номер отрезка и вычисляют из него и секрета код по стандарту RFC 6238. Поэтому коды совпадают без всякой связи между телефоном и сайтом. Программа ниже считает коды для тестового секрета из самого стандарта:

Python
import hashlib
import hmac
import struct


def totp(secret, unix_time, digits=6, step=30):
    counter = unix_time // step
    message = struct.pack(">Q", counter)
    digest = hmac.new(secret, message, hashlib.sha1).digest()
    offset = digest[-1] & 0x0F
    number = struct.unpack(">I", digest[offset:offset + 4])[0] & 0x7FFFFFFF
    return str(number % 10 ** digits).zfill(digits)


secret = b"12345678901234567890"
for moment in (59, 1111111109, 1234567890, 2000000000):
    print(moment, totp(secret, moment))
Вывод
59 287082
1111111109 081804
1234567890 005924
2000000000 279037

Число слева — время в секундах от 1 января 1970 года, справа — код, который показало бы приложение в эту секунду. Отсюда главный вывод: кто знает секрет, тот получает те же коды. Поэтому QR-код при настройке никому не показывают и не отправляют.

QR-код с секретом не показывать и не отправлять связь не нужна Приложение Сайт секрет время 59 отрезок 59 // 30 = 1 287082
Приложение и сайт знают один секрет из QR-кода и одинаково делят время на отрезки по 30 секунд, поэтому без связи друг с другом получают один и тот же код.

Подтверждение в приложении

Некоторые сервисы присылают на телефон запрос «Это вы пытаетесь войти?» с кнопками «Да» и «Нет». Удобно, но есть ловушка: злоумышленник, знающий пароль, может слать такие запросы раз за разом, пока человек не нажмёт «Да» по ошибке или от раздражения.

Если пришёл запрос на вход, а вы сейчас никуда не входили, — нажмите «Нет» и сразу смените пароль этого аккаунта. Неожиданный запрос значит, что пароль уже кто-то знает.

Ключи безопасности и ключи доступа

Ключ безопасности — небольшое устройство с USB-разъёмом или NFC, работающее по стандарту FIDO2 или U2F. При входе его вставляют в компьютер или подносят к телефону и касаются кнопки. Ключ проверяет адрес сайта сам, поэтому на поддельном сайте он просто не сработает: выманить такой вход фишингом нельзя.

Ключ доступа (passkey) работает по тому же принципу, но хранится в самом телефоне или компьютере, а вход подтверждается отпечатком, лицом или PIN-кодом устройства. Подробно — справка Что такое ключи доступа.

https://examp1e-bank.by/ Вход в интернет-банк Код подтверждения 081804 поддельный сайт: выглядит как настоящий ссылка из письма Код из приложения или SMS человек сам вводит его и может не заметить подделку Ключ безопасности, passkey сами сверяют адрес сайта — на поддельном не сработают
Код из приложения человек может ввести на поддельном сайте, а ключ безопасности и ключ доступа сами сверяют адрес и на поддельном сайте не срабатывают.

Резервные коды и смена телефона

Главный риск двухфакторной защиты — потерять второй фактор самому: телефон украли, разбили, сбросили.

Код — это ключ от аккаунта

Ни банк, ни почтовая служба, ни милиция, ни «служба поддержки» никогда не просят назвать код из SMS или из приложения. Код подтверждает вход или платёж: назвав его, вы сами открываете дверь. Тот, кто просит код, — мошенник, кем бы он ни представлялся.

Где включить второй шаг в первую очередь: почта, учётные записи Google, Apple и Майкрософт, банк, мессенджеры, соцсети, менеджер паролей, а у администратора — хостинг, регистратор доменов и панели серверов. Общие шаги — справка Как включить двухфакторную защиту.

Коротко

Проверьте себя

1. Какой вариант — настоящая двухфакторная защита?
2. Почему коды из SMS считаются самым слабым вторым шагом?
3. На телефон пришёл запрос «Это вы входите?», а вы никуда не входили. Что делать?
4. Зачем сохранять резервные коды?