- Что это за технология?
- Описание носителя карты подорожник и подбор ключей шифрования
- А где сам модуль?
- Анализ памяти карты
- Атака повторного воспроизведения
- Были пилотные проекты?
- Где используется nfc?
- Как покупать пирожок в 2020 году?
- Как прикрутить nfc к телефону?
- Как это работает?
- Мобильное приложение plantain
- Приложите подорожник: про копирование проездных в 2020
- Заключение
Что это за технология?
NFC (Near Field Communication) – технология, обеспечивающая передачу информации на расстояниях до 4 см на частоте 13.56 МГц и максимальной скоростью в 424kbps. Ключевым элементом экосистемы являются бесконтактные карты, обеспечивающие хранение и обмен данными.
Нужны также считывающие устройства (турникеты, «валидаторы»), осуществляющие авторизацию бесконтактных карт. Технология применяется для платежей, в автоматизированных системах учета и контроля доступа. Например, это безопасность на объектах (предприятия, учреждения, спортивные объекты и т.д.) и общественный транспорт.

Оплата NFC-телефоном через банковский терминал
Описание носителя карты подорожник и подбор ключей шифрования
Как и московский товарищ, Подорожник базируется на смарт-картах типа
. Такие карты используются во многих городах мира как для контроля оплаты проезда, так и в других целях, более подробно с применимостью данных карт можно ознакомиться
В качестве стандарта носителя Подорожника выбран MIFARE Plus 4K, работающий в режиме совместимости с MIFARE Classic.
Данный стандарт является усовершенствованной версией MIFARE Classic: алгоритм шифрования был изменён на AES, что позволило закрыть известные на момент выхода уязвимости. Первые MIFARE Plus появились в 2009 году и до конца 2021 года в публичном доступе не было информации о каких-либо уязвимостях в данных носителях.
В октябре 2021 года вышла в свет работа «Ciphertext-only Cryptanalysis on Hardened Mifare Classic Cards», описывающая атаку на карты MIFARE, работающие в режиме совместимости с Mifare Classic. Именно работа Подорожника в режиме совместимости позволила получить дальнейший доступ к карте.
Память MIFARE Plus 4K разбита на 40 секторов: первые 32 сектора содержат 64 байта информации, последние 8 — 256 байт, что в сумме и даёт 4096 байт, которые указаны в названии.
Для доступа к каждому сектору используется два ключа, KeyA и KeyB — они никак не зависят друг от друга и применяются для чтения/записи соответственно.
В апреле 2021 года на Github появился репозиторий aczid/crypto1_bs, содержащий реализацию атаки описанную в научной статье. Я не буду подробно останавливаться на процессе компиляции и запуска скрипта, лишь скажу, что для атаки достаточно использовать любой libnfc-ридер, например, известный в узких кругах ACR122U.
Таким образом были получены ключи A и B от всех 40 секторов карты Подорожник.
А где сам модуль?
NFC-модуль встраивается в телефон. Он не требует замены SIM-карты. Установить можно почти во все современные модели телефонов и ряд моделей прошлых 5 лет выпуска. Это решение будет использоваться до тех пор, пока на рынке не появятся давно ожидаемые телефоны со встроенными ещё на заводе NFC-модулями.


