Конкурс — Troika dumper — бесплатные проезды | Форум информационной безопасности —

Введение

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

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

Целью данного исследования было выяснить насколько защищена карта от подделки баланса электронного кошелька, изучить принцип работы карты. Проверить защищенность инфраструктуры работающей с картой Тройка.

Troikadumper

TroikaDumper – уникальный мобильный клиент, который дает возможность считать содержимое транспортно карты «Тройка» и перезаписывать его с нужной корректировкой информации. Пользователи должны знать, что для правильной и бесперебойной работы приложения портативный девайс должен иметь встроенный чип NFC производителя NXP с поддержкой карт Mifare. С полным списком гаджетов можно ознакомиться на сайте разработчика в хранилище GitHub.

Данная версия утилиты предназначена специально для портативных гаджетов на платформе Android.

Среди основных особенностей утилиты есть возможность вносить изменения на транспортную карту «Тройка». Осуществляется поддержка чтения полного объема хранимой информации и корректировка конкретных значений на определенных позициях. Если сказать по-другому, то пользователь может считать любую информацию с пластиковой карты:

  • состояние счета;
  • дата последнего использования; 
  • ID турникета.

А также вносить корректировки в  значения любой позиции. Иногда это позволяет вносить деньги на баланс без оплаты.

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

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

  • В основе принципа работы утилиты лежит обнаружение слабых мест в формате хранения информации транспортной карты «Тройка»;
  • возможность считывания полного содержимого карты, сохранять и перезаписывать все корректировки;
  • портативное устройство должно быть оборудовано NFC чипом производства NXP, который осуществляет поддержку частоты карт Mifare;
  • бесплатное пополнение транспортной карты «Тройка»;
  • простой и очень удобный пользовательский интерфейс;
  • распространение по free-лицензии;
  • осуществляется поддержка всех актуальных версий операционной системы Android.

Автоматы продажи билетов метро

Автомат продажи билетов метро

Служат для продажи проездных билетов и пополнения электронного кошелька карты Тройка. Возможна оплата наличными и кредитными картами с помощью систем PayPass/PayWave.

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


Подключены к сети по технологии Ethernet, замечен UTP кабель, идущий к автомату.

Потенциальный вектор атаки: проникновение во внутреннюю сеть, эксплуатация уязвимостей операционной системы._

Анализ исходного кода

Полученные с помощью Java Decompiler исходные тексты могут быть загружены в любую IDE (Integrated Development Environment) для более удобного изучения. Например, Android Studio.

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

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

классы в коде приложения «Мой проездной»
image

Анализ памяти карты тройка

Перехваченные из приложения «Мой проездной» ключи доступа к секторам карты Тройка используем для локального чтения памяти карты с помощью Android приложения MCT — Mifare Classic Tool. Приложение позволяет найти все сектора, к которым подходят перехваченные ключи, так называемый перебор по словарю.

данные в памяти карты в шестнадцатеричном формате
image

Атака повторного воспроизведения

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

Все устройства, работающие с балансом электронного кошелька (турникеты, терминал), проверяют достоверность подписи, и, в случае несоответствия подписи, возвращают ошибку “карта неисправна”.

Установлено, что подпись формируется на основе уникального идентификационного номера карты (UID), поэтому клонирование сектора памяти электронного кошелька из одной карты на другую с отличным UID, всегда дает недействительную подпись.

Несмотря на то, что области памяти электронного кошелька защищены с помощью имитовставки, система оказалась уязвима для атаки повторного воспроизведения. Было сохранено состояние памяти сектора электронного кошелька до прохода через турникет, после чего выполнен проход и операция списания 31 рубля с баланса карты.

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

шаги атаки повторного воспроизведения
image

Для установления возможности реальной эксплуатации уязвимости было выполнено продолжительное тестирование атаки повторного воспроизведения на инфраструктуре общественного транспорта Москвы. Первым был протестирован наземный транспорт: троллейбусы, автобусы, трамваи.

Электронный кошелек был пополнен единожды на сумму 50 рублей и все проходы через турникеты были выполнены с помощью атаки повторного воспроизведения.В течение пяти дней было совершено 57 поездок в наземном транспорте на общую сумму 1767 рублей. После чего карта была возвращена в кассу метрополитена и был получен возврат залоговой суммы в 50 рублей.

Для тестирования систем метрополитена была куплена новая карта и пополнена на 50 рублей. Все проходы через турникеты были выполнены с помощью атаки повторного воспроизведения. Было выполнено 12 поездок в течение 2 дней на общую сумму 384 рубля. На третий день карта была заблокирована на всех турникетах метро и наземного транспорта.

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

