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

Введение

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

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

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

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

Mifare:

Mifare – считается наиболее распространённой торговой маркой безконтактных карт, не удивительно, что именно на основе этой технологии сделали карту Тройка.

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

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

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


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

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

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

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

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

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

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

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

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

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

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

Аутентификация


В теле запроса передается номер телефона, PIN-код и информация об устройстве.

Ближе к делу:

Так вот, еще в 2022 году мы с ребятами начали разбираться с этой картой. И создали кое-что интересное.

Приложение называется Troika Dumper, GITHUB.

За основу основ для программы взяли мобильное приложение “Мой Проездной”, оно было разобрано и переработано в Troika Dumper.

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

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

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

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

Валидаторы в наземном транспорте

Валидатор в наземном транспорте

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

Потенциальный вектор атаки: физическое извлечение прошивки и данных из памяти устройства.______

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

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

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

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


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

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

Декомпиляция jar в исходные тексты java

Полученные jar файлы теперь можно декомпилировать в исходные тексты языка Java.

Для этого можно использовать любой из доступных Java декомпиляторов, например

Декомпиляция приложения

APK-файл приложения Android является архивом, внутри которого находятся файлы ресурсов, конфигурации, графика и другие мультимедиа данные, а также файл classes.dex, который является скомпилированным кодом приложения.

Запись данных на карту тройка

Права доступа к секторам карт типа Mifare определяются битами доступа в третьем блоке каждого сектора. Биты доступа, установленные в восьмом секторе, разрешают чтение сектора ключом А и запись ключом B. Полученные из приложения «Мой проездной» ключи, позволяют выполнить запись любых данные в сектор электронного кошелька.

Запрос баланса

После получения ключей с сервера, происходит считывание необходимых секторов памяти с карты и отправка содержимого памяти на сервер. В данном примере видны сектора 0,4,7,8.

Как пользоваться программой:

Всё банально просто, вам надо включить приложение, поднести карту, после этого на экране отобразится подобное:

Здесь мы видим номер карты, зашифрованные данные сектора карты, а ниже расшифрованые данные.

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

Конвертация dalvik executable (dex) в java archive (jar)

Для анализа кода приложения необходимо сконвертировать .dex файлы, полученные из APK архива, в .jar файлы, которые далее могут быть декомпилированы в исходные тексты на языке Java. Это можно сделать с помощью программы dex2jar

Конкурс – troika dumper – бесплатные проезды

Статья для участия в конкурсе

Конкурс 2022 года – авторская статья по любой тематике нашего форума!

Моя первая статья на форуме, так что не съедайте меня. Пишу для конкурса, заодно и поведую вам реально интересное.

Введение:

Вы все знаете карту Тройка:

Она устроена довольно просто. Её начинкой является чип Mifare Plus, именно его уязвимость эксплуатирует данная прошрамм, также карта хранит все данные в себе.

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

Ближе к делу:

Так вот, в далёком 2022 один хороший человек разобрался с этой карточкой и написал приложение о котором я расскажу.

Приложение называется Troika Dumper,

GITHUB

.

За основу основ для программы взяли мобильное приложение “Мой Проездной”, оно было разобрано и переработано в Troika Dumper.

Смысл работы программы:

Troika dumper позволяет читать, сохранять и восстанавливать записанное состояние памяти карты Тройка. Для использования необходим телефон с версией Android ≥ 4.4 и NFC чипом, поддерживающим карты Mifare.

Mifare:

Mifare – считается наиболее распространённой торговой маркой безконтактных карт, не удивительно, что именно на основе этой технологии сделали карту Тройка.

Как сделали:

Раскрыв приложение “Мой Проездной” разработчиком Troika Dumper были внесены изменения в программу, он удалил проверку ssl сертификата, который использовался для соединения с сервиром, что позволило совершить перехват трафика и полнее понять работу карты. Оказалось, что все данные хранятся в карте: баланс, последнее время прохода и прочие данные. Выглядит это примерно так:

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

Как пользоваться программой:

Всё банально просто, вам надо включить приложение, поднести карту, после этого на экране отобразится подобное:

Здесь мы видим номер карты, зашифрованные данные сектора карты, а ниже расшифрованые данные.

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

Пример использования (что бы вашу карту не заблокировали):

Придуман чисто мной, я не призываю вас его использовать.

1. Сохраняем состояние карты на телефон (Просто подносим карту к телефону)

2. Идём в метро и платим

3. Выползаем на той станции где вам надо

4. Записываем дамп с телефона на карту (Кнопка “карандаш” и прикладываем карту)

5. Идём в автобус и платим там проезд (Только в случае если обратно собираетесь в метро, это нужно для обновления времени проезда, ведь сейчас на карте уже дамп карты до её использования)

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

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

Выводы:

Это очень интересная программа. Но у всего есть свои минусы, например все эти действия попадают под 159.3 УК РФ как махинации с электронными картами. Минимальный срок заключения – 3 года. Так что не стоит этим этим сильно увлекаться.

Из этого можно понять, что не всё слишком хорошо защищено, даже такая известная карта, которая есть у каждого москвича, имеет свои уязвимости.

Всё предоставлено только для ознакомления, если Вы вдруг сделаете нехорошые вещи, то вся ответственность лежит на Вас, не забывайте это!

Ссылки:

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

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

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

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

Отключение проверки tls-сертификата

Во время работы приложение «Мой проездной» устанавливает соединение с сервером

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

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

или

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

Подписание apk

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

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

Получение ключей от карты тройка

В запросе на чтение карты Тройка передается сессионный ключ, полученный в момент аутентификации, и серийный номер карты в формате base64.

Приложение troikadumper

TroikaDumper

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


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

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

Сборка модифицированного приложения

Чтобы применить внесенные в исходный код изменения, необходимо скомпилировать APK.

С помощью утилиты apktool можно собрать распакованный APK архив обратно.

сборка APK из исходных текстов
image

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

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

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

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

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

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

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

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