Исследование безопасности систем оплаты парковки

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

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, не имеющие известных уязвимостей, но понадеялись на безопасность устаревшей технологии. С другой стороны, это не банковская карта и убыток тут не значителен, хотя таксисты на вокзале будут довольны.
Share post

Comments 22

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

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

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

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

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

              0
              Я в звании адмирала если что ;)
              0
              Считаю единственным адекватным вариантом платной парковки — именно такую с распознаванием номеров. В таком случае получается, что если водитель заберет с собой карточку, то его автомобиль сможет выехать только через администратора со штрафом и предъявлением документов. Замечательная противоугонная защита выходит, за которую не жалко отдать этот самый ценник за парковку.
                0
                Мы так и делали, но тут возникает правовой момент, сотрудник парковки не имеет права требовать документы, он же не полицейский, бывали на этой почве конфликты, их конечно разруливали, но тем не менее.
                  0
                  Действительно, сотрудники ТЦ (или парковки) не имеют права проверять документы, если это не закреплено в договоре между водителем и парковкой. Но никто не мешает вызвать полицию, т.к. есть вполне себе обоснованные основания полагать о совершении правонарушения (не оплата парковки) или преступления (попытка угона). Свободу такого гражданина ограничивать опять же нельзя, но можно ведь и не выпускать автомобиль до появления полиции под более чем правомерным предлогом обеспечения сохранности имущества.
              +1

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

          +2
          Теперь понятно, откуда берется «парковка на день» за 500р в Домодедово. Мне про нее один из таксистов рассказывал, местные таксисты за 500р могут хоть целый день ждать «жирный» заказ. Сам он очень недоумевал, как это у них получается.
            +2
            Таксисты, если не путаю, используют такой трюк.
            Заезжающий последним передает свою карту первому, тот выезжает и заезжает по новой, и так по стеку. Те карты у которых вышел бесплатный лимит парковки просто сливают пачкой в конце дня.
              0
              Или просроченные карты через недельку-месяц просто «теряются» за 500 рублей штрафа.
                +1

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

                  0
                  Я и с чистыми как-то раз еле выехал. Не хотела меня система пропускать — хоть что делай. И как на зло диспетчер не особо быстро принял вызов.
                +1
                Там еще вроде была история, когда люди парковались по одной цене, а выезжали уже по другой. В результате много народа попало на бабки.
                0

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

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

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

                    +1
                    У нас как-то прислали глючное обновление прошивки для кассы, там при определённом стечении обстоятельств (какая-то определённая купюра) на сдачу высыпались ВСЕ монеты из диспенсера монет, там обычно 2.5 кг червонцев лежало :)
                      0
                      Они теперь тоже онлайн? Или пока можно старые использовать? У меня онлайн касса постепенно выедает мозг, своими регулярными глюками.
                        0
                        Не, это было давно, и обновление заливалось руками.

                  Only users with full accounts can post comments. Log in, please.