Хабрахабр

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

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

image

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

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

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

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

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

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

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

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

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

Показать больше

Похожие публикации

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»