Как работает QR-код: программа, назначение, принцип работы и применение

QR-код сейчас совершенно обыденная вещь — они встречаются повсюду, их используют как один из способов авторизации крупные сервисы вроде WhatsApp, Яндекса и AliExpress, встречаются QR-коды для подключения к Wi-Fi. Но насколько надежна эта технология? Можно ли создать такой QR-код, при сканировании которого выполнится нагрузка на девайсе жертвы? Этот вопрос мы сегодня разберем подробнее.

QR-код (англ. Quick Response Code — код быстрого реагирования) — это матричный или двумерный штрих-код, который может содержать до 4296 символов ASCII. То есть, проще говоря, картинка, в которой зашифрован текст.

История вектора атаки

В мае 2013 года специалисты компании по сетевой безопасности Lookout Mobile разработали специальные QR-коды, которые смогли скомпрометировать очки Google Glass. На тот момент очки сканировали все фотографии, «которые могут быть полезны их владельцу», — и предоставили взломщикам полный удаленный доступ к устройству. Исследователи сообщили в Google о данной уязвимости, и ее закрыли буквально за несколько недель. К счастью, исправить успели до того, как ее можно было использовать вне лаборатории, ведь взлом очков реального пользователя мог привести к большим проблемам.

В 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!

Вот как это выглядело.

protected.png
Вариант кода, который блокировался защитным механизмом сканера
notprotected.png
Модифицированный URI, который программа не могла отфильтровать

exploited.png

Как мы можем увидеть, уведомление появилось в браузере, а значит, URI с потенциально вредоносным кодом был выполнен. Однако выполняется данный JS-код лишь тогда, когда пользователь нажимает Open Browser (то есть «Открыть в браузере»).

Еще один интересный пример из 2012 года: эксперт по информационной безопасности Равишанкар Боргаонкар (Ravishankar Borgaonkar) продемонстрировал, как сканирование простейшего QR может привести к форматированию устройств Samsung! Что же было внутри? MMI-код для сброса до заводских настроек: *2767*3855#, а также префикс tel: для совершения USSD-запроса.

Самое опасное здесь — что человек без предварительной подготовки не может узнать содержимое кода, не отсканировав его. А человек очень любопытен: в различных исследованиях большинство испытуемых (которые, кстати, даже не знали об эксперименте) сканировали QR-код именно из любопытства, забывая о собственной безопасности. Поэтому всегда будь внимателен!

www-icon.jpg

WWW

Если у тебя нет сканера кодов, но уйма свободного времени — можно попробовать расшифровать код вручную. Инструкция есть на Хабре.

QRGen — каждому по коду

Для демонстрации средств работы с QR-кодами я буду использовать Kali Linux 2019.2 с установленным Python версии 3.7 — это необходимо для корректной работы утилит.

warning-icon.jpg

WARNING

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

Начнем с утилиты QRGen, которая позволяет создавать QR-коды с закодированными в них скриптами. Копируем репозиторий и переходим в папку с содержимым.

git clone https://github.com/h0nus/QRGen cd QRGen && ls 

info-icon.jpg

INFO

QRGen требует Python версии 3.6 и выше. Если возникает ошибка, попробуй обновить интерпретатор.

Устанавливаем все зависимости и запускаем сам скрипт.

pip3 install -r requirements.txt ## или python3 -m pip install -r requirements.txt python3 qrgen.py 

Видим справку.

qrgenhelp.png
Справка QRGen

Аргумент -h выведет то же самое, а вот запуск с ключом -l приведет к генерации QR-кодов из определенной категории. Всего их восемь.

  1. SQL-инъекции.
  2. XSS.
  3. Инъекции команд.
  4. QR с форматированной строкой.
  5. XXE.
  6. Фаззинг строк.
  7. SSI-инъекции.
  8. LFI или получение доступа к скрытым каталогам.

Возможные атаки

Теперь давай посмотрим на примеры из каждой категории, а также разберемся, какой урон и каким устройствам они могут нанести.

1. 0'XOR(if(now()=sysdate(),sleep(6),0))XOR'Z 2. <svg>at /etc/passwd 4. %d%d%d%d%d%d%d%d%d%d 5.  6. "A" x 33 7. 

8. ../../../../../../etc/passwd </svg></code></pre>

Посмотреть текстовые файлы со всеми вариантами «начинки» 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, о котором мы с тобой уже не раз говорили. Это может выглядеть вот так.

dvwalfidemo.png

Обрати внимание, что в качестве тестового веб-приложения используется DVWA (Damn Vulnerable Web Application), который был специально разработан для обучения пентесту. Многие атаки на веб-приложения можно отработать на нем.

Практика

А сейчас перейдем к практике — протестируем эту утилиту сами.

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.

Я уже участник «Xakep.ru»← Ранее Иранская хак-группа Oilrig злоупотребляет DNS-over-HTTPSДалее → Хакер поделился паролями от 900 корпоративных VPN-серверов

  • Главнаяarrow.png
  • Полезная информацияarrow.png
  • Происхождение, развитие и использование QR-кода

82558bd755d4bf64f8b1324b360ed554_L.jpg

