ИССЛЕДОВАНИЕ БЕЗОПАСНОСТИ БЕСКОНТАКТНЫХ СМАРТ-КАРТ НА ПРИМЕРЕ MIFARE CLASSIC
ИССЛЕДОВАНИЕ БЕЗОПАСНОСТИ БЕСКОНТАКТНЫХ СМАРТ-КАРТ НА ПРИМЕРЕ MIFARE CLASSIC
Научная статья
Белорусский государственный университет информатики и радиоэлектроники, Минск, Беларусь
* Корреспондирующий автор (nn5h[at]yahoo.com)
АннотацияВ статье рассмотрены основные уязвимости карт MIFARE Classic, а также реализованы атаки, эксплуатирующие описанные уязвимости. Интерес к данной тематике обусловлен тем, что MIFARE Classic покрывает более 70% рынка бесконтактных смарт-карт, и широко используется в различных областях, таких как финансы, транспорт и другие. Показано, что потоковый шифр Crypto1, который используется для защиты данных на карте, на сегодняшний день не является надежным; обнаруженные уязвимости при грамотной эксплуатации позволяют в теории восстановить секретные ключи за короткое время. Помимо уязвимостей потокового шифра, будут рассмотрены уязвимости стека протоколов; экспериментально подтверждена возможность восстановления ключа.
Ключевые слова: уязвимость, потоковый шифр, Crypto1, безопасность, атака, секретный ключ.
A STUDY OF THE SECURITY OF CONTACTLESS SMART CARDS VIA MIFARE CLASSIC
Research article
Shinkevich N.N.*
Belarusian State University of Informatics and Radioelectronics, Minsk, Belarus
* Corresponding author (nn5h[at]yahoo.com)
AbstractThe article discusses the main vulnerabilities of the MIFARE Classic cards as well as demonstrates the exploits of the vulnerabilities described. The interest in this topic arises due to the fact that MIFARE Classic covers more than 70% of the contactless smart card market and is widely used in finance, transport, and other areas. The study shows that the stream cipher Crypto1, which is used to protect the data on the card, is currently not reliable; the vulnerabilities discovered with proper operation, in theory, allow the recovery of the secret keys in a short amount time. In addition to the vulnerabilities of the stream cipher, the study considers vulnerabilities of the protocol stack as well as experimentally confirm the possibility of key recovery.
Keywords: vulnerability, stream cipher, Crypto1, security, attack, secret key.
Введение
В настоящее время системы, использующие RFID-метки, стали очень популярными, в частности из-за простоты использования, многофункциональности, относительно недорогих карт и считывателей. Смарт-карты используются в таких областях как финансы, безопасность, социальные программы, транспорт и др. Многофункциональность в данном случае подразумевает тот факт, что на смарт-карте может храниться несколько независимых приложений: личные сведения (аналог паспорта), водительских прав, финансовые, идентификационные, транспортные и иные приложения. С ростом роли Internet в мировой экономике интерес ведущих технологических и финансовых организаций к бесконтактной технологии, а также к стандартизации процедур взаимодействия различных интеллектуальных систем и смарт-карт является вполне оправданным и предсказуемым. Таким образом, возникает вполне реальная проблема обеспечения должного уровня безопасности во избежание нарушения функционирования системы вследствие вмешательства потенциального злоумышленника. Данный вопрос особенно актуален для так называемых открытых систем коммерческого применения, обрабатывающих информацию ограниченного доступа, и стремительно развивающихся во всем мире и, в частности, в нашей стране.
Большинство систем используют карты семейства MIFARE производства компании NXP Semiconductors. Наиболее популярным типом карт является Classic (более выпущенных чипов, и около 250 млн активно использующихся карт по всему миру [1]). Реализация MIFARE является секретной, и надежность чипа подтверждена только его создателями. Более того, алгоритм шифрования Crypto1, применяющийся для защиты данных на картах MIFARE Classic, был изобретен в NXP. Документации к данному шифру не существует, шифр является проприетарным. Надежность шифра, как и надежность чипа, подтверждается только NXP.
Таким образом, целью настоящей статьи является анализ безопасности смарт-карт на примере MIFARE Classic и стойкости шифра Crypto1, используемого для защиты данных на карте, проверка осуществимости и эффективности атак, возможность взлома ключа и снятия дампа с карты. Стоит также отметить, что анализ безопасности смарт-карт есть анализ комплекса факторов, способствующих их использованию [2], [3]. Сюда входит использование шифра Crypto1 для защиты данных на карте, использование определенной инфраструктуры, где применяются смарт-карты; таким образом, безопасность данных на карте прямо зависит от стойкости шифра ко взлому, которая в свою очередь может оказаться бесполезной, если инфраструктура реализована с ошибками и позволит злоумышленнику обойти шифрование. Безопасность всей системы есть безопасность ее самого слабого звена, поэтому в контексте данной статьи будут описаны различные методы, так или иначе позволяющие получить доступ к данным на карте, вне зависимости от локализации уязвимости.
Типы карт MIFARE Classic
Интегральные микросхемы NXP MIFARE Classic стали первыми чипами для бесконтактных смарт-карт с возможностью чтения/записи, поддержкой стандарта ISO 14443 и работающими в частотном диапазоне 13.56 МГц. Семейство MIFARE Classic состоит из карт MIFARE Classic 1K, MIFARE Classic 4K, MIFARE Classic EV1 1K [4], MIFARE Classic EV1 4K, MIFARE ID и MIFARE Mini (таб. 1) [5].
Таблица 1 – Технические характеристики карт семейства MIFARE Classic
Карта | EEPROM | RFID-интерфейс | Защита данных | UID |
MIFARE Classic 1K | 1024 байт; 16sx4bl | 13,56 MHz; ISO 14443 A | Crypto1; ключи A/B | 4 байта |
MIFARE Classic 4K | 4096 байт; 32sx4bl/8sx16bl | 13,56 MHz; ISO 14443 A | Crypto1; ключи A/B | 4 байта |
MIFARE Classic EV1 1K | 1024 байт; 16sx4bl | 13,56 MHz; ISO 14443 A | Crypto1; ключи A/B | 7 байт |
MIFARE Classic EV1 4K | 4096 байт; 32sx4bl/8sx16bl | 13,56 MHz; ISO 14443 A | Crypto1; ключи A/B | 7 байт |
MIFARE ID | 64 байта; 1sx4bl | 13,56 MHz; ISO 14443 A | ||
MIFARE Mini | 320 байт; 5sx4bl | 13,56 MHz; ISO 14443 A |
Организация памяти
Память EEPROM карт MIFARE Classic организована в виде секторов, разделенных на блоки. В одном секторе обычно содержится 4 блока. В одном блоке содержится 16 байт. В качестве примера будет рассмотрена организация памяти для карты MIFARE Classic 1K, EEPROM 1024 байта, 16 секторов по 4 блока (таб. 2).
Таблица 2 – Организация памяти MIFARE Classic 1K
Сектор | Блок | Номер байта в блоке | Описание | |||||||||||||||
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | |||
0 | [0] 0 | Manufacturer Block | ||||||||||||||||
[1] 1 | Data block | |||||||||||||||||
[2] 2 | Data block | |||||||||||||||||
[3] 3 | Key A | Access bits | Key B | Sector 0 trailer | ||||||||||||||
i | [0] | Data block | ||||||||||||||||
[1] | Data block | |||||||||||||||||
[2] | Data block | |||||||||||||||||
[3] | Key A | Access bits | Key B | Sector i trailer | ||||||||||||||
15 | [0] 60 | Data block | ||||||||||||||||
[1] 61 | Data block | |||||||||||||||||
[2] 62 | Data block | |||||||||||||||||
[3] 63 | Key A | Access bits | Key B | Sector 15 trailer |
В первом блоке данных – block0 – первого сектора – sector0 – хранятся данные о производителе чипа и 4-байтный идентификатор – UID. Данный блок программируется при производстве чипа и имеет защиту от перезаписи. Второй и третий блок данных – block1, block2 – первого сектора – sector0 – используются для хранения пользовательских данных. Четвертый блок данных – block3 – первого сектора – sector0 – называется «трейлер» [4], он содержит по два ключа доступа к каждому блоку и условия доступа.
Трейлер хранит:
- ключи A (обязательный; чтение) и B (опциональный; запись);
- условия доступа к блокам, которые хранятся в байтах 6...9 [4].
Биты доступа также определяют тип блока (данные или хранение значения). В девятый байт трейлера сектора могут быть записаны пользовательские данные. Для байта 9 применяются те же условия доступа, что и к байтам 6, 7 и 8 [6]. При чтении трейлера сектора байты ключа A не могут быть прочитаны, при верном ключе A вернется 00 00 00 00 00 00. Если ключ В используется, байты 10-15 могут быть считаны. По умолчанию для всех ключей новых чипов установлено значение FF FF FF FF FF FF, а значение байтов 6, 7 и 8 равно FF0780h.
Перед выполнением любой операции с памятью, карту необходимо выбрать (посредством операции Select) и провести аутентификацию (операция Auth). То, какие операции можно произвести с блоками памяти, зависит от ключей, предъявленных при аутентификации, а также от условий доступа (таблица 3), представленных группами из трех битов, хранящихся в трейлере соответствующего сектора [4]. Биты хранятся в инвертированном и не инвертированном виде, для проверки целостности данных. Условия могут быть изменены при условии знания ключа (ключей).
Таблица 3 – Условия доступа к памяти
Биты | Операция | Номер блока | Описание |
C13 C23 C33 | Read Write | 3 | Трейлер |
C12 C22 C32 | Read Write Inc Dec Transfer Restore | 2 | Блок данных |
C11, C21 C31 | Read Write Inc Dec Transfer Restore | 1 | Блок данных |
C10 C20 C30 | Read Write Inc Dec Transfer Restore | 0 | Блок данных |
В качестве примера можно рассмотреть трейлер нулевого сектора карты MIFARE Classic 1K. Данные блока были прочитаны при помощи PM3 RDV4.01, ключ FF FF FF FF FF FF (рис. 1). Условия доступа представлены значением ff 07 80 69 (таб. 4), ключ A представлен как 00 00 00 00 00 00. Следует отметить, что невозможность прочитать ключ A установлена текущими условиями доступа, поэтому на месте ключа A отображены нули.
В байте 9 хранятся пользовательские данные [4].
Рис. 1 – Чтение данных с карты при помощи PM3 RDV4.01
Таблица 4 – Условия доступа к трейлеру, пример
Номер байта | Значение (hex) | Значение (bin) | Биты условий доступа |
6 | ff | 11111111 | Ĉ23 Ĉ22 Ĉ21 Ĉ20 Ĉ13 Ĉ12 Ĉ11 Ĉ10 |
7 | 07 | 00000111 | C13 C12 C11 C10 Ĉ33 Ĉ32 Ĉ31 Ĉ30 |
8 | 80 | 10000000 | C33 C32 C31 C30 C23 C22 C21 C20 |
Исходя из данных таблиц 3, 4 имеем условия доступа:
- Трейлер, C13 C23 C33, 001, ключ B может быть прочитан, транспортная конфигурация**;
- Блок данных 2, C12 C22 C32, 000, данные могут быть прочитаны, записаны, также можно совершить операции инкремента, декремента, трансфера и восстановления, при условии знания ключа A или B*;
- Блок данных 1, C11 C21 C31, 000, данные могут быть прочитаны, записаны, также можно совершить операции инкремента, декремента, трансфера и восстановления, при условии знания ключа A или B*;
- Блок данных 0, C10 C20 C30, 000, данные могут быть прочитаны, записаны, также можно совершить операции инкремента, декремента, трансфера и восстановления, при условии знания ключа A или B* [5].
* Исходя из того, что ключ B может быть прочитан (блок 3, трейлер), он не может использоваться для аутентификации.
** Транспортная конфигурация возможна сразу после производства карты, ключ B можно прочитать при предъявлении ключа A.
Потоковый шифр Crypto1
Crypto1 – проприетарный алгоритм шифрования, созданный NXP Semiconductors для использования MIFARE Classic картами. Несколько исследований, проведенные в 2008 [7] и 2009 [8] годах, показали, что безопасность данного алгоритма является невысокой. Reverse engineering, или обратное проектирование, Crypto1 впервые было произведено в декабре 2007 года, и представлено на конференции в Берлине [9]. Метод являлся очень трудоемким, поскольку потребовал физического вмешательства в структуру чипа, и дорогостоящего оборудования (например, микроскоп с возможностью съемки фотографий высокого разрешения). Криптоанализ шифра подробно описан в работах [10], [11].
Crypto1 является потоковым шифром, очень похожим на предшествующий Hitag2 [2]. Crypto1 (рис. 2) состоит из:
- одного 48-битного LFSR для хранения секретного состояния линейной функции;
- двухуровневой нелинейной функции;
- 16-битного LFSR, который используется при аутентификации. Некоторыми картами может использоваться как ГПСЧ.
Рис. 2 – Схема шифра Crypto1
После успешной аутентификации данные между картой и считывателем передаются в зашифрованном виде.
48-bit LFSR
Начальное состояние 48-битного LFSR определяется секретным ключом, известным карте и считывателю. Каждый новый бит ключевого потока (keystream) генерируется на основании 18 бит состояния LFSR в определенный момент времени (1). После чего регистр сдвигается влево на один бит, а новый сгенерированный бит вдвигается справа [7].
Двухуровневая нелинейная функция, или filter function. "Первый уровень" фильтр-функции представлен функциями fa(2) и fb(3) (рис. 3) [12], использующихся 2 и 3 раза соответственно. "Второй уровень" состоит из одной функции fc(4), принимающей 5 аргументов – результатов работы функций предыдущего уровня [10] (рис. 3).
Рис. 3 – Двухуровневая нелинейная функция
Соответственно, значение фильтр-функции на выходе будет определено согласно (5) [2]. 16-bit LFSR. 16-битный LFSR используется картой как ГПСЧ. Стоит отметить, что генерируемые значения должны быть 32-х битными, это необходимо для корректной работы шифра. Каждый новый бит (6) вдвигается в регистр справа.Состояние LFSR в каждый момент времени определяется текущим значением, сдвинутым влево на 1 бит, и сгенерированным битом (6) [12], который вдвигается в регистр справа. В зарубежной литературе для обозначения функции, результатом работы которой будут 32-х битные значения, сгенерированные при помощи 16-битного LFSR (7) [2], используется обозначение suc, (successor, букв. функция следования). В данной статье будем придерживаться обозначения suc.
Состояние LFSR в каждый момент времени определяется текущим значением, сдвинутым влево на 1 бит, и сгенерированным битом (6) [12], который вдвигается в регистр справа. В зарубежной литературе для обозначения функции, результатом работы которой будут 32-х битные значения, сгенерированные при помощи 16-битного LFSR (7) [2], используется обозначение suc, (successor, букв. функция следования). В данной статье будем придерживаться обозначения suc.
Для вычисления значений определим функцию , означающую применение к текущему состоянию n раз [2]. Обозначим 32-х битное значение, сгенерированное при помощи 16-битного LFSR в момент времени , и определим (8) [2].
(8)Обмен информацией
Процесс обмена (рис.4) начинается с так называемого POR состояния карты, Power-on Reset, или Сброс при включении питания, означающего, что карта будет выдавать сигнал Reset до тех пор, пока напряжение Vcc не стабилизируется [13].
Далее от считывателя поступает команда REQA – запрос карты, или WUPA – запрос всех карт. Карта должна ответить кодом ATQA (ATQA, Answer To reQuest A – ответ на запрос, тип A). Данный код зависит от модели карты и производителя.
Механизм антиколлизии (команда ANTICOLLISION, код 0x93) используется для определения уникального номера карты, UID, с которой считыватель будет продолжать работу при одновременном нахождении в поле считывателя нескольких карт. UID, полученный считывателем в процессе обмена информацией (рис. 4) состоит из 4-х байт и контрольного байта BCC, вычисленного при помощи операции XOR побитно над этими байтами. 4 байта UID и контрольный байт BCC находятся в нулевом блоке нулевого сектора памяти карты [13].
Рис. 4 – Схема процесса обмена информацией тега и считывателя
В основе механизма антиколлизии лежит принцип представления бит, получаемых считывателем от карты. При наличии в поле считывателя одновременно нескольких карт они синхронно отвечают считывателю своими UID-кодами. Поскольку каждая карта имеет свой, отличный от других UID, то в некотором бите при передаче UID произойдет наложение «1» на «0». Считыватель определит эту ситуацию как коллизию и по определенному алгоритму, допустим в месте наложения бит, установит значение бита равным «1» и повторной командой антиколлизии пошлет часть UID, заканчивающуюся этим битом, и только те карты, у которых совпадает переданная считывателем часть UID, должны ответить оставшейся частью своих UID. За несколько циклов антиколлизии считыватель будет знать UID карты, с которой он продолжит работу.
После того, как считывателю становится известен UID карты, он посылает команду SELECT (код 0x93, такой же, как и у команды ANTICOLLISION [6]). Далее следует байт NVB, равный размеру посылаемой команды, т.е. 7 полных байт, далее UID карты (4 байта), байт BCC. Формат команды приведен на рис. 5.
Рис. 5 – Формат команды SELECT
Команда SELECT завершается двумя байтами CRC (CRC, или Cyclic Redundancy Check – алгоритм нахождения контрольной суммы, предназначенный для проверки целостности данных. Порождающий полином для вычисления CRC MIFARE [9]), вычисленного по семи предыдущим байтам.
(9)Команда останова, HALT (код 0x5), состоит из 4-х байт, где первые 2 байта это сама команда, и вторые 2 байта – CRC код. Формат представлен на рис. 6.
Рис. 6 – Формат команды останова HALT
По команде останова HALT карта переходит в режим ожидания и не реагирует на все остальные команды, за исключением команды запроса всех карт WUPA [6].
Процедура аутентификации. Для того, чтобы получить доступ к данным на карте, считыватель должен пройти процедуру аутентификации [10] (рис. 7).
Данная процедура состоит из трех этапов, основанных на предположении, что и карта, и считыватель знают секретный ключ, исходя из чего каждый из трех этапов завершится успешно и состояние шифра карты и считывателя будет одинаковым, что в свою очередь сделает возможным шифрование и дешифрование данных.
На любом этапе процедуры аутентификации считыватель может ответить командой HALT, которая была описана ранее.
На этапах 1, 2 и 3 показан обмен значениями передается в незашифрованном виде от тега считывателю, и формируется согласно (7) [7].
Значения передаются уже в зашифрованном виде, и формируются отдельно тегом и считывателем в процессе аутентификации согласно (10), (11) и (12) соответственно [2].
Рис. 7 – Аутентификация
Ключевой поток, или keystream, на этапах 1, 2 и 3 обозначен как , и соответственно. Далее будут подробно рассмотрены этапы аутентификации.
Обозначим состояние шифра в момент (13).
(13)Когда считыватель отправляет запрос тегу на проведение какой-либо операции с памятью, он должен доказать, что имеет право на ее проведение. Доказательством является знание секретного ключа K блока или сектора, операцию с данными которого считыватель хочет провести. В процессе аутентификации состояние шифра считывателя и тега будет изменяться последовательно, и в результате будет одинаковым, что позволит передавать данные уже в зашифрованном виде [2]. После того, как считыватель отправляет запрос на проведение операции тегу, состояние шифра считывателя и тега инициализируется секретным ключом K (14).
(14)Далее, тег формирует значение , при помощи 16-битного LFSR. В самом начале коммуникации это значение зависит от физических параметров ИС тега, как показали исследования [1], от времени подачи энергии на сам чип. отправляется считывателю в незашифрованном виде. Далее, состояние шифра изменяется (15), где означает уникальный идентификатор тега, а .
Например, при получим бит (16), который будет вдвинут в регистр справа, а бит будет выдвинут из регистра.
(16)После сдвига регистра на 32 позиции влево, его состояние будет представлять ничто иное, как [8]. Отметим, что операция должна быть выполнена считывателем и тегом.
Далее, считыватель формирует значение , исходя из состояния своего 16-битного LFSR. Стоит отметить, что состояния регистров тега и считывателя связаны, что, с одной стороны, позволяет передавать данные в зашифрованном виде, а с другой стороны, сделать верные выводы о состоянии регистра считывателя или тега, имея доступ лишь к одному участнику коммуникации, либо перехватив данные начального этапа, находясь в режиме прослушивания.
Считыватель формирует , и шифрует его при помощи (10). После этого считыватель формирует значение AR(11). На данном этапе на стороне считывателя состояние регистра изменяется (17) для генерации .
После сдвига регистра на 32 позиции влево, его состояние будет представлять ничто иное, как . После чего считыватель отправляет тегу значения .
Далее, тег расшифровывает значение при помощи , и изменяет свое состояние шифра (17), чтобы получить , после чего он также расшифровывает AR. Тег формирует значение (12), и изменяет состояние своего шифра, чтобы сформировать . На предыдущем этапе (когда был сформирован ) 32 бита состояния были использованы для шифрования AR, размер регистра равен 48 битам, соответственно имеем 16 "неиспользованных" бит, и останется сформировать еще 16 (18), для того чтобы зашифровать . Тег отправляет считывателю значение .
Считыватель на своей стороне изменяет состояние своего шифра (18), расшифровывает и проверяет полученное значение . В случае успеха весь дальнейший обмен данными между тегом и считывателем будет производиться в зашифрованном виде.Уязвимости
Ненадежный ГПСЧ. Карта использует 16-битный LFSR для генерации 32-битных значений, использующихся в процессе аутентификации для корректной работы шифра, это означает, что первая половина сгенерированного значения будет определять вторую половину [7], [8]. Соответственно, имеем возможных значений, валидность каждого сгенерированного значения определяется (19).
(19)Неиспользуемые фильтр-функцией биты и функция отката состояния регистра. Двухуровневая нелинейная фильтр-функция использует 20 бит для генерации ключевого потока [8], а именно биты 9, 11,13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47 (рис. 3). Биты 0 - 8 не используются, что в свою очередь делает возможным реализовать функцию отката состояния регистра (20) (21) вплоть до восстановления секретного ключа [12]. Процесс отката заключается в выполнении обратных операций. применяемых к регистру во время процедуры аутентификации [2]. Пусть состояние регистра на этапе 2 известно, т.е. сразу после вычисления состояния (17) (). Соответственно, можно вычислить бит, который будет вставлен на 47-ю позицию, после чего регистр будет сдвинут влево, и бит с позиции 0 будет смещен [7]. Известно также, что биты 0-8 не используются фильтр-функцией. Таким образом, используя вычисленный бит (47-й), можно вычислить смещенный с нулевой позиции бит, выполнив XOR данного бита с , то есть откатить состояние регистра на предыдущее. Выполнив данную операцию еще 31 раз, получим состояние регистра до применения операций второго этапа аутентификации, т.е. состояние после первого этапа () [7]. Применив последовательно функцию отката к данному состоянию 32 раза, получим первоначальное состояние регистра до начала процедуры аутентификации, когда регистр был инициализирован секретным ключом.
Утечка битов ключа через Parity bits. Согласно стандарту ISO14443A, каждый байт передаваемой информации должен сопровождаться так называемым parity bit, или битом четности. Parity bit представляет собой ничто иное, как применение операции XOR ко всем битам передаваемого байта [10]. При передаче данных бит четности вычисляется для незашифрованных данных (plaintext), и зашифровывается при помощи 1 бита ключа (рис. 8) [9]. Первый бит следующего байта информации шифруется тем же битом ключевого потока, что и бит четности, вычисленный ранее. Это приводит к ситуации, когда становится возможным вычислить 3 бита ключевого потока при помощи одних лишь битов четности.
Рис. 8 – Вычисление битов четности
Утечка битов ключа через код ошибки. На втором этапе аутентификации считыватель отправляет тегу значения , каждый байт сопровождается битом четности. При условии, что биты четности будут верными, а ответ считывателя AR– нет, карта ответит кодом команды HALT, зашифрованным при помощи 4-х бит ключа соответственно. Таким образом, имеет место утечка еще 4-х бит ключа [2].
Аутентификация нескольких секторов при помощи одного ключа. Эксплуатацию данной уязвимости можно произвести при условии знания хотя бы одного ключа к любому сектору карты. Если ключ известен, то после успешной аутентификации состояния регистра тега и считывателя примут определенное значение, и будут использоваться для дальнейшего шифрования передаваемых данных, в том числе новых аутентификаций. При запросе считывателя на проведение операции с данными для какого-то сектора, отличного от того, где аутентификация уже произошла, состояние регистра не сбрасывается, что делает возможным доступ к информации секторов с неизвестными ключами [2].
Реализация практических атак
Оборудование. Все эксперименты, описываемые в данной статье, проводились при помощи карт MIFARE Classic 1K со слабым ГПСЧ (9), MIFARE Classic 1K типа "hardened", обратно совместимая с исходной версией MIFARE Classic, RFID карта MIFARE M1 S50.
В качестве считывателя выступали Proxmark3 Easy, RDV4.01 [15]. Почти все модели Proxmark3 используют AT91SAM7S контроллеры в качестве CPU. AT91SAM7S – серия микроконтроллеров с малым количеством выводов, выполненных на основе 32-разрядного процессора ARM с архитектурой RISC. RDV4.01 использует микроконтроллер SAM7S512 (SAM7S512 на базе ARM® от Microchip входит в серию микроконтроллеров SAM7S на базе 32-разрядного процессора RISC ARM7TDMI. Он работает на максимальной скорости 55 МГц и имеет 512 КБ флэш-памяти с 64 КБ двухканальной SRAM); Easy использует микроконтроллер более ранней версии: AT91SAM7S256, (меньший объем памяти, 256 Кб).
Атаки. Существует группа атак, направленных на "восстановление" секретных ключей карты. После успешного осуществления злоумышленник может скопировать данные карты или же изменить их. Есть 2 способа осуществления таких атак: card-only attacks (злоумышленнику достаточно только карты для осуществления атаки, он сам выступает в качестве считывателя), и перехват информации во время обмена данными карты и считывателя.
Nested Attack. Данная атака использует уязвимости ГПСЧ [9], утечку битов через код ошибки и parity bits. Для ее успешного осуществления достаточно знать один секретный ключ любого блока. Далее, возможно восстановить секретные ключи к остальным блокам карты [8]. Работает для любых карт с CRYPTO1 (MIFARE Classic и эмуляции).
Для тестирования атаки была использована карта MIFARE Classic 1K, все секретные ключи на которой были намеренно перезаписаны таким образом, чтобы исключить успешный перебор по словарям с наиболее распространенными ключами. Для генерации ключей использовался скрипт на языке Python, для записи ключей использовался shell-скрипт для Proxmark3 RDV4.01 (рис. 9).
Рис. 9 – Код скрипта Proxmark3 RDV4.01 для записи новых A и B ключей на карту mifare Classic 1K
Для проведения атаки использовалась MFOC [14], утилита с открытым исходным кодом, написанная на языке программирования C. Для успешного осуществления данной атаки нужно знать хотя бы 1 секретный ключ любого блока карты. Предположим, известен секретный ключ A от блока 0, 0x45a47777d6b3. Время восстановления 1 ключа составляет в среднем 1-5 секунд, общее время выполнения атаки составило 68.85 секунд; на рис. 10-12 представлены начало, успешное восстановление ключа B сектора 0 блока 0, и последовательное восстановление всех ключей карты соответственно.
Рис. 10 – Nested Attack start
Рис. 11 – Восстановление ключа B блока 0
Рис. 12 – Последовательное восстановление ключей карты
На рисунке 13 представлена зависимость времени восстановления ключа от его сложности. В данном случае под сложностью ключа понимается количество повторяющихся подряд групп символов, наличие ключа в словаре, время, необходимое для его восстановления.
Таким образом, «легкие» ключи: содержатся в словаре, имеют большое количество повторяющихся групп символов, тогда как «сложные» ключи не содержатся в словаре, символы ключа генерируются случайным образом.
Исходя из информации, представленной на графике (рис. 13), можно сделать следующие выводы: время восстановления не зависит от сложности ключа, лишь в некоторых случаях (ключ имеется в словаре) программа способна определить его валидность быстрее. Время, необходимое для восстановления, колеблется в пределах от 2-х до 5 секунд, т.е. используется уязвимость самого алгоритма и реализации, не зависит от ключа, что еще раз доказывает ненадежность Crypto1.
Darkside Attack. Данная атака использует уязвимости ГПСЧ, утечку битов через код ошибки и parity bits, а также NACK bug (NACK, Not ACKnowledgement – transmission error, ошибка передачи; тег отвечает кодом NACK когда биты четности неверны). Атаке подвержены теги, ГПСЧ которых реализован с помощью операции XOR [8] (9).
Рис. 13 – Зависимость времени восстановления ключа от его сложности
Работает на картах MIFARE Classic поколения до EV1 (в EV1 уязвимость ГПСЧ уже устранена). Для осуществления атаки нужна только карта.
Рис. 14 – Darkside Attack start
Для тестирования атаки была использована карта MIFARE Classic 1K (использованная ранее в тестировании Nested Attack).Рис. 15 – Ключ успешно восстановлен
Наличие NACK уязвимости позволяет в среднем осуществить 128 запросов к карте, чтобы выяснить все биты секретного ключа.
Тестирование атаки проводилось при помощи Proxmark3 RDV4.01, процесс представлен на рис. 14, 15 соответственно.
Ключ карты, обнаруженный при помощи Darkside атаки, можно использовать для восстановления других секретных ключей, используя Nested Attack.
Communication interception attack. Цель этой атаки – восстановить ключ, использованный для шифрования перехваченной фазы аутентификации между тегом и считывателем при условии, что и тег, и считыватель знают секретный ключ.
Восстановление ключа выполняется в автономном режиме после успешного перехвата связи. Ключ сектора, участвующего в аутентификации, может быть восстановлен, в результате чего могут быть получены все данные из этого сектора.
Эта атака использует два ключевых недостатка в потоковом шифре Crypto1, а именно возможность восстановления состояния LFSR вследствие того, что в генераторе фильтров используются только нечетные биты, что в свою очередь позволяет откатить состояние регистра до первоначального из-за того, что первые девять битов LFSR не используются генератором фильтров [8].
Итак, для тестирования атаки были использованы карта MIFARE Classic 1K (использованная ранее в тестировании Nested Attack), Proxmark3 Easy в качестве считывателя, Proxmark3 RDV4.01 в качестве сниффера. Карта находится между двумя устройствами и доступна для проведения операций с ней (рис. 16).
Рис. 16 – Proxmark3 Easy, RDV4.01 и карта MIFARE Classic
Считыватель делает запрос на чтение данных карты, в это время сниффер находится в режиме активной прослушки. В результате работы сниффера был получен список команд (рис. 17).
Рис. 17 – Данные, перехваченные при помощи PM3 RDV4.01
Исходя из представленной выше информации (рис. 16), UID = 0x3ada6716, = 0x290e1794, = 0x92da1c32, = 0x66773db2, = 0xb75aa6af. Используя уязвимости, описанные ранее, производим откат состояния регистра до первоначального состояния и восстанавливаем секретный ключ, который был использован легальным считывателем при аутентификации карты (рис. 18).
Рис. 18 – Успешное восстановление ключа
Заключение
На основании полученных результатов можно сделать вывод, что использовать теги MIFARE Classic небезопасно, однако большое количество предприятий, финансовых и других учреждений (отели и гестхаусы, магазины, сервисы платной парковки и т.д.) все еще используют их в настоящее время в целях экономии средств (полное обновление системы с использованием новых технологий стоит достаточно дорого), или ввиду отсутствия необходимых знаний (часто можно встретить ошибки конфигурации, например неправильно настроенные права доступа позволяют использовать секретный ключ B для изменения данных; или использование транспортной конфигурации для некоторых блоков, что позволяет успешно применить к ним Nested Attack).
Защита данных на картах MIFARE Classic осуществляется при помощи Сrypto1, который обладает рядом серьезных уязвимостей. Процесс обмена данными также имеет слабые места, например, отправка зашифрованного при помощи секретного ключа кода ошибки. Эти недостатки позволяют злоумышленнику восстановить секретный ключ за секунды.
Поскольку протокол реализован аппаратно, невозможно предложить каких-либо окончательных мер противодействия этим атакам, которые не потребовали бы замены всей инфраструктуры. Однако стоит отметить, что в настоящее время существуют преемники карт Classic, а именно Plus, разработанные компанией NXP, в которых, согласно отчетам, устранены перечисленные уязвимости, используется другой алгоритм шифрования.
Конфликт интересов Не указан. | Conflict of Interest None declared. |
Список литературы / References
- NXP Semiconductors. – [Electronic resource]. – URL: https://www.nxp.com; (accessed 01.10.2020).
- Sarrias M. B.Security in RFID devices / Marti Berini Sarrias, Jordi Herrera Joancomartí, Universitat Autònoma de Barcelona. Escola d'Enginyeria. 2013.
- Meijer C. F. J. Ciphertext-only cryptanalysis on hardened mifare classic cards extended / C. F. J. Meijer, 31 Aug 2016;
- MIFARE Classic EV1 1K- Mainstream Contactless SmartCard IC for fast and easy solution development; Rev. 3.2 - 23.05.2018.
- NXP Semiconductors. MIFARE Classic 1K Card IC functional specification (October 2020).
- Mytnik K. Ya. Smart cards and information security / K. Ya. Mytnik, S. P. Panasenko ; edited by Professor V. F. Shangin - Moscow: DMK Press, 2019. - 516 p.
- Garcia, Flavio D. Dismantling MIFARE Classic / Garcia, Flavio D.; Gerhard de Koning Gans; Ruben Muijrers et al. // 13th European Symposium on Research in Computer Security (ESORICS 2008), LNCS, Springer (4.10.2008).
- Garcia, Flavio D. Wirelessly Pickpocketing a Mifare Classic Card / Garcia, Flavio D.; Peter van Rossum; Roel Verdult; Ronny Wichers Schreur. // 30th IEEE Symposium on Security and Privacy (S&P 2009), IEEE.
- Nohl K.Mifare, little security, despite obscurity / Karsten Nohl and Henryk Pl ̈otz. // Presentation on the 24th Congress of the Chaos Computer Club in Berlin (24C3), December 2007;
- Courtois N.T. Algebraic attacks on the Crypto1 stream cipher in Mifare Classic and Oyster Cards / Nicolas T. Courtois, Karsten Nohl, and SeanO’Neil. // Cryptology ePrint Archive, Report 2008/166, 2008;
- Nohl K. Reverse-engineering a cryptographic RFID tag / Karsten Nohl, David Evans, Starbug Starbug et al. // In Proceedings of the 17th conference on Security symposium (SS'08). USENIX Association, USA, 185–193;
- Gerhard G. A practical attack on the MIFARE classic / Gans, Gerhard & Hoepman, Jaap-Henk & Garcia, Flavio.. 5189. 10.1007/978-3-540-85893-5_20;
- MIFARE CLASSIC 1K/4K USER MANUAL; Release 1.1.0; 2017;
- MFOC; open source implementation of "offline nested" attack by Nethemba [Electronic resource]. – URL: https://github.com/nfc-tools/mfoc; (accessed 09.10.2020).
- Proxmark3 RDV4.01 [Electronic resource]. – URL: https://lab401.com/products/proxmark-3-rdv4; (accessed 10.10.2020).