Возможные цели атаки
Был проведен обзор инфраструктуры, работающей с картой Тройка, для установления наиболее привлекательных целей для атаки. Рассмотрены системы, позволяющие производить запись и считывание баланса электронного кошелька. Из основных критериев оценки была доступность для изучения без риска быть задержанным, простота и низкая стоимость.
Требовалось найти наиболее простую цель для проведения атаки, не требующую использования специальных технических средств и дорогостоящего оборудования.
Турникеты в метро
Потенциальный вектор атаки: проникновение в сеть, MitM.______
Введение
Бесконтактные платежи становятся все более популярны. На текущий момент общественный транспорт в Москве полностью переведен на бесконтактную систему оплаты. Самым популярным платежным средством становится универсальная карта Тройка, которая активно интегрируется в различные системы помимо общественного транспорта.
. Очевидно, что распространение карты будет только увеличиваться. Транспортная сеть города обслуживает территорию с населением свыше 20 млн человек и обеспечивает перевозку более 350 млн пассажиров в месяц. В свете этого становится важным вопрос защищенности карты.
Целью данного исследования было выяснить насколько защищена карта от подделки баланса электронного кошелька, изучить принцип работы карты. Проверить защищенность инфраструктуры работающей с картой Тройка.
Особенности
К важным и интересным особенностям TroikaDumper можно отнести:
Перехват трафика приложения
Перехват защищенного трафика выполняется методом проксирования SSL-подключений с подменой сертификата сервера. Для этого существуют инструменты, вроде
, позволяющие выполнять подмену сертификата и запись расшифрованных данных автоматически. В данном случае, mitmproxy запущен на сервере, к которому по WiFi подключен смартфон с установленным приложением «Мой проездной». В приложении выполнена аутентификация по PIN-коду и произведена проверка баланса на карте Тройка. Все передаваемые в этот момент данные между сервером и приложением были записаны и проанализированы.
Возможности и особенности
Одной из самых главных особенностей приложения TroikaDamper является внесение изменений на транспортной карте Тройка. Имеется поддержка чтения полного дампа и корректирование значений на разных позициях.
Говоря простыми словами, с помощью программы вы сможете считать любые данные и прочую информацию: баланс, последний проход с точной датой и даже идентификатор турникета. Во многих случаях вы сможете пополнять счёт даже без карты на руках.
Запись данных на карту Тройка
Права доступа к секторам карт типа Mifare определяются битами доступа в третьем блоке каждого сектора. Биты доступа, установленные в восьмом секторе, разрешают чтение сектора ключом А и запись ключом B. Полученные из приложения «Мой проездной» ключи, позволяют выполнить запись любых данные в сектор электронного кошелька.
Подписание apk
APK-файлы имеют подпись, которая позволяет убедиться, что файл был корректно загружен и выпущен конкретным разработчиком. Без подписи APK-файл установить не получится, но можно использовать самоподписанный сертификат (в этом случае нужно включить опцию “установка из недоверенных источников” в настройках телефона). В результате подписи будет получен APK-файл, готовый для установки на смартфон.
создание сертификата для подписи
Номер турникета, дата и время прохода
Аналогичная методика была применена для изучения формата остальных данных в секторе. Было выполнено несколько проходов через турникеты метро и сохранено состояние памяти после каждого прохода. Проходы были выполнены с интервалом времени в 1 минуту попеременно на двух различных турникетах.
Путем подбора значений было установлено, что нулевой и первый байт в первом секторе хранит идентификатор последнего турникета, через который осуществлялся проход. Далее второй и третий байты содержат дату последнего прохода в виде количества дней от 1.1.1992.
Время прохода записано в четвертом байте и старших четырех битах пятого байта, и кратно 30 секундам, начиная с 00:00 часов. Следовательно, расчет времени можно выполнить в два действия:
для расчета часов
Таким образом получим время 15:30, что соответствует действительному времени прохода.
На основе полученных сведений можно расшифровать данные представленные в предыдущей таблице
Каждая карта Тройка имеет уникальный серийный номер, отличный от UID. Этот номер нанесен на самой карте и используется для удаленного пополнения карты. Он хранится в нулевом блоке восьмого сектора с третьего байта по младшие четыре бита седьмого байта.
Несмотря на то, что все данные хранятся в открытом виде, на их расшифровку было потрачено больше всего времени. При этом некоторые данные остались нерасшифрованными. Предположительно, последние пять байт в первом блоке восьмого сектора содержат криптографическую подпись (т.н. имитовставка, MAC), которая генерируется с использованием приватного ключа в памяти турникета.
Обход блокировки карты
Экспериментально были найдены способы избегать блокировки карты при использовании атаки повторного воспроизведения. Основные факторы срабатывания блокировки:
В результате удалось обойти механизм обнаружения мошеннических операций и выполнить более десяти поездок в метро в течение недели.
Как избежать блокировки карты
Раскрыв приложение “Мой Проездной” разработчиками Troika Dumper были внесены изменения в программу, мы удалили проверку ssl сертификата, который использовался для соединения с сервером, что позволило совершить перехват трафика и полнее понять работу карты. Оказалось, что все данные хранятся в карте: баланс, последнее время прохода и прочие данные. Выглядит это примерно так:
Наша программа сохраняет все эти данные а файл, а после этот файл можно использовать для записи на карту.
Что нужно знать еще?
Чтобы избежать нежелательных последствий, после посещения метрополитена вы должны проехать на автобусе или троллейбусе. Обязательно используйте желтый валидатор в общественном транспорте. Такая операция поможет списать финансы и обновит дату проезда.
Утилита поддерживает различные мобильные гаджеты. Их список можно прочитать на сайте разработчика в разделе GitHub.
Анализ памяти карты Тройка
Перехваченные из приложения «Мой проездной» ключи доступа к секторам карты Тройка используем для локального чтения памяти карты с помощью Android приложения MCT — Mifare Classic Tool. Приложение позволяет найти все сектора, к которым подходят перехваченные ключи, так называемый перебор по словарю.
данные в памяти карты в шестнадцатеричном формате
Формат данных в секторе электронного кошелька
Чтобы понять структуру хранения данных в памяти карты, была использована чистая карта, купленная в кассе, по которой не было выполнено ни одной поездки. Далее карта была пополнена 10 раз на 1 рубль через автомат. После каждого пополнения состояние памяти сохранялось. В конце все сохраненные данные были сравнены и установлено, что изменения происходят только в двух блоках 8 сектора.
дампы памяти восьмого сектора после пополнений на 1 рубль
Видно, что данные изменяются в первом блоке (нумерация от нуля) с 9 по 15 байт. Очевидно, что в данном месте содержится баланс электронного кошелька. Путем подбора возможных форматов хранения данных было выяснено, что значение баланса электронного кошелька хранится в области памяти от младших 4 бит 8 байта до старших 3 бит 10 байта и рассчитывается по формуле
Где 137B8 значение в памяти карты в шестнадцатеричном формате, а 399 сумма в рублях.
Таким образом можно рассчитать значения из предыдущей таблицы.
расчет баланса в секторе электронного кошелька
Декомпиляция приложения
APK-файл приложения Android является архивом, внутри которого находятся файлы ресурсов, конфигурации, графика и другие мультимедиа данные, а также файл classes.dex, который является скомпилированным кодом приложения.
Отключение проверки tls-сертификата
Во время работы приложение «Мой проездной» устанавливает соединение с сервером
Другие функции
Взаимодействие с одноразовыми картонными проездными Единый (чипы Mifare Ultralight, будет доступно на любых смартфонах с поддержкой Android Pay)
Смысл работы программы
Troika dumper позволяет читать, сохранять и восстанавливать записанное состояние памяти карты Тройка. Для использования необходим телефон с версией Android ≥ 4.4 и NFC чипом, поддерживающим карты Mifare.
Про взлом
TroikaDumper на Андроид бесплатно взломанную версию вы можете найти по ссылке ниже.
Пластиковая карта «Тройка» давно стала неотъемлемой частью жизни жителей Москвы и московской области. Она представляет собой удобный инструмент для оплаты проезда на общественном транспорта. Ее пользователи не стоят в очередях за билетами и не думают о приобретении проездных. Они просто кладут средства на карту и рассчитываются ей. Кроме того, с помощью нее можно неплохо сэкономить, потому что проезд по «Тройке» стоит дешевле. Однако глобальная сеть предлагает еще одну возможность сохранить кровные и все благодаря мобильному приложению TroikaDumper.
Сборка модифицированного приложения
Чтобы применить внесенные в исходный код изменения, необходимо скомпилировать APK.
С помощью утилиты apktool можно собрать распакованный APK архив обратно.
сборка APK из исходных текстов
Получение ключей от карты Тройка
В запросе на чтение карты Тройка передается сессионный ключ, полученный в момент аутентификации, и серийный номер карты в формате base64.
Общее время, затраченное на работу, составило две недели. Большинство из поставленных целей исследования были достигнуты. Несмотря на применяемые системы защиты, такие как ключи доступа к карте и криптографическая подпись в секторе электронного кошелька, подделка баланса оказалась возможна.
Относительно легко был осуществлен реверс-инжиниринг приложения «Мой проездной», что позволило обойтись без взлома физических систем транспортной инфраструктуры.
Больше всего времени заняло изучение структуры данных в памяти карты. Это оказалось возможным из-за того, что данные хранятся в незашифрованном виде. В случае, если бы данные в памяти карты были зашифрованы, вероятнее всего, потребовалось бы физическое проникновение в системы работающие с картой, что делает атаку существенно сложнее.
Итогом исследования стало написание приложения TroikaDumper, позволяющее легко эксплуатировать уязвимости в системе карты Тройка, имея смартфон с поддержкой функции NFC. Приложение просто в использовании и может быть использовано массово.
https://youtube.com/watch?v=DcRx2Ym_vkg%3Ffeature%3Doembed
Для исправления найденных уязвимостей необходимо усовершенствование формата хранения данных в памяти карты и обновление программного обеспечения всех систем, работающих с картой.
Особенности приложения
Подскажите, на сайте Мобильного билета указаны следующие модели:Alcatel One Touch 922Alcatel One Touch Idol 2 mini S (6036Y)Alcatel One Touch Idol 2S (6050Y)Asus Zenfone 2BlackBerry Bold 9900BlackBerry Z10HTC Desire 500 Dual SIMHTC Desire 600 Dual SIMHTC Desire 820HTC Desire EYEHTC One M9HTC One SVHTC One SV LTEHTC One X (S720e)Huawei p9 plusLG Optimus G (E975)LG G2LG G3LG G4LG G6Nokia Lumia 620Nokia Lumia 720Nokia Lumia 730Nokia Lumia 735Nokia Lumia 820Nokia Lumia 830Nokia Lumia 920Nokia Lumia 925Nokia Lumia 930Nokia Lumia 1020 LTENokia Lumia 1520Microsoft Lumia 640 LTE DualMeizu MX4 PROMeizu PRO 5Samsung Galaxy A3 (SM-A300F)Samsung Galaxy A3 2022 (SM-A310F)Samsung Galaxy A3 DuosSamsung Galaxy A3 2022 SM-A320FSamsung Galaxy A5 DuosSamsung Galaxy A5 (SM-A500F)Samsung Galaxy A5 2022 SM-A520FSamsung Galaxy A5 2022 (SM-A510F)Samsung Galaxy A7 LTE Duos (SM-A700FD)Samsung Galaxy A7 2022 (SM-A710F)Samsung Galaxy A7 SM-A700FSamsung Galaxy A7 2022 SM-A720FSamsung Galaxy A8 (A530F)Samsung Galaxy A8 (A730F)Samsung Galaxy Ace Style LTE (SM-G357FZ)Samsung Galaxy Core LTE (SM-G386F)Samsung Galaxy Grand Prime VE LTE (SM-G531F)Samsung Galaxy J1 LTE (SM-J100FN)Samsung Galaxy J5 2022 (SM-J510FN)Samsung Galaxy J7 2022 (SM-J710FN)Samsung Galaxy J5 2022 (SM-J530FM)Samsung Galaxy J7 2022 (SM-J730FM)Samsung Galaxy Mega 6.3 (GT-I9200)Samsung Galaxy Note 3 Neo LTE (SM-N7505)Samsung Galaxy Note 3 Neo (SM-N750)Samsung Galaxy Note 3 (SM-N900)Samsung Galaxy Note 3 LTE (SM-N9005)Samsung Galaxy Note 4 (SM-N910C)Samsung Galaxy Note 5 (N920C)Samsung Galaxy Premier (GT-I9260)Samsung Galaxy S3 (GT-I9300)Samsung Galaxy S4 (GT-I9505)Samsung Galaxy S4 Active (GT-I9295)Samsung Galaxy S 4 LTESamsung Galaxy S5 (SM-G900F, SM-G900H)Samsung Galaxy S 5 DuosSamsung Galaxy S6 (SM-G920F)Samsung Galaxy S6 Duos (SM-G920FD)Samsung Galaxy S6 Edge (SM-G925F)Samsung Galaxy S6 Edge Plus (SM-G928F)Samsung Galaxy S7 (SM-G930FD)Samsung Galaxy S7 edge (SM-G935FD)Samsung Galaxy S8 (SM-G950FD)Samsung Galaxy S8 (SM-G955FD)Samsung Galaxy Note 8 (SM-N950F)Samsung Galaxy S9 (G960F)Samsung Galaxy S9 (G965F)Sony Xperia E3 (D2203)Sony Xperia L (C2105)Sony Xperia M (C1905)Sony Xperia M Dual (C2005)Sony Xperia M2 Aqua (D2403)Sony Xperia M2 Dual (D2302)Sony Xperia M4 Aqua Dual (E2333)Sony Xperia M5 (E5603)Sony Xperia Sola (MT27i)Sony Xperia SP (C5303)Sony Xperia T2 Ultra (D5303)Sony Xperia T3 (D5103)Sony Xperia TX (LT29i)Sony Xperia V (LT25i)Sony Xperia Z (C6602, C6603)Sony Xperia Z Ultra (C6833)Sony Xperia Z LTESony Xperia Z1 (C6902, C6903)Sony Xperia Z1 Compact (D5503)Sony Xperia Z2 (D6503)Sony Xperia Z3 (D6603)Sony Xperia Z3 Dual (D6633)Sony Xperia Z3 Compact (D5803, D5833)Sony Xperia Z5 DualSony Xperia ZL (C6503)Sony Xperia ZR (C5503)
Однако для работы приложения, указано что необходим мобильный с чипом NFC от NXP.Подойдет ли для работы с приложением телефон который не указан на официальном сайте но с NFC от NXP (к примеру, LG G5)?
Атака повторного воспроизведения
В результате экспериментов было установлено, что сектор памяти, хранящий информацию о балансе электронного кошелька, содержит криптографическую подпись для подтверждения подлинности данных, так называемую имитовставку. Данный механизм служит для защиты данных от подделки.
Все устройства, работающие с балансом электронного кошелька (турникеты, терминал), проверяют достоверность подписи, и, в случае несоответствия подписи, возвращают ошибку “карта неисправна”.
Установлено, что подпись формируется на основе уникального идентификационного номера карты (UID), поэтому клонирование сектора памяти электронного кошелька из одной карты на другую с отличным UID, всегда дает недействительную подпись.
Несмотря на то, что области памяти электронного кошелька защищены с помощью имитовставки, система оказалась уязвима для атаки повторного воспроизведения. Было сохранено состояние памяти сектора электронного кошелька до прохода через турникет, после чего выполнен проход и операция списания 31 рубля с баланса карты.
После чего состояние памяти карты было возвращено к исходному состоянию. В результате, на карте была восстановлена сумма баланса до прохода через турникет. Данную операцию удалось повторить несколько раз. Из этого следует вывод, что система не защищена от подобного вида атак.
шаги атаки повторного воспроизведения
Для установления возможности реальной эксплуатации уязвимости было выполнено продолжительное тестирование атаки повторного воспроизведения на инфраструктуре общественного транспорта Москвы. Первым был протестирован наземный транспорт: троллейбусы, автобусы, трамваи.
Электронный кошелек был пополнен единожды на сумму 50 рублей и все проходы через турникеты были выполнены с помощью атаки повторного воспроизведения.В течение пяти дней было совершено 57 поездок в наземном транспорте на общую сумму 1767 рублей. После чего карта была возвращена в кассу метрополитена и был получен возврат залоговой суммы в 50 рублей.
Для тестирования систем метрополитена была куплена новая карта и пополнена на 50 рублей. Все проходы через турникеты были выполнены с помощью атаки повторного воспроизведения. Было выполнено 12 поездок в течение 2 дней на общую сумму 384 рубля. На третий день карта была заблокирована на всех турникетах метро и наземного транспорта.
После полного восстановления состояния памяти карты до состояния на момент приобретения, карта продолжила работать в наземном транспорте, но блокировалась при проходе в метро. Из этого следует, что турникеты в метро имеют защиту от данного вида атак, однако срабатывает она с задержкой в несколько дней.
Декомпиляция jar в исходные тексты java
Полученные jar файлы теперь можно декомпилировать в исходные тексты языка Java.
Для этого можно использовать любой из доступных Java декомпиляторов, например
Как снять блокировку с карты
Функционал снятия блокировок будет реализован позднее
Путем подбора значений было установлено, что нулевой и первый байт в первом секторе хранит идентификатор последнего турникета, через который осуществлялся проход. Далее второй и третий байты содержат дату последнего прохода в виде количества дней от 1.1.1992.
Соответственно, 0x2260 = 8800, где 8800 число дней от 1.1.1992, что с учетом високосных лет приходится на дату 5 февраля 2016 и соответствует действительной дате прохода.
и для расчета минут
Несмотря на то, что все данные хранятся в открытом виде, на их расшифровку было потрачено больше всего времени. При этом некоторые данные остались нерасшифрованными.
Предположительно, последние пять байт в первом блоке восьмого сектора содержат криптографическую подпись (т.н. имитовставка, MAC), которая генерируется с использованием приватного ключа в памяти турникета. Данная подпись, вероятно, служит для верификации подлинности данных, записанных в секторе электронного кошелька. Однако попыток взлома алгоритма имитовставки не производилось.
В результате экспериментов было установлено, что сектор памяти, хранящий информацию о балансе электронного кошелька, содержит криптографическую подпись для подтверждения подлинности данных, так называемую имитовставку. Данный механизм служит для защиты данных от подделки. Подпись обновляется каждый раз в момент изменения баланса электронного кошелька. Это может быть операция списания при проходе через турникет, либо операция пополнения кошелька через терминал или приложение «Мой проездной».
Все устройства, работающие с балансом электронного кошелька (турникеты, терминал), проверяют достоверность подписи, и, в случае несоответствия подписи, возвращают ошибку “карта неисправна”.
Установлено, что подпись формируется на основе уникального идентификационного номера карты (UID), поэтому клонирование сектора памяти электронного кошелька из одной карты на другую с отличным UID, всегда дает недействительную подпись.
Несмотря на то, что области памяти электронного кошелька защищены с помощью имитовставки, система оказалась уязвима для атаки повторного воспроизведения.
Было сохранено состояние памяти сектора электронного кошелька до прохода через турникет, после чего выполнен проход и операция списания 31 рубля с баланса карты. После чего состояние памяти карты было возвращено к исходному состоянию. В результате, на карте была восстановлена сумма баланса до прохода через турникет. Данную операцию удалось повторить несколько раз. Из этого следует вывод, что система не защищена от подобного вида атак.
Для установления возможности реальной эксплуатации уязвимости было выполнено продолжительное тестирование атаки повторного воспроизведения на инфраструктуре общественного транспорта Москвы.
Первым был протестирован наземный транспорт: троллейбусы, автобусы, трамваи. Электронный кошелек был пополнен единожды на сумму 50 рублей и все проходы через турникеты были выполнены с помощью атаки повторного воспроизведения.
В течение пяти дней было совершено 57 поездок в наземном транспорте на общую сумму 1767 рублей. После чего карта была возвращена в кассу метрополитена и был получен возврат залоговой суммы в 50 рублей.
Для тестирования систем метрополитена была куплена новая карта и пополнена на 50 рублей. Все проходы через турникеты были выполнены с помощью атаки повторного воспроизведения. Было выполнено 12 поездок в течение 2 дней на общую сумму 384 рубля. На третий день карта была заблокирована на всех турникетах метро и наземного транспорта. После полного восстановления состояния памяти карты до состояния на момент приобретения, карта продолжила работать в наземном транспорте, но блокировалась при проходе в метро.
Из этого следует, что турникеты в метро имеют защиту от данного вида атак, однако срабатывает она с задержкой в несколько дней.
Приложение troikadumper
В рамках данного исследования, для удобства эксплуатации атаки повторного воспроизведения было создано приложение TroikaDumper. Оно позволяет локально (без подключения к интернету) просматривать записанные в памяти карты данные, такие как: баланс электронного кошелька, время последнего прохода через турникет, идентификатор последнего турникета, имитовставку, серийный номер карты Тройка, идентификационный номер карты (UID).
Приложение позволяет сохранять состояние памяти и записывать его на карту.
Приложение доступно в исходных текстах
Приложения для смартфонов
В Google Play Market было найдено несколько приложений, позволяющих работать с электронным кошельком карты Тройка. Наиболее популярным по числу установок является приложение «Мой проездной», позволяющее напрямую пополнять карту с помощью смартфона с функцией NFC. Это означает, что приложение содержит данные, позволяющие производить запись в память карты.
Потенциальный вектор атаки: реверс-инжиниринг приложения.____
Из всех рассмотренных целей было решено остановиться на реверс-инжиниринге приложения «Мой проездной», как на более простом и безопасном варианте. Для этого достаточно было приобрести смартфон на платформе Android с поддержкой функции NFC. Выбор данной цели обусловлен еще и тем, что для исследования не требовалось иметь доступ к объектам общественного транспорта, и все операции по поиску уязвимостей можно было произвести не выходя из дома.
Приложение «Мой проездной» предназначено для самостоятельного пополнения карты Тройка. Работает на смартфонах с операционной системой Android и функцией NFC. Приложение бесплатное и доступно для загрузки через Google Play Market (каталог приложений Android).
Конвертация dalvik executable (dex) в java archive (jar)
Для анализа кода приложения необходимо сконвертировать .dex файлы, полученные из APK архива, в .jar файлы, которые далее могут быть декомпилированы в исходные тексты на языке Java. Это можно сделать с помощью программы dex2jar
Mifare
Mifare – считается наиболее распространённой торговой маркой безконтактных карт, не удивительно, что именно на основе этой технологии сделали карту Тройка.
Ближе к делу
Так вот, еще в 2022 году мы с ребятами начали разбираться с этой картой. И создали кое-что интересное.
Приложение называется Troika Dumper, GITHUB.
За основу основ для программы взяли мобильное приложение “Мой Проездной”, оно было разобрано и переработано в Troika Dumper.
Запрос баланса
После получения ключей с сервера, происходит считывание необходимых секторов памяти с карты и отправка содержимого памяти на сервер. В данном примере видны сектора 0,4,7,8.
Валидаторы в метро
Служат для проверки состояния проездных билетов и записи баланса на электронный кошелек карты Тройка. Подключены к сети. Предположительно, работают на базе x86-компьютера и операционной системы Windows.
Потенциальный вектор атаки: проникновение во внутреннюю сеть, эксплуатация уязвимостей операционной системы._____
Конкурс – troika dumper – бесплатные проезды
Статья для участия в конкурсе
Конкурс 2022 года – авторская статья по любой тематике нашего форума!
Моя первая статья на форуме, так что не съедайте меня. Пишу для конкурса, заодно и поведую вам реально интересное.
Вы все знаете карту Тройка:
Она устроена довольно просто. Её начинкой является чип Mifare Plus, именно его уязвимость эксплуатирует данная прошрамм, также карта хранит все данные в себе.
Поняв это, мы можем предположить то, что эту карту можно вскрыть и пополнить себе баланс. К сожалению, если пополнить себе баланс, то это заметят и карту заблокируют. По этому лучший вариант, это сделать дамп памяти карты и пользоваться им.
Ближе к делу:
Так вот, в далёком 2022 один хороший человек разобрался с этой карточкой и написал приложение о котором я расскажу.
Смысл работы программы:
Раскрыв приложение “Мой Проездной” разработчиком Troika Dumper были внесены изменения в программу, он удалил проверку ssl сертификата, который использовался для соединения с сервиром, что позволило совершить перехват трафика и полнее понять работу карты. Оказалось, что все данные хранятся в карте: баланс, последнее время прохода и прочие данные. Выглядит это примерно так:
Как пользоваться программой:
Всё банально просто, вам надо включить приложение, поднести карту, после этого на экране отобразится подобное:
Здесь мы видим номер карты, зашифрованные данные сектора карты, а ниже расшифрованые данные.
Не обращайте внимание на дату, и сейчас всё работает. Никто ничего не стал исправлять, хотя некоторые люди знают об этом.
Пример использования (что бы вашу карту не заблокировали):
Придуман чисто мной, я не призываю вас его использовать.
1. Сохраняем состояние карты на телефон (Просто подносим карту к телефону)
2. Идём в метро и платим
3. Выползаем на той станции где вам надо
4. Записываем дамп с телефона на карту (Кнопка “карандаш” и прикладываем карту)
5. Идём в автобус и платим там проезд (Только в случае если обратно собираетесь в метро, это нужно для обновления времени проезда, ведь сейчас на карте уже дамп карты до её использования)
Короче, Вам надо сделать дамп, и каждый раз перед входом в метрополитен, мы платим за проезд в автобусе, тем самым обновляя последнее время проезда. А в метро заливаем дамп на карту и всё начинается с начала.
Никогда не платите в метро картой у которой одно и то же время прошлого использования, блок прилетит сразу.
Это очень интересная программа. Но у всего есть свои минусы, например все эти действия попадают под 159.3 УК РФ как махинации с электронными картами. Минимальный срок заключения – 3 года. Так что не стоит этим этим сильно увлекаться.
Из этого можно понять, что не всё слишком хорошо защищено, даже такая известная карта, которая есть у каждого москвича, имеет свои уязвимости.
Всё предоставлено только для ознакомления, если Вы вдруг сделаете нехорошые вещи, то вся ответственность лежит на Вас, не забывайте это!
Автоматы продажи билетов метро
Служат для продажи проездных билетов и пополнения электронного кошелька карты Тройка. Возможна оплата наличными и кредитными картами с помощью систем PayPass/PayWave.
Работают на базе x86 компьютера под управлением операционной системы Windows. В момент сбоя управляющей программы можно видеть интерфейс операционной системы и служебные программы.
Подключены к сети по технологии Ethernet, замечен UTP кабель, идущий к автомату.
интерфейс приложения TroikaDumper
Процесс работы
Использование приложения не вызовет у вас никаких трудностей. Установите его на мобильный телефон, поднесите карту и получите ее данные на экране. Здесь есть информация о балансе, последнем проходе через турникет и его идентификатор.
После считывания карты все сведения памяти автоматически заносятся в архив, который находится в нижней части экрана в виде папки. Чтобы поменять ее содержание и получить дополнительный дамп, необходимо зайти в нужный архив и нажать кнопку «запись».
С помощью таких действий есть возможность пополнить карту без внесения денежных средств. Не забудьте, что сумма не должна превышать 100 руб., т. к. крупный вклад может быть замечен системой безопасности. Это повлечет за собой автоматическую блокировку ТК.
Как пользоваться программой
Перехват защищенного трафика выполняется методом проксирования SSL-подключений с подменой сертификата сервера. Для этого существуют инструменты, вроде Mitmproxy или Fiddler, позволяющие выполнять подмену сертификата и запись расшифрованных данных автоматически. В данном случае, mitmproxy запущен на сервере, к которому по WiFi подключен смартфон с установленным приложением «Мой проездной». В приложении выполнена аутентификация по PIN-коду и произведена проверка баланса на карте Тройка. Все передаваемые в этот момент данные между сервером и приложением были записаны и проанализированы.
Аутентификация
В теле запроса передается номер телефона, PIN-код и информация об устройстве.
В ответе сервера содержится ID пользователя и сессионный ключ.
Инструкция
Где 137B8 значение в памяти карты в шестнадцатеричном формате, а 399 сумма в рублях.Таким образом можно рассчитать значения из предыдущей таблицы.
Анализ исходного кода
Полученные с помощью Java Decompiler исходные тексты могут быть загружены в любую IDE (Integrated Development Environment) для более удобного изучения. Например, Android Studio.
Декомпилятор не всегда идеально обрабатывает проект — иногда он не справляется и оставляет части smali-кода. Но это не критично, так как главной задачей на данном этапе является анализ кода. Основной целью поиска в исходных текстах программы были ключи для доступа к секторам карты Тройка, описание формата хранения данных в областях памяти карты, содержащих баланс электронного кошелька и механизм пополнения баланса карты.
Беглый анализ исходных текстов позволил найти основные классы и методы работы приложения: регистрацию, работу с кредитной картой, запрос баланса и прочее. Однако ключей для доступа к карте Тройка в исходных текстах обнаружено не было. Было решено не тратить время на подробное изучение исходных текстов, а вместо этого исследовать данные, которыми обменивается приложение с сервером во время работы.
классы в коде приложения «Мой проездной»
В ответе содержатся ключи A и B от секторов 2,4,7,8 в формате base64.
Примечательно, что здесь так же присутствуют ключи B, которые используются для записи данных на карту, хотя для запроса баланса достаточно было бы ключей А, разрешающих только чтение секторов памяти.
В ответе содержится информация о билетах, записанных на карте и баланс электронного кошелька.
Приложение «Мой проездной»
Приложение «Мой проездной» предназначено для самостоятельного пополнения карты Тройка. Работает на смартфонах с операционной системой Android и функцией NFC. Приложение бесплатное и доступно для загрузки через Google Play Market (каталог приложений Android). Так как приложение позволяет производить непосредственную запись баланса на карту, очевидно, что оно содержит ключи для чтения и записи. Далее будут описаны шаги реверс-инжиниринга приложения для получения требуемых данных.
Загрузка APK-архива
Для изучения кода необходимо получить приложение в виде установочного архива APK (Android application package). Проще всего это сделать, используя один из многочисленных онлайн-сервисов для загрузки APK, например apkpure.com. С помощью данного сервиса можно загрузить любые приложения из Google Play Market на компьютер.
APK-файл приложения Android является архивом, внутри которого находятся файлы ресурсов, конфигурации, графика и другие мультимедиа данные, а также файл classes.dex, который является скомпилированным кодом приложения.
С помощью утилиты ibotpeaches.github.io/Apktool/ APK-файл может быть распакован. Вместе с этим файл classes.dex будет разложен на множество файлов формата *.smali.
Smali — это формат исходных текстов для Dalvik, виртуальной машины Android. Это низкоуровневый язык, язык ассемблера Dalvik. Файлы будут иметь порядковые имена вроде a.smali, b.smali, и т.д., внутри них объявления классов, методов, и инструкции виртуальной машины. Структура папок будет развернута в соответствии с названием пакетов классов.
Таким образом было получено развернутое по составляющим и готовое для анализа и модификации приложение. Однако анализировать smali-код довольно сложно. Во-первых, код содержит большое количество вспомогательных инструкций и не удобен для чтения человеком. Во-вторых, не существует доступных инструментов для работы с кодом (подсветка синтаксиса, рефакторинг, навигация по классам и методам).
Намного удобнее было бы использовать для анализа высокоуровневый исходный код на языке Java, далее будет рассмотрен процесс его получения из того же APK-файла.
Для анализа кода приложения необходимо сконвертировать .dex файлы, полученные из APK архива, в .jar файлы, которые далее могут быть декомпилированы в исходные тексты на языке Java. Это можно сделать с помощью программы dex2jar github.com/pxb1988/dex2jar. Как очевидно из названия, она конвертирует .dex файлы в формат .jar. Поскольку конвертируется только код, без ресурсов, конфигурационных и медиафайлов, .jar-файл на выходе обычно будет меньше по размеру, чем исходный APK.
Полученные jar файлы теперь можно декомпилировать в исходные тексты языка Java.
Для этого можно использовать любой из доступных Java декомпиляторов, например JD-GUI
Во время работы приложение «Мой проездной» устанавливает соединение с сервером bmmobile.bm.ru. Для защиты от прослушивания и модификации данных все передаваемые данные между приложением и сервером зашифрованы с помощью протокола TLS. Для проверки подлинности ключа сервера используются TLS сертификаты.
В приложение «Мой проездной» встроена проверка отпечатка сертификата для предотвращения подмены сертификата и прослушивания передаваемых данных на сетевом уровне. Так называемый Certificate Pinning.
функция проверки отпечатка TLS сертификата
В данной проверке явно задан SHA1 отпечаток сертификата, поэтому в случае подмены сертификата проверка не будет пройдена и соединение с сервером установлено не будет. Даже в случае выпуска сертификата от другого сертификационного центра.
цепочка сертификатов и отпечаток сертификата bmmobile.bm.ru
Для перехвата данных необходимо было подменить сертификат, используемый для установления зашифрованного соединения. Наиболее простым решением этой задачи оказалось отключение проверки TLS сертификата. Вернее, модификация условия проверяющего отпечаток таким образом, чтобы любой сертификат проходил проверку успешно.
Функция проверки отпечатка циклично проверяет отпечаток каждого сертификата в цепочке сертификатов, и в случае, если найдено совпадение, проверка завершается успешно. Таким образом, в цепочке всегда присутствуют сертификаты, отпечатки которых не совпадают с заданным в коде.
цикл проверки отпечатка TLS сертификатов
Для обхода данной проверки достаточно модифицировать условный оператор сравнения отпечатка в smali-файле, заменив if-eqz на if-neq, что означает обратное условие «не равно».
В результате проверка проходит успешно для любого сертификата, как поддельного, так и оригинального, достаточно чтобы в цепочке сертификатов присутствовал хотя бы один сертификат с отличным от заданного отпечатком.
Примечательно, что это единственная модификация кода, которая потребовалась для отключения защиты от подделки сертификата.
изменение условного оператора в цикле проверки отпечатка сертификата
Чтобы применить внесенные в исходный код изменения, необходимо скомпилировать APK.
С помощью утилиты apktool можно собрать распакованный APK архив обратно.
Заключение
Из перехваченных сообщений видно, что ключи для чтения карты Тройка загружаются с сервера каждый раз во время чтения карты. Были получены ключи от секторов 2,3,4,6,7,8,15. Найдены сектора памяти, содержащие данные электронного кошелька и информацию о билетах, записанных на карте. Все эти данные получены за одну операцию считывания баланса. Платежные реквизиты в приложение добавлены не были, никаких платежных операций не производилось. Примечательно, что для операции чтения баланса с сервера загружаются одновременно A и B ключи, хотя ключи B используются для записи данных в память карты. В результате, атакующий может получить возможность записи данных на карту, выполняя только операции чтения.
Выяснено, что формат данных в памяти карты анализируется удаленно на сервере, и не передается в приложение. Поэтому на данном этапе установить каким образом данные организованы в памяти карты нельзя. Однако полученная информация позволяет продолжить исследование.