Принимаем и анализируем радиосигнал платежного терминала с помощью SDR

в 15:09, , рубрики: RFID, SDR, Анализ и проектирование систем, бесконтактные платежи, Беспроводные технологии, Научно-популярное, Программирование, реверс-инжиниринг

Привет.

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

Принимаем и анализируем радиосигнал платежного терминала с помощью SDR - 1
Фото (с) Verifone

Для тех кому интересно как это работает, немного подробностей под катом.

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

Итак, приступим.

Спектр сигнала

Начнем с самого простого — запустим приемник, включим терминал, произведем оплату и посмотрим, что есть в эфире. Поиск сигнала оказывается элементарным, виден огромный пик на частоте 13.56МГц:

Принимаем и анализируем радиосигнал платежного терминала с помощью SDR - 2

Уровень сигнала неудивителен, ведь его должно быть достаточно для работы индуктивной связи с картой, которая собственного источника питания не имеет. Как подсказывает гугл, 13.56МГц это стандартная частота для RFID-устройств. Симметрия сигнала подсказывает на возможное использование АМ-модуляции.

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

Принимаем и анализируем радиосигнал платежного терминала с помощью SDR - 3

Рассмотрим их подробнее.

1. Режим бездействия

В этом режиме терминал ничего не излучает, на экране только логотип банка или магазина.

2. Запрос платежа и ожидание карты

Кассир инициирует платеж на определенную сумму. В этот момент терминал переходит в режим ожидания оплаты. Оплата картой может быть совершена либо с помощью магнитной полосы, либо путем вставления карты, либо бесконтактным методом, который нас и интересует. Чтобы определить, когда карту поднесли к терминалу, запрос посылается каджые 0.12с. Короткие посылки в виде вертикальных линий на спектре, в увеличенном виде выглядят так:

Принимаем и анализируем радиосигнал платежного терминала с помощью SDR - 4

Хорошо видно, что данные повторяются. Блок данных («на глаз», 24 или 32 бита) скорее всего содержит битовую маску, содержащую форматы карт, поддерживаемых данным ридером. По крайней мере, на другие карты (например на транспортную), ридер не «отзывается».

3. Обмен данными с картой

Когда карта обнаружена, её контроллер в ответ посылает свои данные — вероятно, номер карты и служебную информацию. В самой карте нет источника питания, поэтому ответ от неё очень слабый по мощности. Как можно видеть, на каждый запрос терминала карта посылает свой ответ, «радиообмен» между ними довольно активный:

Принимаем и анализируем радиосигнал платежного терминала с помощью SDR - 5

Увеличенный сигнал, принятый от карты, выглядит примерно так:

Принимаем и анализируем радиосигнал платежного терминала с помощью SDR - 6

4. Проверка карты

Когда данные о карте получены, терминал вероятно проверяет ключи шифрования на карте, процесс занимает порядка 0.6с. RFID-модуль в этот момент отключен. Возможно, терминал запрашивает статус карты онлайн.

5. Ожидание изъятия карты

В тот момент, когда терминал прочитал все данные и проверил карту, на экран выводится сообщение «уберите карту», каждые 5мс терминал проверяет на месте ли карта:

Принимаем и анализируем радиосигнал платежного терминала с помощью SDR - 7

Мы видим одинаковые сообщения, также виден ответ карты. В увеличенном виде можно показать момент, как карта перестала отвечать:

Принимаем и анализируем радиосигнал платежного терминала с помощью SDR - 8

Сам ответ от карты кстати, довольно простой и короткий, «на глаз», не больше 24бит:

Принимаем и анализируем радиосигнал платежного терминала с помощью SDR - 9

На этом радиообмен заканчивается, и со всеми полученными данными, терминал посылает запрос на проведение платежа к банку. От банка приходит ответ, и если платеж прошел успешно, мы получаем наш товар.

Заключение

Как можно видеть, на бинарном уровне все довольно просто. В протоколе RFID используется обычная амплитудная модуляция, никакого rocket science. Но разумеется, основная работа выполняется на логическом уровне, проверка карты и выполнение платежа довольно сложный процесс, в котором также задействовано шифрование.

Напоследок, можно ответить на вопрос, который наверное интересует многих, возможно ли скрытное снятие денег с чужой карты. Судя по анализу радиосигнала, можно сказать что это очень маловероятно. Во-первых, сама карта не имеет встроенного источника питания — чтобы её процессор заработал, напряженность поля должна быть весьма большой. Нормальное расстояние чтения карты составляет 2-3см, чтобы увеличить его хотя бы до 100см, напряженность поля должна быть в третьей степени больше этой разницы. Второй момент, это получение ответа от карты — её сигнал очень слабый, и принять его на большом расстоянии тоже непросто (плюс не стоит забывать, что длина волны с частотой 13МГц составляет порядка 20 метров, и короткие антенны при таких длинах волн неэффективны). Наконец, не стоит забывать об организационных моментах — каждый платежный терминал привязывается к банковскому счету юридического лица, и если будут поступать жалобы на списание средств, этот счет могут просто заблокировать. Сам терминал кстати, имеет уникальный ID, и если его будут постоянно привязывать к разным счетам, это тоже будет подозрительно. В общем, хотя теоретически удаленное чтение RFID может быть возможным, судя по этой статье, реальных случаев такого снятия средств зарегистрировано не было. И наконец, лимит бесконтактных платежей весьма небольшой, так что «прибыль» вероятно не будет соответствовать риску и стоимости оборудования.

Автор: DmitrySpb79

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js