LIVE

Двухфакторная аутентификация: три метода проверки надежности защиты

Включение многофакторной аутентификации блокирует более 99% автоматизированных атак с украденными учетными данными и подбором паролей, по данным Microsoft. Это сильный барьер против массового взлома.

Обновлено02 ноября 2026 г.
Чтение8 мин
Двухфакторная аутентификация: три метода проверки надежности защиты

Но он не гарантирует безопасность сессии после входа и не делает любой второй фактор устойчивым к фишингу.

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

1. Сессионный токен: защита заканчивается не на экране входа

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

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

В рамках авторизованной проверки оценивают, в частности:

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

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

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

2FA контролирует вход. Дальше аккаунт защищают свойства сессии, процедуры отзыва и повторной проверки.

2. SMS и TOTP: код может быть правильным, а сайт — поддельным

Одноразовый пароль снижает риск повторного использования украденного постоянного пароля. Но код из SMS или приложения остается вводимым секретом. Пользователь может передать его фальшивой странице, которая в реальном времени пересылает данные настоящему сервису.

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

Для TOTP приложение генерирует код на основе общего секрета и времени. Типичный интервал обновления — 30 секунд. Этот механизм не следует считать математически взломанным: уязвимость возникает, когда действующий код вводят на поддельной странице или когда секрет оказывается доступен постороннему. SMS-код также может быть перехвачен через компрометацию канала или введен в фишинговую форму.

Проверка стойкости 2FA должна ответить на несколько вопросов:

  • Привязана ли процедура входа к точному домену сервиса, или пользователь может без явных сигналов ввести код на похожем адресе?
  • Есть ли защита от частых повторных попыток и повторного использования уже принятого кода?
  • Получает ли пользователь уведомления о входе с нового устройства и может ли быстро завершить подозрительную сессию?
  • Предусмотрены ли дополнительные меры для операций с высоким риском, например смены адреса восстановления или отключения 2FA?
  • Не становится ли резервный канал восстановления заметно слабее основного метода входа?

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

Отдельный риск — push-подтверждения. Пользователь может получить серию запросов на вход и подтвердить один из них по ошибке или из-за усталости от уведомлений. Механизм, который просто отправляет push и принимает любое одобрение, зависит от внимания человека. Сопоставление запроса с контекстом входа и ограничение частоты уведомлений уменьшают пространство для злоупотребления.

3. Логика проверки: ограничения попыток и доверие к серверу

Код OTP обычно короткий. В фактуре для таких кодов указан типичный диапазон в 4–6 цифр. Это означает, что сервер обязан ограничивать число попыток и частоту запросов. Если такого контроля нет, короткий код становится объектом перебора. Проверять это следует только в разрешенном тестовом контуре и без масштабирования запросов на реальные аккаунты.

Аудит rate limiting оценивает поведение сервера при повторных ошибочных вводах: замедляет ли он попытки, вводит ли временную блокировку, связывает ли ограничения с учетной записью и сессией. Ограничение только по IP может оказаться недостаточным, если запросы распределяются по разным адресам. Но и бессрочная блокировка по одному неверному коду создает риск отказа в обслуживании для самого владельца аккаунта. Нужен баланс между подавлением перебора и возможностью безопасного восстановления доступа.

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

При аудите смотрят на сетевой обмен тестового входа и сопоставляют его с серверными событиями. Проверяют, что сервер подтверждает OTP независимо от состояния страницы, а последующие запросы требуют действительно выданную сессию. Ответы HTTP 200 или 400 сами по себе не являются доказательством безопасности: важна серверная логика, которая стоит за ними. В тестовом приложении можно проверить, не меняется ли результат аутентификации при изменении клиентского отображения ответа. Для продуктивной системы такие эксперименты допустимы только с явным разрешением и заранее установленными ограничениями.

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

Практическая матрица проверки может выглядеть так:

СлойЧто проверяютПризнак проблемной реализации
Ограничение попытокРеакцию на повторные неверные коды и частые запросыКод можно перебирать без заметного ограничения
Серверная валидацияГде принимается решение о входеДоступ зависит от состояния интерфейса или ответа, контролируемого клиентом
Жизненный цикл OTPСрок действия, повторное использование, выпуск нового кодаОдин код принимается повторно или действует вне предусмотренного окна
СессияВыпуск, смену и отзыв токена после аутентификацииСтарые сессии сохраняют доступ после сброса защиты
ВосстановлениеСброс фактора и запасные каналыРезервная процедура обходится легче основного входа