NFC-модуль
Конструктивно модуль выполнен в эластичном корпусе толщиной в несколько миллиметров и размером 2 на 3 сантиметра. На периметре модуля расположена антенна. От корпуса идет гибкий шлейф с контактной площадкой в форме SIM-карты. Толщина корпуса и контактных элементов позволяют легко поместить модуль внутрь телефона непосредственно под крышку корпуса.
SIM-карта совмещается с контактной площадкой модуля, имеющей многоразовую клеевую основу, и помещается на контактные площадки SIM в телефоне. Проще говоря, модуль кладётся на аккумулятор, а его контактная площадка вставляется в холдер вместе с симкой.
В модуле есть микропроцессор, который обеспечивает надежное хранение сервисных приложений, криптографическую защиту и поддерживает три основных канала связи 1) NFC для бесконтактных транзакций2) Информационный поток с TSM (Trusted Service Manager) через сеть мобильного оператора 3) Обмен данными с пользователем через пользовательский интерфейс – мобильное приложение телефона.
Сервисные приложения – программные модули (платежные, транспортные, карт лояльности и другие) хранятся в элементе безопасности, защищенные ключами от несанкционированного доступа.
Анализ памяти карты
После получения ключей доступа к секторам, стало возможно чтение и запись любых данных на карту. После снятия первых дампов сразу бросилось в глаза, что большинство секторов (1-3, 6, 7, 13-39) забиты нулями и никак не используются: для чего в таком случае используется карта на 4 Кб (а не на 2, например) для меня осталось загадкой.
Более того, после нескольких поездок было обнаружено, что данные меняются только в секторах 4, 5 и 9. Так же сразу стало очевидно, что сектор 9 содержит в себе только данные о числе поездок за текущий месяц: значения в некоторых блоках памяти только инкрементируются и соответствуют этому показателю.
Самое же интересное происходит в секторах 4 и 5 — привожу их значения до и после одной из поездок:
Sector: 4 Sector: 4
F02300000FDCFFFFF023000000FF00FF E01500001FEAFFFFE015000000FF00FF
F02300000FDCFFFFF023000000FF00FF E01500001FEAFFFFE015000000FF00FF
FC00D11439014D04204E0001371E8066 FC00D11439014D04204E0001371E8066
E56AC127DD4548778B0019FC84A3784B E56AC127DD4548778B0019FC84A3784B Sector: 5 Sector: 5
94293901C532100E0000000000009E39 102B3901851E100E000000000000AF9B
030094293900B96D0690000000000000 0400102B3900386D9A9A000000000000
030094293900B96D0690000000000000 0400102B3900386D9A9A000000000000
77DABC9825E17F0788009764FEC3154A 77DABC9825E17F0788009764FEC3154AЛегко заметить, что первый и второй блоки в секторе 4 всегда совпадают, точно так же ведут себя блоки 2 и 3 в пятом секторе. Экспериментируя с различными балансами, валидаторами в метро и наземном транспорте и интервалами между поездками удалось выяснить следующее:
- Первые 2 байта первого (или второго) блока четвёртого сектора хранят в себе информацию о балансе электронного кошелька карты в виде целочисленного числа, последние 2 разряда которого содержат информацию о копейках.
- Первые 4 байта первого блока пятого сектора хранят количество минут, прошедших с 1 января 2021 года. Таким образом, информация о последней поездке хранится на карте с точностью до минуты.
- Следом за минутами, два байта выделено для идентификатора валидатора: эти идентификаторы отличаются даже в пределах одной станции метро и получить одинаковое значение можно лишь пройдя через тот же турникет.
- Первый байт второго (или третьего) блока пятого сектора хранит в себе информацию о кол-ве поездок в текущем месяце, аналогично той, что записана в девятом секторе.
Кроме этого, в 5-м секторе находится
: результат хеш-функции от каких-то хранящихся на данных карте. Возможное её расположение — последние 2 байта первого блока и, возможно, середина второго (третьего) блока. Имитовставка используется в качестве дополнительной защиты и не позволяет менять баланс (и любые другие критичные для оплаты данные) на произвольные значение, тем самым сильно уменьшая возможности для атаки. Тем не менее, имитовставка не является преградой, если речь идёт об атаке повторного воспроизведения.
Атака повторного воспроизведения
Атака повторного воспроизведения (replay)
— атака на систему аутентификации путём записи и последующего воспроизведения ранее посланных корректных сообщений или их частей.
Данный тип атаки можно применить как раз в этом случае: так как возможность генерировать имитовставку под нужные данные отсутствует (по причине неизвестного алгоритма её формирования), остаётся лишь вариант полного сохранения состояния карты после пополнения баланса и возврат к нему при необходимости.
Тестирование атаки производилось по следующим схемам:
- Пополнение баланса, сохранение дампа, трата доступных средств, восстановление дампа и попытка пополнить баланс через автомат, результат — мгновенная блокировка карты.
- Пополнение баланса, сохранение дампа, трата доступных средств, восстановление дампа и последующий проход в метро, результат — успешный проход в метро, блокировка карты спустя 2 часа после прохода.
- Пополнение баланса, сохранение дампа, трата доступных средств, восстановление дампа и последующие поездки только в наземном транспорте, результат — никаких блокировок, удалось повторить несколько раз.
- Пополнение баланса, сохранение дампа, трата доступных средств, восстановление дампа, поездка в наземном транспорте, поездка в метро, результат — успешный проход в метро, блокировка карты спустя 2 часа после прохода.
После блокировки карты в метро, её все ещё можно использовать в наземных видах транспорта довольно продолжительное время: внесённый в стоп-лист Подорожник работал ещё минимум 2 недели, после чего тестирование было прекращено.
Таким образом, данная атака позволяет бесплатно и без каких-либо ограничений пользоваться любыми наземными видами транспорта: карта Подорожник принимается к оплате в автобусах, троллейбусах, трамваях и маршрутных такси.
С метрополитеном ситуация не такая: турникеты синхронизируются очень оперативно и любые попытки обойти защиту заканчиваются блокировкой карты в кратчайшие сроки. Пассажиропоток петербургского метрополитена составляет около 5 млн человек в день, поэтому меня приятно удивил тот факт, что несмотря на большую нагрузку, система защиты в метро работает без нареканий.
Были пилотные проекты?
Да, в мире было инициировано большое количество пилотов с платежными и транспортными сервисами. В РФ с одной из таких инициатив выступил «Билайн», реализовав в июне-июле текущего года успешный проект NFC по проезду в петербургском метрополитене. Абонентам «Билайн» был предложен мобильный телефон со специальным приложением, укомплектованный NFC-модулем.
Человек с таким устройством может купить любой транспортный билет из приложения. Оплата проездных билетов делается прямо с мобильного счёта абонента. Чтобы воспользоваться билетом, достаточно приложить мобильный телефон к турникету в метро как обычную карту.
Где используется nfc?

