Static QR

Почему никогда не стоит доверять онлайн-генератору QR-кодов

QR-код нельзя прочитать глазами. На одном этом факте держится вся атака.

С чего начался этот сайт

Проект вырос из простой проверки. Найдите генератор QR-кодов, возьмите первые несколько результатов, вставьте биткойн-адрес и сравните то, что получится. Некоторые вернули код, в котором был не тот адрес, что вводили. В нём был чужой.

Как работает подмена

Вы вставляете свой платёжный адрес на сайт. Сайт возвращает картинку. Картинку с QR-кодом прочитать нельзя, поэтому вы принимаете её, ставите на счёт, плакат, страницу пожертвований или визитку, а исходный текст выбрасываете. Каждый, кто отсканирует код, заплатит злоумышленнику вместо вас. Ни на одном шаге ничего не выглядит подозрительно, а когда кто-то замечает, деньги уже ушли, а напечатанный код разошёлся.

Почему это продолжает работать

  • Два QR-кода не отличить на глаз. Тот, кому вы его отправите, тоже не отличит.
  • Генератором пользуются ровно один раз, пока исходный текст ещё на экране, и больше никогда.
  • Код часто оказывается напечатанным, на скриншоте или встроенным туда, где исходного текста уже нет, и сравнивать становится не с чем.
  • Те, кто всё же проверяет, обычно сверяют лишь первые и последние символы. Злоумышленники подбирают адреса, совпадающие именно в них.

Обратное направление: коды, которые создали не вы

Этот сайт в основном о кодах, которые создаёте вы. Но большая часть мошенничества с QR-кодами устроена наоборот. Кто-то наклеивает стикер поверх кода на парковочном автомате или платёжном терминале либо присылает счёт в PDF с кодом вместо ссылки. Код ведёт туда, где всё выглядит правильно, и просит войти в аккаунт или заплатить. В индустрии это называют квишингом, и работает он по той же причине, что и подмена: вы не увидите, куда ведёт QR-код, пока уже туда не перейдёте.

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

Раскодируйте код и прочитайте, куда он ведёт, прежде чем переходить: Проверить код

Как себя защитить

  • Сканируйте каждый QR-код сами, прежде чем им делиться, тем устройством, с которого действительно платили бы.
  • Сравнивайте строку целиком, символ за символом, а не только края.
  • Выбирайте генератор, работающий с отключённой сетью. Если ему нужен сервер, сервер может подменить ваши данные.
  • Проверяйте контрольную сумму адреса. У биткойн-адресов она есть, и повреждённый адрес её не пройдёт.
  • Создавайте код заново сами, а не используйте присланный кем-то.
  • Прежде чем сканировать код в общественном месте, проверьте, не наклеен ли поверх оригинала стикер. Физическая подмена — самый частый вариант.
  • Читайте домен целиком у любой ссылки, куда ведёт код, и никогда не входите в аккаунт и не платите на странице, на которую попали сканированием.

Чем этот сайт отличается

  • QR-код собирается в вашем браузере. Ничего из введённого не передаётся, потому что у сайта нет сервера, куда передавать.
  • Нарисовав код, страница раскодирует только что созданное изображение и показывает, что в нём прочиталось. Если это не совпадает с введённым, она об этом скажет.
  • Политика безопасности содержимого не разрешает никаких внешних источников, поэтому страница не может ничего загрузить или куда-то обратиться даже случайно.
  • Это статические файлы с открытым исходным кодом. Можно прочитать каждую строку, сохранить страницу и пользоваться ей офлайн сколько угодно.

И этому сайту на слово тоже не верьте

Всё написанное выше — повод не доверять генераторам QR-кодов, а это и есть генератор QR-кодов. Обратное считывание на странице генератора — удобство, а не доказательство: это тот же код, который нарисовал изображение. По-настоящему считается только та проверка, которую вы делаете сами, на своём устройстве, против своего адреса. Сделайте её.

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

Может ли генератор QR-кодов подменить мой биткойн-адрес?

Да. Если код создаётся на чужом сервере, этот сервер и решает, что попадёт в изображение. Он может вернуть код с любым адресом, и картинка будет выглядеть совершенно обычно.

Как проверить, что в QR-коде правильный адрес?

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

Безопасно ли пользоваться онлайн-генератором QR-кодов для адреса кошелька?

Только если генератор работает полностью в вашем браузере и вы проверяете результат сканированием. Всё, что отправляет ваш адрес на сервер, просит доверить этому серверу ваши деньги.

Отправляет ли этот сайт мои данные куда-нибудь?

Нет. Страница статическая, кодирование выполняется в вашем браузере. Можно отключиться от интернета, перезагрузить страницу, и она продолжит работать.

Что такое квишинг?

Фишинг, в котором вместо ссылки используется QR-код. Код скрывает адрес назначения, поэтому обходит и почтовые фильтры, и привычку навести курсор на ссылку перед нажатием. Самая частая форма — стикеры поверх настоящих кодов в общественных местах.

Как узнать, куда ведёт QR-код, не сканируя его?

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