Где уязвимы более 20 млн транспортных карт в России: разбираем и развиваем MIFARE Classic

в 8:08, , рубрики: mifare, билеты, Блог компании Программный Продукт, защита, информационная безопасность, криптография, платежные системы, транспорт, тройка, Урбанизм

Стандарт бесконтактных карт MIFARE Classic создан более 20 лет назад и, несмотря на ряд найденных с тех пор уязвимостей, широко используется до сих пор (в частности в Москве и Санкт-Петербурге). В этой статье мы вспомним, какие уязвимости были найдены, и расскажем, как их можно устранить.

Где уязвимы более 20 млн транспортных карт в России: разбираем и развиваем MIFARE Classic - 1
Источник: Instagram@pro.ticketing

Традиционно для подобных статей напоминаем, что в России подделка и сбыт билетов преследуются по закону (ст. 327 и 165 УК РФ), и призываем читателей оставаться на светлой стороне силы.

Структура MIFARE Classic

Стандарт MIFARE Classiс компании NXP — это целое семейство карт. В него входят MIFARE Classic 1K, 4K, EV1 1K, EV1 4K, MIFARE ID, MIFARE Mini. Также этот стандарт может эмулироваться другими, более новыми картами NXP (MIFARE Plus, JCOP и другими).

Работа карты с устройствами чтения базируется на стандарте ISO 14443A, частота 13,56 МГц.
Карты MIFARE Classiс 1К предоставляют область памяти, организованную в сектора по 64 байта. Каждый сектор разбит на 4 блока размером 16 байт:

Где уязвимы более 20 млн транспортных карт в России: разбираем и развиваем MIFARE Classic - 2

Для карт стандарта 4К первые 2048 байт организованы в 32 сектора по 64 байта, а остальные — в 8 секторов по 256 байт (или 16 блоков). Последний блок каждого сектора называется трейлером сектора, в нем записаны ключи и параметры доступа к сектору. Нулевой блок нулевого сектора — это специальный блок, заблокированный на запись, он содержит идентификатор и информацию производителя карты. Для того, чтобы у одной карты было несколько различных применений — например, у социальной карты с информацией о льготах, билетами на метро и электричку — в остальных блоках нулевого сектора записано, как используется каждый сектор — MIFARE Application Directory (MAD).

Перед обращением к сектору на чтение или запись необходимо выполнить авторизацию с помощью ключа размером 6 байт. Авторизация происходит по трехэтапному протоколу, близкому к тому, что описан в главе 5.2.2. стандарта ISO/IEC 9798-2:1999. При этом используется проприетарный алгоритм потокового шифрования CRYPTO1:

Где уязвимы более 20 млн транспортных карт в России: разбираем и развиваем MIFARE Classic - 3

  1. Устройство чтения посылает запрос на авторизацию, указывая номер сектора, к которому происходит авторизация.
  2. Карта читает из внутренней памяти ключ доступа, генерирует случайную последовательность и возвращает ее устройству чтения.
  3. Устройство чтения вычисляет ответ, используя ключ доступа к сектору и алгоритм шифрования CRYPTO1, затем отправляет его с новой сгенерированной случайной последовательностью.
  4. Карта проверяет ответ, вычисленный устройством чтения. Затем вычисляет ответ на вызов устройства чтения и возвращает его.
  5. Устройство чтения проверяет ответ от карты.

Дальнейшая передача содержимого секторов осуществляется в зашифрованном виде. Если нужно авторизоваться к другому сектору (так называемые вторичные авторизации), то выполняется повторная авторизация. Главное отличие в том, что весь обмен шифруется сначала старым, а потом новым ключом.

Известные уязвимости MIFARE Classic

Криптография карты хорошо исследована. Найдена уязвимость реализации генератора псевдослучайных чисел (ГПСЧ) карты и уязвимости алгоритма CRYPTO1. На практике эти уязвимости используются в следующих атаках:

  1. Dark side — атака использует уязвимость ГПСЧ. Работает на картах MIFARE Classic поколения до EV1 (в EV1 уязвимость ГПСЧ уже устранена). Для атаки нужна только карта, знать ключи не нужно.
  2. Nested – атака использует уязвимость CRYPTO1. Атака производится на вторичные авторизации, поэтому для атаки нужно знать один валидный ключ карты. На практике для нулевого сектора часто используют стандартные ключи для работы MAD – с него и начинают. Работает для любых карт на CRYPTO1 (MIFARE Classic и его эмуляции). Атака продемонстрирована в статье «Уязвимость карты Подорожник: бесплатные поездки в наземном транспорте Санкт-Петербурга».
  3. Атака прослушиванием обмена – атака использует уязвимость CRYPTO1. Для атаки нужно подслушать первичную авторизацию между устройством чтения и картой. Для этого необходимо специальное оборудование. Работает для любых карт на CRYPTO1 (MIFARE Classic и его эмуляции). Атака продемонстрирована в статье «Взлом транспортных карт «Ситикард» (Нижний Новгород)».