В москве раскрыли хакерский взлом карты «тройка»

Останкинский районный суд завершил рассмотрение дела группы хакеров, которые обвиняются во взломе защиты карты «Тройка» и других проездных билетов. Это редкое киберпреступление стоило городу примерно 2 млн руб.

​В Останкинском районном суде Москвы 24 августа прошло итоговое судебное заседание по делу о создании организованной группой вредоносного софта для мошенничества с картой «Тройка» и другими транспортными картами Москвы и Московской области. На скамье подсудимых — Денис Казьмин, Юрий Путин и Павел Андрюшин, которым инкриминируют причинение имущественного ущерба (ст. 165 УК РФ) ГУП «Мосгортранс» и Центральной пригородной пассажирской компании (ЦППК). Их суммарные потери, согласно обвинительному заключению, составили более 2 млн руб. Казьмина и Путина обвиняют также в неправомерном доступе к компьютерной информации (ст. 272 УК РФ) и создании и использовании вредоносных компьютерных программ (ст. 273 УК РФ).

Читайте ещё про NFC:  Как правильно расплачиваться в магазинах с помощью функции Samsung Pay

Обвиняемые свою вину не признали, приговор будет вынесен 31 августа.

Представитель «Мосгортранса» Дмитрий Глухов сообщил РБК, что в 2021–2021 годах было возбуждено три уголовных дела о мошенничестве с транспортными картами, одно из которых в настоящее время и рассматривается в суде. «Контролеры ГУП «Мосгортранс» регулярно проводят проверку правильности оплаты проезда в наземном городском транспорте Москвы. При выявлении случаев использования нелегитимной билетной продукции полученные сведения направляются в правоохранительные органы для принятия процессуального решения», — говорит Глухов.

Представитель ЦППК от комментариев отказался.

Валидаторы в метро

Валидатор в метро

Служат для проверки состояния проездных билетов и записи баланса на электронный кошелек карты Тройка. Подключены к сети. Предположительно, работают на базе x86-компьютера и операционной системы Windows.

Потенциальный вектор атаки: проникновение во внутреннюю сеть, эксплуатация уязвимостей операционной системы._____

Возможные цели атаки

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

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

Турникеты в метро


Турникет метро

Потенциальный вектор атаки: проникновение в сеть, MitM.______

Как бесплатно ездить в метро. москва. без хайда

Что такое карта «Тройка»?

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

Почему же именно «Тройка»? Все очень просто: «…пополняемая карта…», нашей целью будет «пополнить» баланс Вашей карты путем неких манипуляций, а каких именно Вы узнаете далее.

Что нам понадобиться:

  1. карта «Тройка»
  2. телефон с версией Android ≥ 4.0 и NFC чипом (NFC чип должен быть производства NXP)
  3. Некая софтина «TroikaDumper» (будет дана ниже)

Так, допустим что с 1 не возникнет проблем, а что насчет телефона? что еще за чип такой NFC?

NFC — Изначально, технология Near Field Communication (

NFC

) получила максимальное распространение в качестве технологии для совершения бесконтактных платежей. Вы можете использовать смарт-карту со встроенным NFC чипом как проездной в общественном транспорте, как платежную карту в учреждениях розничной торговли, как «умную» визитку или как бесконтактную карту-ключ. Если очень грубо сказать — это антенка которая осуществляет беспроводную связь на короткие расстояния

Вот небольшой списочек телефонов с NFC:

Что у нас тут по поводу софта?

Разработчик софта Игорь Шевцов нашел уязвимость карты «Тройка», которая позволяет пополнять баланс электронного кошелька без внесения денег. «Взломанная» карта может использоваться для оплаты проезда в общественном транспорте. И позже создал софт для OC android — TroikaDumper.

Скачать —

КЛИК

Как же пользоваться «TroikaDumper» ?

  1. Установите приложение скачав его по ссылке выше
  2. Запустите приложение и поднести карту Тройка.
    Должно отобразится состояние баланса, время последнего прохода и т. д.
    При считывании карты состояние памяти автоматически сохраняется и доступно в архиве (нижняя правая кнопка в виде папки)
  3. Для записи дампа памяти на карту выберите нужный дамп из архива и нажмите кнопку запись.
    Кнопка записи находится левее кнопки архива.

