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

Специальный корреспондент
Собака

Собака

Пресс-служба
Команда форума
Private Club
Регистрация
13/10/15
Сообщения
55.044
Репутация
62.940
Реакции
277.295
RUB
0
Недавно мне выпала возможность потестировать платежный терминал с возможностью бесконтактной оплаты. Ну а раз оплата бесконтактная, значит сигнал передается по радио, и разумеется, я не смог отказаться от искушения посмотреть с помощью SDR-приемника, какие же данные передаются и принимаются во время совершения платежа.

oflxncgb4c_qvhq6ptvxadvfyf8.png

Фото (с) Verifone

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

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

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

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

wo-hl75zr6ratqupuvl9ohw8wsg.png


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

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

p8c-cpgkrxw7rq-uhs4jt0ms_hi.png


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

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

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

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

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

hlbcyvjnx9wrtvr2d1n5bedlvdi.png


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

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

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

msvqcsmzk4qkowdclpxauf9melg.png


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

vtt4lfrsq2vh9glkdfwcxcxses8.png


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

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

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

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

bivlwp5c5uhb-etgpva3gfc0tfg.png


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

jdrjbhqexfxncf0z3k5743rw8zq.png


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

n_b_l_8-zlnpokvhf98w0cpq5va.png


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

Заключение

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

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



 
Сверху Снизу