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

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


    Источник: 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 байт:



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

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



    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 байт и используется в качестве ключа доступа к соответствующему сектору.



    В результате каждая карта получает свои уникальные ключи доступа к секторам. Даже если ключи для каких-то конкретных карт будут скомпрометированы, это не приведет к массовому использованию этих ключей. Но надо понимать, что диверсификация является полумерой и не защищает от взлома единичных карт и возможности модификации 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. Память карты организована в файловую систему. На карте может быть несколько приложений, у каждого приложения может быть несколько файлов.



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

    Основная сложность перехода состоит в том, что нужно модернизировать программное обеспечение, работающее с картами. Необходимо перейти от использования памяти, разделенной на сектора, к приложениям и файлам, и, соответственно, изменить порядок авторизации от секторов к авторизации к приложению и/или файлам. С точки зрения аппаратного обеспечения, карты накладывают то же ограничение на инфраструктуру устройств чтения, что и 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 — чемпион



    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 человека. Открыт акселератор стартапов в области новых технологий по оплате и валидации проезда в общественном транспорте.

    • +20
    • 7,8k
    • 8
    Программный Продукт
    16,00
    Создаем решения для государства и бизнеса
    Поделиться публикацией

    Комментарии 8

      +3
      С подключением! Давным давно уже на слуху взломы Тройки и одноразовых билетов (даже на 2ch тред был уже как лет 10 наверно). Подделывать билеты будут единицы, учитывая, что подделка дубликацией в метро не прокатит из-за онлайн-базы. А в автобусах Москвы, например, уже турникеты выключили вообще, оставили валидаторы. Любому обывателю проще зайцем проехать. А ради единиц «энтузиастов» менять все турникеты в метро и транспорте? Да, было бы правильно, но крайне невыгодно, проще пересажать авторов инструкций и гайдов.
        0
        Спасибо за оперативный комментарий.
        .
        По поводу онлайна. Даже в магазинах Москвы, согласитесь, бывает ситуация «карты временно не принимаем» — нет связи. А что уж говорить о движущемся транспорте, уличных автоматах итп. Поэтому пассажиру приходится носить билет (баланс кошелька) с собой, на носителе. И поэтому защищать носитель – нужно.
        .
        В текущей ситуации рекомендуется реализовать простые гигиенические меры — диверсификацию ключей или переход на уровень безопасности SL3 – а это, согласитесь, не «менять турникеты». Мойте руки перед едой, короче говоря.
        .
        Ну а ловить и сажать – работа полиции. Наша задача — свести искушение к минимуму за счет современных технологических решений.
          0

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

            0
            Мы же сейчас о том, что карта – дамповая. Баланс на ней всегда достаточный для прохода, перезапись не поможет (так как сейчас в системе приоритет баланса карты). Такую карту антифрод система ставит в черный список, ее просто не пустят там, где списки уже дошли.
            .
            А насчет зайцев и SL3 (мошенников, даже скорее, раз мы про турникеты) – если их горстка, то да. Но, насколько мне известно, это не так.
        0
        Скажите лучше, о великие гуру бесконтактных карточек, какой домофон и электрозамки со считывателями купить простому частному пользователю в простой частный дом? Чтоб безопасно, относительно бюджетно и без выделенных серверов?
        А то есть в рабочем хозяйстве PERCO и что то вот даже бесплатно такое не хочется, а задача стоит.
          0
          А как вы планировали решить эту задачу с помощью perco? У них же другой профиль, не?
            0
            Не планировал. просто это единственное, что есть у меня в пользовании. И оно меня категорически не устраивает. Вот и ищу более опытных товарищей.
          0
          Так perco только для предприятий же подходит? А для домов знаю, что urmet и vizit очень норм.

          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

          Самое читаемое