5/1/2013

Access conditions. Важно.

Вот так я этот пост и назвал - «Важно». Потому что, совершая манипуляции с меткой mifare и не разбираясь при этом в access conditions метку можно легко запороть. И ладно если запоротой оказалась чистая метка купленная у китайцев. А если это ваш студенческий? Хм, ну вы поняли. Нервы надо беречь. Так что впитаем ещё немного теории.

Вспоминаем как выглядит sector trailer и ещё раз его рисуем:

sector_trailer_byte

AC — access conditions.

Увеличиваем разрешение нашего «микроскопа», «укрупняем» access conditions, занимающие с 6 по 9 байты.

sector_trailer_nibble

Обращаю ваше внимание, что на шкале не байты, а нибблы. Ниббл = 4 битам.

access bits — то что нам нужно. Это те самые 12 бит, которые описывают какие операции можно производить с блоками данного сектора

inverted access bits — те же 12 бит но инвертированные

GPB — general purpose byte. Используется если карточка хранит данные в формате NDEF и нас пока не интересует

Нарисуем 3 байта access bits + inverted access bits в том виде, в котором они представлены в памяти самой метки или снятом с неё дампе:

3_access_bytes

Белые биты - access bits, черные - inverted access bits. Теперь поменяем порядок записи бит с little-endian на big-endian:

3_access_bytes_bendian

Выписываем слева направо белые биты:

access_bits

Множество возможных операций для каждого из блоков задается тройкой бит. Порядок бит и их расположение в access bits показаны на рисунке. Для 256-байтных секторов Mifare 4k всё тоже самое, но:

access_bits_4k

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

Рассмотри возможные значения access bits. Как и следовало ожидать есть 2^3 возможных вариантов. Нарисуем таблицу значений сначала для sector trailer:

Таблица access bits для sector trailer

trailer_table

Как видно из таблицы в sector trailer для нас доступно две операции: чтение и запись. При этом sector trailer разделен на 3 части: key A, key B и access conditions. Для каждой из частей права задаются независимо от двух других. Теперь про цвета в которые я раскрасил возможные операции:

красный — операция доступна после аутентификации с ключом А

синий — операция доступна после аутентификации с ключом B

зеленый — операция доступна после аутентификации с любым из двух ключей

черный — операция вообще недоступна

Также цветом выделены три особых значения access bits. Желтым выделены состояния, при которых key B является обычным полем данных и аутентификация с этим ключом невозможна. Как видим это логично. Что это за секретный ключ значение, которого можно прочитать с помощью другого ключа. Фиолетовым цветом выделено значение access bits которое называется transport configuration. При изготовлении карточки на заводе это значение ставится по умолчанию для всех sector trailers.

Таблица access bits для data block

data_block_table

Значения access bits те же самые, но смысл они несут другой. Во-первых, access bits определяют доступные операции для всего блока целиком. Во-вторых, самих операций уже шесть. И, в-третьих, я забыл рассказать про сами эти операции :). Ну да ладно в следующем посте расскажу. Также как и в sector trailer фиолетовый цвет обозначает значение access bits, которое задается заводом изготовителем. Цвета самих операций имеют те же значения что и в прошлой таблице.

Пример

Перед нами второй сектор чистой метки Mifare 1k:

sector2_540

key A, key B — FF FF FF FF FF FF

access conditions — FF 07 80 69, где 69 это GPB

access conditions = FF 07 80

little-endian:

FF = 1111 1111
07 = 0000 0111
80 = 1000 0000

big-endian:

1111 1111
1110 0000
0000 0001

access bits:          0000 0000 0001
inverted access bits: 1111 1111 1110

data block 0 ->   000  [transport configuration]
data block 1 ->   000  [transport configuration]
data block 2 ->   000  [transport configuration]
sector trailer -> 001  [transport configuration]

Что же мы видим? А видим мы, что все четыре блока сектора находятся в состоянии transport configuration. Как говорится, что и требовалось доказать.

Была у меня идея написать программу, которая вычисляет права доступа на основе access bits. Но не стоит переделывать то, что сделано и так хорошо. Вот программа некого asper с форума proxmark.org. Качайте, пользуйтесь и долгой жизни вашим карточкам.


mifare


Previous post
Структура памяти Mifare Classic 1k и 4k Хотите вступить в клуб отважных исследователей карточных дампов? Тогда вы пришли по нужному адресу. Этот пост я пишу с целью разобраться в том, как
Next post
Линейно-оптимизированный koт - Давай после работы коктельчики попьем? - Не могу. - Почему? Да давааай. Всё ты можешь. - Нет. У меня дома кот голодный. Надо покормить. -