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

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

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

Проверил — ничего не происходит (во всяком случае выходной интерфейс считывателя молчит)

попробуйте в ironlogic написать, они вроде вполне идут на контакт в случае каких-то вопросов по оборудованию

Пока не удалось. А так я хочу с ними связаться и заодно получить SDK на этот считыватель и реализовать в нем дополнительные функции, описанные в статье https://habr.com/ru/post/347574/

Помню, была тема, что если сделать ключ (или его эмулятор), который имеет ID FFFFFFFF, то некоторые контроллеры открывались, так как EEPROM контроллера содержал какое-то количество ключей, и остальные ячейки были заполнены «FFами». Поскольку отсутствовал счетчик количества ключей, то контроллер доходил до последнего ключа, и получал совпадающий код.
Здесь, возможно что-то подобное. Может, вышеупомянутое 1219191919 есть некий маркер ошибки, но из-за какого-то бага он ведет не по правильной ветке программы.

Я тоже думаю что это маркер ошибки, ибо считыватель имитирует работу таблетки, которая просто отдаёт код. Iron Logic просто не готов к таким ситуациям когда ключ может отказаться выдавать код. А mifare откажется если не аутентифицироваться на чтение сектора. Вот с завода и предусмотрена реакция в виде этого кода. Осталось только убедить их этот маркер в прошивку контроллеров добавить чтобы он определялся как «считыватель сообщил об ошибке» а не «получен ключ».

Домофоны элтис этим грешили в свое время. Поэтому после установки надо было забить всю память ключей мастер ключом, о чем не опытные установщики частенько забывают.
А можете рассказать как вы заставили iPhone эмулировать карту? Это не менее интересно.
На сколько я понимаю — это же запрещено Apple. Считывать то и то только с недавнего времени можно…

К сожалению, по моему соглашению с Apple я не могу рассказать как я это сделал конкретно. Скажу только то, что это iPhone без jailbreak’а, но со специальным сертификатом, и реализовано это поверх NFC PassKit. Правда, очень жаль что не могу вам ответить на этот вопрос, но NDA такой NDA.


P.S. Как-нибудь напишу статью, об официальном PassKit (в том числе поверх NFC) от Apple, и о том, как научить вашу СКУД работать с этим фреймворком.

Может быть это глупость, но можно же, вроде, если я ничего не путаю, делать пропуска для Лолета, можно, наверное, сделать себе самому какой-то такой пропуск с этим кодом.
Не путайте божий дар с яичницей. Пропуск который создаёт iOS — это проприетарное решение Apple с частично открытым исходным кодом. В моём же случае эмулируется Mifare — совершенно другой протокол и способ хранения данных. Как и было сказано официального способа эмулировать что-либо кроме EMV (Банковский стандарт контактных и бесконтактных карт, в данном случае для Apple Pay) и NFC PassKit (Студенческие, Авиабилеты, карты лояльности и т.д.) на iPhone нет. То, с чем я играюсь — продукт моих личных и не только изысканий, когда-нибудь поверхностно разберу здесь.
Вот так выглядит карта PassKit:
image

А так Apple Pay:
image

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

Раз эта тема привлекает людей, возможно начну писать статью ближе к концу недели. Скриншоты — чисто дополняют сказанное, показывая как разные типы NFC карт выглядят в Wallet.

Немного дополню автора и дам вам вот эту ссылочку
А я еще раз дополню и дам вот эту ссылочку, которую могут посмотреть все, а не только посвященные.
Спасибо.

А с андроидом нет такого соглашения? А то хочется все мифарки в телефон вбить

С Google — нет, и быть не может. Смотря какой телефон. Полностью работать с Mifare мне удалось только на Nexus 5x.
Если не попадает под NDA скажите, а mifare plus в sl2 можно эмулировать?

Аппаратно — с большой вероятностью можно, а программно — не заморачивался пока что. Вообще для понимания таких вопросов надо читать даташит на микросхему NXP 66V10 (для iPhone 6s/SE). Для Mifare Classic пришлось описывать необходимые параметры и команды почти с нуля, поскольку в операционной системе отсутствуют какие либо фреймворки связанные с этим (в силу понятных причин).

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

Я верю что это не злой умысел, но версию с установщиком я отбросил — я отформатировал память контроллера сегодня программатором и зашил всего два ключа. Тем не менее — уязвимость все ещё работает. Жду от производителя отклика и в идеале SDK с исходным кодом для дальнейшего анализа. Беда в том, что эксплуатировать уязвимость можно банально поднеся транспортную или скидочную карту с Mifare чипом. Ключей от их 3х секторов считыватель не знает, следовательно так же отправит в контроллер 1219191919.

Значит баг в прошивке. Может быть, в коде ошибки есть что-то необычное? Там контрольная сумма какая-нибудь не совпадает или ещё чего.

Для этого я и жду исходники с SDK.

полезная статья, исправление этой ошибки может кому-то поможет

"Попытки влезть в содержимое секторов поначалу успеха не приносили, а когда ключ таки удалось взломать — выяснилось, что используется лишь 3-й сектор, и в нем продублирован UID самого чипа."


Можно пару комментариев на тему взлома — ключ же был взломан только из-за того, что это был старый уязвимый вариант ключа, который ломается только если использовано одно поле, а при использовании хотя бы 3х полей — уже не взламывается?
Просто тут явно уже не одна проблема, а несколько, причём давно известных) Да и проблема какраз не в автономности СКУД, а в наплевательском отношении того, кто это дело настраивал...

Извините, не соглашусь. Как вы выразились «тот, кто это дело настраивал» монтировал готовый продукт. Его не должна заботить доработка ПО. А мной путем настройки контроллера «с нуля» было доказано что проблема кроется именно в ПО, а не базе ключей и параметров. Что до нескольких проблем, то уязвимости Mifare это настолько избитая тема, что даже останавливаться на ней особо смысла не вижу.
А если этот код 1219191919 записать на «таблетку» или в качестве Em-Marine ID?
Будет ли такой ключ открывать айронлоджиковские контроллеры с iButton/Em-Marine считывателем?

Открывает. У меня есть стойкое чувство, что этот код — часть какого то другого механизма контроля доступа, но недореализованный. Iron Logic отказались предоставить исходный код, и ссылаются на то, что в новых версиях ПО этот баг устранён. Чуть позже прошью — напишу, что выйдет.

А процессор в Iron Logic какой? Может продизассемблируем?

Да вот тоже думаю, если верить даташиту — какой-то там AVR

У меня есть проект контроллера на AVR для таблеток с 1-wire. Написано на ASMе. Если на AVR сделано, то не проблема.
Тогда проверю fuse'ы а так же проверю файл прошивки — отпишусь.
Погонял сейчас свой проект, ввел Ваши значения. Во-первых их 8 (байт), а у Вас 5, но тогда, я предположил, что если приемник 1-wire читает, а передатчик не передает (не удлиняет просадку), то читается 0xFF. Тогда я дополнил коды, добавив 3 байта FFов. И контрольная сумма не сошлась.
То есть, для того, чтобы она сошлась должно быть так: 0x1219191919FFFFC7
Во вторых, наверное при таком коде хороший контроллер СКУДа должен выдать ошибку и послать лесом, и может на это и расчитано. Но, в некоторых скудных контроллерах, CRC или совсем игнорируется или хранится вместе с ключом, заместо того, чтобы вычисляться, и вот в этом может крыться дыра…

Скорее всего. Я тут испытываю новое ПО, как утверждают IronLogic новая версия дыру должна была бы закрыть. Дыра закрылась, зато объём памяти уменьшился до 1000 ключей

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории