Тройка + полис ОМС=? или как все начиналось
Все началось с того, что я заболел и обнаружил, что потерял карточку ОМС. Несмотря на то, что номер я помнил наизусть, мне нужно было что-то, что можно приложить к зеленому инфомату в поликлинике, в противном случае, записаться к врачу и получить законный больничный не получится. Вариантов было много: восстановить полис (чтобы потом найти старый при первой же уборке); сгенерировать и распечатать штрих-код полиса (штрих-код на бумажке — несолидно), либо взять с собой свою старую социальную карту… Я остановился на последнем варианте. Если быть точнее, то я решил на нем не останавливаться, а записать на тройку свои полис аналогично тому, как он записан на социальной карте москвича.
Тюнингуем Тройку
Зная возможности Mifare Classic — совместимых карт, я решил объединить Тройку и старую студенческую карту ради удобства и просто из интереса к результату эксперимента.
Как мы знаем, карты Mifare Classic 1K и 4K вывели из оборота из-за уязвимостей в пользу более защищенных, но совместимых Mifare Plus S, Plus X 2k или Plus EV1 2k. Но суть осталась та же: как социальные, так и карты Тройка имеют одну и ту же начинку, с разницей лишь в объеме (количестве защищенных секторов, что в нашем случае абсолютно не играет значения).
Вооружившись статьями про исследования защищенности Тройки и Android приложением «Mifare Classic Tool», я решил заглянуть сначала внутрь социальной карты, чтобы найти место, где записан номер полиса ОМС. Благодаря документу почти двадцатилетней давности я уже предполагал, что он будет в 5-м секторе карты, зарезервированном как медицинское приложение МГФОМС, что и подтвердилось на практике.
Искомый номер полиса оказался в 5м секторе на второй строке со 2го по 9й байт, то есть, в данном случае "7700009016811218". Отлично, зацепка (а, точнее, зацепище есть)!
Что касается карты Тройка, то там 5й сектор забит нулями, то есть, пока не используется. Ключи A и B отличаются от тех, которые на СКС, но это поправимо, их можно переписать такими же, как и там.
Эксперименты
Помимо желанного номера полиса ОМС, в секторе присутствовали и другие данные, назначение которых мне неизвестно. Начитавшись статей про 8й сектор (электронный кошелек) и его защищенность имитовставками, я предположил, что здесь эти данные могут играть такую же роль имитовставки или контрольной суммы для проверки целостности данных в секторе. Поэтому я решил проверить это, переписав на одну Тройку весь сектор в точности, как на СКС, а на вторую — только номер полиса. Сказано — сделано!
Снял полный дамп с СКС, и записал на первую Тройку весь 5й сектор, а на вторую — записал отредактированный дамп 5го сектора, где фигурирует только номер полиса.
Результаты
Прогулявшись до поликлиники и проверив обе карты, я смог с обеих войти на инфоматы и записаться к врачу! Разумеется, в качестве способа аутентификации следует выбрать «Карта москвича» или «Социальная карта москвича» (работают оба способа) и приложить карту к считывателю.
Из этого следует, что инфоматам достаточно лишь номера полиса в отведенном для него месте и знакомых им ключей от пятого сектора.
Теперь можно немало удивить работников поликлиники, продемонстрировав им использование Тройки в качестве полиса ОМС и проходить более удобную и современную бесконтактную аутентификацию, ибо даже современные полисы ОМС не поддерживают бесконтактный обмен информацией — их необходимо вставлять чипом в инфомат. И «Тройка» воистину становится ключом к городу, в частности, к поликлиникам.
Update 1: По просьбам трудящихся, расскажу «на пальцах», как это сделать. Как я уже писал выше, для этого отлично подходит утилита «Mifare Classic Tool» для Android.
Далее:
1. Жмем «Read tag»
2. Проверяем, чтобы были выбраны файлы ключей std.keys и extended-std.keys
3. Прислоняем тройку к телефону и жмем Start mapping and read tag. Телефон на некоторое время задумается, пока будет подбирать ключи.
4. По завершении откроется дамп (карту можно убрать от телефона на время редактирования). В нем нас интересует сектор номер 5. Выглядит он таким образом:
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
FBC2793D540B7C378800D3A297DC2698
Внизу находятся ключи A и B
5. Наша задача прямо там отредактировать этот сектор и привести его в такой вид:
00000000000000000000000000000000
00888888888888888800000000000000
00000000000000000000000000000000
186D8C4B93F908778F029F131D8C2057
Где 888... — Номер Вашего полиса ОМС. Особое внимание обратите при переписывании ключей к секторам: если там будет опечатка, то Вы рискуете потерять полностью или частично доступ к сектору.
6. Нажимаем на значок меню в правом верхнем углу и жмем Write Dump -> WRITE DUMP, выбираем только сектор 5 (остальные галки снимаем); прикладываем карту к телефону -> смотрим, чтобы стояли обе галки рядом с ключевыми файлами и жмем START MAPPING AND WRITE DUMP. После чего на фоне дампа мы должны увидеть сообщение «Data successfully written»
Карта готова к походу в поликлинику!
Комментарии (23)
Stegos-in-Russia
25.07.2019 14:19Круто! Это, кстати, идея посмотреть, а что еще можно вставить на Тройку или вообще в какое-нибудь носимое кольцо.
mdstat Автор
25.07.2019 14:57В теории, записывать на эти карты можно все, что угодно. Другой хабровчанин, к примеру, сделал на базе Троек полноценный СКУД:
https://m.habr.com/ru/post/347574/
CactusKnight
25.07.2019 17:07У меня обычный бумажный полис ОМС, поэтому пользуюсь совершенно не технологичным, но исправно работающим способом — скан полиса копируется в смартфон и оттуда его штрих-код без проблем сканируется ЕМИАСными терминалами
mdstat Автор
25.07.2019 18:36А если телефон разрядится… тогда можно и на корпус нанести (или чехол)! Можно даже сделать татуировку со штрих-кодом, чтобы походить на героя антиутопий. Количество вариантов со штрих-кодами ограничивается только количеством поверхностей, на которые его можно нанести. Я некоторое время пользовался штрих-кодом на карточке — временами приходилось повозить карту по стеклу туда-сюда, пока она не отсканируется. Вдобавок, её неудобно отковыривать от стекла: постоянно приходится ногтями подцеплять. С тех пор я охладел к штрих-кодам (сугубо личный опыт), хотя умалять данную технологию было бы некорректно.
CactusKnight
25.07.2019 21:36Если носить телефон в непрозрачном чехле, то можно туда тупо положить бумажку с этим самым штрих-кодом
delimer
25.07.2019 18:44То есть я правильно понимаю, что так можно в 5 сектор записать только номер полиса и он будет работать?
mdstat Автор
25.07.2019 18:50Да, это так. Но в дампе необходимо будет ещё переписать всю нижнюю строчку с ключами от сектора, сделав их как у социальной карты, иначе инфомат его не прочитает. В добавленной инструкции написано, к какому именно виду необходимо привести сектор.
delimer
25.07.2019 18:59А ключи у всех социальных карт одинаковые? То есть без социальной карты я смогу записать свой ОМС?
mdstat Автор
25.07.2019 19:24Если говорить относительно 5го сектора на соцкартах, то я еще не встречал ни одного измененного ключа. Все одинаковые. На тройках ключи тоже одинаковые. MCT имеет встроенные и те и другие, поэтому проблем с чтением карт быть не должно. Авторизовываемся со старыми ключами, прописываем полис, меняем ключи на новые, понятные инфоматам, и вперед!
Vacxe
26.07.2019 02:55В описании «как сделать» в п.5 почем то изменены ключи А и В. Зачем?
mdstat Автор
26.07.2019 07:44Сектор 5 на тройке не предназначался для использования в качестве медицинского приложения, поэтому ключи там незнакомы поликлиническим инфоматам. Меняются они прямо в hex дампе, в т. н. трейлере сектора (самая нижняя цветная строка каждого сектора в mfc).
При записи новых ключей, сектор сперва открывается при помощи старых на чтение и запись, полностью переписывается (вместе с ключами) и с этого момента, он доступен уже по новым ключам. Именно поэтому надо внимательно вводить новые ключи, потому что в случае опечатки, восстановить их будет невозможно.
Gurturok
26.07.2019 09:23Что касается карты Тройка, то там 5й сектор забит нулями, то есть, пока не используется.
Тоесть как проездной карта продолжила работать без вопросов?mdstat Автор
26.07.2019 22:17Да. Билеты на метро пишутся в 1й сектор, РЖД — 2-3й сектора, билеты наземного транспорта пишутся в 4й сектор, электронный кошелек использует 8й сектор (к нему могут обращаться и метро и наземный в случае отсутствия записанных билетов в родных секторах). 5й пока пустует, быть может, в будущем ему и отведут какую-то роль. Наличие нулей в 5м секторе — лучшее доказательство того, что сектор в данный момент не используется.
mdstat Автор
26.07.2019 22:23На самом деле, я не удивлюсь, что когда персонализация тройки станет доступна широким массам населения, можно будет официально записать свой полис на 5й сектор, который, возможно, зарезервируют рано или поздно для этих целей. Во всяком случае, я бы именно так и сделал.
dimatl
Вы бы описали хотя бы немножко чем писали в тройку номер полиса. Как проездной билет она не перестаёт работать? Для обычных людей не хватает доки(
mdstat Автор
Я написал, что вооружился приложением Mifare Classic Tool. Более подробно попробую дописать чуть позже, если хватит времени, сделаю удобное приложение.
На возможность ездить эта модификация не влияет, иначе бы потерялся смысл в объединении карточек
mdstat Автор
Дописал более подробную инструкцию по редактированию карты.