Зламуємо домофонні ключі mifare classic (вдалося скопіювати)

Зламуємо домофонні ключі mifare classic (вдалося скопіювати)

Update: Вдалося скопіювати, огляд оновлений.

В одному зі своїх оглядів (Atmega8A в корпусі TQFP-32 прошивка через Arduino ISP), я вже згадував про збірку зчитувача / емулятора для контактних домофонних ключів за проектом clusterr'а.

Доставка і зовнішній вигляд

Товар прийшов в звичайному жовтому пакеті без пинов був обмотаний повітряно-бульбашкової плівкою і в цілому відмінно упакований. Продавець надав відстежується трек.

Зламуємо домофонні ключі mifare classic (вдалося скопіювати)

Склад лота:
- МодульPN532 NFC Читання / Запис (3.3V-5V);
- S50 Біла карта;
- S50 Ключ карта.

Зламуємо домофонні ключі mifare classic (вдалося скопіювати)

Характеристики

На платі встановлений чіп NXP Pn532, який дозволяє проводити операції читання і запису для Mifare Classic Card (13.56 МГц).

- Розмір: 10.5см X 4.9см;
- Харчування: 3.3V-5.0V;
- інтерфейси: I2C, SPI, HSU (3.3V-5V сумісність);
- Кнопка Reset на платі;
- Крок між пинами: 2.54 мм.

підключення

Для підключення до комп'ютера, найкраще використовувати HSU - High-speed UARTs і USB TTL заснований на чіпі FT232RL, так само є можливість підключення Pn532 NFC Module по SPI з Arduino і використовувати останню, як USB TTL, більш детально можна прочитати за проектом mfocuino. На жаль, у мене виникли проблеми з Cp2102, який я вже не раз згадував у своїх оглядах.

Зламуємо домофонні ключі mifare classic (вдалося скопіювати)

- Pn532 NFC Module TX -> FTDI TTL RX
- Pn532 NFC Module RX -> FTDI TTL TX
- Pn532 NFC Module VIN -> FTDI TTL VCC
- Pn532 NFC Module GND -> FTDI TTL GND

Установка і настройка програмної частини

Для роботи з Mifare Classic існує вільна бібліотека libnfc, яка містить необхідний набір утиліт для RFID. Установка підтримується на безліч популярних ОС, але я рекомендую використовувати GNU \ Linux і зокрема Debian \ Ubuntu.

Відкриваємо Terminal, отримуємо права адміністратор (root) і встановлюємо необхідні пакети.

Для зручності створимо папку nfc в домашній директорії і перейдемо в неї:

Отримуємо поточну версію з git-репозиторію:

Збираємо libnfc з вихідних кодів, які були отримані:

MFOC - це відкрита реалізація «offline nested» атаки від Nethemba.

Програма дозволяє відновити ключі аутентифікації від MIFARE Classic card, тільки якщо відомий один з ключів, крім того список найбільш популярних ключів вже захаркодін в утиліті, за якими буде йти перевірка.

Отримуємо поточну версію з git-репозиторію:


cd ./mfoc
autoreconf -vis
./ configure
sudo make

MFCUK - це відкрита реалізація Darkside Attack. Дана утиліта не вимагає знань будь-якого з ключів.

Отримуємо поточну версію з git-репозиторію:

Використання


Підключаємо Pn532 NFC Module до USB TTL, а його в свою чергу до порту комп'ютера і прикладаємо RFID ключ - порожній, який йшов в комплекті.

У відповідь отримуємо:

Пробуємо отримати dump карти через утиліту mfoc.

Отримуємо дамп карти в файл dump.mfd
Ключі Key A: ffffffffffff Found Key B: ffffffffffff

Прибираємо порожній RFID і прикладаємо домофонної, виконуємо команду:

Не вийшло зі стандартними ключами No sector encrypted with the default key has been found, exiting ...

Якщо нам відомий один з ключів, то можна скористатися параметром -k key

Спробуємо здійснити злом через mfcuk.
Переходимо в директорію

невдача
ERROR: mfcuk_key_recovery_block () (error code = 0x03)
ERROR: mfcuk_key_recovery_block () (error code = 0x03)
ERROR: mfcuk_key_recovery_block () (error code = 0x03)

Залишав на добу, помилка циклічно повторюється, при цьому якщо запустити з ключем -v 3 процес йде.

