Атаку подобрали при помощи приложения для Android, где слабо была защищена часть отвечающая за противостояние MITM-атакам, данные о балансе карты и не была устранена возможность атаки типа "повторное воспроизведение":
...Для обхода данной проверки достаточно модифицировать условный оператор сравнения отпечатка в smali-файле, заменив if-eqz на if-neq, что означает обратное условие «не равно».
В результате проверка проходит успешно для любого сертификата, как поддельного, так и оригинального, достаточно чтобы в цепочке сертификатов присутствовал хотя бы один сертификат с отличным от заданного отпечатком.
Примечательно, что это единственная модификация кода, которая потребовалась для отключения защиты от подделки сертификата.
...
Чтобы понять структуру хранения данных в памяти карты, была использована чистая карта, купленная в кассе, по которой не было выполнено ни одной поездки. Далее карта была пополнена 10 раз на 1 рубль через автомат. После каждого пополнения состояние памяти сохранялось. В конце все сохраненные данные были сравнены и установлено, что изменения происходят только в двух блоках 8 сектора.
дампы памяти восьмого сектора после пополнений на 1 рубль
Видно, что данные изменяются в первом блоке (нумерация от нуля) с 9 по 15 байт. Очевидно, что в данном месте содержится баланс электронного кошелька. Путем подбора возможных форматов хранения данных было выяснено, что значение баланса электронного кошелька хранится в области памяти от младших 4 бит 8 байта до старших 3 бит 10 байта и рассчитывается по формуле:
Где 137B8 значение в памяти карты в шестнадцатеричном формате, а 399 сумма в рублях.
Таким образом можно рассчитать значения из предыдущей таблицы.расчет баланса в секторе электронного кошелька
....
Несмотря на то, что области памяти электронного кошелька защищены с помощью имитовставки, система оказалась уязвима для атаки повторного воспроизведения.
Было сохранено состояние памяти сектора электронного кошелька до прохода через турникет, после чего выполнен проход и операция списания 31 рубля с баланса карты. После чего состояние памяти карты было возвращено к исходному состоянию. В результате, на карте была восстановлена сумма баланса до прохода через турникет. Данную операцию удалось повторить несколько раз. Из этого следует вывод, что система не защищена от подобного вида атак.
Добавить 5 комментариев
На сколько мне известно в метро с такой картой пройти нельзя, там турникет сходит на сервер и посмотрит баланс. Но скорее всего можно в автобусе, на карте лежит баланс для оффлайновой авторизации когда интернета нет, а скидывается на сервер потом когда автобус приедет в парк.
Ты прочитай текст то — в метро ходили.
В питерском метро в аналогичной ситуации в первый день пускает (добавлялось число поездок), но на следующий день, карта оказывалась в чёрном списке.
На наземном транспорте таких проблем нет.
С наземным транспортом такую вещь вообще тяжело
А так я один раз попал в черный список питерского метро картой PayPass, на которой денег вообще не было, через неделю только оттуда вынули.
В обоих случаях (метро/наземный) карта попадет в чёрный список максимум на следующий день навечно. В метро это будет автоматом означать что ее можно уже просто выкинуть… а в наземном все не так однозначно, текущее оборудование не позволяет держать в каждом устройстве контроля все «плохие» билеты, но правда и тут сложно будет попользоваться, т.к. никто не мешает грузить в устройства именно то, чем пользуются, выкинув то, что давно не встречалось, так что все равно прибьют, но просто тут вероятность не совсем 100% и может занять много больше времени…