Как стать автором
Обновить

Комментарии 348

Вот за это я люблю Хабр
Тема с 2008 года существует, ничего нового
Ссылку можно?
fotonstep прав. Может, не с 2008 года, но два года уж точно.
Я рад, что fotonstep прав. Ссылку можно?
Спасибо!
Сосач умер
Сосач жив
А ссылка жива.
Официально криптопротокол mifare classic был взломан в 2008 г. студентами одного голландского университета.

Поскольку криптопротокол classic называется crypto1, впоследствии была разработана энтузиастами библиотека crapto1 (игра слов — crap — г… о), которая позволяет, например, легко вытаскивать ключи из подслушанного протокола между картой и ридером.

Ссылку приводить не буду — легко гуглится.

Ну а в kali linux давно уже в поставку входят утилиты, эксплуатирующие уязвимость чипов mifare classic

В Хакере, вроде бы, про это несколько раз писали, про Mifare Classic. Там еще с программатором приходилось возиться, NFC не было :)
Именно. Вот начало этой темы: https://xakep.ru/2009/02/06/47074/
И то, на каком-то из сайтов геймленда она появилась на полгода раньше. Сейчас уже не помню, где именно
Да да. Но тогда все было сложно, а теперь у каждого второго смартфон с NFC…
Хм. Насколько мне известно, раньше меня этим никто не начал заниматься (по крайней мере в открытую). Если я что-то упустил тогда, было бы интересно посмотреть что. Правда.
Читаю, и думаю скинуть тебе ссылку, а вон ты тут ;)
Агась )
+1
Автору просто респект и уважение
А в зоопарк можно несколько раз сходить?
Данная система не была протестирована, но вероятнее всего можно.
В Аэроэкспрессе можно было покататься :) Теперь там онлайн проверка.
Валидаторы в метро

Предположительно, работают на базе x86 компьютера и операционной системы Windows.

image

WinXP
Чиновники!..
Хабраюзеры, а можно минуснуть и ответить, а не просто минутность?
Вот зачем ставить Win на такое оборудование?
Потому что это просто. Программистов полно которые под вынь напишут. И зачем тогда с чем то ещё заморачиваться.
Легче сертифицировать все это дело чем городить с нуля.
Даже там где дело не касается сертификации могут так сделать просто потому что быстрей(видел такое несколько раз) а на проект дали мало времени(потому что было 5 посредников и на передачу от одного к другому ушло 80% заложенного времени) поэтому делайте на винде.
… и 80% денег
Потому что, себестоимость аппарата (или как его там валидатора) в автобусе 10 тыс рублей, а по бумагам он проходит 270 тыс рублей, потому как на win xp ничего программировать не надо оно все есть в инете нахаляву и остается только подкрутить, но при этом снять за это большие бабки типа разработали сами.
Себестоимость прототипа этого аппарата, собранного из говна и палок на коленке 10 тыс. рублей, вы хотели сказать ;)

То что установлено это промышленное вандалоустойчивое оборудование (то что в подвижных единицах ещё и для транспорта), прошедшее испытания и сертификацию (по всем словам ранее), кроме того в сумму входит не только устройство но ещё его установка и куча сопутствующей работы рядом, вроде прокладки коммуникаций, косметическая работа после и пр…

А какие есть причины не ставить? Сэкономить пару сотен баксов на лицензии?
Знаете сколько станков и прочей индустриальной хрени написано по принципу «контроллер на ARM, управляющий компьютер на Винде»?
В чем проблема?

анекдот_про_самолёт_на_Винде.txt
У многих нынче этот вопрос в голове. И причем он касается далеко не только систем обслуживания. Понятно, что надежная ИС — это фундамент надежности всей системы в дальнейшем, но всемжепофиг

Часто ответ даже еще проще: никто даже не думает о том, что есть что-то другое(не WinXP)…
Поправьте, если ошибаюсь. Криптоустройства должны иметь лицензию для использования в коммерческих целях. Да и сами устройства и программное обеспечение должны соответствовать требованиям всяких разных ФЗ и ФСБ. Винда обладает и тем и другим и третьим. Насчёт других операционных систем сказать не могу.
Там не просто Win, а, в данном случае, Windows XP Embedded POSReady, т. е. специальная редакция, которая как раз и предназначена для такого оборудования.

Ставят потому что хорошая поддержка со стороны железа (драйвера), адекватная поддержка со стороны самих MS, а также кучи организаций, которые эти решения внедряют и поддерживают, ну и конечно же море уже написанного и хорошо работающего ПО. В общем, если коротко: развитая экосистема вокруг ОС.
Согласен, не вижу никакой проблемы в использовании Windows на таких устройствах.
Хамелеон в текущей итерации очень плохо работает, увы. Ждем новую итерацию.
А вы с разработчиками связвались, по поводу
>>исправления найденных уязвимостей необходимо усовершенствование формата хранения данных в памяти карты и обновление программного обеспечения всех систем, работающих с картой.
Да. Никого это не заинтересовало.
Круто. Тогда с нетерпением жду разбор питерского подорожника.
А вот там разработчиков это очень интересует, вплоть до разборок по поводу и без.

Вот проводишь такие исследования, а ведь рапортовать потом страшно: а вдруг вместо "спасибо", повестка в суд придёт? Ведь, по факту, на некоторую сумму нагрели же.

Да, подорожник интересно было бы
О том, что вы пытались связаться с разработчиками и их ответ, что им это неинтересно — стоило бы добавить в статью, можно даже в самое начало, чтобы руководство этих разработчиков сразу бы это видело.
Поддерживаю.
Чтобы у читателя не складывалось впечатление, что автор просто сделал утилиту для незаконного прохода, ибо у меня сложилось именно такое представление.
Я бы хотел видеть, что была не только проведена работа, но сперва уведомлены подверженные атаке члены, и только после их отказа от устранения неисправностей, желательно с отчётом о том, что они сказали, открытые примеры эксплойтов.
ви так говорите, как будто это что-то плохое…
Нет, не так. Вот так: «Вы так говорите, как будто это что-то изменит или чему-то поможет...»
Это не обязательно плохое. Но я очень огорчусь, если автора статьи пострадает от известно кого. И вдобавок таких статей на Хабре больше не появится из-за подобных случаев.
Судя по количеству плюсов у подобных постов у хабрааудитории наивность довольно велика.

Ребята, поймите простую вещь — разработчикам не заказывали _абслютно защищенную систему_.
Для них достаточно просто обеспечить невозможность массовой коммерческой эксплуатации уязвимостей. Понимаете разницу?

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

А пока умные мальчики поковырявшись неделю бесплатно ходят в зоопарк или планетарий это никого не волнует.
обеспечить невозможность массовой коммерческой эксплуатации уязвимостей. Понимаете разницу?
приложение TroikaDumper… позволяет сохранять состояние памяти и записывать его на карту

Нет, не понимаем. А вы понимаете?
Хорошо, опишите тогда возможный сценарий зарабатывания заметных денег на этом.

Ключевые моменты:
— деньги нельзя получить из системы, их можно только сэкономить,
— онлайновый дабл-спенд пресекается на раз-два, причем, с перспективой маскишоу и последствиями,
— офлайновый дабл-спенд ограничен временем (5 дней, если не ошибаюсь) и он все-равно виден в логах по результатам дня
— пользовательское телефонное приложение ломается всегда по определению, но сделать в очередном релизе привязку по номеру телефона не так уж сложно.
Заработать деньги на это нельзя, даже если бы никакой защиты вообще не стояло.
Можно было бы только сэкономить и ждать маски-шоу.
Но вот экономить может неограниченное число пассажиров.
Это только в теории.

На практике фродовое приложение моментом выкинут из стора, как только это понадобится. На официальное приложение можно напустить обфускатор и оно перестанет ломаться одним if'ом. Ради чего потом кому-то надо будет тратить немало времени, чтобы сломать его? Только ради любви к искусству трудиться более одного раза обычно лень.

Это я все к тому, что разработчикам системы все эти вещи известны лучше, чем нам всем вместе взятым, а риски давно известны и оценены.
И риск получения ключей, конечно, оценен дешевле, чем обфусцирование кода клиентского приложения?
Хочется верить, конечно, что взяв за основу уязвимый протокол разработчики оценивали риски и выбрали его осознанно
Тут как бы вариантов особо нет — андроидное приложение разбирается всегда. Просто цель разработчиков сделать эти работы экономически невыгодными.
>> онлайновый дабл-спенд пресекается на раз-два, причем, с перспективой маскишоу и последствиями,

Почему?
Что почему?

Почему управляющая система способна заносить карту в стоплист по определенному событию или условию?

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

А спрашивал я да, про маски-шоу: Вы предпологаете борьбу скорее с конечными пользователями?
Ну в смысле, если существуют воры, то с ними вполне можно бороться :)
Тем более, когда факт и умысел налицо.
Факт и умысел ещё доказать надо. Если стоять за турникетами и каждому за полцены поездки накидывать — тогда да. А если я дома себе возвращаю потраченные деньги — то какой факт может быть? Вот моя тройка, вот я ей пользуюсь. Пользуюсь ей как указано в правилах пользования. А что там считывается или нет — откуда мне знать?
Вопрос в том, что уже есть неофициальный дампер, не требующий привязки к телефонному номеру.
И что бы он перестал действовать — надо менять структуру, в том числе все карты, которые на руках.
Некоторые продаются на год.
То есть как минимум, год это будет действовать.
«Проблема абсолютно точно не в “железе”. Судя по описанию того, как происходил взлом, “дыра” находится в программном приложении, с помощью которого удалось получить доступ к информации, которой обменивается карта и система прохода, а также к памяти карты. Это не наша сфера ответственности, связь карты с турникетом работает, к нам вопросов нет», — подчеркнул Дианов.
news.mail.ru/society/25925519/?frommail=1
Насчет «железа» (как комбинации собственно железа и его эмбеддед софта), вы видимо, не знаете всей печали и глубины. Описанная проблема, может быть и не в железе (и то явно, а не косвенно). Но существует и масса других проблем, гораздо более печальных.

Во-первых, статья крутая, спасибо! =)


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

зачем это делать? Он разве обязан? Ему за это платят?

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