Могут ли заблокировать карту ? Разумеется, но что бы уменьшить шанс блокировки нужно:

  1. Не пополнять более чем на 100р
  2. Никогда не проходите в метро два раза с одинаковым временем последнего прохода. После записи дампа обновите текущее время на карте используя валидатор в наземном транспорте. То есть, перед каждым проходом в метро нужно выполнить списание через желтый валидатор в автобусе или трамвае.

Как узнать заблочили мою карту или нет ? Для этого есть еще одна замечательная программа под android, Troika Block — программа для проверки наличия «тройки» в стоп-листе.

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

§

Что такое карта «Тройка»?

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

Почему же именно «Тройка»? Все очень просто: «…пополняемая карта…», нашей целью будет «пополнить» баланс Вашей карты путем неких манипуляций, а каких именно Вы узнаете далее.

Что нам понадобиться:

  1. карта «Тройка»
  2. телефон с версией Android ≥ 4.0 и NFC чипом (NFC чип должен быть производства NXP)
  3. Некая софтина «TroikaDumper» (будет дана ниже)

Так, допустим что с 1 не возникнет проблем, а что насчет телефона? что еще за чип такой NFC?

NFC — Изначально, технология Near Field Communication (

NFC

) получила максимальное распространение в качестве технологии для совершения бесконтактных платежей. Вы можете использовать смарт-карту со встроенным NFC чипом как проездной в общественном транспорте, как платежную карту в учреждениях розничной торговли, как «умную» визитку или как бесконтактную карту-ключ. Если очень грубо сказать — это антенка которая осуществляет беспроводную связь на короткие расстояния

Вот небольшой списочек телефонов с NFC:

Что у нас тут по поводу софта?

Разработчик софта Игорь Шевцов нашел уязвимость карты «Тройка», которая позволяет пополнять баланс электронного кошелька без внесения денег. «Взломанная» карта может использоваться для оплаты проезда в общественном транспорте. И позже создал софт для OC android — TroikaDumper.

Скачать —

КЛИК

Как же пользоваться «TroikaDumper» ?

  1. Установите приложение скачав его по ссылке выше
  2. Запустите приложение и поднести карту Тройка.
    Должно отобразится состояние баланса, время последнего прохода и т. д.
    При считывании карты состояние памяти автоматически сохраняется и доступно в архиве (нижняя правая кнопка в виде папки)
  3. Для записи дампа памяти на карту выберите нужный дамп из архива и нажмите кнопку запись.
    Кнопка записи находится левее кнопки архива.
Читайте ещё про NFC:  Бонус на проезд: как работает программа лояльности для владельцев карты «Тройка» / Новости города / Сайт Москвы

Могут ли заблокировать карту ? Разумеется, но что бы уменьшить шанс блокировки нужно:

  1. Не пополнять более чем на 100р
  2. Никогда не проходите в метро два раза с одинаковым временем последнего прохода. После записи дампа обновите текущее время на карте используя валидатор в наземном транспорте. То есть, перед каждым проходом в метро нужно выполнить списание через желтый валидатор в автобусе или трамвае.

Как узнать заблочили мою карту или нет ? Для этого есть еще одна замечательная программа под android, Troika Block — программа для проверки наличия «тройки» в стоп-листе.

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

Номер турникета, дата и время прохода

Аналогичная методика была применена для изучения формата остальных данных в секторе. Было выполнено несколько проходов через турникеты метро и сохранено состояние памяти после каждого прохода. Проходы были выполнены с интервалом времени в 1 минуту попеременно на двух различных турникетах.

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

Время прохода записано в четвертом байте и старших четырех битах пятого байта, и кратно 30 секундам, начиная с 00:00 часов. Следовательно, расчет времени можно выполнить в два действия:

для расчета часов imageimage

Таким образом получим время 15:30, что соответствует действительному времени прохода.

На основе полученных сведений можно расшифровать данные представленные в предыдущей таблице

Каждая карта Тройка имеет уникальный серийный номер, отличный от UID. Этот номер нанесен на самой карте и используется для удаленного пополнения карты. Он хранится в нулевом блоке восьмого сектора с третьего байта по младшие четыре бита седьмого байта.

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

Обход блокировки карты


Экспериментально были найдены способы избегать блокировки карты при использовании атаки повторного воспроизведения. Основные факторы срабатывания блокировки:

  • Время последней поездки, записанное в секторе памяти электронного кошелька, не должно повторяться при поездках в метро. То есть перед проходом в метро необходимо выполнить списание на турникете наземного транспорта, таким образом получив актуальную дату последнего прохода после восстановления дампа.
  • Турникеты в наземном транспорте оперативно не синхронизируются с централизованной базой данных, поэтому операции, произведенные с использованием атаки повторного воспроизведения, обнаруживаются очень долго. Поэтому турникеты наземного транспорта могут быть использованы для обновления времени последней поездки перед использованием карты в метро
  • Иногда необходимо выполнять минимальное пополнение карты, например на сумму 1 рубль

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