Оплата проезда NFC-телефоном
Как покупать пирожок в 2020 году?
После тестов стало понятно, что технология просто отличная. Понятно, что начнём, скорее всего, именно с проезда, но я уже вижу как смогу заходить в фаст-фуд, выбирать еду прямо на телефоне, прикладывать его к терминалу и получать свой поднос, как люди смогут использовать телефон вместо ключей и даже вместо кошелька.
UPD. Вопрос про безопасность повторился уже несколько раз. Информация о выпущенном билете хранится в системе метро и связана с уникальным номером модуля (аналогичный SIM).
UPD 2. Ещё раз про работу модуля на пальцах: сначала у вас есть просто телефон. Потом вы апгрейдите его с помощью модуля, который вставляется под корпус и коннектится с SIM-картой. Затем покупаете, например, 20 поездок с помощью приложения.
Для вас генерится билет в системе метро и привязывается к идентификатору вашего модуля, параметры этого билета передаются в приложение и записываются в модуль. Та часть модуля, которая эмулирует карту метро, теперь выступает в роли этой самой карты, вставленной под корпус.
Если телефон сядет, она продолжит работать. Если модуль вынуть из телефона, можно проходить просто по нему (но нельзя будет купить новый билет). Вся прелесть метода именно в возможности «прошивать» модуль новыми картами, покупая их через приложение и списывая средства за такие покупки с мобильного счёта.
Как прикрутить nfc к телефону?
Мобильный телефон позволяет объединить в одном устройстве сервисы на основе NFC и возможность интерактивного взаимодействия. Тут и передача информации между мобильными телефонами, и карты лояльности, и информационные и рекламные сервисы на основе считывания информации с радиочастотных меток (RFID).
Можно использовать телефон, где NFC-модуль встроен на заводе, а можно применять дополнительные устройства, такие как NFC-стикеры и модули. Стикеры можно прикрепить к корпусу телефона. Стикеры бывают пассивные и активные. Пассивные не могут осуществлять обмен данными с мобильным телефоном и, следовательно, не дают возможности записи информации в NFC-устройство по каналам связи мобильного оператора (через SMS или через мобильный Интернет).

Стикер раз
Стикер два
NFC-модули устанавливаются внутрь мобильного телефона и делают его похожим на то, что могли бы собрать «на заводе».
Как это работает?