Я с вами в целом согласен, но боюсь если он даже предварительно сообщил об этом в руководство Метрополитена — ничем его не обезопасит. Так как он опубликовал до устранения уязвимости.

зачем это делать?

Как минимум, чтобы за мошенничество не посадили.

Если вы придёте куда-то и официально заявите, что украли пару тысяч рублей из платёжной системы, то это не снимет с вас ответственности.
Наоборот, это будет по сути явкой с повинной.
Уголовно наказуемое действие, разве нет?
Причем полный букет статей из раздела «преступления в сфере компьютерной безопасности»…

Исследование достойное, заслуживает внимания.
Но приложение, выложенное в общий доступ, мне кажется, лишнее.
У вас уже покупка билетов стало уголовно наказуемым? Едва ли под это найдется статья, ну подошел человек к турникету, ну открыл, развернулся и пошел обратно.Какая из этого материальная выгода? Да и вообще, если посмотреть, автор не похож на человека, который потратил на это две недели просто для того, чтобы на метро бесплатно покататься.Статья хорошая, мне понравилось.
Реверс инжиниринг, внесение в приложение деструктивных изменений, предоставление неограниченному кругу лиц инструмента вносящего изменнения в работу программно аппаратного комплекса с целью мошейничества. Боюсь правоохранительные органы бдут не согласны трактовать это как покупку билетов.
Цель и мошенничество еще надо доказать, особенно когда автор выкладывает в свет свои эксперименты (то есть, фактически, обкладывается говном загодя, чтобы на сраной козе было подъехать труднее, что правильно). Но с другой стороны, у нас ведь как — был бы человек…
А все выше указанное надо доказать, как и доказать то, что было умышленное действие с целью обогащения, что в принципе практически невозможно, тем более автор указал, что все сведения были переданы разработчикам, которым влом что-то с этим делать, так в чем тогда вина автора? Опять же, никакой экономической выгоды для себя автор при всем этом не получил, никаких деструктивных изменений не было внесено, прочитайте статью автора еще раз, он не разбирал алгоритм ключа, вследствие чего он мог только делать откаты, а не фактические изменения.И да, сложно из этого сделать уголовное дело без большого ущерба, да и вообще, сами то верите, что все вот так прямо побегут пользоваться этим всем делом? Многие то в этом вообще ничего не понимают, да и едва ли будут разбираться в этом.
Если посмотреть с несколько более отрешенной точки зрения, то получится, что у нас уголовно наказуемое действие — по улице ходить, грубо говоря. Поэтому, обычно каждый сам ставит перед собой вопрос и дает на него ответ (то есть на что-то такое решается или нет в результате).
значение баланса электронного кошелька хранится в области памяти от младших 4 бит 8 байта до старших 3 бит 10 байта и рассчитывается по формуле
137B8/C8=18F(16)=399(10)

C8(16) == 200(10)
Сомнительно, чтобы они хранили сумму в полу копейках. Вероятно младший бит служебный и используется для контроля четности или должен всегда равен 0.
А я решил, что это такой юмор разработчиков: за поездку на «тройке» расплачиваться, «полушками» :-).
Аккуратнее так. Сейчас везде стоят камеры и любая подозрительная активность (а несоответствие данных при синхронизации, пусть даже и отложенной, вполне под неё подходит). Особенно если иметь наглость ездить через одни и те же станции а метро.
А по теме — спасибо, очень интересно. Тоже хотелось его поковырять, но покупать для этого новый смарт как-то не хочется.
Таким и должен быть пост для Хабра. Спасибо, прочёл все с удовольствием.
прямо как хороший детектив почитал. respect
Отличное исследование!

У меня на Android 4.2.2 TroikaDumper-0.1.apk 1 640 086 байт не захотел ставится.
«Синтаксическая ошибка» «Ошибка при синтаксическом анализе пакета»

Mifare Classic Tool на Тройку ругнулся, что такой тэг неизвестен.

Не рассмотрены анлим тарифы Тройки — когда покупаешь на 3 месяца или на год без ограничений по числу поездок.
Приложение точно работает на Android 6.

В приложении прописано Min SDK 19 (т.е. Android 4.4) из-за чего вы и получаете данную ошибку. Если оно не использует специфику 4.4+, то можно в наглую изменить min.SDK через тот же APKtool
Я правильно понимаю, что автор нашел уязвимость, создал удобное средство её эксплуатации, доступное для массового использования, написал об этом на хабр — и все это под собственной именем и фамилией?
НЛО прилетело и опубликовало эту надпись здесь
Исследование безопасности — молодцы. Тщательность анализа — супер.

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

Что надо было сделать? Приобрести жетонов/билетов на сумму, равную сумме умотреблённого в результате уязвимости. Жетоны можно было просто покидать обратно, билетики сохранить.
Фактических проездов на транспорте не происходило. Для проверки достаточно было открыть турникет.
Скорее всего, если бы ты проходил в турникеты, а не просто бы их открывал, то карточка залочилась бы за пол дня (в метре). Они отслеживали «машину времени» достаточно активно. Если только опять что-то не переделали и не поломали в процессе.
тогда фотки этого человека с камер у них в изобилии.
Но поскольку проходов не было — предъявить ему нечего,
соотв правоохранители не привлекались.
Насколько мне известно, у нас (в Мск) это практически не работает. Но инфа может быть устаревшая.
А на наземном транспорте? Пикали картой и выбегали?
> Приобрести жетонов
Я вас удивлю :)
Ну, может человек из Питера.
Тройка в Питере?
И да, жетоны в метро есть, например, еще и в Екатеринбурге. Московские, кстати :)

Пару лет назад в Новосибирске ещё были. А в Питере больше нет? Давно там не был. В Москве ещё лет 8-10 назад их не стало. Был расстроен — думал собрать образцы жетонов городов, где в России метро есть :) Пока только Питер, Новосибирск.


ЗЫ а я думал, что у нас только 4 метрополитена: Екатеринбург, Москва, Питер, Новосибирск, оказывается ещё есть в Нижнем Новгороде, Казани и Самаре.

Есть-есть, никуда не делись.

Кстати, в Новосибирске свои жетоны, или привозные, как в Екатеринбурге? :)

Мне показалось — какие-то более тонкие. Дома нужно найти, сфотографировать. Но чеканка своя, правда скромная, Питерский красивее :) По слухам, тоже от жетонов отказываться будут.

Свои, и, да, тоньше монеток.
В Омске есть. Правда, там всего одна станция, и поэтому я не уверен, что есть жетоны.
В Питере ещё есть юбилейные жетоны.
Статья отличная! Но я очень беспокоюсь за дальнейшую судьбу автора, держите нас в курсе :)
«Куда вы меня уноси...»
Превосходная статья!
Риторический вопрос: у нас в городе используются обычные транспортные карты с магнитной лентой. Всегда, глядя на тетенек в метро, пополняющих эти карты, думал: какая защита у этих карт от чего-то вроде скимминга или даже кражи пополняющего терминала?
помнится, раньше копировали бумажные метробилеты с магнитной полосой с помощью устройств на базе головки от катушечного магнитофона
Но годы идут, и теперь у нас есть Cardberry и прочее говно.
Первое время в Питере турникеты были с несколькими головками чтения-записи, чтобы карточку можно было вставлять как угодно. Карточка перезаписывалась каждый раз, и для копирования было достаточно вставить 2 карточки в 1 считыватель.
НЛО прилетело и опубликовало эту надпись здесь
Ключи однинаковые для всей системы. В приложении TroikaDumper они просто захардкожены.
Вот на этом месте реально отвисла челюсть! Я даже нецензурных слов не могу подобрать таких, чтобы полно и ёмко охарактеризовать этот факт!
В этом нет ничего криминально страшного, особенно с учетом использования имитовставки. «Машина времени» (как я уже написал выше в комментах) еще относительно недавно достаточно бодро отслеживалась в Метро, вроде бы вплоть до того, что на этой же станции трюк повторно не срабатывал. Но, опять же, могли что-то поменять или поломать.
Хотя в принципе, брать карту Plus и юзать ее в режиме совместимости — уродство, но на то у них есть некоторые печальные причины, от которых так просто не избавиться :)
Увы. Старые дешевые Mifare Classic ридеры просто не предусматривают деривацию ключей.
Только мастер ключи и на ограниченное количество «слотов».

А совместимость с инфраструктурой гораздо дороже чем мелкие потери от хакеров.
С учетом того, что и еще есть «черный список» карт, загружаемый в устройства.
Потенциальные потери от мошенничества — ни о чем.
> Время последней поездки, записанное в секторе памяти электронного кошелька, не должно повторяться при поездках в метро
Ammonia подскажите, но ведь это значит, что можно через программу эмулировать-генерировать любое время последнего прохождения, и тогда можно не заморачиваться с синхронизацией через автобусы?
Нет, имелось в виду, что для обновления времени прохода нужно использовать валидаторы в наземном транспорте.
Вы не сможете изменить никакие данные на карте самостоятельно, иначе будет недействительная криптоподпись.

Дополнил текст в статье.
Очень круто. Респект.
Вот теперь я знаю зачем NFC нужен в телефоне!
Ну, я знаю несколько программ банков и платежных систем, которые вполне успешно эмулируют пластиковые карты для беспроводной оплаты. Тоже вполне неплохо.
А так-же упоминаемая в статье программа «Мой проездной» вполне неплохо работает, что даже в кассы спускаться не надо для пополнения, всё через телефон… было… до этого времени))
Постоянно плачу с мобилки в окрестных супермаркетах.
Пусть меня поправят знающие люди — правильно ли я понимаю, что такой трюк с приложением на ios не получился бы? То есть наверняка .ipa можно как-то декомпилировать, но поправить код, собрать обратно и запустить — вряд ли?
Не срача ради, правда интересно.

А статья чудесная. Надеюсь она приведёт к усовершенствованию системы(что в такой консервативной области весьма круто). Спасибо!
но поправить код, собрать обратно и запустить — вряд ли

Имея девелоперский сертификат это не составит труда.

Девелоперский сертификат сейчас можно даже бесплатный использовать.