Все это на практике позволяет получить ключи доступа ко всем секторам карты, имея на руках только карту, проинициализированную ключами доступа. Далее может проводиться replay атака на содержимое карты или изготавливаться клон карты на специальных болванках с перезаписываемым идентификатором карты.

Кроме того, есть уязвимость инфраструктуры ключей доступа. Так как криптография на CRYPTO1 реализована на стороне устройства чтения карт (CRYPTO1 реализован только аппаратно), то из этого следует, что ключи доступа:

  • либо передаются в устройство чтения перед работой с картой,
  • либо хранятся на самом устройстве чтения в защищенном аппаратном хранилище (например, MIFARE SAM),
  • либо хранятся в постоянной памяти устройства чтения.

И если в специальном оборудовании типа информационных терминалов или турникетов можно использовать защищенное аппаратное хранилище ключей, то в случае Android приложения остается только вариант передачи ключей и хранения в памяти устройства. Это делает возможным перехват этих ключей путем взлома приложения или анализа трафика приложения. Что было продемонстрировано в статье «Исследование защищенности карты Тройка».

Методы борьбы с уязвимостями MIFARE Classic

Диверсификация ключей доступа

Диверсификация – это процесс получения ключей доступа по мастер-ключу с использованием некоторых уникальных для карты входных данные. Процесс получения ключей может быть реализован в прикладном ПО, работающем с устройствами чтения, либо средствами SAM-модуля.

Для примера это может работать так:

  1. В качестве входных данных для диверсификации используется идентификатор карты и номер сектора, ключ к которому мы хотим получить;
  2. Эти данные шифруются (в SAM модуле или прикладном ПО) мастер-ключом, результат обрезается до 6 байт и используется в качестве ключа доступа к соответствующему сектору.

Где уязвимы более 20 млн транспортных карт в России: разбираем и развиваем MIFARE Classic - 4

В результате каждая карта получает свои уникальные ключи доступа к секторам. Даже если ключи для каких-то конкретных карт будут скомпрометированы, это не приведет к массовому использованию этих ключей. Но надо понимать, что диверсификация является полумерой и не защищает от взлома единичных карт и возможности модификации Android-приложения с целью перехвата и использования диверсифицированных ключей.

Переход на MIFARE Plus и уровень безопасности SL3

Для решения проблем с уязвимостями CRYPTO1 было разработано семейство карт MIFARE Plus. Карты по структуре аналогичны MIFARE Classic, обновлена только криптография карт. Они могут работать в двух режимах:

  1. Режим эмуляции MIFARE Classic (этот режим работы называется Security level 1 или SL1), что позволяет использовать их на имеющейся инфраструктуре устройств чтения карт и не требует модификаций программного обеспечения, работающего с картами;
  2. Режим Security level 3 (SL3), в котором требуется авторизация к секторам и шифрование обмена данными по алгоритму AES с опциональным добавлением имитовставки.

На этих картах устранена уязвимость ГПСЧ и, таким образом, в режиме SL1 эти карты по-прежнему уязвимы к атакам на CRYPTO1, а в режиме SL3 на данный момент известных атак нет.

В отличие от SL1, в SL3 авторизация и шифрование могут быть реализованы программно. Благодаря этому можно защититься от перехвата ключей через Android-клиент. Для этого сервер должен выполнять авторизацию и шифрование. Тогда ключи не покидают сервер, а Android-клиент просто проксирует запросы и ответы от карты. Это потребует обязательного подключения приложения к интернету, что может быть неудобно, поэтому можно настроить карту так, чтобы чтение сектора осуществлялось одним ключом, а запись — другим ключом. Тогда пользователь сможет просматривать информацию о карте, находясь офлайн, а пополнять баланс или покупать билеты на нее сможет только онлайн.

Не стоит забывать, что для AES ключей можно сделать диверсификацию, модифицировав алгоритм на ключи длиной 16 байт.

Существующие транспортные карты на базе карт MIFARE Plus SL1 можно перевести в режим SL3 в два этапа:

  1. Инфраструктура устройств, работающих с картами (турникеты, кассы, автоматы продажи, терминалы), подготавливается к работе с MIFARE Plus. Дорабатывается ПО устройств чтения в части работы с картами.
  2. Уже эмитированные транспортные карты на базе MIFARE Plus переводятся в режим SL3 – это может происходить при обычном использовании карты, например, проходе через турникет или прикладывании карты к информационному терминалу. Процесс перевода карты незаметен для пассажира и занимает порядка 100 мс.

Переход на MIFARE DESFire

Криптография карты MIFARE DESFire аналогична MIFARE Plus – перед работой с приложением осуществляется трехэтапная авторизация по одному из алгоритмов на выбор эмитента карты: DES, 3DES, AES. Дальнейший обмен с картой происходит в зашифрованном виде с опциональными имитовставками.