Пользователь через меню мобильного телефона выбирает каким приложением ему воспользоваться, оплачивая ту и или иную услугу. Например, чтобы проехать на метро, через меню выбираем необходимое нам число поездок и нажимаем «оплатить». Сразу после этого мобильный телефон, а, точнее, модуль отправляет запрос в TSM на покупку, формирует билет, производит списание денежных средств и отправляет электронный билет обратно в модуль для обновления информации в транспортном приложении.
Транспортное приложение эмулирует Mifare, стандарт используемый в транспортных бесконтактных билетах. Турникет «видит» обычную карту метро аналогичную купленной в кассе, то есть его совершенно никак не нужно переделывать.
TSM – аппаратно-программный комплекс, реализующий функции управления сервисными приложениями, пользователями услуг, управлением программным обеспечением модуля (и элемента безопасности), ключами шифрования и т.д. Обмен данными модуля и TSM реализуется через мобильный телефон и традиционные каналы связи SMS или IP. С точки зрения телефона работа модуля — это сервисная активность SIM-карты.
Мобильное приложение plantain
Для ускорения процесса тестирования, я написал простое приложение, способное считывать информацию с Подорожника, а так же сохранять и восстанавливать его состояние.
Для работы потребуется телефон с ОС Android 4.2 с NFC-модулем производства NXP. Работа приложения протестирована на Yotaphone 2 и планшете Google Nexus 7.
Я занимаюсь веб-разработкой и до этого не имел дела с разработкой под Android, поэтому код может быть написан не по гайдлайнам и с использованием bad practices.
Ссылка на Github: (раньше ссылка была тут, но вынужден убрать)
Приложите подорожник: про копирование проездных в 2020
Если меня что-то и вгоняет в тоску, уныние, отчаяние и депрессию в Питерском метро, то это что-то — не Питер над ним, как можно было бы подумать, а местная транспортная карта
Скажите, вы тоже видите, насколько она отвратительна?
Карточка большая, неудобная и я вечно забываю ее на столике в прихожей. А ключи не забываю
Значит, я хочу сделать так, чтобы Подорожник мог висеть на связке ключей, был размером с нормальный брелок и не забывался дома. Я совершенно не хочу пытаться обмануть транспортную систему чтобы ездить бесплатно и я не хочу делать ничего противозаконного
Понятно, что я не один тут такой умный. Быстренько пробежавшись по сети на тему копирования подорожников, я нашел кучу статей прошлых лет, где умельцы брали перезаписываемую NFC метку, с помощью нехитрых телодвижений снимали с оригинальной карты дамп и записывали в копию. А раз уж ридер и NFC брелоки у меня дома лежат еще со студенческих времен, почему бы не попробовать?
Дисклеймер. Копирование карты в целях получения выгоды незаконно. Я планировал пользоваться брелоком вместо оригинальной карты и пополнять ее настоящими деньгами. Если вы хотите чего-то другого — перестаньте этого хотеть
Как это вообще работает?
Любая NFC метка — это чип, который может отвечать на внешние запросы считывателя, и антенна в виде катушки, у которой два назначения. Во-первых, она, как и положено антенне, передает какой-то полезный сигнал, а во-вторых, как и положено катушке, обеспечивает чип энергией чтобы он вообще работал
Сам чип хранит в себе какое-то количество блоков информации, которые могут быть защищены двумя ключами. Ключ A нужен, чтобы прочитать блок, ключ B — чтобы его записать. Поэтому, если мы хотим скопировать информацию с Подорожника, нам нужно как-то узнать A ключ для каждого блока, прочитать оттуда информацию и переписать на болванку. Несложно, правда?
Спойлер. Я не буду рассказывать о том, как именно хакнуть карточку и прочитать ее содержимое. Я даже не буду говорить, что в интернетах целая прорва статей о том, как это сделать, и ссылки отлично гуглятся. Потому что это, во-первых, незаконно, а, во-вторых, не работает
Достаем из шкафа ридер, берем из связки перезаписываемую болванку и через час времени получаем полную копию одного подорожника, которая даже читается телефоном
Звучит будто у нас есть брелок, которым можно платить. Бежим на ближайшую станцию метро и кладем его в терминал для пополнения
фейл_звук_фейла.JPG 🙁 Брелок прочитался как проездной, но валидатор написал, что карточка в черном списке и потребовал убрать это подальше
Дальнейшие расследования по делу о том, почему все так плохо, показали следующее. Когда-то давно, у системы, которая процессит подорожники был черный список ID карт. В него попадали сначала заблокированные вручную операторами карточки, а потом и перезаписываемые болванки, потому что формально — это подделка со всеми вытекающими. В какой-то момент таких подделок стало слишком много и вместо черного списка у питерского транспортного хаба появился белый
Короче говоря, система точно знает айдишники всех выпущенных карт еще до продажи пассажирам и на что попало не ведется
В теории, существуют NFC чипы с перезаписываемым айдишником. Технически, это несложно: вместо прошитого лазером нулевого сектора, в них еще один блок EEPROM памяти, который пишется как и все остальные. Но доставка такого добра с алиэкспресса обещала затянуться аж на три недели, а мне нужно сейчас
Решения от разработчиков не работают. Но, на самом деле, мне не нужно копировать проездной и я не собираюсь наживаться на скатывании-раскатывании дампа. Мне просто нужна моя честно купленная карта в другом, более приятном корпусе. Посмотрим, можем ли мы пересадить оригинальные потроха оригинального чипа во что-то, что можно подвесить на ключи
Посмотрим, что может сделать с карточкой щепотка бытовой магии
Через полтора часа я получил насквозь пропахшую ацетоном кухню и совершенно раскисшую карточку. Теперь осталось только уменьшить диаметр катушки, правильно пересчитав количество витков и найти какой-нибудь подходящий корпус
Подходящий корпус нашелся через 15 минут попыток освежить в памяти курс по начерталке в Autodesk Fusion 360 и через пару часов лежал на столике принтера
3D печать — это магия какая-то, определенно
Теперь катушка. Берем оригинальный чип с оригинальной антенной и перематываем витки. Я решил особо не заморачиваться и перемотал как попало
Фиксируем чип с антенной внутри брелока и бежим проверять, как оно читается, на ближайшую станцию нашего подземного тестового контура
фейл_звук_фейла_2.JPG. Никак не читается. Видимо, мотать катушку индуктивности на 5.3 мкГн на глазок было ошибкой
Последняя попытка. Посмотрим, сможем ли мы совместить антенну от нашей болванки, которая читается но невалидна, с оригинальным чипом, который валиден, но не читается
Вскрываем брелок, перепаиваем катушку на наш Подорожник и фиксируем это добро в нашем брелочке
Тому, как это теперь выглядит, рад не только я, но и валидатор на ближайшей станции метро. И еще на нескольких. И терминал для пополнения этих проездных тоже доволен. Короче говоря, оно работает
Подведем итоги
Скопировать проездной питерского метро в конце 2020 можно, но бесполезно. Транспортная система совершенно точно знает что вашу болванку вам никто не продавал и никуда вас по ней не повезет. А еще, это незаконно, да
А вот, чтобы просто подвесить ваш оригинальный Подорожник на ключи, понадобится:
* Оригинальный Подорожник, 1 шт.
* Ацетон технический, 200 мл
* Брелок-донор с рабочей катушкой (или катушка с алиэкспресса, тысячи их)
* Паяльная станция с контролем температуры, 1 шт.
* 3D принтер, 1 шт.
* Работающее метро в вашем городе, как минимум 1 шт
Или просто готовый брелок, который иногда можно найти в продаже
Заключение
В заключении хочу сказать, что описанные в данной статье уязвимости являются следствием ошибок, допущенных ещё при создании первых версий Подорожника. Используемые носители MIFARE Plus могут работать в режиме с использованием криптографически безопасного AES, и с какой целью на картах включена совместимость со старым, уязвимым стандартом, сказать сложно.
Для исправления уязвимости необходимо значительно участить сбор и анализ данных на валидаторах наземного транспорта (по тому же принципу, как это сделано в метрополитене), усовершенствовать методы хранения данных на памяти карты, или идти в ногу со временем и обновлять аппаратные и программные составляющие компоненты под современные реалии информационной безопасности.