Что то мне кажется что декомпилировать ObjectiveC ещё можно а вот чтобы скомпилировать можно, а вот чтобы скомпилировать назад придётся прилично повозится. Всё таки там бинарный код а не, код виртуальной машины как у Java, Lua и если ничего не поменялось то .Net.
и че дизасемблеры отменили?
Нет конечно, но сложность по сравнению с декомпилятором получается совсем другая.

Вполне можно, иначе откуда берутся крякнутые игры на торрентах?

Насколько мне известно, NFC в iPhone работает только в связке с ApplePay, так что для того, чтобы сделать подобное приложение для айфонов, придется еще взламывать ограничение на NFC.
NFC на iPhone аппаратно не позволяет читать другие карты из-за отсутствия активной антенны
Странное утверждение, не очень потяно, что имеется ввиду. Чтобы NFC вообще работал, требуется как раз антенна, без этого как по радиоканалу вы общаться с картой планируете?
Ну и как реально можно защитится от восстановления дампа? Это надо чтоб все устройства были онлайн через единую БД. С турникетами метро такое еще возможно, а вот с наземным транспортом — слишком сложно.
Например начать с диверсификации ключей, чтобы при взломе одной карты не происходило компроментации всей системы.
Чтобы ключи для каждой карты различались и зависели от серийного номера чипа?
Но это все равно не поможет. Ну сломаете вы не всю систему разом, а только пару карточек для себя.
Вообще тоже интересует тема с защитой, так как возможно в скором времени придется разрабатывать схожую систему — платежи с идентификацией аккаунта пользователя через NFC-карту, как раз рассматриваем Mifare Plus. Про идею с подменой сертификатов и MitM для кражи ключей приходящих с сервера я как-то не подумал. И теперь вот вообще не вижу способа сделать это секьюрно.
Неужели единственный способ — использование навороченных карточек типа Mifare DESFire, которые как и EMV IC карты содержат в себе уже настоящий процессор и могут вычислять всякие подписи и выполнять шифрование самостоятельно?
Что меня прямо скажем смутило, это отсутствие валидации баланса карты… пополнение то всегда онлайн… почему потом нет сравнения расчетного остатка карты с текущим, странно все это…
Вполне возможно вам достаточно MFPlus S/X в режиме SL3 (шифрование AES)
И использование SAM-модулей от NXP в режиме X-interface (подключение SAM напрямую к IC NFC) для хранения ключей, диверсификации и прочей аппаратной криптографии. Тогда единственное место где можно перехватить данные с карты — это интерфейс между хостом и считывателем.

Если вы расчитываете на андроид устройства, то там тоже есть варианты секурных хранилищ (UICC (SIM), SDCard, Embedded Secure Element). Но остается проблема загрузки ключей по воздуху. Лучше не давать это делать обычным пользователям.

К сожалению, решения UICC и eSE плотно завязаны на ведоров, досутп к eSE и к сим провайдера не так просто получить (организационно, в первую очередь)
Как раз Mifare карты достаточно продвинуты, особенно новые поколения Mifare Plus, карта много чего умеет. Просто в Тройке они работают, для обратной совместимости, по устаревшему протоколу, который как раз и весь дырявый.

Под Ваши потребности, думаю, вполне можно подобрать недорогое решение из линейки Mifare.
Так в статье автор же и говорит, что он пользовался не уязвимостью в карте (помню на хабре была уже статья где ломали подобный проездной, тогда он был сделан именно на Classic, и там автор пользовался именно уязвимостью самой карты), а вытащил ключи для нее из приложения.
Тогда при отсутствии сети будут проблемы, так как не получиться запросить подходящий ключ. И как уже писал JediPhilosopher это не сильно поможет.
Не поможет. Ключи за 5 секунд достаются из воздуха атакой «без карты». Если не лениться, а допилить Хамелеон тот же и немного автоматизировать, то можно сделать бе… в общем, можно все сделать :)
А можете пояснить, почему требуется аппаратное решение типа Хамелеона, почему нельзя полностью эмулировать карточку телефоном с NFC — включая UID? К примеру, раньше Google Wallet/Android Pay работал только на телефонах с чипом NXP с Secure Element, а потом что-то поменяли и стало работать на любом аппарате с NFC — т.е. сэмулирвать платежную карточку теперь можно исключительно софтом. А что мешает тогда тем-же софтом полностью сэмулировать Mifare Classic/Mifare Ultralight — включая UID и OTP-зоны?
Потому, что это нельзя сделать так легко и просто. И еще, практически ни одна /официальная/ реализация не даст подставить свой уид, такой, какой нужен. А на уид все завязано.
Mifare Classic и Ultralight сэмулировать не получится — это проприетарная штука, там дополнительный, не по стандрату, инфообмен идет между картой и ридером, так что только соовтетсвующий чип от Nxp и либа могут это обрабатывать.

Есть, конечно, варианты, но настолько геморройные и на практике сложно реализуемые. В общем, есть варианты проще.
А еще, текущим прецедентом люди сами создали себе проблем. Ведь теперь диверсифицируй-не диверсифицируй, а все равно получишь… кучу старых карт с Legacy ключами, от которых, кроме как с помпой, фанфарами и кучей говн из медных труб не избавишься. Всё, ёк.
Кстати, раскрою небольшой секрет: с ключами для генерации и проверки имитовставки в кошеле все обстоит так же (в отличие от обычных ультралайтов, где они достаточно часто ротейтятся, правда с оговорками тоже).
На счёт «не избашись» не согласен. Мне карту-проездной на пригородные электрички меняли с 2008 2 раза бесплатно, при очередном ежемесячном пополнении в кассе, под предлогом «у нас теперь карты новго образца».
На тройку можно очень редко деньги класть — если кто например проездом в Москве пару раз в год бывает, то 1000 р на несколько лет может хватит. Хотя конечно всегда можно решить это — пусть бы турникет писал что требуется замена.
Я немного другое имел в виду: кто-то пополнил Тройку на 1000р, это событие было записано на Большой Черный Транспортный Сервер, а потом успешно прикладывал её к турникету 100 раз. Данные синхронизировались, когда соответствующие автобусы/троллейбусы приехали спать в парки, вместе со временем использования карты. Тут и смотрим записи с камеры над турникетом, соответствующие времени прикладывания
Ну и что на камерах увидят? Человека, который прошёл по кривой карте. В этом нет состава преступления. Может он её на улице нашёл или у кого-то возле метро купил? Или в кассе кривую дали, он же не обязан разбираться.
Да, тут ничего доказательно не предъявишь, не телефон же он прикладывал. Максимум — нарушение правил пользования и обязать заменить карту за свои без возмещения залога в 50р.
Так сейчас и оплату телефоном в метро сделали — тоже не предъявить теперь за это.
между «опознать» человка и «предъявить» — дистанция большая… Просто посмотреть хотя бы — это один человек ходит или бородачи с дредами по 100 чел с одной карты заходят… Опять же — то ли просто человек, или знакомая рожица чья… В общем я бы просто из любопытсва посмотрел бы. будь у меня доступ.
«Требуется замена» — это уже сам по себе неприятный момент во многих смыслах. А так, это и паспорт можно всех поголовно согнать менять.
НЛО прилетело и опубликовало эту надпись здесь
Там трафик односторонний фактически и очень небольшой. А вот если на посадке турникет будет тормозить при проходе каждого пассажира, ничем хорошим это не кончится. Тогда как сбой в работе GPS-трекера не критичен.
НЛО прилетело и опубликовало эту надпись здесь
Все же, это не критичный для транспортной инфраструктуры дополнительный сервис, на этот канал нельзя будет завязать такие вещи.
Существует масса методов для правильной организации этого функционала с использованием нестабильных каналов передачи данных. Элементарно копить транзакции и пачечками их туда-сюда гонять. Это работает (правда, только когда это нормально делают, и в этом основная проблема).
Да, но тогда мы возвращаемся в исходную точку — инфа должна быть на карте, например, с тем же балансом. Что толку, что мы накопили транзакции, когда нет связи, а потом синхронизировались и увидели, что эта карта либо в блэк-листе, либо баланс зашел в минус.
В любом случае инфа будет на карте. и при правильной организации я не вижу в этом ничего плохого.
в рилтайме будет не очень, но ведь блеклисты на конечных можно и подтягивать-то
Добавить к терминалу сотовый модем за пару баксов — слишком сложно?
Покрытие не везде идеально, плюс такие системы разрабатывались лет 10 назад, когда оно было еще хуже. Слабая защищенность это следствие совместимости со слоупочными проектами
Чтобы защитится, надо чтобы турникеты были онлайн большую часть времени.

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

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

> в метро дешевле по картам на 60 поездок
Опять-же зависит от количества поездок — если ты спускаешься в метро каждый день по 3 раза в день, то уже выгоднее брать безлимитный со сроком действия.
НЛО прилетело и опубликовало эту надпись здесь
Как считали? И как выделили тех, Кто постоянно покупает по 1й поездке от тех, кто лишь проездом в городе?
НЛО прилетело и опубликовало эту надпись здесь
На тройку записывается любой проездной (60 поездок, 90 минут итд). Наверняка секрет в этом.
Похоже, вы слишком экстраполируете
image
Я использую 2 поездки на метро в день. Если отбросить весь наземный общественный транспорт, то дешевле 60 поездок, но у меня есть и карта для поездок (как раз 60) и карта просто с деньгами. Всё это потому что утром от дома до пересадки я еду в автобусе почти всегда, затем электричка, затем метро — получается ещё открытый билет по тарифу 90 минут, затем трамвай до работы за ноль рублей. Обратно же пешком до метро, используется карта метро на фиксированное количество поездок, далее электричка (там своя карта, да) и потом пешком до дома. Такая вот попытка оптимизации расходов.
На подмосковные электрички Тройка тоже работает, если записать на неё проездной.
Через приложение Мой Проездной можно записать на Тройку даже разовые билеты на электричку
И через автоматы тоже.
Чем тогда она отличается от Стрелки?
Тем, что если вы не пользуетесь пригородными автобусами, то вам нужна только одна карта.
Вот это поворот. Было бы очень удобно.
эти 60 поездок можно записать на тройку и ездить по ней, а когда закончатся уже деньги начнут списывать
Тогда не получится использовать «90 минут» по мере необходимости.
Мне для «90 минут» пришлось завести вторую Тройку. :)
Тройка офигенно удобная штука. Во-первых, как уже сказали, помимо кидания на Тройку денег, на нее можно записать и любой из абонементов. А если у тебя вдруг кончились поездки, а ты вовремя не позаботился о покупке нового абонемента, можешь войти в метро потратив 32 рубля с баланса карты. На Тройку также можно записывать билеты на электрички и абонементы на них, что позволяет (если ездишь на электричках) вместо двух карточек носить одну. Ну и автоматам пополнения тройки можно скармливать мелочь. И от мелочи избавляешься, и имеешь тот самый резерв на карте.

