Comments 348
Поскольку криптопротокол classic называется crypto1, впоследствии была разработана энтузиастами библиотека crapto1 (игра слов — crap — г… о), которая позволяет, например, легко вытаскивать ключи из подслушанного протокола между картой и ридером.
Ссылку приводить не буду — легко гуглится.
Ну а в kali linux давно уже в поставку входят утилиты, эксплуатирующие уязвимость чипов mifare classic
И то, на каком-то из сайтов геймленда она появилась на полгода раньше. Сейчас уже не помню, где именно
Автору просто респект и уважение
Валидаторы в метро
…
Предположительно, работают на базе x86 компьютера и операционной системы Windows.
WinXP
Вот зачем ставить Win на такое оборудование?
То что установлено это промышленное вандалоустойчивое оборудование (то что в подвижных единицах ещё и для транспорта), прошедшее испытания и сертификацию (по всем словам ранее), кроме того в сумму входит не только устройство но ещё его установка и куча сопутствующей работы рядом, вроде прокладки коммуникаций, косметическая работа после и пр…
А какие есть причины не ставить? Сэкономить пару сотен баксов на лицензии?
Знаете сколько станков и прочей индустриальной хрени написано по принципу «контроллер на ARM, управляющий компьютер на Винде»?
В чем проблема?
Часто ответ даже еще проще: никто даже не думает о том, что есть что-то другое(не WinXP)…
Ставят потому что хорошая поддержка со стороны железа (драйвера), адекватная поддержка со стороны самих MS, а также кучи организаций, которые эти решения внедряют и поддерживают, ну и конечно же море уже написанного и хорошо работающего ПО. В общем, если коротко: развитая экосистема вокруг ОС.
github.com/emsec/ChameleonMini
>>исправления найденных уязвимостей необходимо усовершенствование формата хранения данных в памяти карты и обновление программного обеспечения всех систем, работающих с картой.
Чтобы у читателя не складывалось впечатление, что автор просто сделал утилиту для незаконного прохода, ибо у меня сложилось именно такое представление.
Я бы хотел видеть, что была не только проведена работа, но сперва уведомлены подверженные атаке члены, и только после их отказа от устранения неисправностей, желательно с отчётом о том, что они сказали, открытые примеры эксплойтов.
Ребята, поймите простую вещь — разработчикам не заказывали _абслютно защищенную систему_.
Для них достаточно просто обеспечить невозможность массовой коммерческой эксплуатации уязвимостей. Понимаете разницу?
С транспортной карты хомячить можно только маленькими суммами, по финансовым логам они прослеживаются на раз и карта блокируется. Особо ретивые хакеры при этом могут показательно попасть под статью, как только махинации с картами станут для кого-то проблемой.
А пока умные мальчики поковырявшись неделю бесплатно ходят в зоопарк или планетарий это никого не волнует.
обеспечить невозможность массовой коммерческой эксплуатации уязвимостей. Понимаете разницу?
приложение 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.
А по теме — спасибо, очень интересно. Тоже хотелось его поковырять, но покупать для этого новый смарт как-то не хочется.
У меня на Android 4.2.2 TroikaDumper-0.1.apk 1 640 086 байт не захотел ставится.
«Синтаксическая ошибка» «Ошибка при синтаксическом анализе пакета»
Mifare Classic Tool на Тройку ругнулся, что такой тэг неизвестен.
Не рассмотрены анлим тарифы Тройки — когда покупаешь на 3 месяца или на год без ограничений по числу поездок.
Иначе еще больше трэша будет…
Вангую, что пост войдет в топ, как когда-то «Как попасть на дачу президента в пять часов утра»
Остаётся этический вопрос: при тестировании, фактически, происходила эксплуатация уязвимости с получением материальной выгоды.
Что надо было сделать? Приобрести жетонов/билетов на сумму, равную сумме умотреблённого в результате уязвимости. Жетоны можно было просто покидать обратно, билетики сохранить.
Я вас удивлю :)
И да, жетоны в метро есть, например, еще и в Екатеринбурге. Московские, кстати :)
Пару лет назад в Новосибирске ещё были. А в Питере больше нет? Давно там не был. В Москве ещё лет 8-10 назад их не стало. Был расстроен — думал собрать образцы жетонов городов, где в России метро есть :) Пока только Питер, Новосибирск.
ЗЫ а я думал, что у нас только 4 метрополитена: Екатеринбург, Москва, Питер, Новосибирск, оказывается ещё есть в Нижнем Новгороде, Казани и Самаре.
Кстати, в Новосибирске свои жетоны, или привозные, как в Екатеринбурге? :)
Риторический вопрос: у нас в городе используются обычные транспортные карты с магнитной лентой. Всегда, глядя на тетенек в метро, пополняющих эти карты, думал: какая защита у этих карт от чего-то вроде скимминга или даже кражи пополняющего терминала?
Хотя в принципе, брать карту Plus и юзать ее в режиме совместимости — уродство, но на то у них есть некоторые печальные причины, от которых так просто не избавиться :)
Только мастер ключи и на ограниченное количество «слотов».
А совместимость с инфраструктурой гораздо дороже чем мелкие потери от хакеров.
С учетом того, что и еще есть «черный список» карт, загружаемый в устройства.
Потенциальные потери от мошенничества — ни о чем.
Ammonia подскажите, но ведь это значит, что можно через программу эмулировать-генерировать любое время последнего прохождения, и тогда можно не заморачиваться с синхронизацией через автобусы?
А так-же упоминаемая в статье программа «Мой проездной» вполне неплохо работает, что даже в кассы спускаться не надо для пополнения, всё через телефон… было… до этого времени))
Не срача ради, правда интересно.
А статья чудесная. Надеюсь она приведёт к усовершенствованию системы(что в такой консервативной области весьма круто). Спасибо!
но поправить код, собрать обратно и запустить — вряд ли
Имея девелоперский сертификат это не составит труда.
Девелоперский сертификат сейчас можно даже бесплатный использовать.
Вполне можно, иначе откуда берутся крякнутые игры на торрентах?
Вообще тоже интересует тема с защитой, так как возможно в скором времени придется разрабатывать схожую систему — платежи с идентификацией аккаунта пользователя через NFC-карту, как раз рассматриваем Mifare Plus. Про идею с подменой сертификатов и MitM для кражи ключей приходящих с сервера я как-то не подумал. И теперь вот вообще не вижу способа сделать это секьюрно.
Неужели единственный способ — использование навороченных карточек типа Mifare DESFire, которые как и EMV IC карты содержат в себе уже настоящий процессор и могут вычислять всякие подписи и выполнять шифрование самостоятельно?
И использование SAM-модулей от NXP в режиме X-interface (подключение SAM напрямую к IC NFC) для хранения ключей, диверсификации и прочей аппаратной криптографии. Тогда единственное место где можно перехватить данные с карты — это интерфейс между хостом и считывателем.
Если вы расчитываете на андроид устройства, то там тоже есть варианты секурных хранилищ (UICC (SIM), SDCard, Embedded Secure Element). Но остается проблема загрузки ключей по воздуху. Лучше не давать это делать обычным пользователям.
Под Ваши потребности, думаю, вполне можно подобрать недорогое решение из линейки Mifare.
Есть, конечно, варианты, но настолько геморройные и на практике сложно реализуемые. В общем, есть варианты проще.
Кстати, раскрою небольшой секрет: с ключами для генерации и проверки имитовставки в кошеле все обстоит так же (в отличие от обычных ультралайтов, где они достаточно часто ротейтятся, правда с оговорками тоже).
То есть в случае проблем с каналами связи всё должно работать (и следовательно была возможность двойной траты)
Но если все турникеты онлайн, то возможности двойной траты быть не должно.
> в метро дешевле по картам на 60 поездок
Опять-же зависит от количества поездок — если ты спускаешься в метро каждый день по 3 раза в день, то уже выгоднее брать безлимитный со сроком действия.
Тратить на проезд деньги с баланса карты выгодно, если пользуешься метро очень редко.
В общем вот
А я так и ношу в кошельке билеты с аттракциона, хотел поисследовать способ формирования идентификаторов там, никак руки не доходят.
PS: Хорошо хоть изредка появляются такие отличные статьи на хабре.
По крайней мере, не стоило так подставляться и писать про эксперименты с подделкой баланса.
Для системы проще отчитаться от поимке «киберпресупника», чем признать собственные ляпы.
И да, респект за подробное исследование и спасибо за интереснейший пост!
PS. Вспомнил пост про аналогичные эксперименты с таксофонными карточками.
Там у ребят закончилось уголовной статьёй и судимостью: habrahabr.ru/post/191450
Давно хотел вылить что-то подробное по тройке и современному состоянию систем Метро и МГТ на Хабр, но ввиду своей жуткой лени и печальной занятости, никак не доходили руки (а инфы просто огромное море, правда, некоторую к сожалению выкладывать нельзя, но и без нее тоже интересно).
Автору — респект, что за это взялся и отдельно респект за его начинание в расковыривании /так называемого/ Layout'а у кошелька. По собственному опыту, доскональное расковыривание лэйаута — это достаточно емкая и интересная работа.
Вообще, если кому интересны какие-то вопросы по этой теме — задавайте. Я тоже постараюсь ответить в рамках того, что знаю и в рамках того, что можно говорить.
Ну вот видишь, никому не интересны технически подробности. Ладно, поеду тогда домой. Может это и правильно: меньше знаешь — крепче сон.
— сектора карты закрыты ключом, не зная его их не прочитать, так? С андроидом понятно, а откуда утекали ключи в до-андроидную эпоху? Человеческий фактор? Или тупо брутфорсом?
— есть отдельный ключ на запись, правильно?
— что за китайские карты с возможностью записи нулевого сектора, на обычные карты он не пишется что ли? И что в нем такого особого хранится что он так защищен?
— если допустим, ключей нигде нет, возможно ли сдампить радиообмен с помощью антенны и приемника настроенного на частоту обмена? (допустим, есть SDR умеющий принимать от 20КГц и возможность записать сигнал в IQ)
Спасибо.
2. По технологии, есть два ключа, роли которых можно выбирать. Но в нашем случае, да — один «на чтение», один «на запись». Так повелось.
3. Нулевого блока. Нулевой блок на всех Classic (и совместимых) картах — некая «заводская зона», которая по уму на заводе пишется один раз, содержит в себе в том числе относительно уникальный серийный номер карты и не подлежит перезаписи. Сериный номер используется в том числе для организации защиты (от клонирования, например). В некоторых специальных китайских картах сделано так, что нулевой блок возможно перезаписывать.
4. Да, возможно. Это один из методов «доставания» ключей, в том числе и из «пофиксенных» новых Plus в режиме совместимости, так как некоторые базовые косяки Crypto1 устранить уже не выйдет, грубо говоря.
http://www.phdays.ru/broadcast/ (справа сделать поиск по NFC и выбрать выступление про псевдобезопасность)
Просто совпадение?
Интересно, а про количество дней, прошедших с 1.1.1992, автор сам догадался, или все-таки где-то подсмотрел? ;)
Примечательно (как любит повторять автор), что технология содержит средства, которые могли бы существенно затруднить проведение подобной атаке (последнюю подпись, можно было бы сверять со значением на сервере), но она почему-то не задействована даже в заведомо online решениях.
Может ли у этого быть рациональное объяснение?
Например, общий процент фрода, и его «стоимость» так малы, что не превышают стоимости дополнительных серверных мощностей необходимых для проверки всех транзакций (маловероятно).
Или — отключение этой проверки существенно уменьшает время транзакции = увеличивает пропускную способность, что может быть важно в часы пик (более вероятно).
Уязвимость используется самими разработчиками (как-то неприятно про это даже думать).
// 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
}
}
Мне в своё время удалось получить программу билетопечатающего терминала. Много интересного там, вот только ключи шифрования не смог вытащить.
Могу поделиться, но не знаю как связаться с вами.
Вангую что завтра-послезавтра будет удалена «по требованию правоохранительных органов» :)))
А сейчас… Причем, не только здесь, а вообще, тенденция такая. Хотя, по сути, формально, ничего с того времени ни законодательно, ни как-либо еще особо не изменилось.
Понимаете, что происходит? Вот. И это страшненько. Система, которая порабощает и промывает — во всей красе.
Насчет статьи — технические подробности это интересно, а вот приложение для телефона, позволяющее любой школоте накрутить себе поездки, я бы выкладывать все же не стал. Во-первых, незачем плодить халяву, должен быть некий порог входа для тех кто реально интересуется технологиями, а не просто халявщик, во-вторых, это все-таки неэтично по отношению к метрополитену да и городу в целом, ведь средства от продажи билетов таки идут на развитие и модернизацию транспорта.
Что касается тенденции… Когда-то давно интернет был уютным местом, где общались технари и инженеры, все друг другу доверяли, и вообще, было классно. Мне например совершенно незнакомый человек с fido7.photo.ru продал в свое время цифровую камеру в рассрочку на 3 месяца, без каких-либо расписок, просто под честное слово — возможно ли такое сейчас? Сейчас увы, доступ в интернет есть у всех, и не только у честных людей. Так что какое-то регулирование таки нужно, и я не могу сказать что это так уж плохо.
А по-моему всё правильно автор сделал. Руководство метрополитена поставлено в известность? Поставлено. Если они не хотят улучшать безопасность, надо переходить к более жёстким мерам. Вон благодаря Karsten Nohl с аналогичными методами в его стране мобильная связь стала немного безопаснее.
Без приложения в данном случае это просто крутая техническая статья, с приложением — шанс на улучшение безопасности.
Во-первых, с вероятностью 99% ничего не изменится. И дело не в том, что разрабы в метро тупые, а в том что поменять все проездные в 10 миллионном городе — та еще задача. Вот как вы себе это представляете — обновить всем проездные, включая работающих, пенсионеров, прочих социальщиков и пр. Далее, как я понял из статьи, в автобусах данные не синхронизируются — предлагаете все автобусы проапгрейдить? Да никто не будет всем этим заморачиваться, проще закрыть глаза на то, что пара тысяч студентов будет нахаляву кататься.
Во-вторых, как уже я написал выше, деньги от билетов таки идут на модернизацию и закупку транспорта. Когда топикстартер в следующий раз будет ехать в старом раздолбанном автобусе, может задумается, что если бы не халявщики, может автобус бы и поновее был.
В третьих, и наверно самое главное. Любое ужесточение безопасности — в первую очередь создает неудобства честным гражданам. Дали допустим, возможность пополнить проездной с мобилы — тут же нашелся «умник» который хакнул. Ну закроют эту фичу, придется вам стоять в очереди в кассу чтобы проездной пополнить, кто от этого выиграет? Сами же автора «добрыми словами» вспоминать будете. В идеале для честного человека — лучшая защита это та, которой нет, о которой не надо заморачиваться. Закроют допустим возможность делать социальные проездные на несколько лет с захардкоженными ключами, придется бабушкам каждый месяц ходить и проездной обновлять, чтобы ключи в проездном синхронизировались, будете из-за этих бабушек дольше в очереди стоять.
Как-то так.
То, что происходит у нас — куча Legacy (от которого тяжело избавиться, потому, что изначально все через жопу было сделано), наплевательское отношение «на авось и так сойдет» и отличные продажи этого всего за классные конкурентные цены. Ну вот так, увы.
Проездные, кстати, обновляются через автоматы в метро. Два года назад при пополнении "тройки" высветилась надпись "Программное обеспечение карты обновлено" или что-то вроде того.
Но в принципе, сам факт работы с простой Mifare Classic напрямую чрез A/B ключи в Android приложении через NFC говорит о том, что эти ключи легко можно вытащить. Просто никому особо не надо было это.
А NXP зря притянули. Их представители всегда на встречах активно не рекомендуют использовать режим Mifare Classic. Он конечно есть в целях совместимости на новых картах NXP, но…
Догадываюсь, какой был диалог «бизнес» — «IT» (разработка+сопровождение):
- Бизнес: Нам нужно что бы с бесконтактной картой можно было работать в
- IT: Ну давайте DES Fire использовать… но тогда инфраструктуру менять придется… Или Java карту с прокси апплетом и поддержкой Mifare Classic… Но дорогая она нынче.
- Бизнес: Мы тут посчитали… дороговато. Даешь работу в телефоне с обычной дешевой Mifare Classic
- IT: Так сломают же..
- Бизнес: А не волнует. Зато дешевле. И авось не сломают. Да и пусть ломают. потери не большие. Делайте!
- IT: Есть!
возможно резон есть. Ну сколько этих гиков и хакеров… Украдут копейки.
Как раз базовые уязвимости Mifare Classic все известны.
И из соображений безопасности и перспективы «Mifare Classic» не выбор.
Но вложения в уже существующую инфраструктуру уж больно велики. Ни кто не хочет разово менять инфраструктуру.
Да и модули ридеров Mifare Classic стоят сущие копейки.
И еще одна причина… Было бы из чего выбирать то.
И уж простят меня представители NXP, но лично я не считаю что у NXP новых карт есть будущее.
Рискну предположить, что переход будет выполнятся на открытый «ISO14443 B» с T=CL (карту которую могут делать не только NXP).
Я бы предположил что это будет Java карта.
Calipso, Mifare (PLUS то же) и прочие… да на них просто не сделать ту логику, которую зачастую хочет заказчик! С разницы не будет. Карта памяти и все. Все логика во внешнем приложении… Что не очень безопасно.
И хоть NXP, как мне кажется, сильно демпенгует с чипсетами и модулями ридеров (под свои карты), но как то страшновато попадать в кабалу к одному производителю.
Все это мои личные предположения и домыслы, хоть и основанные на… (в общем есть основания)
Если в качестве бесконтактного криптопротокола обмена данными между картой и ридером будет 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.
Когда не хватает аргументов, переходят на личности — это известный факт. По существу парировать было нечего, обозвав это разговорами за жизнь. Забавны отсылки к моему опыту.
Причем здесь личности.Вы действительно работали в проектах по транспортным картам?
Где вы увидели переход на личности? Так работали или нет?
Я теоретически должен быть рад проблемам Тройки. Но вот особо осуждать их не могу.
Потому что представляю как им (разработке) выкручивали руки требуя приложение в смартфоне.
И это суровая правда жизни. Не всегда можно выбрать идеальное с точки зрения архитектуры и «красивости» решение в рамках поставленных ограничений.
Следовательно, вывода всего два: а) криворукие разработчики, которые не умеют и не хотят; б) более глубинные проблемы (обратной совместимости).
Я думаю, в данном случае и то, и то. Как минимум потому, что можно было начать с SL2 где можно пользоваться AES, а где _пока еще_ нельзя, из-за проблем с обратной совместимостью, пользоваться crypto1 по старому. Подготовить почву и нормально постепенно обновлять старье, через некоторое время полностью выведя его из строя и перещелкнув все в SL3 полностью, вообще незаметно для юзера.
Меня то же «несколько» удивило, что используя Mifare Plus даже в режиме SL1, они не стали пользоваться предоставленной опциональной возможностью AES аутентификации (которая есть и в SL1). Но акцентировать на этом не стал (ну все же информация по Mifare PLUS конфиденциальна).
Но раз вы публично пальцем ткнули…
Не буду больше защищать несколько корявые решения «Тройки». Тем более что они мне не партнеры, а даже наоборот.
Ссылку 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, а именно в свободном доступе, доступная «каждому школьнику».
Да даже при наличии документации, уверяю, каждому школьнику это не сделать.
«Что нам стоит дом построить… нарисуем — будем жить».
К вопросу «отстали от жизни». Такие слова то подтверждать нужно…
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
Но вот по теме, в сухом остатке имеем то, что имеем.
https://github.com/aczid/crypto1_bs
Да… действительно отстал… Похоже зря давно не интересовался.
Понятно, что в принципе ничего сложного сделать платку (сформировать 13Мгц сигнал и/или записать его на современном проце). Хотя казалось, что это все же уровень не школьника и не всякого студента (судя по публикациями на хабре).
Но не думал, что этим уже штатно торгуют!
А еще выкладывают в на github описание Cripto1, которое раньше даже под NDA из NXP вытащить было невозможно.
Действительно. Уровень входа минимальнейший.
Скажите, правильно ли я понял, что сейчас метрополитену достаточно исправить отправку ключа B при запросе баланса:
Примечательно, что здесь так же присутствуют ключи B, которые используются для записи данных на карту, хотя для запроса баланса достаточно было бы ключей А, разрешающих только чтение секторов памяти.
и трюк повторить не удастся?
Не похоже ли это на оставленный backdoor?
PS. Интересно, а можно ли с карты считать количество оставшихся поездок, данные последней поездки из билета типа 60 поездок и т.п.?
Прокат велосипедов — Стоимость не уточнялась
Если речь идёт про Велобайк, то там «Тройка» + пин-код служат всего лишь альтернативным идентификатором пользователя. Деньги списываются напрямую с привязанной банковской карты, «Тройкой» оплатить нельзя.
Для работы нужен смартфон на платформе Android с NFC модулем производства NXP.
Подскажите, пожалуйста, какие смартфоны (вердоры и модели из последних) поддерживают такую связку, либо, быть может, где ведется реестр таких NFC-смертфонов?
Уже в заголовке «правильно» расставили акценты:
«В Москве хакер взломал «Тройку» и две недели бесплатно катался в общественном транспорте»
http://www.msk.kp.ru/daily/26531/3551729/
http://www.interfax.ru/russia/510444
Или я всё же не прав, и они уже ни как ни чего не пофиксят(малой кровью)? Тогда если этот способ работает, не проще ли каждые полгода к примеру, менять эти мастер ключи…
Вариант «подержать на депозите» не предлагайте — весь смысл проездного в том, что деньги вы вносите авансом и предприятие на них рассчитывает при планировании расчётов с поставщиками.
Например, в одном городе есть билет на 40 поездок стоимостью 800 руб. и сроком действия 30 дней.
А в другом — на 30 поездок стоимостью 900 руб. и сроком днйствия 45 дней.
По какому принципу перечислять между разными системами деньги? Из какого расчета, если я купил проездной в одном городе, а поездку совершил в другом?
Тупо разделить стомость проездного на количество поездок? Тогда тот город, где стоимость ниже, получить больше, а вот в обратном случае — меньше? Да и нельзя так делать — ведь это по сути предоплаченный тариф — за некую стоимость получаешь фиксированный набор услуг. Некорректно будет их сравнивать, приводя к некой условной единице
Вместо того, чтобы это был один общий кошелек, желательно привязанный счет, чтобы не размещать остатки в неких структурах, которые, «возможно», на этом зарабатывают
Посмотрите, тут есть комментарий производителя чипов и ментов. До разработчика, похоже, не достучались.
moslenta.ru/article/2016/05/27/trojka
Автор, мои поздравления, про Вас уже на мейл.ру написали news.mail.ru/incident/25920697. Боже, какой же бред они несут!
www.gazeta.ru/tech/news/2016/05/27/n_8688887.shtml
Можно получить сигнатуры и слать их на сервер, но взломщик может подделать получение сигнатуры. Но можно проверять сигнатуры apk из .so файликов, но кто это будет делать....
Делать проверку из .so-файла не так сложно, но и so-бинарники тоже декомпилируются и правятся.
На самом деле, перевод на уровень sl3 не так и сложен — нужно подать на карту несколько команд. А уж aes взломать с помощью андроида… Не так просто (если кодеры из банка москвы снова ключи в открытом виде передавать не будут)))
Хотя разрешено ставить программы из любых источников.
И к жетонам уже не вернуться — есть 3D принтеры.
Остаётся один вариант — абонентская плата (принудительная) для каждого москвича.
Т.е. коммунизм начнётся с московского метро.
Я всегда знал это. =)
P.S.
Удивительно, кто-то обнулил мою карму. К чему бы это?!
Исследование защищенности карты Тройка