В этой статье я хочу рассказать о безопасности систем автоматизированной оплаты парковки. Приблизительно таких, как на этой картинке.

image

При въезде выдается парковочный талон, при выезде он засовывается обратно в терминал. В основном, талоны бывают двух типов: бумажные со штрихкодом/QR-кодом и пластиковые бесконтактные карты, о последних и пойдет речь.

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

Как-то раз, воспользовавшись парковкой одного столичного торгового центра я, вдохновившись статьями про Тройку и Подорожник, а так же из чистого любопытства запустил на телефоне с поддержкой технологии NFC приложение MifareClassicTool и попробовал прочитать содержимое карты. Логично было бы предположить, что проверка факта оплаты проводится в режиме онлайн, а карта используется только как идентификатор пользователя. В таком случае без доступа к внутренней сети тут делать нечего и этой статьи попросту бы не было, но реальность оказалась интереснее. Моим глазам предстала приблизительно такая картина:


Скриншот немного сокращен для удобства читателей. Карта представляет собой Mifare Classic 1K, разделена на 16 секторов. В секторах 1-9 записана какая-то информация и ключи от них неизвестны. В остальных пусто и используются ключи по умолчанию. Очень любопытно. К счастью для нас, проприетарный протокол шифрования crypto1, используемый в этих картах, хорошо изучен и имеет уязвимости.

Нам понадобится ноутбук, ридер бесконтактных карт типа ACR122U и приложение mfoc, которое позволяет имея всего одни ключ от любого сектора за разумное время восстановить все остальные. Пропустим этап сборки и настройки этого добра, перейдем сразу к делу. Кладем карту на ридер, запускаем программу, оставляем ноутбук в машине и идем шопиться, ведь ради этого мы сюда и приехали. Прошел час, все ключи восстановлены, пробуем прочитать карту еще раз.


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


Отличий не очень много, но на что же они похожи? Да это же время въезда в BCD формате, 11:25:47. Рядом с ним дата, 12.11.2018. Меняем дату на несколько дней назад, идем к терминалу оплаты и он радостно сообщает что мы должны ему много денег. Меняем дату обратно, ставим текущее время и бесплатно выезжаем с парковки.

В принципе, на этом можно было бы остановиться, но любовь к исследованиям пересиливает лень, едем в другой торговый центр и повторяем операцию там. Ключи отличаются, но формат данных аналогичный. Посетив несколько торговых центров и один вокзал и проведя несколько опытов становится понятно что к чему. В первом секторе хранится срок действия карты, в нашем примере это до 31.12.2050. Во втором — время въезда, время и сумма оплаты, время, до которого разрешен выезд. Блоки третьего и последующих секторов надо читать как 4 числа в little-endian. Попробуем расшифровать данные в нашем примере.


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

Наверное, тут надо сделать какие-то выводы. Разработчики системы могли бы использовать онлайн проверку, могли бы использовать карты типы Desfire / Ultralight C, не имеющие известных уязвимостей, но понадеялись на безопасность устаревшей технологии. С другой стороны, это не банковская карта и убыток тут не значителен, хотя таксисты на вокзале будут довольны.