Перехват трафика приложения

Перехват защищенного трафика выполняется методом проксирования SSL-подключений с подменой сертификата сервера. Для этого существуют инструменты, вроде

или

, позволяющие выполнять подмену сертификата и запись расшифрованных данных автоматически. В данном случае, mitmproxy запущен на сервере, к которому по WiFi подключен смартфон с установленным приложением «Мой проездной». В приложении выполнена аутентификация по PIN-коду и произведена проверка баланса на карте Тройка. Все передаваемые в этот момент данные между сервером и приложением были записаны и проанализированы.

Подписание apk

APK-файлы имеют подпись, которая позволяет убедиться, что файл был корректно загружен и выпущен конкретным разработчиком. Без подписи APK-файл установить не получится, но можно использовать самоподписанный сертификат (в этом случае нужно включить опцию “установка из недоверенных источников” в настройках телефона). В результате подписи будет получен APK-файл, готовый для установки на смартфон.

создание сертификата для подписи
imageподписание APK-файла
image

Пополнение «тройки» через приложение «город»

Еще один универсальный способ пополнить проездной билет в столице — зайти в свой аккаунт через приложение «Город». Скачивается оно таким же образом, что и стандартное, есть в магазинах операционных систем. Можно не только пополнять счета через это приложение, но и оплачивать связь, например, МТС или Билайн, переводить деньги на свой проездной и тому подобное. Алгоритм следующий:

  • открыть приложение;
  • выбрать пункт «Транспорт»;
  • перейти во вкладку «Тройка»;
  • нажать на пункт «Пополнить и выбрать способ»;
  • перевести деньги или бонусы.

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

Пополнить "тройку" теперь можно через мобильное приложение "метро москвы"

16 июня 2021

Пассажиры метро, МЦК и наземного городского транспорта теперь могут пополнить карту «Тройка» онлайн через обновленное мобильное приложение «Метро Москвы». При этом для зачисления денег на счет больше не придется спускаться в метро и прикладывать транспортную карту к желтым валидаторам . Владельцам телефонов на базе Android теперь достаточно приложить карту к мобильному телефону, и пополнение баланса пройдет через NFC-соединение. Функция позволит пополнять карту «Тройка» стоя на остановке, или по пути к метро, что поможет существенно сэкономить время, затраченное на поездку.

Приложение «Метро Москвы» можно также использовать для активации отложенного платежа. Баланс счета можно пополнять любым способом, включая  «Яндекс.Деньги», Qiwi, Webmoney, и в любое время, и активировать платеж – когда вам удобно!

Для владельцев гаджетов на операционной системе iOS в обновленной версии приложения «Метро Москвы» также предусмотрены новые способы пополнения баланса карты «Тройка». Обладатели таких смартфонов могут зачислить деньги на счет «Тройки» с помощью платежной системы Apple Pay. При выборе  Apple Pay пользователю нужно будет только подтвердить способ оплаты, используя Touch ID или пароль. Однако для того, чтобы активировать оплату,  карточку все же нужно будет приложить к желтому валидатору на станциях. 

Пополнить карту «Тройка», не выходя из дома, вы также можете на нашем сайте. Карта «Тройка» – это многофункциональный электронный кошелек. Ей можно оплатить как проезд на городском общественном транспорте, так и билет на основные городские достопримечательности: Зоопарк, Планетарий, Третьяковскую галерею и др. Подробнее обо всех функциях карты «Тройка» читайте здесь

В обновленном приложении «Метро Москвы» также появилась тематическая страница о Кубке Конфедераций, представленная на 4 языках: русском, английском, немецком и испанском. На странице можно найти расписание матчей, описание команд-участниц, правила бесплатного проезда во время турнира и многое другое.

Конкурс - Troika dumper - бесплатные проезды | Форум информационной безопасности -

Приложение troikadumper

TroikaDumper

В рамках данного исследования, для удобства эксплуатации атаки повторного воспроизведения было создано приложение TroikaDumper. Оно позволяет локально (без подключения к интернету) просматривать записанные в памяти карты данные, такие как: баланс электронного кошелька, время последнего прохода через турникет, идентификатор последнего турникета, имитовставку, серийный номер карты Тройка, идентификационный номер карты (UID).

