Уязвимости многофакторной аутентификации
Многие веб‑сайты полагаются исключительно на однофакторную аутентификацию с использованием пароля. Однако некоторые требуют, чтобы пользователи проходили аутентификацию с помощью нескольких факторов.
Проверка биометрических факторов непрактична для большинства веб‑сайтов. Тем не менее всё чаще встречается обязательная или опциональная двухфакторная аутентификация, основанная на «чём‑то, что вы знаете» и «чём‑то, что у вас есть». Обычно это требует, чтобы пользователь ввёл пароль и временный проверочный код из внешнего физического устройства.
Хотя иногда злоумышленник может получить один фактор, основанный на знании (например, пароль), одновременное получение другого фактора из внешнего источника значительно менее вероятно. По этой причине двухфакторная аутентификация доказуемо безопаснее однофакторной. Однако, как и любая мера безопасности, она настолько надёжна, насколько надёжна её реализация. Плохо реализованную двухфакторную аутентификацию можно обойти или даже полностью игнорировать так же, как и однофакторную.
Также стоит отметить, что все преимущества многофакторной аутентификации достигаются только при проверке нескольких разных факторов. Проверка одного и того же фактора двумя разными способами — это не настоящая двухфакторная аутентификация. Пример — 2FA по электронной почте. Хотя пользователь вводит пароль и код подтверждения, доступ к коду зависит лишь от знания учётных данных для почтового аккаунта. Следовательно, фактор знания просто проверяется дважды.
Токены двухфакторной аутентификации
Коды подтверждения обычно считываются пользователем с какого-либо физического устройства. Многие веб-сайты с высоким уровнем безопасности теперь предоставляют пользователям специальное устройство для этой цели, такое как токен RSA или устройство с клавиатурой, которое вы можете использовать для доступа к своему онлайн-банкингу или рабочему ноутбуку. Помимо того, что эти специальные устройства созданы специально для обеспечения безопасности, они также имеют преимущество в виде возможности непосредственной генерации проверочного кода. По той же причине веб-сайты часто используют специальное мобильное приложение, такое как Google Authenticator.
С другой стороны, некоторые сайты отправляют коды подтверждения на мобильный телефон пользователя в виде текстового сообщения. Хотя технически это всё ещё проверяет фактор владения, такой подход подвержен злоупотреблениям. Во‑первых, код передаётся по SMS, а не генерируется самим устройством. Это создаёт возможность перехвата кода. Также существует риск SIM‑сваппинга, при котором злоумышленник мошенническим путём получает SIM‑карту с номером телефона жертвы. Тогда он будет получать все SMS, отправленные жертве, включая сообщение с кодом подтверждения.
Обход двухфакторной аутентификации
Иногда реализация двухфакторной аутентификации настолько некорректна, что её можно полностью обойти.
Если сначала пользователю предлагается ввести пароль, а затем — код подтверждения на отдельной странице, то фактически пользователь оказывается в состоянии «вошёл в систему» ещё до ввода кода. В этом случае стоит проверить, можно ли напрямую перейти к «доступным только после входа» страницам после завершения первого шага аутентификации. Время от времени вы обнаружите, что сайт фактически не проверяет, прошли ли вы второй шаг, прежде чем загрузить страницу.
Если пользователю сначала предлагается ввести пароль, а затем на отдельной странице ввести код подтверждения, то может оказаться, что пользователь аутентифицаирован до ввода кода подтверждения. В этом случае стоит проверить, можно ли сразу перейти на страницы, доступные только для авторизованных пользователей, после завершения первого этапа аутентификации. Иногда вы обнаружите, что веб-сайт на самом деле не проверяет, выполнили ли вы второй шаг, прежде чем загрузить страницу.
Ошибочная логика проверки двухфакторной аутентификации
Иногда из‑за некорректной логики двухфакторной аутентификации после завершения пользователем начального шага входа сайт недостаточно проверяет, что именно тот же пользователь выполняет второй шаг.
Например, на первом шаге пользователь входит со своими обычными учётными данными следующим образом:
Затем ему назначается cookie, относящаяся к его аккаунту, после чего его переводят на второй шаг процесса входа:
При отправке кода подтверждения запрос использует эту cookie, чтобы определить, к какому аккаунту пользователь пытается получить доступ:
В этом случае злоумышленник может войти, используя свои собственные учётные данные, но затем изменить значение cookie account на любое произвольное имя пользователя при отправке кода подтверждения:
Это чрезвычайно опасно, если злоумышленник затем сможет перебрать код подтверждения, поскольку это позволит ему входить в аккаунты произвольных пользователей, опираясь исключительно на их имя. Ему даже не нужно знать пароль пользователя.
Перебор кодов подтверждения 2FA
Как и в случае с паролями, сайты должны предпринимать шаги, чтобы предотвратить перебор кода подтверждения 2FA. Это особенно важно, поскольку код часто состоит из 4-6 цифр. Без адекватной защиты от перебора взлом такого кода тривиален.
Некоторые сайты пытаются предотвратить это, автоматически выходя пользователя из системы, если он вводит определённое количество неверных кодов. На практике это неэффективно, поскольку продвинутый злоумышленник может автоматизировать даже этот многошаговый процесс, создавая макросы для Burp Intruder. Для этой цели также можно использовать расширение Turbo Intruder.
Last updated