Тратить на проезд деньги с баланса карты выгодно, если пользуешься метро очень редко.
НЛО прилетело и опубликовало эту надпись здесь
Езжу каждый день — работает.
Работает. Сам лично проверял. Пихаешь карту в так называемый «билетопечатающий автомат», который билетики выдает, оплачиваешь. Только была проблема в том, что чек надо сохранять.
В общем вот
Каждый день езжу на электричке туда и обратно. Записываю на тройку сразу в автомате и прохожу через турникеты. Контролёры ни разу не предъявили претензий.
Работает как тройка так и стрелка без каких либо проблем. Одноразовые билеты и абонементы.
При этом при наличии на тройке допустим 300р и у тебя в руках еще 400 на кассе отказываются оформить на ней 60 поездок за 670р. Вот такое вот гов… ущербная система
Да, невозможность оформления абонементов с баланса карты и желательно онлайн мне тоже не нравится.
Хабр торт! Наконец-то этот маркетинговый буллшит чем-то разбавлен.
НЛО прилетело и опубликовало эту надпись здесь
«Использовался дешевый смартфон на платформе Android» — Какую модель использовали, чтобы потом не эксперементировать с поиском нужной железки?)
Можете отталкиваться от списка совместимых телефонов в этом приложении https://github.com/ikarus23/MifareClassicTool
Браво, вдохновляет на подобные исследования!
А я так и ношу в кошельке билеты с аттракциона, хотел поисследовать способ формирования идентификаторов там, никак руки не доходят.
Интересно было почитать статью и ход мыслей, видно полезное применение новшеств в виде NFC.
Автор молодец! Отличное исследование и отличное его описание.

PS: Хорошо хоть изредка появляются такие отличные статьи на хабре.
Автору — береги себя.
По крайней мере, не стоило так подставляться и писать про эксперименты с подделкой баланса.
Для системы проще отчитаться от поимке «киберпресупника», чем признать собственные ляпы.

И да, респект за подробное исследование и спасибо за интереснейший пост!

PS. Вспомнил пост про аналогичные эксперименты с таксофонными карточками.
Там у ребят закончилось уголовной статьёй и судимостью: habrahabr.ru/post/191450
Ещё один момент по поводу APK… Лично у меня, на Sams. Note 3, приложение не отлавливает карточку. Оно пишет Ready, и всё. При этом карточка читается и для работы с ней предлагаются либо яндекс, либо MCT.
У вас и MCT не будет работать, так как NFC чип производства broadcom скорее всего. Вот список НЕподдерживаемых телефонов https://github.com/ikarus23/MifareClassicTool/blob/master/INCOMPATIBLE_DEVICES.md
Оу, спасибо! Не знал об этом нюансе.
Теперь понятны некоторые вещи, да.
Всем хабровчанам привет, я тот самый автор, который еще тогда написал статью в «Хакер» :)

Давно хотел вылить что-то подробное по тройке и современному состоянию систем Метро и МГТ на Хабр, но ввиду своей жуткой лени и печальной занятости, никак не доходили руки (а инфы просто огромное море, правда, некоторую к сожалению выкладывать нельзя, но и без нее тоже интересно).
Автору — респект, что за это взялся и отдельно респект за его начинание в расковыривании /так называемого/ Layout'а у кошелька. По собственному опыту, доскональное расковыривание лэйаута — это достаточно емкая и интересная работа.

Вообще, если кому интересны какие-то вопросы по этой теме — задавайте. Я тоже постараюсь ответить в рамках того, что знаю и в рамках того, что можно говорить.
О, привет! Рад тебя видеть.
Привет! Спасибо :)

Ну вот видишь, никому не интересны технически подробности. Ладно, поеду тогда домой. Может это и правильно: меньше знаешь — крепче сон.
darksimpson, можешь рассказать про неиспользуемые лайоуты в метро сейчас в лс?
Интересно понять, правильно ли я понял смысл:
— сектора карты закрыты ключом, не зная его их не прочитать, так? С андроидом понятно, а откуда утекали ключи в до-андроидную эпоху? Человеческий фактор? Или тупо брутфорсом?
— есть отдельный ключ на запись, правильно?
— что за китайские карты с возможностью записи нулевого сектора, на обычные карты он не пишется что ли? И что в нем такого особого хранится что он так защищен?
— если допустим, ключей нигде нет, возможно ли сдампить радиообмен с помощью антенны и приемника настроенного на частоту обмена? (допустим, есть SDR умеющий принимать от 20КГц и возможность записать сигнал в IQ)

Спасибо.
1. Ключи всегда утекали через известные (и неизвестные) фундаментальные уязвимости закрытой технологии шифрования Crypto1, которая издревле использовалась в Mifare Classic. От активного и пассивного мониторинга эфира до оффлайн атак на карты и атак на ридеры. Также, ключи утекали через реверс-инжиниринг железа метро, МГТ и их софта.
2. По технологии, есть два ключа, роли которых можно выбирать. Но в нашем случае, да — один «на чтение», один «на запись». Так повелось.
3. Нулевого блока. Нулевой блок на всех Classic (и совместимых) картах — некая «заводская зона», которая по уму на заводе пишется один раз, содержит в себе в том числе относительно уникальный серийный номер карты и не подлежит перезаписи. Сериный номер используется в том числе для организации защиты (от клонирования, например). В некоторых специальных китайских картах сделано так, что нулевой блок возможно перезаписывать.
4. Да, возможно. Это один из методов «доставания» ключей, в том числе и из «пофиксенных» новых Plus в режиме совместимости, так как некоторые базовые косяки Crypto1 устранить уже не выйдет, грубо говоря.
Есть ли слухи, что кому-то удавалось ли склонировать Тройку с анлим поездками? :-)
Хороший проездной был… Что тут можно сделать, чтобы таакой финт легко ловился и был сложнее проверяем, кроме уникальных ключей, как предлагалось выше? Мне в голову приходит только анализ поведения, можно даже не онлайновый — сравнение, на сколько билет был пополнен и сколько было списано на проходе. А камеры висят и в метро, и почти во всем наземном транспорте, кроме маршруток.
«Ничего не знаю, подошёл какой-то мужик и предложил пополнить карту с его кредитки, ему срочно наличные были нужны, вот он через свой телефон и пополнил, приложение похоже на „Мой проездной“»
Забавно, но точно про такую же уязвимость было рассказано на phdays неделю назад:

http://www.phdays.ru/broadcast/ (справа сделать поиск по NFC и выбрать выступление про псевдобезопасность)

Просто совпадение?
У вас и MCT не будет работать, так как NFC чип производства broadcom скорее всего. Вот список НЕподдерживаемых телефонов https://github.com/ikarus23/MifareClassicTool/blob/master/INCOMPATIBLE_DEVICES.md

https://habrahabr.ru/post/301832/#comment_9627966
Кстати, на google play уже давно выложены приложения, которые проверяют баланс тройки, например Тройка. Проверка баланса

что касается баланса...
Байты, где записан баланс, проще перевести из hex в dec и разделить на 200 (что есть с8 в hex) — мне иногда так проще было при вычислении баланса на встроенном в android калькулаторе.


Интересно, а про количество дней, прошедших с 1.1.1992, автор сам догадался, или все-таки где-то подсмотрел? ;)
Вот, мне кстати всегда было интересно получить ответ на этот сакральный вопрос, еще много лет назад — почему именно 01.01.1992 года? Не уже ль это такое тонкое трололо по поводу отмены регулирования цен? Или все более прозаично? Может у кого есть какие-нибудь интересные варианты?
Скорее всего, стартовая дата «унаследована» из форматов хранения данных какой-нибудь АСУ родом их 90-х, спецификации которой разрабатывались в то время.
Ммм… Не, не выглядит.
Хотя, возможно.
Спасибо за увлекательную статью.
Примечательно (как любит повторять автор), что технология содержит средства, которые могли бы существенно затруднить проведение подобной атаке (последнюю подпись, можно было бы сверять со значением на сервере), но она почему-то не задействована даже в заведомо online решениях.
Может ли у этого быть рациональное объяснение?
Например, общий процент фрода, и его «стоимость» так малы, что не превышают стоимости дополнительных серверных мощностей необходимых для проверки всех транзакций (маловероятно).
Или — отключение этой проверки существенно уменьшает время транзакции = увеличивает пропускную способность, что может быть важно в часы пик (более вероятно).
Уязвимость используется самими разработчиками (как-то неприятно про это даже думать).
Wпочему же, как раз наоборот: автор написал, что приходится после восстановления баланса наземным транспортом пользоваться, где нет онлайна, а вот в метро достаточно быстро блокируют, вероятно как раз по паре значений дата, подпись
Да, по поводу того, как хранится баланс в этом лэйауте (осторожно, говорящая жаба!):

// Read Sector 8 data blocks (0 to 2)
for (int i = 0; i < 3; i++)
  System.arraycopy(mfc.readDataBlock(sect8StartBlock + i), 0, mfsect, i * 16, 16);


// Read and show money value from ticket
int money = BitOps.copyBitsToInt(mfsect, 196, 19, false, false) / 100;


и сама функция copyBitsToInt из класса BitOps:

public static int copyBitsToInt(byte[] from, int fromStart, int length, boolean revBits, boolean revBytes) {
  byte[] intBytes = new byte[]{0, 0, 0, 0};
  copyBits(from, intBytes, fromStart, 32 - length, length, revBits, revBytes);
  return (intBytes[3] & 0xFF) | ((intBytes[2] & 0xFF) << 8) | ((intBytes[1] & 0xFF) << 16) | ((intBytes[0] & 0xFF) << 24);
}

