как сделать куар код нечитаемым
Статья Как скрыть данные в QR-коде методом LSB
Сегодня рассмотрим один из примитивных, но рабочих способов сокрытия информации в QR коде методом LSB. Содержание этого способа заключается в следующем: QR-код состоит из чёрных квадратов, расположенных в квадратной сетке на белом фоне, которые считываются с помощью устройств обработки изображений. Проще говоря, QR код это совокупность пикселей белого и черного цвета определенной последовательности.
Каждый пиксель имеет свой уникальный битовый код. Метод LSB (наименее значащий бит) подразумевает собой замену последних значащих битов в контейнере (изображения, аудио или видеозаписи) на биты скрываемого сообщения. Разница между пустым и заполненным контейнерами должна быть не ощутима для органов восприятия человека.
Суть заключается в следующем: имеется изображение трех пикселей RGB со значениями [0, 0, 0], каждый из них – абсолютно черный цвет. Если мы запишем в канал R значение, равное не нулю, а единице, то для нашего восприятия цвет не поменяется. Таким образом, в канал R изображения из трех пикселей мы можем спрятать три бита информации. Так же и в следующие каналы – по три бита в каждый. Получается 8 сочетаний нулей и единиц в группе по три. В конечном итоге мы сможем спрятать 24 бита информации, либо 3 байта.
Стоит отметить недостатки метода. Методы LSB являются неустойчивыми ко всем видам атак и могут быть использованы только при отсутствии шума в канале передачи данных. Обнаружение LSB-кодированного стего осуществляется по аномальным характеристикам распределения значений диапазона младших битов отсчётов цифрового сигнала.
Изменив методом LSB черный цвет со значения «0» на значение «1» для нулевого бита и на значение «2» для бита единицы, мы сможем внедрить попиксельно определенный объем данных.
Ниже представлен QR-код, в котором уже закодированы данные поверх сообщения.
Если визуализировать данный метод, то получается следующее:
Используя специализированный сайт «ФотоФорензик» выявить данный метод также затруднительно:
Zsteg также не выявил метод LSB:
Первостепенно установим необходимую библиотеку Pillow, позволяющую работать с изображениями. Данная библиотека является форком, то есть ответвлением, оригинальной библиотеки PIL. Этот форк был принят в качестве замены оригинальной библиотеки и включён в некоторые дистрибутивы Linux по умолчанию.
Для установки необходимых зависимостей воспользуйтесь командой от имени администратора:
Теперь приступим к разбору алгоритма нашей программы.
Импортируем библиотеки в скрипт:
Image, ImageDraw являются компонентами библиотеки PIL для взаимодействия с изображениями на уровне чтения, создания и редактирования.
Модуль qrcode нужен нам для генерации нужных размеров QR-кода.
Объявляем класс qrHide:
Объявляем следующую немаловажную для нас функцию createQR, которая будет генерировать наш стегоконтейнер в виде QR-кода. Указываем параметры, которые будем передавать функции при ее вызове – containText и QRFileName.
Параметр containText содержит тот текст, на основе которого будет генерация QR-кода, в свою очередь параметр QRFileName отвечает за имя файла, в который будет записан QR-код.
Далее устанавливаем равенство двух внутренних переменных self.a, self.b и containText, QRFileName соответственно. Это обуславливается удобством чтения кода и переменных.
Обработка ошибок будет делаться через связку try-except:
Вкуриваем QR. Как сделать 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, который программа не могла отфильтровать
Как мы можем увидеть, уведомление появилось в браузере, а значит, URI с потенциально вредоносным кодом был выполнен. Однако выполняется данный JS-код лишь тогда, когда пользователь нажимает Open Browser (то есть «Открыть в браузере»).
Самое опасное здесь — что человек без предварительной подготовки не может узнать содержимое кода, не отсканировав его. А человек очень любопытен: в различных исследованиях большинство испытуемых (которые, кстати, даже не знали об эксперименте) сканировали QR-код именно из любопытства, забывая о собственной безопасности. Поэтому всегда будь внимателен!
Если у тебя нет сканера кодов, но уйма свободного времени — можно попробовать расшифровать код вручную. Инструкция есть на Хабре.
QRGen — каждому по коду
Для демонстрации средств работы с QR-кодами я буду использовать Kali Linux 2019.2 с установленным Python версии 3.7 — это необходимо для корректной работы утилит.
WARNING
Не забывай про уголовную ответственность за создание и распространение вредоносных программ, к которым в широком смысле относятся и наши «заряженные» QR-коды.
Начнем с утилиты QRGen, которая позволяет создавать QR-коды с закодированными в них скриптами. Копируем репозиторий и переходим в папку с содержимым.
QRGen требует Python версии 3.6 и выше. Если возникает ошибка, попробуй обновить интерпретатор.
Устанавливаем все зависимости и запускаем сам скрипт.
Возможные атаки
Теперь давай посмотрим на примеры из каждой категории, а также разберемся, какой урон и каким устройствам они могут нанести.
Посмотреть текстовые файлы со всеми вариантами «начинки» QR-кодов ты можешь в папке words (они разделены по категориям, указанным выше).
Теперь пара слов о последствиях атак подобными нагрузками.
Первый класс атак — SQL-инъекции — используют при взломе БД и нарушении работы веб-сайтов. Например, запрос может вызывать зависание сайта.
Следующий пример (под номером 2) демонстрирует эксплуатацию XSS-уязвимости при атаке на веб-приложения с использованием SVG (Scalable Vector Graphic). К чему может привести XSS, ты, думаю, и без меня прекрасно знаешь, так что подробно на этом останавливаться не буду.
Третий пункт выводит на экран жертвы содержимое файла /etc/passwd : список аккаунтов Linux-based-систем и дополнительную информацию о них (раньше — хеши паролей этих учетных записей). В подобных случаях обычно стараются получить /etc/shadow и конфигурацию сервера, но все очень сильно зависит от цели, так что какие файлы читать — решай сам.
Четвертый пример представляет собой выражение, которое вызовет переполнение буфера (buffer overflow). Оно возникает, когда объем данных для записи или чтения больше, чем вмещает буфер, и способно вызвать аварийное завершение или зависание программы, ведущее к отказу в обслуживании (denial of service, DoS). Отдельные виды переполнений дают злоумышленнику возможность загрузить и выполнить произвольный машинный код от имени программы и с правами учетной записи, от которой она выполняется, что делает эту ошибку довольно опасной.
Атаки форматной строки (пример 6) — это класс уязвимостей, который включает в себя предоставление «специфичных для языка маркеров формата» для выполнения произвольного кода или сбоя программы. Говоря человеческим языком, это класс атак, при которых приложение некорректно очищает пользовательский ввод от управляющих конструкций, из-за чего эти конструкции в результате исполняются. Если ты программировал на С, то, конечно, помнишь те интересности с выводом переменных через printf : надо было в первом аргументе (который строка) указать на тип выводимого значения ( %d для десятичного числа и так далее).
Обрати внимание, что в качестве тестового веб-приложения используется DVWA (Damn Vulnerable Web Application), который был специально разработан для обучения пентесту. Многие атаки на веб-приложения можно отработать на нем.
Практика
А сейчас перейдем к практике — протестируем эту утилиту сами.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
QR код который не читается, как побороть?
Увидев в Яндекс.Деньги QR оплату, решил попробовать. Легко убедился что читает приложение далеко не все коды.
Но почему это происходит не стал разбираться. Щелкнул Паркуром и он все распознал.
Акция по платежам без комиссии заставила еще раз вернуться к теме. И опять я убедился Яндекс.Деньги недоработал приложение.
Попробовал разобраться, нашел кучу приложений для Андроида и убедился что существует проблема с правильным распознанием.
Часть квитанций при чтении превращается в не читаемые кракозябры.
Поиск в ин-те показал что этим не один я мучусь. Но решение и объяснение чаще всего предлагалось простое: «пойди на сай забей и сгенерируй». Попробовал. Прочитал, но почему-то очень плохо сгенерированный код с экрана смартфон читает.
Поиски в ин-те не прекращал и наткнулся сайт qr это просто
Почитал и нашел приложения которые могут помочь в борьбе с кодами. Одно приложение уже было испробовано NeoReader QR & Barcode Scanner и признано частично годным. Второе QR-Check по заверениям разработчика
Цитата
Приложение распознает и производит анализ распознанного текста на соответствие стандартам банков для оплаты по ДШК. Также производится проверка на критические ошибки в значениях реквизитов. Приложение писалось под требования Сбербанка по приему по ДШК, поэтому в других банках данные ошибки могут не являться критическими. |
Приложение читает русский текст корректно показывает ошибки по полям. Хотя не слишком то функционально. А NeoReader имеет хороший алгоритм, читает слету и умеет кодировать (да и реклама не столь навязчива как в большинстве приложений).
Связка этих приложений и текстового редактора позволяет победить QR проблему.
Надеюсь мой опус сбережет Вам толику времени.
Читаем QR код
Иногда возникают такие ситуации, когда нужно прочитать QR код, а смартфона под рукой нет. Что же делать? В голову приходит лишь попробовать прочитать вручную. Если кто-нибудь сталкивался с такими ситуациями или кому просто интересно как же читается QR код машинами, то данная статья поможет вам разобраться в этой проблеме.
В статье рассмотрены базовые особенности QR кодов и методика дешифрирования информации без использования вычислительных машин.
Иллюстраций: 14, символов: 8 510.
Для тех, кто не в курсе что такое QR код, есть неплохая статья в английской Wikipedia. Также можно почитать тематический блог на Хабре и несколько хороших статей по смежной тематике, которые можно найти поиском.
Решение задачи непосредственного чтения информации с QR-картинки рассмотрим на примере двух кодов. Информация была закодирована в online-генераторе QR Coder.ru.
Чтобы понять, как извлечь данные из кода, нужно разобраться в алгоритме. Существует несколько стандартов в семействе QR кодов, с их базовыми принципами можно ознакомиться в спецификациях. Кратко поясню: данные, которые необходимо закодировать, разбиваются на блоки в зависимости от режима кодирования. К разбитым по блокам данным прибавляется заголовок, указывающий на режим и количество блоков. Существуют и такие режимы, в которых используется более сложная структура размещения информации. Данные режимы рассматривать не будем ввиду того, что извлекать вручную из них информацию нецелесообразно. Однако, основываясь на тех принципах, которые описаны ниже, можно адаптироваться и к этим режимам.
По стандарту, данные с RS-кодами перед записью в картинку «перемешиваются». Для этих целей используют специальные маски. Существует 8 алгоритмов, среди которых выбирается наилучший. Критерии выбора основаны на системе штрафов, о которых можно также почитать в спецификации.
«Перемешанные» данные записываются в особой последовательности на шаблонную картинку, куда добавляется техническая информация для декодирующих устройств. Исходя из описанного алгоритма, можно выделить схему извлечения данных из QR кода:
Здесь зелёным фломастером подчёркнуты пункты, которые нужно будет выполнить при непосредственном чтении кода. Остальные пункты можно опустить ввиду того, что считывание производит человек.
Шаг 0. QR код
Взглянув на картинки, можно заметить несколько отчётливых областей. Эти области используются для детектирования QR кода. Эти данные не представляют интереса с точки зрения записанной информации, но их нужно вычеркнуть или просто запомнить их расположение, чтобы они не мешали. Всё остальное поле кода несёт уже полезную информацию. Её можно разбить на две части: системная информация и данные. Также существует информация о версии кода. От версии кода зависит максимальный объём данных, которые могут быть записаны в код. При повышении версии – добавляются специальные блоки, например как здесь:
По ним можно сориентироваться и понять какая версия QR перед вами. Коды высоких версий обычно также нецелесообразно считывать вручную.
Размещение системной информации показано на рисунке:
Системная информация дублируется, что позволяет значительно понизить вероятность возникновения ошибок при детектировании кода и считывании. Системная информация – это 15 бит данных, среди которых первые 5 — это полезная информация, а остальные 10 — это BCH(15,5) код, который позволяет исправлять ошибки в системных данных. К классу BCH кодов относят и RS коды. Обратите внимание, что на рисунке две полоски по 15 бит не пересекаются.
Шаг 1. Чтение 5 бит системной информации
Как уже говорилось, интерес представляют только первые 5 бит. Из которых 2 бита показывают уровень коррекции ошибок, а остальные 3 бита показывают какая маска из доступных 8 применяется к данным. В рассматриваемых QR кодах системная информация содержит:
Шаг 2. Маска для системной информации
Кроме уже озвученных схем защиты системной информации, вдобавок, используется статическая маска, которая применяется к любой системной информации. Она имеет вид: 101010000010010. Так как имеет интерес только первые 5 бит, то маску можно сократить и легко запомнить: 10101 (десять — сто один). После применения операции «исключающего или» (xor) получаем информацию.
Возможные уровни коррекции ошибок:
000 | (i + j) mod 2 = 0 |
001 | i mod 2 = 0 |
010 | j mod 3 = 0 |
011 | (i + j) mod 3 = 0 |
100 | ((i div 2) + (j div 3)) mod 2 = 0 |
101 | (i j) mod 2 + (i j) mod 3 = 0 |
110 | ((i j) mod 2 + (i j) mod 3) mod 2 = 0 |
111 | ((i+j) mod 2 + (i j) mod 3) mod 2 = 0 |
Шаг 3. Чтение заголовка данных
Чтобы понять с какими данными предстоит иметь дело, необходимо изначально прочитать 4-х битный заголовок, который содержит в себе информацию о режиме. Специфика чтения данных изображена на картинке:
Список возможных режимов:
ECI | 0111 |
Числовые | 0001 |
Буквенно-числовые | 0010 |
8-битный (байтный) | 0100 |
Kanji | 1000 |
Структурированное дополнение | 0011 |
FNC1 | 0101 (1-я позиция) 1001 (2-я позиция) |
Шаг 4. Применение маски к заголовку
После извлечения 4-х бит, описывающих режим, необходимо к ним применить маску.
В нашем случае для двух кодов используются разные маски. Маска определяется выражением, приведённым в таблице выше. Если данное выражение сводится к TRUE (верное) для бита с координатами (i,j), то бит инвертируется, иначе всё остаётся без изменений. Начало координат в левом верхнем углу (0,0). Взглянув на выражения, можно заметить в них закономерности. Для рассматриваемых QR кодов, маски будут выглядеть так:
Шаг 5. Чтение данных
После получения данных о режиме можно приступать к чтению информации. Надо оговорить, что наиболее интересно считывать числовые и буквенно-числовые данные, так как они легко интерпретируются. Но также не стоит бояться 8-битных. Это может быть также легко интерпретируемая информация. Например, многие онлайн генераторы QR текст кодируют в этом режиме, используя ASCII. Ещё одна причина, почему следует изначально прочитать режим, это то, что от него зависит количество пакетов данных. Которая также зависит и от версии кода. Для версий с первой по девятую длины блоков для более читабельных режимов:
Числовые | 10 бит / 4 бита |
Буквенно-числовые | 9 бит |
8-битный (байтный) | 8 бит |
Первый блок после указателя режима — это количество символов. Для числового режима количество закодировано в 10 следующих битах, а для 8-битного режима в 8 битах (прошу прощения за тавтологию).
На рисунке видно, что в левом QR коде, как и отмечалось, записана цифра 5. Это видно по указателю количества символов и последующим после него 4 битам. В числовом режиме наряду с 10-битными блоками используются 4-х битные блоки для экономии места, если в 10-битном объёме нет необходимости. В правом коде зашифровано 4 символа. На данный момент неизвестно что зашифровано в нём. Поэтому необходимо перейти к чтению следующего столбца для извлечения всех 4-х блоков информации.
На рисунке видно, все 4 пакета представляют собой коды ASCII латинских букв, образующие слово «habr»
Естественно наилучшим способом остаётся достать телефон из кармана и, наведя камеру на QR-картинку, считать всю информацию. Однако в экстренных случаях может пригодиться и описанная методика. Конечно, в голове не удержишь все указатели режимов и типов масок, а также ASCII символы, но популярные комбинации запомнить (хотя бы те, что рассмотрены в статье) под силу.
QR-код, да не тот
Рассказываем, как не попасться на удочку киберпреступников при сканировании QR-кодов.
QR-коды есть на йогурте и музейной табличке, квитанции за коммунальные услуги и лотерейном билете. С их помощью открывают сайты, скачивают приложения, копят бонусы в программах лояльности, отправляют денежные переводы и даже просят милостыню. Эта доступная и практичная технология понравилась многим — и, как это часто бывает, киберпреступникам тоже: они уже вовсю применяют QR-коды в своих схемах. Рассказываем, что может пойти не так с черно-белыми квадратами и как их использовать без вреда для себя.
Что такое QR-коды и как ими пользоваться
В наше время смартфон есть уже почти у всех. Во многих современных моделях есть встроенный QR-сканер. На остальные можно скачать приложение — для чтения всех кодов вообще или какое-нибудь специализированное, например — разработанное музеем.
Если включить QR-сканер и навести камеру телефона на код, запустится некий процесс. Чаще всего смартфон предложит вам перейти на тот или иной сайт или откроет страницу определенного приложения в магазине. Есть и другие варианты, о них — чуть позже.
Специализированные сканеры отличаются от собратьев тем, что лучше «работают в паре» со «своими» QR-кодами. Допустим, вы видите табличку перед выдающимся деревом в парке, и на ней есть квадрат QR. Если вы загрузили себе официальное приложение этого парка, QR-коды на таких табличках превратятся для вас в цельную экскурсию, а стандартный сканер, распознав их, просто предложит перейти на сайт парка и прочесть описание каждого экспоната на отдельной странице.
Кроме того, некоторые приложения могут создавать QR-коды, чтобы передать тому, кто их отсканирует, какую-то вашу информацию — например, имя и пароль вашей сети Wi-Fi или даже платежные реквизиты счета в банке.
Как киберпреступники используют QR-коды
Что может пойти не так, спросите вы? Очень и очень многое. Поскольку содержимое QR-кода обычному человеку не понять, фактически мы полагаемся на честность тех, кто загружает в них информацию. Мы не можем заранее проверить, что произойдет, когда мы отсканируем заветный квадрат, — или что именно на самом деле записало туда приложение, в котором мы создавали свой квадрат. Это открывает массу возможностей для злоупотребления.
Фальшивые ссылки
Так, созданный преступниками QR-код может привести вас на фишинговый сайт, имитирующий, например, страницу входа в социальную сеть или личный кабинет в банке, чтобы вы ввели там свои данные на радость преступникам. Обычно мы советуем смотреть на ссылку, прежде чем переходить по ней, — но в самом QR-коде шанса заметить странные символы нет, а для пущей надежности злоумышленники часто используют короткие ссылки — так сложнее распознать подделку, когда смартфон просит подтвердить переход.
Похожая схема существует и с QR-кодами для быстрой загрузки приложений. Вместо игры или полезного сервиса, которые вы ожидаете получить при взгляде на рекламный плакат, есть шанс скачать зловред, который позже, например, украдет ваши пароли или начнет рассылать что-нибудь непотребное вашим контактам.
Закодированные в QR-коде команды
Но и это не все: QR-код может служить не только ссылкой на сайт, но и командой для выполнения определенных действий. Вот лишь неполный их список:
Все это задумывалось для автоматизации мелких действий. Например, считав QR-код, можно добавить в телефонную книгу всю контактную информацию с визитки, отправить сообщение об оплате парковки по нужному шаблону или выдать доступ к гостевому Wi-Fi.
Но эти же возможности делают QR-код эффективным средством для незаметных манипуляций. Например, мошенники могут внести в адресную книгу свой номер под именем «Банк», чтобы придать вес звонку с попыткой выманить ваши деньги. Или, например, позвонить на платный номер за ваш счет. Или узнать, где вы находитесь… Малоприятные перспективы.
Как киберпреступники маскируют QR-коды
Безусловно, для того чтобы злоумышленники вам навредили, им нужно, чтобы вы отсканировали именно их QR-коды. И для этого у них есть пара любимых приемов.
Мошеннические источники QR-кодов. Чаще всего к этому способу прибегают, чтобы убедить жертву скачать зловредное приложение. Его создатели могут разместить QR-код со ссылкой на свое детище на сайте, в баннере, электронном письме или даже на бумажном объявлении. Часто рядом для большей достоверности размещают логотипы Google Play или App Store.
Подмена QR-кода. Нередко злоумышленники пользуются чужим трудом и репутацией и просто заклеивают настоящий QR-код на плакате или табличке подложным.
Кстати, подменой QR-кодов в последнее время стали пользоваться не только киберпреступники, но и беспринципные активисты общественных течений — для распространения своих идей. В Австралии недавно был арестован мужчина, который переклеил несколько QR-кодов на табличках службы по контролю за COVID-19, чтобы вместо сервиса для записи посетителей общественных мест люди попадали на сайт с агитацией антипрививочников.
QR-код, в который запакованы банковские реквизиты, можно подменить при его отправке будущему плательщику — например, распечатав и разложив по почтовым ящикам фальшивые квитанции на оплату коммунальных услуг. Вместо настоящего получателя деньги придут на счет злоумышленника.
Как не попасть в беду с QR-кодом
Чтобы не стать жертвой киберпреступников, при использовании QR-кодов соблюдайте несколько простых правил:
Также стоит помнить о еще одной опасности, связанной с QR-кодами: злоумышленники могут воровать коды, в которые зашита какая-то ценная информация — например, номер электронного билета. Поэтому не стоит публиковать в соцсетях документы с QR-кодами или их фотографии.