Таблица не заменяет тест-план. Она задает границы наблюдения: каждый результат следует подтверждать серверными журналами, а не только поведением интерфейса.

FIDO2 и WebAuthn: фактор, привязанный к домену

FIDO2 и WebAuthn устроены иначе, чем SMS и TOTP. При регистрации создается пара криптографических ключей. Закрытый ключ остается на устройстве или аппаратном ключе, а сервер хранит открытый. Во время входа устройство подписывает запрос, связанный с доменом. Такая привязка к источнику, origin binding, мешает стандартной фишинговой странице запросить подпись для настоящего домена.

Поэтому FIDO2 и passkeys относятся к классу методов, устойчивых к фишингу. Обычный AiTM-прокси не может просто переслать одноразовый код: кода для передачи нет, а криптографическая подпись привязана к правильному домену. Это существенное архитектурное преимущество перед вводимыми секретами.

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

При проверке реализации WebAuthn оценивают корректность регистрации и входа, привязку учетных данных к ожидаемому домену, отзыв потерянного устройства и поведение резервных методов. Также проверяют, не превращает ли интерфейс восстановление в путь, который полностью обходит основной фактор. Для организации имеет значение и модель хранения: passkey, синхронизируемый через экосистему устройства, отличается по управлению от отдельного аппаратного ключа, который хранится физически и выдается пользователю по регламенту.

Наиболее надежный выбор зависит от сценария:

МетодУстойчивость к фишинговому посредникуОсновное ограничение
SMS-кодНизкая: код можно ввести на поддельной страницеЗависимость от телефонного канала и процедуры восстановления
TOTP в приложенииНизкая против AiTM: действующий код можно перехватить в момент вводаПользователь вводит секрет на странице, которую должен распознать сам
Push-подтверждениеЗависит от механизма подтверждения и поведения пользователяРиск случайного одобрения серии запросов
FIDO2 / WebAuthnВысокая против стандартного фишинга за счет привязки к доменуСлабые резервные маршруты и похищенные сессии остаются риском

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

Как читать результаты аудита

Три направления проверки дают разные ответы. Анализ сессии показывает, что произойдет после успешного входа. Проверка OTP и серверной логики выявляет перебор, повторное использование кода и доверие к клиенту. Сопоставление методов аутентификации показывает, насколько сервис сопротивляется фишинговому посреднику.

Результаты следует описывать через воспроизводимые наблюдения: тестовая учетная запись, состояние входа, запрос или событие в журнале, ожидаемое и фактическое поведение. В отчете не нужны реальные пароли, OTP или сессионные токены. Нужны данные, позволяющие разработчику исправить дефект и повторить проверку после исправления.

Надежная защита аккаунта 2FA складывается из нескольких механизмов. Для массового перебора достаточно хорошо настроенная дополнительная проверка закрывает значительную часть атак. Против AiTM предпочтительны FIDO2 и WebAuthn. Против кражи уже открытого доступа нужны контроль сессий и отзыв токенов. Если хотя бы один путь входа остается слабым, он и становится рабочей точкой атаки. Оценивать следует всю цепочку аутентификации, включая восстановление, а не значок 2FA в настройках.

Частые вопросы

Что защищает двухфакторная аутентификация?
Двухфакторная аутентификация контролирует процедуру входа и подтверждает личность пользователя в момент авторизации, но она не защищает каждое действие внутри уже открытой сессии.
Почему SMS и TOTP уязвимы для фишинга?
Одноразовые коды из SMS или приложений остаются вводимыми секретами, которые пользователь может непреднамеренно передать на поддельную страницу фишингового посредника в реальном времени.
Как работает защита от фишинга в FIDO2 и WebAuthn?
При использовании FIDO2 и WebAuthn устройство подписывает запрос, связанный с конкретным доменом, что мешает стандартной фишинговой странице запросить подпись для настоящего адреса.
Какие риски возникают при управлении сессионными токенами?
Если сессионный токен похищен, злоумышленнику зачастую не требуется повторно вводить пароль или проходить второй фактор, так как старые сессии могут сохранять доступ.
Почему важна проверка ограничения попыток ввода кода?
Поскольку одноразовые коды обычно состоят из 4-6 цифр, сервер обязан ограничивать число попыток и частоту запросов, иначе короткий код становится объектом перебора.