Відповідь в інтернеті, я так і не знайшов, перепробував різні версії libnfc і mfcuk, залишав питання розробникам і намагався використовувати спеціалізовані дистрибутиви, типу kali linux, намагався зламати порожню карту, та ж сама помилка, результат однаковий.

В одній зі статей згадується про успішне зломі з ACR122U reader libnfc-1.5.1 і mfcuk r65, але у мене зараз немає такого пристрою.

Рішення проблеми

Як виявилося, існують 'weaker' ключі, а в mfcuk не існує логіки за даним типом. Величезне спасибі користувачеві Stewart8 і його повідомленням. де він описав проблему та шляхи її вирішення.

Для зручності я викладаю відредаговані файли crapto1.c і mfcuk.c, які необхідно підмінити в папці mfcuk / src і зібрати утиліту заново.


І чекаємо поки maxhii = 00ffffff і maxloi = 00ffffff почнуть повторюватися:

INFO: Connected to NFC reader: pn532_uart: / dev / ttyUSB0
VERIFY:
Key A sectors: 0 1 2 3 4 5 6 7 8 9 a b c d e f
Key B sectors: 0 1 2 3 4 5 6 7 8 9 a b c d e f

RECOVER: 0
...
254592 candidates found, nonce 78882a2f
maxhi = 3 maxhii = 0030b0c5 maxlo = 3 maxloi = 00080e51
mfcuk: ERROR: mfcuk_key_recovery_block () (error code = 0x03)
44928 candidates found, nonce 5578882a
maxhi = 3 maxhii = 000bee31 maxlo = 3 maxloi = 00080e51
mfcuk: ERROR: mfcuk_key_recovery_block () (error code = 0x03)
354816 candidates found, nonce 5578882a
maxhi = 4 maxhii = 00895568 maxlo = 3 maxloi = 0000a513
mfcuk: ERROR: mfcuk_key_recovery_block () (error code = 0x03)
153600 candidates found, nonce 688df49b
maxhi = 4 maxhii = 0030028f maxlo = 4 maxloi = 0016ef51
mfcuk: ERROR: mfcuk_key_recovery_block () (error code = 0x03)
49152 candidates found, nonce a2701b19
maxhi = 4 maxhii = 0030028f maxlo = 4 maxloi = 0016ef51
mfcuk: ERROR: mfcuk_key_recovery_block () (error code = 0x03)
59136 candidates found, nonce 02aa92c0
maxhi = 5 maxhii = 00ffffff maxlo = 5 maxloi = 00ffffff
mfcuk: ERROR: mfcuk_key_recovery_block () (error code = 0x03)
206080 candidates found, nonce 32a03931
maxhi = 6 maxhii = 00ffffff maxlo = 6 maxloi = 00ffffff
mfcuk: ERROR: mfcuk_key_recovery_block () (error code = 0x03)
40256 candidates found, nonce 78882a2f
maxhi = 7 maxhii = 00ffffff maxlo = 7 maxloi = 00ffffff
mfcuk: ERROR: mfcuk_key_recovery_block () (error code = 0x03)
349440 candidates found, nonce a2701b19
maxhi = 8 maxhii = 00ffffff maxlo = 8 maxloi = 00ffffff
mfcuk: ERROR: mfcuk_key_recovery_block () (error code = 0x03)
Тисячу триста сорок чотири candidates found, nonce 688df49b
maxhi = 9 maxhii = 00ffffff maxlo = 9 maxloi = 00ffffff

Зазвичай maxhi, maxlo не перевищують в цей момент 5-6. На помилки error code = 0x03 не звертаємо увагу.

Далі отримуємо ключ: ffffffffffff
maxhi = 5 maxhii = 00ffffff maxlo = 5 maxloi = 00ffffff

-k ffffffffffff (ключ, який був отриманий через mfcuk)

В кінці повинні отримати повідомлення:


Ми отримали повний дамп, домофонного ключа, тепер запишемо його в порожній ключ.

Робимо дамп порожнього ключа:


І використовуючи утиліту nfc-mfclassic (йде в комплекті з libnfc) записуємо дамп в порожній ключ:


Якщо у вашій болванки Changeable UID або unlocked, тобто у якій, можна змінити ідентифікатор і зробити повний дублікат, то запустивши:


і отримаємо magic key.

висновок

Як підсумок, я отримав великий досвід в роботі з RFID, але на жаль створити копію без знання одного з ключів в даний момент не представляється мені можливим завдяки Stewart8 вдалося зробити копію. Дякую всім і я дуже щасливий!