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

Тройка + полис ОМС=? или как все начиналось


Все началось с того, что я заболел и обнаружил, что потерял карточку ОМС. Несмотря на то, что номер я помнил наизусть, мне нужно было что-то, что можно приложить к зеленому инфомату в поликлинике, в противном случае, записаться к врачу и получить законный больничный не получится. Вариантов было много: восстановить полис (чтобы потом найти старый при первой же уборке); сгенерировать и распечатать штрих-код полиса (штрих-код на бумажке — несолидно), либо взять с собой свою старую социальную карту… Я остановился на последнем варианте. Если быть точнее, то я решил на нем не останавливаться, а записать на тройку свои полис аналогично тому, как он записан на социальной карте москвича.

Тюнингуем Тройку


Зная возможности 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)


  1. dimatl
    25.07.2019 13:59

    Вы бы описали хотя бы немножко чем писали в тройку номер полиса. Как проездной билет она не перестаёт работать? Для обычных людей не хватает доки(


    1. mdstat Автор
      25.07.2019 14:34

      Я написал, что вооружился приложением Mifare Classic Tool. Более подробно попробую дописать чуть позже, если хватит времени, сделаю удобное приложение.
      На возможность ездить эта модификация не влияет, иначе бы потерялся смысл в объединении карточек


    1. mdstat Автор
      25.07.2019 18:18

      Дописал более подробную инструкцию по редактированию карты.


  1. NAS
    25.07.2019 14:18

    А не проще записаться к врачу через emias.info или через коллцентр?


    1. mdstat Автор
      25.07.2019 14:25

      В нашей поликлинике запись к дежурному врачу происходит только через инфомат. Через емиас к дежурному не записаться.


  1. Stegos-in-Russia
    25.07.2019 14:19

    Круто! Это, кстати, идея посмотреть, а что еще можно вставить на Тройку или вообще в какое-нибудь носимое кольцо.


    1. mdstat Автор
      25.07.2019 14:57

      В теории, записывать на эти карты можно все, что угодно. Другой хабровчанин, к примеру, сделал на базе Троек полноценный СКУД:
      https://m.habr.com/ru/post/347574/


  1. halted
    25.07.2019 14:24

    А если nfc-запись хранить в телефоне?


    1. mdstat Автор
      25.07.2019 14:46

      Если речь идёт об эмуляции карты на телефоне, то насколько мне известно, Android HCE не поддерживает пока эмуляцию mifare classic. Но тема перспективная!


  1. CactusKnight
    25.07.2019 17:07

    У меня обычный бумажный полис ОМС, поэтому пользуюсь совершенно не технологичным, но исправно работающим способом — скан полиса копируется в смартфон и оттуда его штрих-код без проблем сканируется ЕМИАСными терминалами


    1. mdstat Автор
      25.07.2019 18:36

      А если телефон разрядится… тогда можно и на корпус нанести (или чехол)! Можно даже сделать татуировку со штрих-кодом, чтобы походить на героя антиутопий. Количество вариантов со штрих-кодами ограничивается только количеством поверхностей, на которые его можно нанести. Я некоторое время пользовался штрих-кодом на карточке — временами приходилось повозить карту по стеклу туда-сюда, пока она не отсканируется. Вдобавок, её неудобно отковыривать от стекла: постоянно приходится ногтями подцеплять. С тех пор я охладел к штрих-кодам (сугубо личный опыт), хотя умалять данную технологию было бы некорректно.


      1. CactusKnight
        25.07.2019 21:36

        Если носить телефон в непрозрачном чехле, то можно туда тупо положить бумажку с этим самым штрих-кодом


  1. delimer
    25.07.2019 18:44

    То есть я правильно понимаю, что так можно в 5 сектор записать только номер полиса и он будет работать?


    1. mdstat Автор
      25.07.2019 18:50

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


      1. delimer
        25.07.2019 18:59

        А ключи у всех социальных карт одинаковые? То есть без социальной карты я смогу записать свой ОМС?


        1. mdstat Автор
          25.07.2019 19:24

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


  1. mdstat Автор
    25.07.2019 19:22

    [Deleted]


  1. OlgaShrpva
    25.07.2019 19:26

    Вау! Обязательно приобрету Тройку! Нужная вещь, судя по вашим комментам!


  1. Vacxe
    26.07.2019 02:55

    В описании «как сделать» в п.5 почем то изменены ключи А и В. Зачем?


    1. mdstat Автор
      26.07.2019 07:44

      Сектор 5 на тройке не предназначался для использования в качестве медицинского приложения, поэтому ключи там незнакомы поликлиническим инфоматам. Меняются они прямо в hex дампе, в т. н. трейлере сектора (самая нижняя цветная строка каждого сектора в mfc).
      При записи новых ключей, сектор сперва открывается при помощи старых на чтение и запись, полностью переписывается (вместе с ключами) и с этого момента, он доступен уже по новым ключам. Именно поэтому надо внимательно вводить новые ключи, потому что в случае опечатки, восстановить их будет невозможно.


  1. Gurturok
    26.07.2019 09:23

    Что касается карты Тройка, то там 5й сектор забит нулями, то есть, пока не используется.

    Тоесть как проездной карта продолжила работать без вопросов?


    1. mdstat Автор
      26.07.2019 22:17

      Да. Билеты на метро пишутся в 1й сектор, РЖД — 2-3й сектора, билеты наземного транспорта пишутся в 4й сектор, электронный кошелек использует 8й сектор (к нему могут обращаться и метро и наземный в случае отсутствия записанных билетов в родных секторах). 5й пока пустует, быть может, в будущем ему и отведут какую-то роль. Наличие нулей в 5м секторе — лучшее доказательство того, что сектор в данный момент не используется.


    1. mdstat Автор
      26.07.2019 22:23

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