Карта функционально отличается от MIFARE Classic. Память карты организована в файловую систему. На карте может быть несколько приложений, у каждого приложения может быть несколько файлов.

Где уязвимы более 20 млн транспортных карт в России: разбираем и развиваем MIFARE Classic - 5

Работа с картой начинается с выбора приложения по его идентификатору и авторизации к нему. Далее происходит работа с файлами — создание, удаление, чтение, запись. Файлы могут быть разных типов, например, плоская область памяти, баланс кошелька, циклически перезаписываемый файл.

Основная сложность перехода состоит в том, что нужно модернизировать программное обеспечение, работающее с картами. Необходимо перейти от использования памяти, разделенной на сектора, к приложениям и файлам, и, соответственно, изменить порядок авторизации от секторов к авторизации к приложению и/или файлам. С точки зрения аппаратного обеспечения, карты накладывают то же ограничение на инфраструктуру устройств чтения, что и MIFARE Plus.
Преимущество по сравнению с MIFARE Plus состоит в том, что на основе MIFARE DESFire проще реализовать мультибрендинговые карты — разные комбинации карт на одном носителе: Тройка-Стрелка, Тройка-Подорожник, социальные карты с возможностью записи билетов на транспорт). На MIFARE Plus это достигается за счет административного выделения секторов на карте под разные применения. Здесь же каждая система может работать с приложением, которое ей нужно, и может не знать, что на карте есть какие-то другие приложения. Вторым преимуществом является то, что дополнительные типы файлов позволяют реализовать какие-то специальные сценарии — например, по одному ключу доступа пополнять баланс кошелька, а по другому - тратить средства с баланса или осуществлять возврат суммы в пределах потраченной.

Сегодня производители SIM-карт (STM, Gemalto, G&D, Oberthur) имеют коммерчески доступные SIM-карты и встроенные элементы безопасности с эмуляцией MIFARE DESFire.

Карта Oyster (транспортная карта общественного транспорта Лондона) в 2009 году была переведена на MIFARE DESFire, с 2010 года карты MIFARE Classic не используются. Транспортная карта SUBE (Аргентина) находится в процессе перехода на MIFARE Plus SL3. В общественном транспорте Дублина 3 типа карт: Luas (трамваи), Dublin Bus и DART (пригородный железнодорожный транспорт) – были построены на базе MIFARE Classic и были заменены одной картой Leap card уже на базе MIFARE DESFire. Современные же транспортные решения чаще всего изначально строятся на защищенных носителях.

Переход на другие транспортные карты (CALYPSO, CIPURSE, FeliCa)

С точки зрения безопасности эти карты аналогичны картам MIFARE Plus и DESFire — криптография на основе AES, трёхэтапная авторизация, работа с имитовставками, защищенные аппаратные хранилища — Secure Access Module (SAM), ряд карт могут эмулировать MIFARE Classic. Работают также на базе стандарта ISO/IEC 14443A.

MIFARE — чемпион

Где уязвимы более 20 млн транспортных карт в России: разбираем и развиваем MIFARE Classic - 6
ABI Research Q1 2017

Доля карт MIFARE в транспорте в мире составляла в 2017 году 75% и, по прогнозам, к 2021 году не опустится ниже 70%.

Доля MIFARE в мире снижается в основном за счет роста карт Other, куда, в первую очередь, входят банковские карты (EMV) и виртуализация карт (переход в смартфоны) для замещения функции билетного носителя. Банковские карты защищены лучше, чем транспортные – однако за это приходится платить. Обслуживание банковских карт требует онлайна, устройства чтения стоят дороже из-за требований банковской сертификации, транспортный оператор теряет денежный поток от пополнений своих транспортных карт. Все это создает определенный баланс сил, благодаря которому оба стандарта (MIFARE и EMV) находят свои ниши и занимают их.

Объем транспортных карт на стандартах отличных от NXP (Calypso, CIPURSE) составляет сегодня менее 5%. В основном эти технологии сконцентрированы в странах, где карты исторически развивались — Япония и Франция — и пока не выходят за их пределы. Это понятно — создание локальной экосистемы производства и поддержки карт и не всегда экономически оправдано и должно быть подкреплено рынком сбыта. Не исключено, что Россия присоединится к ряду стран, поддержавших данные стандарты. Для этого в первую очередь необходимо наличие политического решения.

По ссылкам ниже можно получить дополнительную информацию о Mifare Classic:

Заключение

Будем рады ответить на вопросы в комментариях к статье и в инстаграм pro.ticketing. В январе 2019 года в нашей компании открыт ряд вакансий под новый проект в транспортной области в Москве, включая возможность привлечения команд 3-4 человека. Открыт аксельратор стартапов в области новых технологий по оплате и валидации проезда в общественном транспорте.

Автор: PPR

Источник

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


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