Комментарии (22)


  1. Arson
    29.11.2018 20:27
    +1

    Я работал с такой системой (именно парктайм с мифаер картами), там есть защиты просто их ленятся настраивать. Тут ситуация как ни странно точно как с обычными бытовыми роутерами, когда у кучи народа доступ закрыт парой admin/admin. Там из коробки есть возможность синхронизации с системой определения автономеров и сверка времени въезда-выезда по карте со временем проезда по системе видео наблюдения. Ну и данные перед записью в карту можно шифровать дополнительно, народ просто не заморачиваеся.


    1. parktime Автор
      29.11.2018 23:35

      А не поделитесь какой-нибудь информацией о формате данных или возможностях системы? Странно, что из коробки есть распознавание номеров, но им ни кто не пользуется.


      1. Arson
        30.11.2018 07:54

        Распознавание номеров стороннее, но интегрируемое. Если правильно помню интеграция с системой «автоинтеллект». Обмен через общую базу данных т.к. скорость проезда не очень высокая, то связывание систем идёт по номеру проезда + отметка времени с точностью до секунды. При кофликте данных проезд блокируется и коллизия выводится на экран оператору для принятия решения. При некорректном распознавании номеров или обмене картами — тоже самое. Плюс этой системы что в автоинтеллект можно подключать внешние базы гос-номеров (базы угнанных машин из ГИБДД) и проверку проводить ещё и по ним.

        По шифрованию не подскажу, я с этой системой работал в 12 году, забыл уже подробности, но ключи менять можно однозначно, и можно писать пользовательские данные дополнительно. Например можно настроить вариант, когда в карту записывается не только время въезда и сумма оплаты, но и гос-номер машины и тариф, и дополнительно сверять на выезде и при оплате ещё и эти данные.


        1. Arson
          30.11.2018 08:01

          Ну и дополню, я работал на такой системе в ТЦ. Там был не полный вариант защиты, ввиду отсутсвия необходимости, но, разумеется обойти можно любую систему, даже самую навороченную. Правда и вычислить можно практически любого взломщика хоть и постфактум, тут вопрос во временнЫх ресурсах и дополнительных системах, например в максимально возможном покрытии территории видеонаблюдением. Тут как и везде, система — это инструмент, а им ещё пользоваться надо правильно. В результате любая попытка обойти защиту сводится к противостоянию двух конкретных людей и там зависит уже у кого мозги соображают быстрее:)


          1. Methos
            30.11.2018 11:45

            спасибо, капитан очевидность


            1. Arson
              30.11.2018 20:02

              Я в звании адмирала если что ;)


          1. artyums
            30.11.2018 19:59

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


            1. Arson
              30.11.2018 20:04

              Мы так и делали, но тут возникает правовой момент, сотрудник парковки не имеет права требовать документы, он же не полицейский, бывали на этой почве конфликты, их конечно разруливали, но тем не менее.


              1. artyums
                30.11.2018 20:30

                Действительно, сотрудники ТЦ (или парковки) не имеют права проверять документы, если это не закреплено в договоре между водителем и парковкой. Но никто не мешает вызвать полицию, т.к. есть вполне себе обоснованные основания полагать о совершении правонарушения (не оплата парковки) или преступления (попытка угона). Свободу такого гражданина ограничивать опять же нельзя, но можно ведь и не выпускать автомобиль до появления полиции под более чем правомерным предлогом обеспечения сохранности имущества.


        1. AlexVist
          30.11.2018 12:37

          Небольшие уточнения. На рынке несколько систем типа парктайм. Образовались отделением от этой же компании, если мне не изменяет память.
          Что касается защиты, то действительно карты для разных объектов формируются путем генерации ключей в системе, с последующей записью этих ключей в карту при регистрации в системе.
          Что касается сверки онлайн. Тут нужно понимать механизм заложенный в работе парковки. Должна обеспечиваться работа не зависимо от сбоев в работе сети. То есть каждое устройство(шлагбаум, касса) должны обеспечить въезд, выезд и оплату даже в автономном режиме. Поэтому на карту пишется дата и время въезда, информация о тарифе. Затем касса выполняет роль калькулятора сверив время и данные о тарифе производит расчет, принимает оплату и записывает на карту информацию об оплате(дата и время). И стойка выезда считав карту и сверив дату и время с информацией об оплате принимает решение о пропуске автомобиля. В таком режиме работа идет автономно. Соответственно в каждой стойке есть информация о ключах (система, карта), чтобы понять что эта карта принадлежит этой парковке, и о тарифах.
          Еще каждый проезд в системе это транзакция. Транзакция включает в себя в общем механизм, при котором можно однозначно определить что проехал автомобиль. Это наезд на индукционную петлю перед шлагбаумом выдача/прием карты, поднятие шлагбаума, наезд на вторую индукционную петлю, ик-датчики. данные о транзакциях и поступают по сети в основную систему. Накапливаются в памяти стойки, если нет сети.
          Система распознания номеров работает крайне ограничено. Много ограничений на угол обзора, чистоту номера. В целом работает не плохо. Но вряд ли процент распознания превышает 85%. Но при этом в любом случае камера делает фото, которое крепится к транзакции.


  1. HappyGroundhog
    29.11.2018 20:33
    +1

    Теперь понятно, откуда берется «парковка на день» за 500р в Домодедово. Мне про нее один из таксистов рассказывал, местные таксисты за 500р могут хоть целый день ждать «жирный» заказ. Сам он очень недоумевал, как это у них получается.


    1. 9660
      30.11.2018 05:38

      Таксисты, если не путаю, используют такой трюк.
      Заезжающий последним передает свою карту первому, тот выезжает и заезжает по новой, и так по стеку. Те карты у которых вышел бесплатный лимит парковки просто сливают пачкой в конце дня.


      1. apirk
        30.11.2018 05:49

        Или просроченные карты через недельку-месяц просто «теряются» за 500 рублей штрафа.


      1. parktime Автор
        30.11.2018 07:58

        По крайней мере в Домодедово сверяется госномер. Он выводится на экран и с сильно грязными номерами не пропускает.


        1. bvn13
          30.11.2018 10:29

          Я и с чистыми как-то раз еле выехал. Не хотела меня система пропускать — хоть что делай. И как на зло диспетчер не особо быстро принял вызов.


    1. Popadanec
      30.11.2018 13:53
      +1

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


  1. chernish2
    30.11.2018 17:14

    А если дату въезда на карте записать скажем будущим числом через месяц (например 1ое января 2019), автомат выплатит разницу?


    1. Popadanec
      30.11.2018 17:31

      Скорей всего физически не сможет.


      1. chernish2
        30.11.2018 18:18

        Ну обычно рассмотрена возможность выдачи сдачи. Другое дело что от алгоритма такой работы странно ожидать. Но я бы проверил!


    1. Arson
      30.11.2018 20:17

      У нас как-то прислали глючное обновление прошивки для кассы, там при определённом стечении обстоятельств (какая-то определённая купюра) на сдачу высыпались ВСЕ монеты из диспенсера монет, там обычно 2.5 кг червонцев лежало :)


      1. Popadanec
        01.12.2018 13:16

        Они теперь тоже онлайн? Или пока можно старые использовать? У меня онлайн касса постепенно выедает мозг, своими регулярными глюками.


        1. Arson
          01.12.2018 14:37

          Не, это было давно, и обновление заливалось руками.