public static void copyBits(byte[] from, byte[] to, int fromStart, int toStart, int length, boolean revBits, boolean revBytes) {
    int j = 0;
    int y = 0;
    for (int i = 0; i < length; i++) {
      j = (revBits) ? length - 1 - i : i; // Reverse bits counter ("from" side)
      y = (revBytes) ? ((((length - 1) / 8) - (i / 8)) * 8) + (i % 8) : i; // Reverse bytes counter ("to" side)
      if (((from[(fromStart + j) / 8]) & (1 << (7 - ((fromStart + j) % 8)))) > 0) // If bit is set, then
        to[(toStart + y) / 8] |= 1 << (7 - ((toStart + y) % 8)); // Set bit
      else
        to[(toStart + y) / 8] &= ~(1 << (7 - ((toStart + y) % 8))); // Unset bit
    }
  }
Извините, метод, а не функция, конечно. Си в голову засел.
Метод тоже функция, так что всё ок :)
Получается тогда у меня ошибка в определении смещения. Деньги записаны не со старших 3 бит 10 байта, а начиная с пятого. Просто 4 и 5 биты были всегда нулевыми, поэтому реальную границу было сложно определить. Я наверное не стану исправлять в статье, пусть сохранится для истории.
Отличная статья. Как вы так быстро раскусили делитель и место под баланс? И про 1.1.92 тоже интересно
darksimpson, вы можете про формат ржд рассказать в тройке? Можно на почту, чтобы не публично.
Я не разбирал РЖД, увы.
Без инсайда там и не разберешь)
И то верно.
Зачем инсайд, когда терминалы работают на винде?
Мне в своё время удалось получить программу билетопечатающего терминала. Много интересного там, вот только ключи шифрования не смог вытащить.
Могу поделиться, но не знаю как связаться с вами.
Не, спасибо. Я пас.
CKA3ATb_BCEM, напиши в лс мне. Помогу вытащить.
Интересно, сколько провисит на сайте эта статья?
Вангую что завтра-послезавтра будет удалена «по требованию правоохранительных органов» :)))
Кстати, интересное наблюдение. Еще всего несколько лет назад, когда я вел вполне себе ЖЖ с подробностями, даже некоторым софтом, писал статьи в Хакер и рассказывал Компьютерре как «поломал Метро» и все дела (причем инфа там тоже была), ни у кого даже в мыслях ничего такого небыло, что статьи уберут, ЖЖ закроют, тираж изымут, а автора посадят…

А сейчас… Причем, не только здесь, а вообще, тенденция такая. Хотя, по сути, формально, ничего с того времени ни законодательно, ни как-либо еще особо не изменилось.

Понимаете, что происходит? Вот. И это страшненько. Система, которая порабощает и промывает — во всей красе.
Ну тут просто — если пресс-служба метрополитена обратится в правоохранительные органы с заявлением что публикация на сайте наносит им ущерб, то тем и идти далеко не надо — судя по справочнику, ООО «Хабр» зарегистрировано в Москве.

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

Что касается тенденции… Когда-то давно интернет был уютным местом, где общались технари и инженеры, все друг другу доверяли, и вообще, было классно. Мне например совершенно незнакомый человек с fido7.photo.ru продал в свое время цифровую камеру в рассрочку на 3 месяца, без каких-либо расписок, просто под честное слово — возможно ли такое сейчас? Сейчас увы, доступ в интернет есть у всех, и не только у честных людей. Так что какое-то регулирование таки нужно, и я не могу сказать что это так уж плохо.
Дело не в регулировании. Дело в какой-то тотальной промывке мозга и искажении наших представлений и мнений. Вот так втихую. Я не против регулирования как такового, но меня настораживает вот это вот 1984. Неуютно при понимании происходящего. Хотя, может я и утрирую.
> Во-первых, незачем плодить халяву, должен быть некий порог входа для тех кто реально интересуется технологиями, а не просто халявщик, во-вторых, это все-таки неэтично по отношению к метрополитену да и городу в целом, ведь средства от продажи билетов таки идут на развитие и модернизацию транспорта.
А по-моему всё правильно автор сделал. Руководство метрополитена поставлено в известность? Поставлено. Если они не хотят улучшать безопасность, надо переходить к более жёстким мерам. Вон благодаря Karsten Nohl с аналогичными методами в его стране мобильная связь стала немного безопаснее.
Без приложения в данном случае это просто крутая техническая статья, с приложением — шанс на улучшение безопасности.
Тут на самом деле, тема куда сложнее чем кажется на первый взгляд.

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

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

В третьих, и наверно самое главное. Любое ужесточение безопасности — в первую очередь создает неудобства честным гражданам. Дали допустим, возможность пополнить проездной с мобилы — тут же нашелся «умник» который хакнул. Ну закроют эту фичу, придется вам стоять в очереди в кассу чтобы проездной пополнить, кто от этого выиграет? Сами же автора «добрыми словами» вспоминать будете. В идеале для честного человека — лучшая защита это та, которой нет, о которой не надо заморачиваться. Закроют допустим возможность делать социальные проездные на несколько лет с захардкоженными ключами, придется бабушкам каждый месяц ходить и проездной обновлять, чтобы ключи в проездном синхронизировались, будете из-за этих бабушек дольше в очереди стоять.

Как-то так.
Нет. Чтобы «умник не хакнул» нужно просто делать нормально, вы уж меня извините. Используется карта Plus, но не используются все ее возможности (и я даже не хочу вступать в спор почему). Существует асимметричная криптография, которую можно запускать с очень хорошим результатом по времени даже на мелких современных ARM-МК… Я недавно участвовал в разработке одной городской транспортной системы (не в России), делал железо с нуля (защищенный ридер, грубо говоря) и имею представление, как все можно организовать безопасно и без потери удобства.
То, что происходит у нас — куча Legacy (от которого тяжело избавиться, потому, что изначально все через жопу было сделано), наплевательское отношение «на авось и так сойдет» и отличные продажи этого всего за классные конкурентные цены. Ну вот так, увы.

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

Конечно, это один из вариантов — переключить карту в режим sl3 при следующем пополнении, где уже используется aes. Вероятно, в турникетах метро стоят настолько устаревшие ридеры, что они не поддерживают оаботу с sam-модулями. С другой стороны, при большом желании и эту проблему решить можно
Скажем так, вы попали в цель :) Ну если поднапрягутся и сделают — честь им и хвала будет, чё.
DmitrySpb79, попросите автора удалить статью, зачем это все открыто выкладывать. Кто интересуется, тому известно это все итак.
Андрей, спасибо, прочитал с удовольствием.
Статья конечно интересная и с подробностями.

Но в принципе, сам факт работы с простой Mifare Classic напрямую чрез A/B ключи в Android приложении через NFC говорит о том, что эти ключи легко можно вытащить. Просто никому особо не надо было это.
А NXP зря притянули. Их представители всегда на встречах активно не рекомендуют использовать режим Mifare Classic. Он конечно есть в целях совместимости на новых картах NXP, но…

Догадываюсь, какой был диалог «бизнес» — «IT» (разработка+сопровождение):
  • Бизнес: Нам нужно что бы с бесконтактной картой можно было работать в
  • IT: Ну давайте DES Fire использовать… но тогда инфраструктуру менять придется… Или Java карту с прокси апплетом и поддержкой Mifare Classic… Но дорогая она нынче.
  • Бизнес: Мы тут посчитали… дороговато. Даешь работу в телефоне с обычной дешевой Mifare Classic
  • IT: Так сломают же..
  • Бизнес: А не волнует. Зато дешевле. И авось не сломают. Да и пусть ломают. потери не большие. Делайте!
  • IT: Есть!


возможно резон есть. Ну сколько этих гиков и хакеров… Украдут копейки.
Извините, а почему Вы в ответе it предлагаете все равно использовать mifare classic? Вы разве не понимаете, что это не решает проблемы из-за взлома самого криптопротокола в classic?
Не совсем понял вопроса (по приведенному мной диалогу).
Как раз базовые уязвимости Mifare Classic все известны.
И из соображений безопасности и перспективы «Mifare Classic» не выбор.
Но вложения в уже существующую инфраструктуру уж больно велики. Ни кто не хочет разово менять инфраструктуру.
Да и модули ридеров Mifare Classic стоят сущие копейки.

И еще одна причина… Было бы из чего выбирать то.

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

Рискну предположить, что переход будет выполнятся на открытый «ISO14443 B» с T=CL (карту которую могут делать не только NXP).
Я бы предположил что это будет Java карта.
Calipso, Mifare (PLUS то же) и прочие… да на них просто не сделать ту логику, которую зачастую хочет заказчик! С разницы не будет. Карта памяти и все. Все логика во внешнем приложении… Что не очень безопасно.

И хоть NXP, как мне кажется, сильно демпенгует с чипсетами и модулями ридеров (под свои карты), но как то страшновато попадать в кабалу к одному производителю.

Все это мои личные предположения и домыслы, хоть и основанные на… (в общем есть основания)
Вы писали " Или Java карту с прокси апплетом и поддержкой Mifare Classic…"
Если в качестве бесконтактного криптопротокола обмена данными между картой и ридером будет crypto-1 от Mifare Classic — то это ничего не меняет, считай, защиты никакой нет.

Далее: при чем здесь ISO14443 B? Он такой же открытый, как и тип А, зачем переходить на другой тип? смысла никакого абсолютно. Собственно, обозначение ISO это подразумевает (международный стандарт).

Более того, сейчас есть чипы, которые не только от Nxp и это не Mifare (да, и Вы, вероятно, оговорились — NXP карты не делает, а производит чипы).

Calypso, кстати, это T=CL. Но тоже проприетарная вещь, так что хрень редьки не слаще.

Вообще, значение T=CL переоценено. Какую такую логику нельзя сделать? В Mifare Classic — это посекторное хранение данных, а в T=CL файловая структура. Принципиально — одно и то же. Да, с файлами, возможно, работать чуть проще. НО итам шлейф тянуть дополнительных команд надо.