Когда вопрос касается персонализации этикетки и надежной защиты от контрафакта, в ход вступают все средства. Одни из них известны уже давно, другие только набирают обороты и развиваются в мире. А вот QR-код – это нечто среднее. То, что уже всем знакомо, но при этом все возможности технологии до сих пор не использованы. Давайте посмотрим, как впервые появился QR-код, какова его роль в персонализации и защите этикетки, а также какие возможности он открывает уже сегодня.

История появления QR-кодов

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

Линейный код может вместить в себя от 20-ти до 30-ти символов, чего порой недостаточно. Японские специалисты поставили перед собой цель – расширить возможности штрих-кода, но с классическим подходи это было невозможно. И на арене появляются двухмерные (матричные) коды, среди которых главным по праву стал QR-код.

00000213123131.jpg

В отличие от обычного штрих-кода QR-код обладает рядом положительных качеств:

  • Увеличение объема закодированной информации в несколько раз;
  • Информация не дублируется символами, понятными человеку;
  • На выбор есть несколько вариантов исполнения.

Фактически сложно назвать QR-код чем-то концептуально новым. Все-таки технология крайне близка к классическому штрих-коду. Однако разница налицо. QR-код – это своего рода связующее звено между реальностью и виртуальным миром, как бы странно это не звучало. Возможности, которые открыли QR-коды, действительно гораздо шире, чем были ранее. Любой современный телефон или планшет может без проблем считывать информацию с QR-кода за доли секунды. И информация эта может быть самой разнообразной: данные о продукции, ссылка на официальный сайт, зашифрованный код, принимающий участие в акции, и даже короткий рассказ. Зашифровать можно практически все, и пользователь сможет без особых проблем считать данную информацию, используя свой карманный гаджет.

00004564654131.png

Таким образом технология, которая изначально была разработана для достаточно узкого профессионального использования (производство, торговля и логистика) быстро распространилась и в другие отрасли – реклама, продвижение в интернете и многое другое. Более того! Сегодня даже можно встретить людей, которые набивают себе татуировки с QR-кодом, в котором может содержаться информация о Дне рождения, имя и что угодно еще. И да, они считываются. Но все-таки наиболее рациональное использование технологии – в производстве и персонализации этикеточной продукции.

Активное и пассивное считывание QR-кодов

Стремительно развиваясь, технология производства QR-кодов все дальше отходит от своих одномерных «предков». Основное различие все-таки заключается в полной смене ролей «объект-субъект). Традиционно в QR-кодах применяется пассивное считывание информации. QR-коды считываются в магазинах, на пропускных пунктах, в культурных массовых местах и т.д. То есть, в данном случае человек выступает в качестве пассивного участника считывания. Активный участник сам считывает код. Например, увидев рекламу на биг-борде на улице, на которую нанесен QR-код с адресом сайта. Зачем переписывать долгое название с кучей символов (слэши, двоеточия и т.д.) вручную, если можно просто сканировать код и сразу получить ссылку на сайт? Это удобно и быстро. А главное – точно. В данном случае человек выступает в качестве активного участника считывания.

QR-код – это совершенно новый способ взаимодействия и автоматизации множества процессов в производстве, торговле, рекламе и даже в быту.

0000000122313122313.jpg

Что значит распространение QR-кодов на этикетках для покупателей и производителей?

От использования QR-кодов определенно выигрывают обе стороны. Для производителей это в первую очередь совершенно новый способ взаимодействия с потребителем. Если ранее информация на площади этикетки была существенно ограничена, то теперь на ней можно вместить куда больше данных, зашифрованных в QR-коде. Сравнивать штриховые коды и QR-коды можно, но первые все же больше ориентированы на упрощение и автоматизацию логистики. Рядовому покупателю штрих-код не доносит практически никакой информации. Большинство ограничивается тем, что по первым цифрам узнает страну производителя. Остальное остается неизвестным. С QR-кодом количество предоставляемой информации существенно расширяется. И это может быть практически все, что угодно.

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

Почему QR-код до сих пор не вытеснил штриховые аналоги?

Это достаточно неоднозначный вопрос. Тут проблема скорее в многолетнем опыте использования вторых. К штрих-кодам уже все привыкли, в супермаркетах и на производстве установлено оборудование для считывания. Замена штрих-кода QR-аналогом – это на данный момент серьезные финансовые расходы для многих. Поэтому последние используются скорее как дополнение к первым.

Другой вопрос – использование QR-кодов и законодательство. Наличие штрих-кода на этикетке – обязательное требования для производителей практически во всех современных сегментах. Если заменять штриховое кодирование QR-кодами, то придется менять и законодательство. Либо требовать наличие обеих кодировок, что нелогично, либо полностью заменить штрих-коды, после чего они, скорее всего, исчезнут как вид. На данный момент столь серьезные перемены в производстве и торговле – мера слишком уж радикальная и требующая серьезных капиталовложений. Поэтому ожидать каких-то серьезных изменений в этом вопросе в ближайшие годы не приходится. Да и вряд ли первые шаги будут предприняты именно в России. Скорее всего, это произойдет в США или Западной Европе, да и то нескоро.

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