Читайте ещё про NFC:  Превращаем «Тройку» или банковскую карту в NFC-метку для iPhone

Приложение позволяет сохранять состояние памяти и записывать его на карту.

Приложение доступно в исходных текстах

Приложения для смартфонов

В Google Play Market было найдено несколько приложений, позволяющих работать с электронным кошельком карты Тройка. Наиболее популярным по числу установок является приложение «Мой проездной», позволяющее напрямую пополнять карту с помощью смартфона с функцией NFC. Это означает, что приложение содержит данные, позволяющие производить запись в память карты.

Потенциальный вектор атаки: реверс-инжиниринг приложения.____

Из всех рассмотренных целей было решено остановиться на реверс-инжиниринге приложения «Мой проездной», как на более простом и безопасном варианте. Для этого достаточно было приобрести смартфон на платформе Android с поддержкой функции NFC. Выбор данной цели обусловлен еще и тем, что для исследования не требовалось иметь доступ к объектам общественного транспорта, и все операции по поиску уязвимостей можно было произвести не выходя из дома.

Приложение «Мой проездной» предназначено для самостоятельного пополнения карты Тройка. Работает на смартфонах с операционной системой Android и функцией NFC. Приложение бесплатное и доступно для загрузки через Google Play Market (каталог приложений Android).

Процесс работы

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

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

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

Установка приложения

Не на каждый смартфон устанавливается приложение «Тройка». И дело тут не в новизне и раскрученности рекламщиками устройства, а просто в несоответствии некоторых технических характеристик. В частности, для корректной работы «Тройки» должны выполняться такие требования:

  • операционная система – минимум Андроид версии 4.0;
  • постоянный доступ к интернету (мобильный трафик или вай-фай — нет разницы);
  • поддержка гаджетом технологии НФС;
  • поддержка современной технологии Mifare Classic.

Что касается последней — Mifare Classic — то тут необходимо рассмотреть подробней. Дело в том, что большинство гаджетов с НФС имеют такую опцию, но это бывает не всегда. Владелец смартфона должен сам проверять. Наличие этой технологии говорит о том, что после пополнения вам не нужно будет активировать карту.

Просто пройдете в метро и приложите ее к валидатору турникета. А вот если производить оплату через приложение «Тройка», но с устройства, которое не оснащено такой системой, активировать счет придется на оранжевом терминале. Это обязательно, в противном случае деньги сохраняться на счету, но активными не будут.

Приложение находится в свободном доступе в сети Интернет. Проще всего его скачивать из магазина приложений для своего устройств. Зайдите в браузер и введите в поисковую строку «Тройка». Первым высветится нужное приложение. Скачивание происходит за пару секунд, ведь приложение весит не более 30 Мегабайт.

Формат данных в секторе электронного кошелька

Чтобы понять структуру хранения данных в памяти карты, была использована чистая карта, купленная в кассе, по которой не было выполнено ни одной поездки. Далее карта была пополнена 10 раз на 1 рубль через автомат. После каждого пополнения состояние памяти сохранялось. В конце все сохраненные данные были сравнены и установлено, что изменения происходят только в двух блоках 8 сектора.

дампы памяти восьмого сектора после пополнений на 1 рубль
image

Видно, что данные изменяются в первом блоке (нумерация от нуля) с 9 по 15 байт. Очевидно, что в данном месте содержится баланс электронного кошелька. Путем подбора возможных форматов хранения данных было выяснено, что значение баланса электронного кошелька хранится в области памяти от младших 4 бит 8 байта до старших 3 бит 10 байта и рассчитывается по формуле

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

расчет баланса в секторе электронного кошелька
image

Итог анализа api

Из перехваченных сообщений видно, что ключи для чтения карты Тройка загружаются с сервера каждый раз во время чтения карты. Были получены ключи от секторов 2,3,4,6,7,8,15. Найдены сектора памяти, содержащие данные электронного кошелька и информацию о билетах, записанных на карте.

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

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

Заключение

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

Относительно легко был осуществлен реверс-инжиниринг приложения «Мой проездной», что позволило обойтись без взлома физических систем транспортной инфраструктуры.

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

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

https://www.youtube.com/watch?v=vc2PgNXY1xo

Для исправления найденных уязвимостей необходимо усовершенствование формата хранения данных в памяти карты и обновление программного обеспечения всех систем, работающих с картой.

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

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

Adblock
detector