Да и зачем скрывать логику, исходить из принципов security through obscurity? Она может быть да и, считаю, вообще должна быть открытой — чтобы все понимали, как это работает, чтобы все было прозрачно (вон, спецификации EMV ведь открыты — но это не значет, что чиповую карту взломать легко — используются для атак как раз недостакти в реализации спецификаций).

Обеспечивать надо информационную безопасность — чтобы нельзя было получить ключи, данные и дискредитировать их.

Вот для этого уже давно существуют аппаратные решения — хоть от NXP, хоть от других производителей.

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

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

Вы писали " Или Java карту с прокси апплетом и поддержкой Mifare Classic…"
Если в качестве бесконтактного криптопротокола обмена данными между картой и ридером будет crypto-1 от Mifare Classic — то это ничего не меняет, считай, защиты никакой нет.

Это не придуманный фентезийный вариант.
Когда задача поставлена сохранить инфраструктуру приема Mifare Classic (ну только с этой картой большинство уже установленных железок на транспорте работают) и есть необходимость в незащищеных устройствах менять A|B ключи (время жизни) и модифицировать данные, то это один из вариантов — прокси апплет карты поддерживает криптосессию с сервером и меняет данные в Mifare области.
Не от хорошей жизни конечно.

считай, защиты никакой нет

Между «защиты нет никакой» можно перехватив радиотрафик и брутфорсить 6 байтовый ключ конкретной карты и
«защиты нет никакой» можно вытащить этот ключ из android приложения
лежит большая технологическая пропасть.

Более того, сейчас есть чипы, которые не только от Nxp и это не Mifare

Дуальные java карты например.

Все остальное (попытки Sagem-Orga), производители Calipso, локальные пропориетарные проекты… мелочь на фоне дуальных Java карт и NXP.
Мало того что мелочь, так еще и с неопределенным будущем.

(да, и Вы, вероятно, оговорились — NXP карты не делает, а производит чипы).

Мы же говорим не о том, кто пластик собирает. Под производителем карт, лично я понимаю скорее создателя маски кристалла(ПО и технологии). Gemalto и Oberthur вот, как правило, свои wafer не делает (да и сборку карт не всегда). Но все же их называют производителем карт, когда они СВОИ карты выпускают на чипе Infenion.
А Mifare PLUS — это только NXP.
Да и вообще в NXP просто жутко раздражаются когда при них упоминаешь китайских «независимых» производителей. Увы… уплыла технология на сторону.

Далее: при чем здесь ISO14443 B? Он такой же открытый, как и тип А, зачем переходить на другой тип? смысла никакого абсолютно. Собственно, обозначение ISO это подразумевает (международный стандарт).

«A» это фактически зафиксированный NXP протокол (тогда еще Philips). То, что он фиксирован в стандарте не отменяет некоторых юр. обязательств на тех, кто его захочет использовать. «B» таких проблем не имеет.
То что, например Gemplus (ой… GemAlto) выпускает свои Mifare карты и даже выходила на рынок со своими MifareClassic ридером и любит дуальные Java карты с «A» — это не означает, что они это делает потому что стандарт открытый…

Calypso, кстати, это T=CL. Но тоже проприетарная вещь, так что хрень редьки не слаще.

Калипсо в общем то открытый стандарт (был по крайней мере 4 года назад, когда мне нужно было по нему оценку сделать).
В смысле: доступный для ознакомления. Но вот «внести» в него изменения со стороны не возможно. И вообще это скорее стандарт не на карту (не столько на карту), а на платежную систему в целом. Плохо ложится на требования Российских заказчиков… Впрочем это отдельная длинная тема.

Вообще, значение T=CL переоценено. Какую такую логику нельзя сделать? В Mifare Classic — это посекторное хранение данных, а в T=CL файловая структура. Принципиально — одно и то же. Да, с файлами, возможно, работать чуть проще. НО итам шлейф тянуть дополнительных команд надо.

T=CL — это транспорт. Не более. Никакого отношения к файловой системе не имеющий.
Лично моем мнение, что вся логика принятия решения должна быть в приложении карты (как в EMV).

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

Боюсь создатели EMV и банковских карт с Вами не согласятся (я то же). Вот как раз проще иметь единое платежное приложение в устройстве. Если бы Вы только знали… какой геморой обновить инфраструктуру устройств. А всего то в городе N у администрации возник новый тип льготников, которым всего то нужно выдать 500 карт чуть с другой логикой…

Java карты дороже, чем Mifare PLUS, например, но не принципиально дороже.
А в принципе, все делается на одном потоке… разные маски и одинаковое количество чипов на одном вафере. Так что разница в цене всех карт — чистый маркетинг производителя.

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

По факту, в мире смарт карт, «проецируется на конкретные носители» — это только Java карты. Других альтернатив нет (Maltos скорее мертв чем жив)

Когда задача поставлена сохранить инфраструктуру приема Mifare Classic (ну только с этой картой большинство уже установленных железок на транспорте работают) и есть необходимость в незащищеных устройствах менять A|B ключи (время жизни) и модифицировать данные, то это один из вариантов — прокси апплет карты поддерживает криптосессию с сервером и меняет данные в Mifare области.
Не от хорошей жизни конечно.


Именно про это сомнительное решение я и говорю. Вы сами не слышите, что говорите: предлагает использовать более дорогой носитель но все с тем де Mifare Classic, чтобы безопасно загрузить ключи Mifare, которые легко вскрываются и так (я бы даже не назвал это брутфорсом — на вскрытие уходит 5 мин.)

Между «защиты нет никакой» можно перехватив радиотрафик и брутфорсить 6 байтовый ключ конкретной карты и
«защиты нет никакой» можно вытащить этот ключ из android приложения
лежит большая технологическая пропасть.


Так вот проблема на самом деле в том, что ключи шли в приложение в открытом виде. Не тройку взломали (ее взломали давно, вернее, чип на ее основе — тут автор Америки не открыл), а приложение хреново написано. Есть множество способов, как защитить обмен данными между сервером и приложением. И тогда не надо ваши дуалки с апплетом, злоумышленнику тогда будет проще «сниффернуть» траффик и выдернуть ключи (если ему очень надо). А вот с приложением от БМ ничего не надо было — ключи в открытом виде.

Дуальные java карты например.

Ну, и каков там проктол бесконтактного интерфейса? T=CL? А криптопротокол и команды обмена данными с картой самому придумывать предлагаете? Тоже вариант так в США в некоторых городах сделано (но не на дуалках) — правда, сомнительное в плане соместимости и экономики решение.

Боюсь создатели EMV и банковских карт с Вами не согласятся (я то же). Вот как раз проще иметь единое платежное приложение в устройстве. Если бы Вы только знали… какой геморой обновить инфраструктуру устройств. А всего то в городе N у администрации возник новый тип льготников, которым всего то нужно выдать 500 карт чуть с другой логикой…


Вообще-то, от конфигурации терминала, правил банка-эквайрера тоже многое зависит.

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

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

Вы взяли удобный юз-кейс, а что, если таких карт не 500, а 5 000 000?

Java карты дороже, чем Mifare PLUS, например, но не принципиально дороже.

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

По факту, в мире смарт карт, «проецируется на конкретные носители» — это только Java карты. Других альтернатив нет (Maltos скорее мертв чем жив)


Мы говорим про трнаспортные бесконтактные карты, где не требуется впихивать «невпихуемое», как вы предлагаете, перенся логику работы на карту — вот это релаьно тупиковая ветвь развития. Вся ИТ-отрасль это доказывает (см. бум на «облака» — не просто так это стало популярным).

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

Именно про это сомнительное решение я и говорю. Вы сами не слышите, что говорите: предлагает использовать более дорогой носитель но все с тем де Mifare Classic, чтобы безопасно загрузить ключи Mifare, которые легко вскрываются и так (я бы даже не назвал это брутфорсом — на вскрытие уходит 5 мин.)

Это требование от бизнеса. Использовать Mifare Classic.
Насчет «легко вскрываются». Нужно иметь перехватчик протокола в канале карта ридер. нужно обладать специальными знаниями. Я например, знаю как это делается в подробностях.
В общем, далеко не каждый школьник/студент сможет собрать аппаратную часть, даже если он знает что и как (а в открытом доступе этой информации нет и надеюсь не будет). Не тривиально это.

Есть множество способов, как защитить обмен данными между сервером и приложением.

Принципиально не возможно защитится от компроментации данных, если клиентское приложение фактически «на руках у пользователя» и выполняется в незащищенной среде. При использовании прокси апплета, криптосессия устанавливается между апплетом и сервером и уже в этом канале (3des GP secure channel) передаются критичные данные которые в принципе не появляются в отрытом виде снаружи.

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

Честно говоря… я все сказал по своему практическому опыту.

Рассуждать про облака… бизнес цели… неуважение к пользователям… тупиковые ветви развития… это не ко мне.
Не люблю пустой треп «за жизнь».

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


Как раз все это в открытом доступе и доступно каждому школьнику (схемы, утилиты — думать вообще не надо), Вы отстали от жизни. Плюс можно купить готовую аппаратную часть за ~100 долларов.

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


Когда не хватает аргументов, переходят на личности — это известный факт. По существу парировать было нечего, обозвав это разговорами за жизнь. Забавны отсылки к моему опыту. У меня-то сложилось мнение, что все как раз наоборот. Плюс кое-кто застрял в прошлом веке, нарисовал удобную ему картину мира и не хочет развиваться.
Как раз все это в открытом доступе и доступно каждому школьнику (схемы, утилиты — думать вообще не надо), Вы отстали от жизни. Плюс можно купить готовую аппаратную часть за ~100 долларов.

Ссылку pls. С удовольствие покажу при встрече инженерам подразделения Mifare из NXP.

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

Причем здесь личности.Вы действительно работали в проектах по транспортным картам?
Где вы увидели переход на личности? Так работали или нет?

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

