Можно ли подделать qr код
Как можно потерять кучу нервов, времени и денег из-за одной фотографии — и как этого избежать.
Базовые знания интернет-безопасности могут спасти ваш день, сэкономить внушительную сумму денег и сберечь нервы. Прежде чем подробнее поговорить о штрихкодах и о том, чего с ними делать не надо, разберем один недавний случай.
Как киберпреступники маскируют QR-коды
Безусловно, для того чтобы злоумышленники вам навредили, им нужно, чтобы вы отсканировали именно их QR-коды. И для этого у них есть пара любимых приемов.
Мошеннические источники QR-кодов. Чаще всего к этому способу прибегают, чтобы убедить жертву скачать зловредное приложение. Его создатели могут разместить QR-код со ссылкой на свое детище на сайте, в баннере, электронном письме или даже на бумажном объявлении. Часто рядом для большей достоверности размещают логотипы Google Play или App Store.
Подмена QR-кода. Нередко злоумышленники пользуются чужим трудом и репутацией и просто заклеивают настоящий QR-код на плакате или табличке подложным.
Кстати, подменой QR-кодов в последнее время стали пользоваться не только киберпреступники, но и беспринципные активисты общественных течений — для распространения своих идей. В Австралии недавно был арестован мужчина, который переклеил несколько QR-кодов на табличках службы по контролю за COVID-19, чтобы вместо сервиса для записи посетителей общественных мест люди попадали на сайт с агитацией антипрививочников.
QR-код, в который запакованы банковские реквизиты, можно подменить при его отправке будущему плательщику — например, распечатав и разложив по почтовым ящикам фальшивые квитанции на оплату коммунальных услуг. Вместо настоящего получателя деньги придут на счет злоумышленника.
Что такое QR-коды и как ими пользоваться
В наше время смартфон есть уже почти у всех. Во многих современных моделях есть встроенный QR-сканер. На остальные можно скачать приложение — для чтения всех кодов вообще или какое-нибудь специализированное, например — разработанное музеем.
Если включить QR-сканер и навести камеру телефона на код, запустится некий процесс. Чаще всего смартфон предложит вам перейти на тот или иной сайт или откроет страницу определенного приложения в магазине. Есть и другие варианты, о них — чуть позже.
Специализированные сканеры отличаются от собратьев тем, что лучше «работают в паре» со «своими» QR-кодами. Допустим, вы видите табличку перед выдающимся деревом в парке, и на ней есть квадрат QR. Если вы загрузили себе официальное приложение этого парка, QR-коды на таких табличках превратятся для вас в цельную экскурсию, а стандартный сканер, распознав их, просто предложит перейти на сайт парка и прочесть описание каждого экспоната на отдельной странице.
Кроме того, некоторые приложения могут создавать QR-коды, чтобы передать тому, кто их отсканирует, какую-то вашу информацию — например, имя и пароль вашей сети Wi-Fi или даже платежные реквизиты счета в банке.
Как не попасть в беду с QR-кодом
Чтобы не стать жертвой киберпреступников, при использовании QR-кодов соблюдайте несколько простых правил:
- Не пользуйтесь QR-кодами, полученными из очевидно подозрительных источников.
- Обращайте внимание на ссылки, которые отображаются при сканировании кода. Будьте особенно осторожны, если внешний вид URL изменили при помощи сервиса сокращения ссылок, — в случае с QR-кодами для этого нет веских причин. Лучше найдите интересующий вас сайт поиском в Интернете, а приложение — через официальный магазин.
- Прежде чем сканировать QR-коды с рекламных плакатов и вывесок, убедитесь, что оригинальное изображение не заклеено картинкой с подложным кодом.
- Используйте программы проверки QR-кодов. Например, QR Scanner «Лаборатории Касперского» (есть версия и для Android, и для iOS) проверяет код на наличие вредоносного содержимого и предупреждает пользователя об опасности.
Также стоит помнить о еще одной опасности, связанной с QR-кодами: злоумышленники могут воровать коды, в которые зашита какая-то ценная информация — например, номер электронного билета. Поэтому не стоит публиковать в соцсетях документы с QR-кодами или их фотографии.
Когда Квебек объявил, что будет рассылать электронные письма с подтверждением вакцинации всем, кто был вакцинирован с помощью прикрепленного QR-кода, у меня немного подкосились колени. Мне не терпелось разобрать его на части и покачать головой из-за количества частной медицинской информации, которая, несомненно, будет раскрыта в процессе.
Наконец-то пришло мое подтверждение вакцинации, и результат… вообще-то неплохой. Тем не менее, в хаках с нулевым разглашением всегда есть какое-то удовольствие, поэтому я все равно решил написать о своем опыте в блоге.
Мое первое впечатление было: «Боже мой, это излишне большой QR-код». Под QR-кодом перечислено не так много информации, поэтому они наверняка кодируют все виды личной информации без моего ведома. Знаете, как тот штрих-код на обратной стороне ваших водительских прав.
Естественно, первое, что я сделал, — отсканировал код с помощью приложения QRcode.
Интересно. Я думал, что там будет старый добрый JSON в бинарном формате, но все было иначе. Кажется, что кодировать кучу цифр в base64 неэффективно, но им удалось запихнуть все в один QR-код.
К сожалению, на этом часть процесса с нулевым разглашением заканчивается, потому что у меня есть довольно четкий индикатор, куда двигаться дальше: схема URI. Ясно, что это предназначено для связи с каким-либо приложением на устройстве человека, проверяющего код, который зарегистрируется для обработки этой схемы shc : . Но что это за схема?
Оказывается, у этого формата есть обширная документация и очень разумные цели дизайна, которые я нахожу как облегчением как держателя такого кода, так и немного разочаровывающим, когда кто-то собирается разобрать его целиком. Но не важно! У меня есть код и документ, которому нужно следовать, так что давайте снимем крышку и заглянем внутрь.
Согласно документу, использование числового режима для кодирования данных QR-кода обеспечивает немного более высокую плотность данных, чем использование двоичного режима, что объясняет гигантский URI чисел, а не более разумную строку в кодировке base64. Первая загадка раскрыта.
Длинная строка чисел, по-видимому, закодирована из строки ASCII, где каждая пара цифр является числом в десятичной системе счисления, которое является кодом символа. Чтобы еще больше запутать, выходные данные вычисляются с использованием Ord © -45. Пришло время написать скрипт, чтобы отреверсить этот процесс.
Из этого можно извлечь несколько вещей. Во-первых, очевидно, что PHP по-прежнему остается моим быстрым языком программирования. Как печально, но мы отложим это личное откровение для дальнейшего самоанализа.
С технической точки зрения, теперь все выглядит как строки в кодировке base64. И, конечно же, документ говорит мне, что я должен смотреть на JWS, то есть на подписанный веб-токен JSON.
Я сделаю паузу и скажу, что на самом деле это отличный вариант использования JWT. По сути, вместо какого-то бессмысленного токена или гигантского блока конфиденциальных данных концепция JWT подразумевает, что я должен ожидать список разрешений, на которые я имею право, завернутый в большой двоичный объект, который криптографически подписан эмитентом (в данном случае, Quebec Santé et Services sociaux).
Эта модель хороша тем, что ее может проверить любой, у кого есть соответствующий открытый ключ, даже без подключения к Интернету. Кроме того, ответ на вопрос «имеет ли это лицо право сесть на борт самолета / посетить концерт / посетить резиденцию для пожилых людей?» должны напрямую отвечать встроенным, а не косвенно подразумеваемым через проприетарный API или кучу тайных полей, связанных с номерами партий вакцины и т. д.
Теперь у меня нет копии соответствующего открытого ключа, но тело должно быть подписано, а не зашифровано, поэтому я все еще могу его прочитать.
Возможно, в духе реверс-инжиниринга мне следует вручную демонтировать JWS, но это довольно хорошо документированная (и, что немаловажно, хорошо реализованная) спецификация. Я собираюсь пойти на ленивый выход и использовать для этого пакет Composer web-token/jwt-framework.
Итак, мы успешно декодируем заголовок, но тело не приходит. Подсказка здесь — это «zip»: «DEF» в заголовке, как также указано в спецификации.
полезная нагрузка сжимается с помощью алгоритма DEFLATE (см. RFC1951) перед подписанием (обратите внимание, это должно быть «сырое» сжатие DEFLATE, без каких-либо заголовков zlib или gz
NB: мы декодируем, а затем перекодируем объект JSON, чтобы добавить пробел для удобства чтения, указав константу JSON_PRETTY_PRINT
Там немного больше личной информации, чем строго необходимо, хотя я полагаю, что сочетание имени и даты рождения с удостоверением личности с фотографией — разумный процесс. Они также предоставляют конкретные сведения о вакцинах, а не конкретные разрешения, как я надеялся. Опять же, это делает все более удобным для использования в разных юрисдикциях и избавляет от необходимости повторно выпускать JWS каждый раз при изменении политики, что в случае Квебека происходит примерно два раза в неделю.
На протяжении всего этого анализа я задавался вопросом, что может помешать кому-то просто предъявить совершенно действительное доказательство вакцинации другого человека. Поскольку все тело подписано криптографической подписью, вы не можете изменить чужое доказательство вакцинации, чтобы добавить свое имя, а это означает, что соединение доказательства вакцинации с удостоверением личности с фотографией — вполне разумный план. Это, безусловно, будет иметь место в аэропортах, но я очень сомневаюсь, что на спортивных объектах и т. Д. Будут просить второе удостоверение личности. Они просто отсканируют QR-код, увидят галочку на своем устройстве и перейдут к следующему.
Одна напутственная мысль: в то время как мой процесс был направлен на выяснение того, какие из моих личных данных кодируются в QR-коде, модель JWT печально известна тем, что ее легко испортить, либо забывая проверить перед анализом данных, либо разрешая токены без подписи. Если реализации не соблюдают центральный белый список авторизованных подписывающих лиц, было бы тривиально легко создать совершенно действительный токен, который вы подписываете своим собственным ключом. Как всегда, безопасность модели действительно зависит от того, насколько строго проверяющая сторона обеспечивает соблюдение стандарта.
Однако оказывается, что единственная личная информация — это именно та информация, которая содержится в полном PDF-документе о вакцинации: имя, дата рождения, пол (по какой-то причине), а также информация о дате и конкретных дозах, которые владелец получил на сегодняшний день. Если вас устраивают последствия для конфиденциальности предъявления водительских прав в баре, вы не должны больше беспокоиться о том, что вас попросят предъявить доказательство вакцинации.
Код представляет собой целую кучу мусора, но если вы хотите увидеть, что находится в вашем собственном QR-коде, вы можете проверить репозиторий GitHub для этого поста.
QR-код сейчас совершенно обыденная вещь — они встречаются повсюду, их используют как один из способов авторизации крупные сервисы вроде WhatsApp, Яндекса и AliExpress, встречаются QR-коды для подключения к Wi-Fi. Но насколько надежна эта технология? Можно ли создать такой QR-код, при сканировании которого выполнится нагрузка на девайсе жертвы? Этот вопрос мы сегодня разберем подробнее.
QR-код (англ. Quick Response Code — код быстрого реагирования) — это матричный или двумерный штрих-код, который может содержать до 4296 символов ASCII. То есть, проще говоря, картинка, в которой зашифрован текст.
Практика
А сейчас перейдем к практике — протестируем эту утилиту сами.
Как подделываются QR-коды
Группы, продающие сертификаты и QR-коды, есть даже в Telegram.
▪ Использование чужого, но настоящего QR-кода. Берётся чей-то код вакцинированного и выдаётся за свой.
Однако нередко (и с нарастающей частотой) помимо QR-кода у вас спрашивают паспорт. Данные на открывшейся странице подтверждения не совпадают, и вам отказывают в обслуживании.
▪ Генерация QR-кода на подставном сайте. Вы отдаёте свои данные неизвестно кому и получаете QR-код. При его сканировании смартфон перенаправляется на сайт, визуально копирующий страницу на Госуслугах, где указаны ваши данные и «подтверждается» факт вакцинации.
Правоохранительные органы и официальные лица объявили борьбу с этим методом и обещают наказание вплоть до уголовного тем, кто будет использовать такие коды. Теоретически, подставные сайты, куда перекидывают такие QR-коды, может заблокировать Роскомнадзор – и тогда все коды, ведущие туда, перестанут работать.
Незаконность этого метода очевидна. Участвующим в таких схемах грозит уголовное преследование. Сегодня прошла информация, что в Москве начали задерживать курьеров с бумажными версиями таких сертификатов.
Фальшивые ссылки
Так, созданный преступниками QR-код может привести вас на фишинговый сайт, имитирующий, например, страницу входа в социальную сеть или личный кабинет в банке, чтобы вы ввели там свои данные на радость преступникам. Обычно мы советуем смотреть на ссылку, прежде чем переходить по ней, — но в самом QR-коде шанса заметить странные символы нет, а для пущей надежности злоумышленники часто используют короткие ссылки — так сложнее распознать подделку, когда смартфон просит подтвердить переход.
Похожая схема существует и с QR-кодами для быстрой загрузки приложений. Вместо игры или полезного сервиса, которые вы ожидаете получить при взгляде на рекламный плакат, есть шанс скачать зловред, который позже, например, украдет ваши пароли или начнет рассылать что-нибудь непотребное вашим контактам.
Что дальше будет с проходом по QR-кодам?
С учётом текущей ситуации с заболеваемостью коронавирусом, снятие этих условий в ближайшее время маловероятно. Власти Москвы не исключают, что рассматривают распространение проверки QR-кодов на другие сферы, включая транспорт. Но пока конкретных решений по этому поводу не принимали.
Поэтому пока QR-коды остаются актуальными для жителей и гостей столицы. Моё мнение по этому поводу – вместо того, чтобы ходить за ПЦР каждые три дня, лучше сделать прививку. Причём чем раньше, тем лучше: ведь QR-код вы получите только после второго укола двухкомпонентными вакцинами, а тот наступит не раньше двух недель после первого.
Места, где можно сделать прививку в Москве сейчас, мы ранее перечислили в отдельной статье.
В закладки
На любое действие следует противодействие. Это законы не только физики, но и социума. Поэтому нет ничего удивительного, что сразу после появления системы проверки QR-кодов в Москве появились масса способов обмана как самой процедуры, так и всей системы контроля. Одни предостерегают от подделки QR-кодов и покупки сертификатов вакцинаций. Другие чуть ли не открыто хвалятся обратным. И.
Возможные атаки
Теперь давай посмотрим на примеры из каждой категории, а также разберемся, какой урон и каким устройствам они могут нанести.
Посмотреть текстовые файлы со всеми вариантами «начинки» QR-кодов ты можешь в папке words (они разделены по категориям, указанным выше).
Теперь пара слов о последствиях атак подобными нагрузками.
Первый класс атак — SQL-инъекции — используют при взломе БД и нарушении работы веб-сайтов. Например, запрос может вызывать зависание сайта.
Следующий пример (под номером 2) демонстрирует эксплуатацию XSS-уязвимости при атаке на веб-приложения с использованием SVG (Scalable Vector Graphic). К чему может привести XSS, ты, думаю, и без меня прекрасно знаешь, так что подробно на этом останавливаться не буду.
Третий пункт выводит на экран жертвы содержимое файла /etc/passwd : список аккаунтов Linux-based-систем и дополнительную информацию о них (раньше — хеши паролей этих учетных записей). В подобных случаях обычно стараются получить /etc/shadow и конфигурацию сервера, но все очень сильно зависит от цели, так что какие файлы читать — решай сам.
Четвертый пример представляет собой выражение, которое вызовет переполнение буфера (buffer overflow). Оно возникает, когда объем данных для записи или чтения больше, чем вмещает буфер, и способно вызвать аварийное завершение или зависание программы, ведущее к отказу в обслуживании (denial of service, DoS). Отдельные виды переполнений дают злоумышленнику возможность загрузить и выполнить произвольный машинный код от имени программы и с правами учетной записи, от которой она выполняется, что делает эту ошибку довольно опасной.
Пятый по счету класс атак (XXE Injections) представляет собой вариант получения скрытой информации веб-сервера с помощью анализа вывода XML-файлов. Конкретно в нашем примере при запросе к серверу тот ответит зашифрованным в Base64 содержимым файла /etc/passwd , который уже упоминался. Однако расшифровать его не составит труда — достаточно лишь воспользоваться встроенной в большинство дистрибутивов Linux утилитой base64 либо же онлайн-конвертером.
Атаки форматной строки (пример 6) — это класс уязвимостей, который включает в себя предоставление «специфичных для языка маркеров формата» для выполнения произвольного кода или сбоя программы. Говоря человеческим языком, это класс атак, при которых приложение некорректно очищает пользовательский ввод от управляющих конструкций, из-за чего эти конструкции в результате исполняются. Если ты программировал на С, то, конечно, помнишь те интересности с выводом переменных через printf : надо было в первом аргументе (который строка) указать на тип выводимого значения ( %d для десятичного числа и так далее).
Седьмой пункт представляет собой вариант command injection, которая выполняет определенный код на стороне сервера. В моем примере будет выполнена команда ls , которая покажет содержимое текущей директории, но, конечно, там может быть гораздо более опасный код.
И наконец, последняя категория — это LFI-уязвимости (Local File Inclusion; включение локальных файлов), позволяющие просмотреть на уязвимых (или неправильно настроенных) серверах файлы и папки, которые не должны были быть видны всем. Один из возможных вариантов — просмотреть файл /etc/passwd , о котором мы с тобой уже не раз говорили. Это может выглядеть вот так.
Обрати внимание, что в качестве тестового веб-приложения используется DVWA (Damn Vulnerable Web Application), который был специально разработан для обучения пентесту. Многие атаки на веб-приложения можно отработать на нем.
Продолжение доступно только участникам
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Почему нельзя публиковать фотографии билетов онлайн?
Дело в том, что злоумышленники могут скопировать штрихкод из опубликованной вами фотографии, вставить его в бланк электронного билета и без проблем использовать его. Это касается любых документов со штрихкодами: от билетов на концерт и самолет до выигрышных лотерейных талонов. Узнав штрихкод, преступники могут прийти вместо вас на концерт или перепродать ваш билет другим людям, обналичить выигрыш вместо вас или, например, испортить вам отпуск или командировку.
Причем в этом случае агентства по продаже билетов не виноваты — по правилам той же «Яндекс.Афиши» именно клиенты несут ответственность за передачу данных из билетов третьим лицам. Вывесить фото билета онлайн — это как раз и есть такая передача данных всем, кто пожелает их увидеть.
Стоит также помнить, что публикация билетов — это лучший способ сообщить ворам-домушникам, что такого-то числа в такое-то время суток вас не будет дома.
Никита Горяинов
Рассказываем, как не попасться на удочку киберпреступников при сканировании QR-кодов.
QR-коды есть на йогурте и музейной табличке, квитанции за коммунальные услуги и лотерейном билете. С их помощью открывают сайты, скачивают приложения, копят бонусы в программах лояльности, отправляют денежные переводы и даже просят милостыню. Эта доступная и практичная технология понравилась многим — и, как это часто бывает, киберпреступникам тоже: они уже вовсю применяют QR-коды в своих схемах. Рассказываем, что может пойти не так с черно-белыми квадратами и как их использовать без вреда для себя.
Что грозит тем, кто использует поддельные QR-коды
Приобретение, хранение, перевозка в целях использования или сбыта либо использование заведомо поддельного сертификата как официального документа, предоставляющего права или освобождающего от обязанностей, карается уголовным наказанием до одного года лишения свободы.
– Cенатор Андрей Клишас
Пока о таких случаях не сообщалось.
Закодированные в QR-коде команды
Но и это не все: QR-код может служить не только ссылкой на сайт, но и командой для выполнения определенных действий. Вот лишь неполный их список:
Но эти же возможности делают QR-код эффективным средством для незаметных манипуляций. Например, мошенники могут внести в адресную книгу свой номер под именем «Банк», чтобы придать вес звонку с попыткой выманить ваши деньги. Или, например, позвонить на платный номер за ваш счет. Или узнать, где вы находитесь… Малоприятные перспективы.
Что случилось?
12 июля этого года житель Москвы Максим Елфимов не смог попасть в СК «Олимпийский» на прощальный концерт Black Sabbath. Оказалось, что по его билету уже кто-то прошел. Максим был не единственной жертвой мошенников — в тот день с подобной проблемой столкнулось еще много людей.
Администрация не вошла в положение жертв, несмотря на то что билеты были именными, а пострадавшие имели при себе документы. Отчаявшись пройти на прощальный концерт своей любимой группы по приобретенному заранее билету, Елфимов купил новый, в самую дальнюю зону, и все-таки попал на Black Sabbath.
На следующий день Максим обратился в службу поддержки сервиса «Яндекс.Афиша», у которого он приобрел билет. Ответ пришел быстро: представители сервиса выразили сочувствие и предположили, что Максим опубликовал фотографии билетов в одной из соцсетей. В качестве компенсации Елфимову предложили бесплатный визит в кино. Кроме того, Максим написал пост на своей странице в Facebook, в котором рассказал о произошедшем. История привлекла внимание многих людей, и в конце концов о случившемся рассказали в СМИ.
Сам пострадавший был уверен, что на всех опубликованных им фотографиях часть штрихкода и цифры под ним были замазаны в графическом редакторе. На снимках, опубликованных в СМИ, действительно так и было. Однако позднее Максим вспомнил, что он публиковал фотографии билетов несколько раз, и девять месяцев назад в Instagram все-таки попал снимок билетов без купюр — с незаретушированными штрихкодами. Москвич так часто постил что-то в Instagram (по три-четыре раза в день), что совершенно забыл о том давнем посте. Елфимова очень расстроило это открытие. В конце он извинился перед читателями и даже сообщил о том, что собирается уйти из Facebook.
Что, вообще никак нельзя публиковать билеты?
Чтобы опубликовать билет и не попасться, желательно понимать, как устроен штрихкод. Во-первых, существует линейные (или полосковые) штрихкоды, предназначенные для кодирования небольшого объема информации, и двухмерные штрихкоды, более известные как QR-коды, — для передачи большого объема данных.
В основе обычного, одномерного штрихкода лежит двоичный код: толстые и тонкие полоски на нем — это на самом деле нули и единицы. Последние полоски кода — это чаще всего контрольный разряд, цифра, по которой определяется правильность считывания. Эта цифра получается путем несложных математических операций с остальными цифрами. Билеты в кино, на концерт и на самолет нередко содержат не один, а несколько разрядов, которые подтверждают данные штрихкода.
Одни из самых распространенных двухмерных штрихкодов — это QR-коды. Чаще всего их используют для быстрого открытия сайта на мобильном устройстве, но не всегда: например, QR-код можно встретить в украинских железнодорожных билетах. РЖД, кстати, тоже печатает в своих билетах либо одномерный, либо двухмерный штрихкод (правда, не QR, а Aztec).
Если вы хотите выложить в Интернет фото билетов, вам придется замазать и сам штрихкод целиком, и цифры под ним. Сканер, используемый контроллерами, считывает только штрихкод, однако при желании злоумышленники могут его восстановить с помощью цифрового кода, указанного под ним.
QR-коды на документах тоже нужно ретушировать полностью. Дело в том, что во избежание ошибок при чтении сканер использует специальную систему коррекции, которая может восстановить часть стертого кода.
И все же мы не рекомендуем вам выкладывать билеты в Сеть даже с закрашенными кодами — достаточно изобретательные в области социальной инженерии мошенники по кусочку билета могут восстановить все остальное. Всегда хочется поделиться своим счастьем с друзьями, но чаще всего вполне достаточно написать в соцсети что-нибудь вроде: «Народ! Я иду на последний концерт Black Sabbath!»
В закладки
На любое действие следует противодействие. Это законы не только физики, но и социума. Поэтому нет ничего удивительного, что сразу после появления системы проверки QR-кодов в Москве появились масса способов обмана как самой процедуры, так и всей системы контроля.
Одни предостерегают от подделки QR-кодов и покупки сертификатов вакцинаций. Другие чуть ли не открыто хвалятся обратным. И только вакцинированные свободно заходят в кафе и МФЦ, наслаждаясь свободой.
Что напридумывали россияне в национальной гонке против неизбежного – вакцинации или болезни? И как на это реагируют власти? Все актуальные данные по QR-марафону в столице мы собрали в этом сжатом материале.
Что случилось?
12 июля этого года житель Москвы Максим Елфимов не смог попасть в СК «Олимпийский» на прощальный концерт Black Sabbath. Оказалось, что по его билету уже кто-то прошел. Максим был не единственной жертвой мошенников — в тот день с подобной проблемой столкнулось еще много людей.
Администрация не вошла в положение жертв, несмотря на то что билеты были именными, а пострадавшие имели при себе документы. Отчаявшись пройти на прощальный концерт своей любимой группы по приобретенному заранее билету, Елфимов купил новый, в самую дальнюю зону, и все-таки попал на Black Sabbath.
На следующий день Максим обратился в службу поддержки сервиса «Яндекс.Афиша», у которого он приобрел билет. Ответ пришел быстро: представители сервиса выразили сочувствие и предположили, что Максим опубликовал фотографии билетов в одной из соцсетей. В качестве компенсации Елфимову предложили бесплатный визит в кино. Кроме того, Максим написал пост на своей странице в Facebook, в котором рассказал о произошедшем. История привлекла внимание многих людей, и в конце концов о случившемся рассказали в СМИ.
Сам пострадавший был уверен, что на всех опубликованных им фотографиях часть штрихкода и цифры под ним были замазаны в графическом редакторе. На снимках, опубликованных в СМИ, действительно так и было. Однако позднее Максим вспомнил, что он публиковал фотографии билетов несколько раз, и девять месяцев назад в Instagram все-таки попал снимок билетов без купюр — с незаретушированными штрихкодами. Москвич так часто постил что-то в Instagram (по три-четыре раза в день), что совершенно забыл о том давнем посте. Елфимова очень расстроило это открытие. В конце он извинился перед читателями и даже сообщил о том, что собирается уйти из Facebook.
Где сейчас надо предъявлять QR-код
Пока только в помещениях и внутренних территориях кафе, ресторанах и заведениях общественного питания. Важный момент: это пока не распространяется на летние веранды, а также на заказы «на вынос».
Грубо говоря, если вы хотите присесть в помещении, чтобы поесть или выпить кофе, с вас должны спросить сертификат. Даже если зона питания размещена в супермаркете, от вас всё равно потребуют QR-код либо кассир, либо охрана.
Большинство кафе и ресторанов в Москве продолжают работать. Если у вас есть QR-код вакцинации, переболевшего или результата ПЦР, вы можете сесть в практически (или полностью) пустых залах там, где раньше днём всё было занято.
Однако во многих торговых центрах все места размещения на фудкортах закрыты и опечатаны. Некоторые заведения вообще закрыли помещения и оставили заказы только «на вынос», а также доставку. Поэтому даже с QR-кодом может получиться так, что сесть вам будет банально негде.
Некоторые заведения обходят запрет, формально не являясь организацией общественного питания. Но уже есть свидетельства, что Роспотребнадзор и полиция всё равно выписывают им предупреждения, после чего остается либо соблюдать ограничения, либо готовиться к закрытию после следующей проверки.
WARNING
Не забывай про уголовную ответственность за создание и распространение вредоносных программ, к которым в широком смысле относятся и наши «заряженные» QR-коды.
Начнем с утилиты QRGen, которая позволяет создавать QR-коды с закодированными в них скриптами. Копируем репозиторий и переходим в папку с содержимым.
QRGen требует Python версии 3.6 и выше. Если возникает ошибка, попробуй обновить интерпретатор.
Устанавливаем все зависимости и запускаем сам скрипт.
Справка QRGen
Аргумент -h выведет то же самое, а вот запуск с ключом -l приведет к генерации QR-кодов из определенной категории. Всего их восемь.
- SQL-инъекции.
- XSS.
- Инъекции команд.
- QR с форматированной строкой.
- XXE.
- Фаззинг строк.
- SSI-инъекции.
- LFI или получение доступа к скрытым каталогам.
Как киберпреступники используют QR-коды
Что может пойти не так, спросите вы? Очень и очень многое. Поскольку содержимое QR-кода обычному человеку не понять, фактически мы полагаемся на честность тех, кто загружает в них информацию. Мы не можем заранее проверить, что произойдет, когда мы отсканируем заветный квадрат, — или что именно на самом деле записало туда приложение, в котором мы создавали свой квадрат. Это открывает массу возможностей для злоупотребления.
QRGen — каждому по коду
Для демонстрации средств работы с QR-кодами я буду использовать Kali Linux 2019.2 с установленным Python версии 3.7 — это необходимо для корректной работы утилит.
Кто может получить QR-код
Пример QR-кода в электронном сертификате вакцинации из Госуслуг.
◆ граждане, получившие действующий отрицательный результат ПЦР-теста. С таким QR-кодом посетить заведение можно, если с момента готовности результата и его регистрации прошло не более 72 часов
◆ граждане, переболевшие коронавирусной инфекцией. QR-код может быть использован при посещении ресторана в течение шести месяцев с даты выздоровления.
История вектора атаки
В 2014 году программа Barcode Scanner для мобильных устройств из проекта ZXing практически не проверяла тип URI, передаваемый через QR-код. В результате любой эксплоит, который мог быть исполнен браузером (например, написанный на JavaScript), можно было передать через QR.
Сканер пытался отфильтровать опасные виды атак с помощью регулярных выражений, требуя, чтобы URI имел период с последующим продлением как минимум на два символа, транспортный протокол длиной не менее двух символов, за которым следует двоеточие, и чтобы в URI не было пробелов.
Если содержимое не соответствует хотя бы одному из требований, то оно определяется как обычный текст, а не URI. Этот механизм блокирует атаки вроде javascript;alert("You have won 1000 dollars! Just Click The Open Browser Button"); , но, внеся пару простых изменений в код, мы получаем вариант, который программа исполняла в браузере, ведь она считала JS-код обыкновенным, «нормальным» URI!
Вот как это выглядело.
Вариант кода, который блокировался защитным механизмом сканера Модифицированный URI, который программа не могла отфильтровать
Как мы можем увидеть, уведомление появилось в браузере, а значит, URI с потенциально вредоносным кодом был выполнен. Однако выполняется данный JS-код лишь тогда, когда пользователь нажимает Open Browser (то есть «Открыть в браузере»).
Самое опасное здесь — что человек без предварительной подготовки не может узнать содержимое кода, не отсканировав его. А человек очень любопытен: в различных исследованиях большинство испытуемых (которые, кстати, даже не знали об эксперименте) сканировали QR-код именно из любопытства, забывая о собственной безопасности. Поэтому всегда будь внимателен!
Если у тебя нет сканера кодов, но уйма свободного времени — можно попробовать расшифровать код вручную. Инструкция есть на Хабре.
Как работает проверка QR-кода в заведениях Москвы
Пример страницы, открывающейся при сканировании QR-кода.
1. Вы получаете QR-код:
► в поликлинике — обратитесь в регистратуру или распечатайте самостоятельно с помощью инфомата
► на портале Госуслуги. Для этого авторизуйтесь под своей учетной записью (ЕСИА) и выберите в каталоге услугу «Вакцинация COVID-19»
2. Вы показываете код со смартфона (или распечатанный) в кафе. На него наводят камеру, переходят по предложенной кодом ссылке и видят: ваш статус, первые буквы ФИО, несколько цифр номера паспорта и полная дата рождения.
Зачем вообще нужны именные билеты, если их так легко подделать?
Один человек публикует билет онлайн, другой покупает засвеченный билет с рук — итог один: на концерт не попадают оба. Как же решить эту проблему? Конечно, организаторы могут проверять документы у владельцев именных билетов при входе — что-то вроде принципа двухфакторной аутентификации, только в реальной жизни. Но этот подход также далек от совершенства.
Во-первых, многим такой контроль не понравится. Во-вторых, на практике его сложно реализовать. Если мероприятие собирает 300 человек, проверить у них документы можно. Если 30 тысяч — уже нет. Представьте концерт, который никак не может начаться, так как зрители все еще ждут своей очереди — по два, по три часа. Перспектива не попасть на начало концерта из-за строгих мер безопасности совсем не радует.
Кроме того, брать паспорта на такие массовые мероприятия опасно — их могут украсть. С другой стороны, при желании организаторы концерта могут пойти навстречу и предоставить проштрафившимся жертвам хоть какое-то место, пусть и не такое хорошее. У этого подхода тоже есть свои минусы — некоторые люди злоупотребляют ситуацией: копируют билеты и проводят своих друзей на концерт бесплатно, а сами отправляются общаться с администрацией. Глобально эта проблема решится только тогда, когда мы перейдем на более совершенную систему проверки подлинности билетов. А до тех пор стоит проявлять бдительность и не публиковать чеки, билеты и документы онлайн.
Читайте также: