Необычный анализ карт Mifare

Известно, что карты Mifare выпускают различные производители. И, вроде бы, эти карты работают одинаково, несмотря на то, что различные производители по-разному шли к своей цели. Неужели у карт нет никаких различий?

Для сравнения было взято 12 разных типов карт (на самом деле больше, но не суть). Среди этих карт были не только специально купленные карты, но и старые и новые билеты метро, социальная карта, карты «Тройка», карта «Стрелка», билеты Ultralight — вобщем всё, что под руку попало 🙂 И анализ дал очень интересные результаты.

Карта SAM AV2

Для анализа использовался ридер RD-03AB с программой scprobe (исходник для Windows можно скачать здесь). Программа анализировала ответ карты на команду с однобайтным параметром на уровне SL0: SL0 — Security Level 0, уровень сразу после выполнения подключения и фазы антиколлизии. Большинство команд имеет двухбайтовую структуру, которая даже своё название имеет — short command. В качестве параметра был указан 0, т.к. нулевое значение достаточно универсально: например, 30 00 — чтение страницы 0 или блока 0, 50 00 — команда выключения карты, 60 00 — авторизация блока 0, и т.п.. Впрочем, при желании можно указать любой параметр (например, при поиске команды записи): scprobe -COMM 10 вызывает перебор команд устанавливая в качестве параметра число 0x10.

Для начала был взят самый распространённый класс карт Mifare Classic. Пара карт была подарена на семинаре NXP, часть карт была попала через ebay из Китая, часть наскреблась просто так, но обо всм по-порядку.

Самой первой анализу подверглась карта MF1S50. Это типичный CL1K (Classic 1Kb), который согласен работать только после выполнения любой из двух команд авторизации: авторизации с ключом A, PICC_AUTHENT1A = 0x60, или авторизации с ключом B, PICC_AUTHENT1B = 0x61.

Анализ карты CL1K - MF1S50

Очевидна «классика жанра»: никаких дополнительных реакций до начала авторизации не будет, NXP точно выдерживает протокол обмена и «дырки», даже если они есть, не «светятся» 🙂

Анализ карты CL4K - MF1S70

Аналогично себя ведёт карта MF1S70: типичный Classic с максимально возможным объёмом CL4K (Classic 4Kb). Всё тоже самое что и в CL1K, только ATQA и SAK отличаются. Ну, что ж, видно, что NXP хорошо поработал над картами Mifare Classic, и «неожиданностей» ждать не приходится: в своё время общественность неплохо потрепала нервы гиганту полупроводниковой индустрии, когда нашли уязвимости в картах Mifare, и NXP учёл ошибки прошлых лет.

Далее проверяем китайские карты CL1K: Fudan, FangTong и др. безымянных производителей — их сотни. Производители заявляют, что они продают карты MF1S50, но после анализа видно, что это не совсем так. Чтобы не загромождать текст одинаковыми скриншотами, приведу пример лишь одного из них: скриншоты китайских карт — близнецы, отличаются лишь UID-ами.

Анализ карты CL1K - China

Сразу становится очевидно, что карты китайских производителей не очень-то и похожи на карты NXP, несмотря на то, что они очень схожи между собой. Даже допускаю, что чипы делаются по одному шаблону, иначе чем объяснить такое сходство? В отличие от NXP, в китайских CL1K нашлось аж 16 команд авторизации.
Впрочем, команд на самом деле 2, как и в картах NXP: PICC_AUTHENT1A = 0x60 или PICC_AUTHENT1B = 0x61, а остальные команды получились в результате неполной дешифрации, т.к. биты b3…b1 игнорируются. Т.е. команда PICC_AUTHENT1A будет выполняться при подаче чётных кодов (0x60, 0x62, 0x64, …, 0x6E), а команда PICC_AUTHENT1B выполнится при подаче нечётных кодов (0x61, 0x63, 0x65, …, 0x6F). Этот баг можно было бы считать заслугой китайских инженеров, если бы не одно «но»: старая социалка 2007г ведёт себя точно также, как современные китайские карты.

Анализ карты CL1K - старая социалка

Однако, и это ещё не всё. В своё время ф.Infineon выпускала по лицензии NXP карты Mifare Classic: в них SAK = 0x88, что и было отличительной особенностью этих карт.

Анализ карты CL1K - Infineon

Чипы для карт Infineon выпускались по шаблону NXP, Infineon-у не надо было изобретать велосипед для того, чтобы делать свои поделки. Однако, карта Infineon ведёт себя точно также, как старая социалка на NXP, и также, как современные китайские Mifare Classic. Мысль о продаже шаблона друзьям-китайцам после скандалов с уязвимостью напрашивается сама собой: главное ни копеечки не потерять 🙂

Анализ карт московского метро Mifare Ultralight не выявил ничего интересного: «откликнулась» только команда PICC_READ16 = 0x30.

Анализ карты UL - Micron

Причём одинаково себя вели как новые карты, в которых на просвет видна надпись «Micron», так и выпущенные лет пять назад карты, в которых на просвет видна надпись «Sitronics». Анализ китайской карты Ultralight выявил её существенное отличие от ультралайта московского метро.

Анализ карты UL - China

Помимо команды чтения, китайский ультралайт дал подтверждение продолжения операции командам 0x70 и 0x71 (4 бита с кодом 0x0A — это ACK). Интересно, какого продолжения хочет карта, что слать дальше?
Последней картой из серии Mifare Ultralight стала карта с перезаписываемым UID (спасибо ebay). Отличие этой карты от обычной состоит в том, что при подаче специальной последовательности команд, карта входит в режим, когда перезаписывать можно любой адрес, в том числе и адрес хранения UID.

Анализ карты UL-RW - Mifare Zero UL, China

Найти «лишнюю» стартовую команду, свойственную RW-карте, можно с помощью scprobe, набрав в командной строке scprobe -WUPA. Поиск даст три команды: PICC_REQIDL = 0x26, PICC_REQRW = 0x40, PICC_REQALL = 0x52. Команды PICC_REQIDL и PICC_REQALL — стандартные, а вот команда PICC_REQRW есть только у перезаписываемых карт, которые ещё называют Mifare Zero. Однако, наводит на размышления не лишняя команда старта, а сходство команд уровня SL0: команды китайского нормального и перезаписываемого ультралайта в точности совпадают. Не связан ли этот факт с производственными особенностями, когда все китайские ультралайты рождаются перезаписываемыми, а потом на заводе перезаписываемость как-то убирают?

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

Анализ карты PL2S1 - 'Тройка', UID - 7 байт

Вот первый вариант «тройки». Это типичный Mifare Plus S, PL2S1 (Mifare Plus, 2Kb, Security Level 1), у него семизначный UID и доступен уровень шифрования не выше SL1, т.е. это современный заменитель карт Mifare Classic 1K — MF1SPLUS60.

Анализ карты PL4S1 - 'Тройка', UID - 4 байта

А вот второй вариант тройки интересен тем, что он «прикидывается» картой CL4K (Mifare Classic, 4Kb): UID длиной 4 байта, ATQA и SAK, как у карты CL4K. Но это на самом деле это PL4S1 (Mifare Plus, 4Kb, Security Level 1). Карту «выдаёт» поле ATS, которое указывает, что на самом деле тип карты MF1SPLUS80 — это современный заменитель карт Mifare Classic 4K.

Карты ‘Тройка’ — это младшие члены семейства Mifare Plus. Старшие карты семейства Mifare Plus X работают с расширенным набором команд на уровне SL3 и поддерживают AES-авторизацию.

Анализ карты PL2S3 - Mifare Plus X, UID - 4 байта

Реальная же карта PL2S3 (Mifare Plus, 2Kb, Security Level 3) «отказывается» отвечать на простые команды: видно, что карта PL2S3 отвечает только на команду PICC_RATS = 0xE0.

Карта ‘Стрелка’ — это не карта в прямом смысле. Это сертифицированный криптографический модуль с большими возможностями на базе микроконтроллера, подключаемый по интерфейсу ISO-7816, правильное название SAM AV2. Однако, если надо, то модуль может побыть и бесконтактной картой: SAM AV2 прекрасно эмулирует PL2S1 🙂

Анализ карты 'Стрелка' - SAM AV2, UID - 4 байта

Анализ показывает, что помимо ожидаемой поддержки команд авторизации PICC_AUTHENT1A, PICC_AUTHENT1B и команды PICC_RATS на уровне SL0, карта также поддерживает команду чтения PICC_READ16 = 0x30 (читается UID и доп.данные), как и карты семейства Mifare Ultralight.