Давайте не будем кривить душой. Тройка — Mifare Plus. Она уже, как слон, «есть быть куплена». И бизнесу в этой плоскости доказывать ничего не надо. В SL3/SL2 никакой проблемы проксировать обмен с картой в приложении для смартфона нет, сделав систему очень устойчивой (я намеренно избегаю «абсолютно безопасной», так как разные косяки могут быть всегда). И бизнесу тоже это доказывать не надо — это работа небольшой пряморукой команде разработчиков на примерно столько же часов, может чуть поболее. То есть, для бизнеса это все стоит ничуть не сильно дороже в итоге.
Следовательно, вывода всего два: а) криворукие разработчики, которые не умеют и не хотят; б) более глубинные проблемы (обратной совместимости).
Я думаю, в данном случае и то, и то. Как минимум потому, что можно было начать с SL2 где можно пользоваться AES, а где _пока еще_ нельзя, из-за проблем с обратной совместимостью, пользоваться crypto1 по старому. Подготовить почву и нормально постепенно обновлять старье, через некоторое время полностью выведя его из строя и перещелкнув все в SL3 полностью, вообще незаметно для юзера.
Вы совершенно правы.
Меня то же «несколько» удивило, что используя Mifare Plus даже в режиме SL1, они не стали пользоваться предоставленной опциональной возможностью AES аутентификации (которая есть и в SL1). Но акцентировать на этом не стал (ну все же информация по Mifare PLUS конфиденциальна).
Но раз вы публично пальцем ткнули…

Не буду больше защищать несколько корявые решения «Тройки». Тем более что они мне не партнеры, а даже наоборот.
Да, верно, я сейчас немного освежил память. Даже не SL2-SL3, а SL1-SL3. Но не суть, смысл остается.

P.S. Я пока еще не нарушил подписанное NDA ;)
Ссылку pls. С удовольствие покажу при встрече инженерам подразделения Mifare из NXP.


NXP давно в курсе. Вообще, специалистам, энтузиастам, давно это все известно. Недавно новая уязвимость была обнаружена: card-only attack на Mifare Plus (вообще снифферы больше не нужны).

Причем здесь личности.Вы действительно работали в проектах по транспортным картам?
Где вы увидели переход на личности? Так работали или нет?


Примерно, в половине всех проектов по транспортным картам, что есть в стране. Предлагаете теперь начать меряться… опытом?

Потому что представляю как им (разработке) выкручивали руки требуя приложение в смартфоне


Да никто никому не выкручивал, банк очень хотел зарабатывать на комиссии, потмоу сделали в спешке тяп-ляп. Что, програмисты не в курсе MITM-attack в TLS? Тогда это уж совсем какие-то студенты-первокурсники. А уж использовать ключи в открытом виде (в base64) — вообще epic fail. Как всегда, понадеялись «на авось». Собственно, результат закономерен.
NXP давно в курсе. Вообще, специалистам, энтузиастам, давно это все известно. Недавно новая уязвимость была обнаружена: card-only attack на Mifare Plus (вообще снифферы больше не нужны).

Вы меня не поняли… О факте уязвимости известно. Ну и что?
Как раз все это в открытом доступе и доступно каждому школьнику (схемы, утилиты — думать вообще не надо), Вы отстали от жизни. Плюс можно купить готовую аппаратную часть за ~100 долларов.

Ссылку pls, где можно купить и где лежат утилиты доступные каждому школьнику.
Ладно, черт с ним с утилитами и железом, где подробности Mifare Cripto1 в свободном доступе?

Не документация полученная по NDA, а именно в свободном доступе, доступная «каждому школьнику».
Да даже при наличии документации, уверяю, каждому школьнику это не сделать.
«Что нам стоит дом построить… нарисуем — будем жить».

К вопросу «отстали от жизни». Такие слова то подтверждать нужно…

Утилиты и подробности Crypto1 в свободном доступе, например:
https://github.com/nfc-tools/mfoc
https://github.com/nfc-tools/mfcuk
+ можно посмотреть репы проксмарка на предмет издохников утилит mfkey32 и mfkey64.

Купить без регистрации и СМС:
https://www.kickstarter.com/projects/1980078555/chameleonmini-a-versatile-nfc-card-emulator-and-mo
http://hydrabus.com/buy-online/
https://store.ryscc.com/products/elechouse-proxmark3
+ еще у китов на ебэе периодически бывает проксмарк недорого.

(не знаю, правда, можно ли публиковать ссылки)

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

Более того, вот новая уязвимость
http://www.cs.ru.nl/~rverdult/Ciphertext-only_Cryptanalysis_on_Hardened_Mifare_Classic_Cards-CCS_2015.pdf

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

Вообще, по идее, mmMike должен бы извиниться и признать, что не прав.

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

Еще можете посмотреть видео из phdays: там как раз рассказ и про данную уязвимость, который была обнаружена, по всей видимости, раньше автора данной статьи, и про то, как взламывать Mifare http://www.phdays.ru/broadcast/ «Псевдобезопасность NFC сервисов»

Про то что информацию и железки трудно найти — был не прав.
Извиняюсь.

К слову, то что classic не уязвима — я как и не писал…
Давно не искал и не смотрел такие вещи как инструментарий для анализа в продаже.

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

for bromium
Мне, честно говоря, как-то всё равно :)

Но вот по теме, в сухом остатке имеем то, что имеем.
И вот еще по HardenedNest, для Plus:
https://github.com/aczid/crypto1_bs
Спасибо.

Да… действительно отстал… Похоже зря давно не интересовался.

Понятно, что в принципе ничего сложного сделать платку (сформировать 13Мгц сигнал и/или записать его на современном проце). Хотя казалось, что это все же уровень не школьника и не всякого студента (судя по публикациями на хабре).

Но не думал, что этим уже штатно торгуют!
А еще выкладывают в на github описание Cripto1, которое раньше даже под NDA из NXP вытащить было невозможно.

Действительно. Уровень входа минимальнейший.

Ну, Crypto1 «лишь» реверснули. Не уверен, что самостоятельно можно реализовать криптообмен с картой (например, для аутентификации через SAM) без косяков.
Без косяков нельзя. Сам Crypto1 − косяк. Если использовать все плюшки Plus, то никаких проблем.
Интересно.Данный метод сработает с МОБИЛЬНЫМ БИЛЕТОМ??? Который на сим-карте.Принцип работы вроде такой же, как и у тройки? Или здесь метод записи через софтину не сработает и запорет сим-карту или билет на ней!?
Отлично! Как раз заказал импланты Mifare Classic 1K с перезаписываемым 0-сектором. Теперь мне нужен живой москвич для экспериментов.
Спасибо большое! Отличная статья.
Скажите, правильно ли я понял, что сейчас метрополитену достаточно исправить отправку ключа B при запросе баланса:

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


и трюк повторить не удастся?
Однако атака была бы не возможна, если бы ключ B не отправлялся сервером?
Не похоже ли это на оставленный backdoor?
Была бы возможна, даже если бы и не отправлялся.
Каким образом? На тройке же mfoc не даёт результатов, так что по A ключам, в теории, B ключи не получить (кроме как полным перебором, конечно).
Ни mfoc ни mfcuk на mifare plus не действует, но сниффинг обмена данными между картой и ридером все равно позволит вытянуть ключ
Так через приложение можно же и пополнять карту. Т.е. в ответ на какой-нибудь другой запрос этот ключ все равно приходил бы.
В метро, я думаю, проблем нет — улучшат стоплист — будут быстрей блокировать, а вот в автобусах проблематичней че-то сделать.
Странно, что они заявляют в новостях, что все уже исправили. Или они предложение обновили, что-то там исправили (перестали присылать ключ в открытом виде) и считают это исправлением?

PS. Интересно, а можно ли с карты считать количество оставшихся поездок, данные последней поездки из билета типа 60 поездок и т.п.?
Прокат велосипедов — Стоимость не уточнялась

Если речь идёт про Велобайк, то там «Тройка» + пин-код служат всего лишь альтернативным идентификатором пользователя. Деньги списываются напрямую с привязанной банковской карты, «Тройкой» оплатить нельзя.

В первую очередь автор довольно затейливо описал про «повторное использование уязвимости». Что ты фактически можешь украсть так это одну-две, ну если очень быстро будешь перемещаться, то чуть больше поездок (в рамках одного дня), после чего карта превратится в тыкву. И, конечно: понятно, что нет никакого смысла с этим бороться, ведь если даже начнется массовая эпидемия таких халявщиков, то потом пойдет еще и массовая продажа новых карточек.
А можно из статьи удалить скрин с ключами? Зачем они тут? Кому надо они достанут, а так открыто выкладывать не надо.
Для работы нужен смартфон на платформе Android с NFC модулем производства NXP.

Подскажите, пожалуйста, какие смартфоны (вердоры и модели из последних) поддерживают такую связку, либо, быть может, где ведется реестр таких NFC-смертфонов?
выше была ссылка на гитхаб со списком
Ну вот и жёлтая пресса подтянулась :(
Уже в заголовке «правильно» расставили акценты:
«В Москве хакер взломал «Тройку» и две недели бесплатно катался в общественном транспорте»
http://www.msk.kp.ru/daily/26531/3551729/
Тут уже и главный «желтый» подтянулся https://hi-tech.mail.ru/news/hacker-troika/?frommail=2 правда без ссылки на статью
Как я понял, они пофиксили, только возможность дампить старым способом, ключи для чтения/записи/перезаписи в служебные сектора, ну ещё и сертификаты обновили, т.е. если снова найти способ дампа сертификатов, то всё продолжает, так же работать. НО пока что на общественном транспорте, эта фича должна работать, пока не обновят терминалы.
Или я всё же не прав, и они уже ни как ни чего не пофиксят(малой кровью)? Тогда если этот способ работает, не проще ли каждые полгода к примеру, менять эти мастер ключи…
Прикрыли уже, можете идти покупать билет в кассе))
НЛО прилетело и опубликовало эту надпись здесь
потому что транспортные системы разных городов — это, сюрприз, разные юр. лица. Вот положили вы на такую карту 100 руб. — как двум метрополитенам решить, чьи они?

Вариант «подержать на депозите» не предлагайте — весь смысл проездного в том, что деньги вы вносите авансом и предприятие на них рассчитывает при планировании расчётов с поставщиками.
Проблема даже еще более сложная: в разных городах разная стоимость проезда, а проездные — это не только примитивный электронный кошелек, а и более сложные виды проездных.

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

А в другом — на 30 поездок стоимостью 900 руб. и сроком днйствия 45 дней.

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

