Комментарии 36
Есть предположение — что когда наполняли базу — случайно или специально поднесли карту с другими ключами сектора — считыватель отправил этот код и контроллер его сохранил.А если махнуть картой слишком быстро?
Пока не удалось. А так я хочу с ними связаться и заодно получить SDK на этот считыватель и реализовать в нем дополнительные функции, описанные в статье https://habr.com/ru/post/347574/
Здесь, возможно что-то подобное. Может, вышеупомянутое 1219191919 есть некий маркер ошибки, но из-за какого-то бага он ведет не по правильной ветке программы.
Я тоже думаю что это маркер ошибки, ибо считыватель имитирует работу таблетки, которая просто отдаёт код. Iron Logic просто не готов к таким ситуациям когда ключ может отказаться выдавать код. А mifare откажется если не аутентифицироваться на чтение сектора. Вот с завода и предусмотрена реакция в виде этого кода. Осталось только убедить их этот маркер в прошивку контроллеров добавить чтобы он определялся как «считыватель сообщил об ошибке» а не «получен ключ».
На сколько я понимаю — это же запрещено Apple. Считывать то и то только с недавнего времени можно…
К сожалению, по моему соглашению с Apple я не могу рассказать как я это сделал конкретно. Скажу только то, что это iPhone без jailbreak’а, но со специальным сертификатом, и реализовано это поверх NFC PassKit. Правда, очень жаль что не могу вам ответить на этот вопрос, но NDA такой NDA.
P.S. Как-нибудь напишу статью, об официальном PassKit (в том числе поверх NFC) от Apple, и о том, как научить вашу СКУД работать с этим фреймворком.
И все — другого официально нет (пока).
А с андроидом нет такого соглашения? А то хочется все мифарки в телефон вбить
Аппаратно — с большой вероятностью можно, а программно — не заморачивался пока что. Вообще для понимания таких вопросов надо читать даташит на микросхему NXP 66V10 (для iPhone 6s/SE). Для Mifare Classic пришлось описывать необходимые параметры и команды почти с нуля, поскольку в операционной системе отсутствуют какие либо фреймворки связанные с этим (в силу понятных причин).
Вы же упомянули про режим обучения. Если в таком режиме поднести неправильный ключ, то он сохранится этим кодом. В свою очередь у установщика может быть много ключей от разных систем авторизации, в том числе несовместимых друг с другом и иногда тыкать нечаянно не тем ключом он вполне может. Таким образом достаточно иметь не слишком внимательного или немного ленивого установщика (что он не побежал за программатором удалять лишний ключ), не знающего о баге (он думает, что система просто запомнила его ключ, пусть и не тот, что надо, но ключ всё равно его и это не проблема и враг не пройдёт). Так что это не случайность скорее всего, но и не злой умысел.
Я верю что это не злой умысел, но версию с установщиком я отбросил — я отформатировал память контроллера сегодня программатором и зашил всего два ключа. Тем не менее — уязвимость все ещё работает. Жду от производителя отклика и в идеале SDK с исходным кодом для дальнейшего анализа. Беда в том, что эксплуатировать уязвимость можно банально поднеся транспортную или скидочную карту с Mifare чипом. Ключей от их 3х секторов считыватель не знает, следовательно так же отправит в контроллер 1219191919.
"Попытки влезть в содержимое секторов поначалу успеха не приносили, а когда ключ таки удалось взломать — выяснилось, что используется лишь 3-й сектор, и в нем продублирован UID самого чипа."
Можно пару комментариев на тему взлома — ключ же был взломан только из-за того, что это был старый уязвимый вариант ключа, который ломается только если использовано одно поле, а при использовании хотя бы 3х полей — уже не взламывается?
Просто тут явно уже не одна проблема, а несколько, причём давно известных) Да и проблема какраз не в автономности СКУД, а в наплевательском отношении того, кто это дело настраивал...
Будет ли такой ключ открывать айронлоджиковские контроллеры с iButton/Em-Marine считывателем?
Открывает. У меня есть стойкое чувство, что этот код — часть какого то другого механизма контроля доступа, но недореализованный. Iron Logic отказались предоставить исходный код, и ссылаются на то, что в новых версиях ПО этот баг устранён. Чуть позже прошью — напишу, что выйдет.
Да вот тоже думаю, если верить даташиту — какой-то там AVR
То есть, для того, чтобы она сошлась должно быть так: 0x1219191919FFFFC7
Во вторых, наверное при таком коде хороший контроллер СКУДа должен выдать ошибку и послать лесом, и может на это и расчитано. Но, в некоторых скудных контроллерах, CRC или совсем игнорируется или хранится вместе с ключом, заместо того, чтобы вычисляться, и вот в этом может крыться дыра…
Проблемы автономных СКУД — Там, откуда не ждали