Введение
Бесконтактные платежи становятся все более популярны. На текущий момент общественный транспорт в Москве полностью переведен на бесконтактную систему оплаты. Самым популярным платежным средством становится универсальная карта Тройка, которая активно интегрируется в различные системы помимо общественного транспорта.
. Очевидно, что распространение карты будет только увеличиваться. Транспортная сеть города обслуживает территорию с населением свыше 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-кода. Но это не критично, так как главной задачей на данном этапе является анализ кода. Основной целью поиска в исходных текстах программы были ключи для доступа к секторам карты Тройка, описание формата хранения данных в областях памяти карты, содержащих баланс электронного кошелька и механизм пополнения баланса карты.
Беглый анализ исходных текстов позволил найти основные классы и методы работы приложения: регистрацию, работу с кредитной картой, запрос баланса и прочее. Однако ключей для доступа к карте Тройка в исходных текстах обнаружено не было. Было решено не тратить время на подробное изучение исходных текстов, а вместо этого исследовать данные, которыми обменивается приложение с сервером во время работы.
классы в коде приложения «Мой проездной»
Анализ памяти карты тройка
Перехваченные из приложения «Мой проездной» ключи доступа к секторам карты Тройка используем для локального чтения памяти карты с помощью Android приложения MCT — Mifare Classic Tool. Приложение позволяет найти все сектора, к которым подходят перехваченные ключи, так называемый перебор по словарю.
данные в памяти карты в шестнадцатеричном формате
Аутентификация
В теле запроса передается номер телефона, 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-файл, готовый для установки на смартфон.
создание сертификата для подписи
подписание APK-файла
Получение ключей от карты тройка
В запросе на чтение карты Тройка передается сессионный ключ, полученный в момент аутентификации, и серийный номер карты в формате base64.
Приложение troikadumper
В рамках данного исследования, для удобства эксплуатации атаки повторного воспроизведения было создано приложение TroikaDumper. Оно позволяет локально (без подключения к интернету) просматривать записанные в памяти карты данные, такие как: баланс электронного кошелька, время последнего прохода через турникет, идентификатор последнего турникета, имитовставку, серийный номер карты Тройка, идентификационный номер карты (UID).
Приложение позволяет сохранять состояние памяти и записывать его на карту.
Приложение доступно в исходных текстах
Сборка модифицированного приложения
Чтобы применить внесенные в исходный код изменения, необходимо скомпилировать APK.
С помощью утилиты apktool можно собрать распакованный APK архив обратно.
сборка APK из исходных текстов
Формат данных в секторе электронного кошелька
Чтобы понять структуру хранения данных в памяти карты, была использована чистая карта, купленная в кассе, по которой не было выполнено ни одной поездки. Далее карта была пополнена 10 раз на 1 рубль через автомат. После каждого пополнения состояние памяти сохранялось. В конце все сохраненные данные были сравнены и установлено, что изменения происходят только в двух блоках 8 сектора.
дампы памяти восьмого сектора после пополнений на 1 рубль
Видно, что данные изменяются в первом блоке (нумерация от нуля) с 9 по 15 байт. Очевидно, что в данном месте содержится баланс электронного кошелька. Путем подбора возможных форматов хранения данных было выяснено, что значение баланса электронного кошелька хранится в области памяти от младших 4 бит 8 байта до старших 3 бит 10 байта и рассчитывается по формуле
Где 137B8 значение в памяти карты в шестнадцатеричном формате, а 399 сумма в рублях.Таким образом можно рассчитать значения из предыдущей таблицы.
расчет баланса в секторе электронного кошелька