Тупо разделить стомость проездного на количество поездок? Тогда тот город, где стоимость ниже, получить больше, а вот в обратном случае — меньше? Да и нельзя так делать — ведь это по сути предоплаченный тариф — за некую стоимость получаешь фиксированный набор услуг. Некорректно будет их сравнивать, приводя к некой условной единице
Недавно Ликсутов говорил, что Тройку и Подорожник сделают обратно совместимыми. Т.е. в Питере будет работать Тройка, а в Москве — Подорожник, не вся страна, конечно, но хотя бы начало положено.
Очередная чиновничья профанация. Как объединение тройки со стрелкой. Просто на одну карту в ее память записывают 2 билета разных систем, единственное преимущество: не надо таскать две карты, зато обоазуется два кошелька, остатки по которым хранятся… Постойте, а где же они хранятся? Да, в разных компаниях.

Вместо того, чтобы это был один общий кошелек, желательно привязанный счет, чтобы не размещать остатки в неких структурах, которые, «возможно», на этом зарабатывают
Появилась карта тройка+стрелка. Тоже были разные карты. объединяют потихоньку. Очень хочется верить, что когда-нибудь для простых смертных сделают всё по умую lenta.ru/news/2016/06/02/karta/
Транспортные карты – это анахронизм, никто новые их делать не будет. Будут делать оплату телефоном или, в крайнем случае, свайпом платёжной карты.
Игорь, отличный текст, спасибо)

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

moslenta.ru/article/2016/05/27/trojka

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

врут?
Скорее всего, просто пофиксили отсылку ключа B в приложении.
Спасибо за статью — очень интересно и познавательно! Всегда интересовался как устроена информационная система в метро, когда-то давно даже сам писал программку на дельфи, позволявшую по кодам станций на картонном проездном выводить маршрут пользователя карты.

Автор, мои поздравления, про Вас уже на мейл.ру написали news.mail.ru/incident/25920697. Боже, какой же бред они несут!
Задам наивный вопрос: а можно как-то на сервере проверять подпись apk-файла, с которого идут запросы? Чтобы не отвечать таким вот «пересобранным» приложениям.
Нет.

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

Можно, например, посылать хэш подписи приложения, но это – security through obscurity, и сделать модификацию на отправку корректной строки, опять же, будет не так сложно.
Делать проверку из .so-файла не так сложно, но и so-бинарники тоже декомпилируются и правятся.
Кстранные автор в конце выводы делает. Разве шифрование данных на карте спасет от «машины времени»? Конечно, нет, ведь доступ к данным открыт, можно даже не заморачиваться тем, что и как на карте записано: тупо восстанавливать предыдущий дамп.

На самом деле, перевод на уровень sl3 не так и сложен — нужно подать на карту несколько команд. А уж aes взломать с помощью андроида… Не так просто (если кодеры из банка москвы снова ключи в открытом виде передавать не будут)))
Тут пару дней назад на канале #hackers некто MuNk интересовался мифарками, не вы ли часом были?
На LG G4 не поставилось. Пишет, что не нужно никаких разрешений, и не реагирует на кнопку «Установить».
Хотя разрешено ставить программы из любых источников.
В статье указано, что при аутентификации передаётся номер телефона. Может ли это стать одним из способов поимки юзера TroikaDumper и доказательством его виновности/причастности (в чём и к чему опустим)?
Номер телефона передается в приложении Мой проездной, в TroikaDumper ничего в интернет не передается вообще.
И, наверное, кого-то могут уволить за реализацию этой системы.
И к жетонам уже не вернуться — есть 3D принтеры.
Остаётся один вариант — абонентская плата (принудительная) для каждого москвича.
Т.е. коммунизм начнётся с московского метро.
Я всегда знал это. =)

P.S.
Удивительно, кто-то обнулил мою карму. К чему бы это?!
А может автора в бан за распространение запрещенной проги ?) Возможно она номера кредиток ворует, так что не советую скачивать ее. Предлагаю вообще ее из статьи удалить.
У меня такое чувство, что вы заинтересованное лицо…
dlinyj, автор просто идиот, выкладывать это все в паблик.
Скажите это всем пользователям, кто им восхищается ;). См. комментарии выше.
Он всех подставил, эта информация была известна, выкладывать ее в сеть глупо просто.
Если прикроют эту халяву, то думаю эти пользователи сами будут не в восторге от него))
Я честный человек, и пусть прикрывают дырку, а вот узнать как же это работает интересно.
Это давно известно и не являлось секретом.
Логичный вопрос, если это известно, то почему я об этом не знаю?
Не хотели видимо сами изучить вопрос, посмотреть их прогу, погуглить в конце концов.
если это не являлось секретом, то как это можно выложить в паблик?
Это же не являлось секретом, и значит давно доступно в паблике.
Просто есть разные адаптации материала.

Что плохого в том, что пара сотен школьников попробуют, а 10 из них станет хорошими специалистами и создадут в будущем надежную систему, чем замок, открывающийся булавкой?

Тут не нужна надежная система, так как с ней не будет халявы.
Не ну вы таки поглядите каков персонаж! Он предлагает забанить автора статьи потому, что теперь, вероятно, не сможет эксплуатировать уязвимость в личных целях. Для своего незаконного, так сказать, обогащения. Охренеть. У меня альтернативное предложение по поводу бана имеется.
Обогащаться как раз сейчас начнут все массово кто даже не понимает как это работает.
А я ЩиТаЮ автор — молодец. Вскрыв техническую проблему, он вскрыл и ряд социально-экономических проблем.
Беглый взгляд на техническую часть финансово-расчётной системы недвусмысленно даёт понять о постоянных обновлениях всего и вся в этой области. Т.е. система, которая рассчитана на обслуживание человека и экономики в постоянном апгрейде. Вот сейчас хотят и системы в банках менять — отказаться от пластиковых карт.
И тут вопрос — сколько мы (человечество) прожили с этими картами? Сколько на все это было потрачено средств?
По меркам мировой истории карты существуют не так давно и уже менять. Я понимаю, что надо загрузить программистов и инженеров, так как без таких заказов они просто пропадут, но примерно лет 20-30 мы жили с картами, и 15 лет из этих 30 мы эти карты внедряли. А теперь что?
И все эти рассуждения приводят нас к глубоким философским вопросам бытия…

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

Можно почитать его посты:

на форуме proxmark http://www.proxmark.org/forum/search.php?action=show_user_posts&user_id=6848
или на 4pda http://4pda.ru/forum/index.php?act=search&source=pst&result=posts&sort=dd&subforums=1&username=roman91276&noform=1&st=0

Вот он на форуме 4pda интересуется как «проехать на халяву»
image

Вот, например, он просит выслать ему бесплатно плату hydranfc якобы обещая помочь в разработке
image

Я то просил обычную плату, на что и получил по дешевке у автора. А ты уже на валидатор мгт замахиваешься и клянчешь гост.
Вот http://4pda.ru/forum/index.php?showtopic=748943&st=260#entry51325281
Вот ты не разбираешься ни в чем особо, тупо ключи слил всем, но остальные ключи от тройки секторы 1,5,9,10,11,12,13,14 тебе видимо не под силу достать. Тебе дали вектор направления на 4пда, а прошивку тебе давать не будут, ты ведь ее сольешь тут же в сеть.
http://data3.floomby.com/files/share/24_7_2016/19/kQlQOFUVg0Kjz2fsiFcigQ.jpg
Приложение «мой проездной» не обновляет криптоподпись?
Технически обновляет, но она генерируется на стороне сервера, а приложение записывает только то, что сервер прислал.
Заткнули дырку в программе «Мой проездной».
Программа вчера обновилась, а сегодня сообщили, что старые версии больше не будут работать с 21:30 сегодня.
Какую дырку закрыли? Что теперь приложение делает по-другому известно?
нет. Всё. Статья больше не актуальна и ничего не работает. Конечно же метрополитен закрыл все дыры быстро. Они же не дураки.
Нет, дыру не закрыли. Просто заткнули утечку ключей на запись через запрос баланса. Другие варианты запросов до сих пор работают. Чтобы кардинально уйти от передачи ключей в открытом виде по сети к зашифрованным сессионным ключам нужен массовый перевыпуск карт.
И все закончилось тем, что программисты ВТБ/Банка Москвы сломали приложение.
На Windows Phone/Mobile полностью — при попытке прочитать Тройку выдает «Не удалось прочитать данные карты».
На Android частично — Тройку и стрелку читает, но в процессе покупки билета ЦППК вылезает ошибка «Произошла ошибка, свяжитесь со службой поддержки ВТБ Банк Москвы».

Вот все работало, и тут приходит шибко умный чудак на букву «м», ставит всех на уши и куча пользователей лишаются удобного сервиса. Надеюсь у правоохранительных органов для автора все-таки найдется статья. Хотя бы условный срок ему не повредит.
Не Автор же поднял шумиху и не он сломал приложение. Да и, если быть честным, он был далеко не первым кто подобное провернул (в комментариях есть примеры подобных работ). Он просто бесплатно провел анализ безопасности для них и так как они решили от него отмахнуться, то рассказал о результатах обществу, всё.
Впрочем автор может ничего и не нарушал, а просто декомпилировал приложение (что, как я помню, в России вполне законно, если делается для исследовательских целей) и на основе этого сделал предположение, что можно было бы бесплатно ездить на общественном транспорте (с некоторыми ограничениями).
Поддерживаю про на букву М и остальное)) На вин фон перестало работать.
Респект автору
А автору из нового приложения уже не по силам вытащить ключи? То есть проделать подобную работу)
То что авторы программы, повесили поверх dexprotector, значит лишь то что им не по силам обеспечить надлежащую защиту своего приложение, а никак не о способностях автора исследования снять ее.

P.S. На профильных ресурсах давно разобрали эту матрешку dexprotector.
А кто-нибудь в курсе, почему при использовании apk приложения и перезаписи дампа на карточку, при проходе через «Площадь Ильича» карта потом перестает работать?
всё уже! Ничего не работает.
Автору вытащить ключи из карты Подорожник слабо думаю)
Хм, числа — HEX, а уложились за 2 недели

Публикации

Истории