НаверхТолкованиеПеревод

QR-код
> QR-код со ссылкой на эту страницу. QR-код со ссылкой на веб-сайт на биллборде Ссылка на Википедию для мобильного телефона

QR-код (англ. quick response — быстрый отклик) — матричный код (двумерный штрихкод), разработанный и представленный японской компанией «Denso-Wave»[1] в 1994 году.

Описание

Основное достоинство QR-кода — это лёгкое распознавание сканирующим оборудованием (в том числе и фотокамерой мобильного телефона), что дает возможность использования в торговле, производстве, логистике. QR-коды больше всего распространены в Японии, стране, где штрих-коды пользовались такой большой популярностью, что объём информации, зашифрованной в коде, вскоре перестал устраивать индустрию. Японцы начали экспериментировать с новыми способами кодирования небольших объёмов информации в графической картинке. Уже в начале 2000 года QR-коды получили широкое распространение в Японии, их можно было встретить на большом количестве плакатов, упаковок и товаров.

Максимальное количество символов, которые помещаются в один QR-код:

  • цифры — 7189;
  • цифры и буквы (включая кириллицу) — 4296;
  • двоичный код — 2953 байт;
  • иероглифы — 1817.

В настоящее время QR-код широко распространён в странах Азии (особенно в Японии), постепенно развивается в Европе и Северной Америке. Наибольшее признание он получил среди пользователей мобильной связи — установив программу-распознаватель, абонент может моментально заносить в свой телефон текстовую информацию, добавлять контакты в адресную книгу, переходить по web-ссылкам, отправлять SMS-сообщения и т. д.

Как показало исследование, проведенное компанией comScore в 2011 году, 20 млн жителей США использовали мобильные телефоны для сканирования QR-кодов[2].

В Японии подобные коды наносятся практически на все товары, продающиеся в магазинах, их размещают в рекламных буклетах и справочниках. С помощью QR-кода даже организовывают различные конкурсы и ролевые игры.

Ведущие японские операторы мобильной связи совместно выпускают под своим брендом мобильные телефоны со встроенной поддержкой распознавания QR-кода[3].

В Японии и Австрии также QR-коды используются на кладбищах и содержат информацию об усопшем.[4][5]

QR-коды активно используются музеями[6], а также и в туризме. Например, во Львове (Украина), объединение бизнесменов «Туристическое движение Львова» разместило QR-коды более чем на 80 туристических объектах. Это позволяет индивидуальному туристу легко ориентироваться в городе, даже не зная украинского языка, так как QR-коды установлены на нескольких языках[7].

Хотя термин «QR code» является зарегистрированной торговой маркой «DENSO Corporation», использование кодов не облагается никакими лицензионными отчислениями, а сами они описаны и опубликованы в качестве стандартов ISO.

Формат данных в QR-коде

Миниатюрное издание А. С. Пушкина «Евгений Онегин» в QR-коде[8]

Спецификация QR-кода не описывает формат данных.

Наиболее популярные программы просмотра QR-кодов поддерживают такие форматы данных: URL, Закладка в браузер, Email (с темой письма), SMS на номер (c темой), MeCard, vCard, географические координаты.

Также некоторые программы могут распознавать GIF, JPG, PNG или MID файлы меньше 4 КБ и зашифрованный текст, но эти форматы не получили популярности.

Программное обеспечения для мобильных телефонов для распознавания QR-кодов

  • для Apple iOS: Scan, RedLaser, QR Reader for iPhone, Bakodo — Barcode Scanner and QR Bar Code Reader, AT&T Code Scanner, Elinext UPC, Ценометр, Google;
  • для Android: С версии 4.2 интегрировано в систему в приложении Google Now, Google Goggles, KKC Barcode Pro 3.0, QuickMark, Barcode Scanner, Barcode2file, QR Droid, NeoReader, ixMAT Scanner, 2D-код, Elinext UPC, I-Nigma, AIcam;
  • для Bada: BeeTagg, Quick QR Reader;
  • для BlackBerry OS: Встроено в App World (магазин приложений);
  • для Java: Kaywa reader, I-Nigma, UpCode;
  • для Maemo: mbarcode;
  • для Symbian OS: QuickMark, Kaywa reader, Nokia barcode reader, I-Nigma, UpCode, NeoReader, BeeTag;
  • для Windows Mobile: QuickMark, I-Nigma;
  • для Windows Phone 7: Встроено в поиск (обновление Mango), QR Code Reader
  • для MeeGo: MeeScan, CodeCam

См. также

Другие книги по запросу «QR-код» >>

Используемые источники:

  • https://xakep.ru/2020/08/05/qrgen/
  • https://www.etiketki24.ru/interesnye-stati/proiskhozhdenie-razvitie-i-ispolzovanie-qr-koda
  • https://dic.academic.ru/dic.nsf/ruwiki/608666

Рейтинг автора
5
Подборку подготовил
Андрей Ульянов
Наш эксперт
Написано статей
168
Ссылка на основную публикацию
Похожие публикации