Как URL-перенаправление и QR-коды скрывают фишинговые атаки

«URL-перенаправление и QR-коды, кажущиеся простыми техническими деталями, стали для злоумышленника почти невидимым мостиком между «безопасным» контекстом и фишинговой страницей. Основная проблема — не в самих технологиях, а в доверии, которое к ним испытывают пользователи и нередко разработчики.»

Что такое URL-перенаправление и почему оно уязвимо

URL-перенаправление (редирект), это штатный механизм, который сообщает браузеру или приложению, что запрашиваемый ресурс перемещён по новому адресу. Он работает по схеме: пользователь переходит по ссылке А, сервер отправляет команду «перейди на адрес Б». В вебе это реализовано через HTTP-коды состояния 3xx (301, 302, 307) или через JavaScript.

Проблема возникает, когда конечный адрес (Б) может контролироваться злоумышленником. Если приложение принимает параметр для перенаправления из входящего запроса (например, redirect_url=https://example.com) и без должной проверки использует его, это создаёт уязвимость Open Redirect.

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

Как злоумышленники используют редиректы в атаках

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

Маскировка фишинговых ссылок

Основное применение — сокрытие истинного назначения ссылки. Письмо или сообщение может содержать URL вида https://trusted-bank.ru/exit?url=https://phish-bank.fake/login. Для пользователя, особенно если часть ссылки обрезана мессенджером, адрес начинается с имени настоящего банка. Это резко повышает вероятность перехода.

Усложнение анализа безопасности

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

Кража OAuth-токенов и кодов авторизации

Более технически сложный сценарий — использование открытого редиректа в OAuth-потоках. Многие приложения используют OAuth для входа через соцсети или другие сервисы. Если в приложении есть уязвимость открытого редиректа на странице, указанной в redirect_uri, злоумышленник может подставить свой контролируемый адрес и перехватить код авторизации, получив доступ к аккаунту жертвы в стороннем сервисе.

QR-коды: вектор атаки в физическом мире

QR-код, это всего лишь способ кодирования текста, чаще всего URL. Все риски, связанные с переходом по непроверенной ссылке, применимы и здесь, но добавляется важный психологический фактор: QR-код воспринимается как современный, «технологичный» и часто официальный способ передачи информации.

«Беззвучный» фишинг

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

Физическая подмена

Злоумышленники распечатывают свои QR-коды с фишинговыми ссылками и наклеивают их поверх легитимных:

  • На платёжных терминалах в магазинах или на заправках (под видом перехода на страницу оплаты).
  • На официальных рекламных плакатах с предложением «отсканируй для получения скидки».
  • В общественном транспорте или на остановках.

Цель — перенаправить пользователя на поддельную страницу ввода платёжных данных или установки вредоносного приложения.

Использование в комплексе с другими атаками

QR-код может вести не прямо на фишинговую страницу, а на легитимный сайт с открытым редиректом, как описано выше. Это делает цепочку длиннее и сложнее для отслеживания. Также код может содержать данные для автоматического подключения к Wi-Fi-сети, управляемой злоумышленником, для проведения атаки «человек посередине».

Защита для пользователей и разработчиков

Борьба с этими угрозами требует действий с обеих сторон.

Что может сделать пользователь

  • Проверять короткие ссылки и QR-коды. Многие сканеры QR-кодов и мессенджеры показывают конечный URL перед открытием. Стоит бегло оценить домен.
  • Не сканировать подозрительные коды. Коды, наклеенные поверх других, на неофициальных носителях или в неподходящем контексте, должны вызывать подозрение.
  • Внимательно смотреть на адресную строку после перехода. Фишинговые сайты часто используют похожие домены (например, с заменой латинской «o» на цифру «0» или добавлением лишних букв).

Что должен сделать разработчик

Полностью предотвратить атаки с открытым редиректом — обязанность разработчиков.

  1. Белый список допустимых доменов. Это самый надёжный способ. Сервер должен проверять параметр перенаправления и разрешать редирект только на заранее определённый список доверенных, внутренних доменов.
  2. Отказ от пользовательских параметров. Где возможно, стоит отказаться от перенаправлений на основе входящих данных. Вместо параметра redirect_url использовать фиксированные маршруты или идентификаторы страниц внутри приложения.
  3. Верификация с помощью токенов. Если внешние редиректы необходимы, можно генерировать одноразовый подписанный токен, связывающий сессию пользователя с разрешённым URL. Это исключает подмену.
  4. Валидация схемы URL. Запрещать редиректы на протоколы, отличные от HTTP/HTTPS (file://, ftp://, javascript:), которые могут быть использованы для более опасных атак.

Вместо заключения: доверие как уязвимость

Атаки через URL-перенаправление и QR-коды эффективны потому, что эксплуатируют не технические пробелы, а ментальные модели. Пользователь доверяет знакомому домену в начале ссылки или современному формату QR-кода. Разработчик не рассматривает редирект как критичный функционал, требующий защиты. В российском IT-контексте, где скорость разработки часто приоритетнее безопасности, такие «незначительные» уязвимости встречаются повсеместно. Защита строится не на сложных системах, а на последовательном применении базовых принципов: валидация всех входящих данных и осознание того, что любой механизм, меняющий поведение приложения по запросу пользователя, — потенциальная точка атаки.

Оставьте комментарий