Описание защиты чипа Kyocera.
Богатый спонсор (акцептировал эту статью и пожелал остаться не известным) пожелал углубиться в анализ чипа принтера Kyocera и я не смог устоять :).
Как выяснилось позже, так же существуют принтеры, не проверяющие криптографию. Проверка криптографии чипа не может быть добавлена в принтер через обновление фирмваре так как в проверке участвует дополнительный чип на плате форматера, которого нет в некоторых принтерах. Но не будем забегать вперёд.
И так, были найдены прошивки обновления для этого принтера, которые оказались запакованы странным методом. Прошивка скорее не запакована, а "перепутана", но размер при этом слегка изменяется. Способ запаковки раскодирован не был. Существуют принтеры, собранные на разных процессорах, и были найдены прошивки с разных моделей принтеров и на разных ядрах, однако кругом таились засады и большинство принтеров имели отдельный процессор для обслуживания чипа. Прошивка обслуживающего чип контроллера, так и не была найдена в открытом виде.
Для получения прошивки был куплен принтер дорогого сегмента (500$). Теперь я владею уже кучей принтеров :). Оснастка принтера включает в себя наличие двух форматеров, один из которых, среди прочего, обслуживает чип картриджа. После некоторых поисков и изучения темы, были куплены два брендовых JTAG-а для снятия прошивки. С JTAG-ом я ранее не работал и всё было как-то не привычно. После танцев с бубном и пары строк кода в командной строке, была получена прошивка контроллера в чистом виде.
Неделя ушла на поиск алгоритмов чипа в прошивке. Учитывая, что о чипе нет никакой информации, приходилось искать то, не знаю что и по не известным критериям. За неделю я не нашёл алгоритмы чипа. Многозадачная операционная система контроллера путала все следы. Алгоритмы чипа не имели точек входа и ссылок, ссылки на функции расставляла операционка в зависимости от очерёдности задач. Входные параметры в функции также передавались через операционку в виде структуры для задачи. Всю эту запутанность мой мозг систематизировать не смог. Было принято решение запустить JTAG в режиме отладчика и пройти по прошивке шаг-за-шагом в реальном времени. Спасибо спонсору за такую возможность - опыт такой работы трудно переоценить!
После прочтения пары статей и танцев с бубном, JTAG был запущен. Проблема заключалась в том чтобы не убить родную прошивку контроллера, ибо JTAG в режиме отладчика стремится работать с исходными файлами проекта и не желает принимать код в контроллере как источник проекта. После настройки частот, скоростей, менюшек и миллиона галочек, отладчик таки начал шагать по коду программы. Автоматом встали проблемы с прерыванием исполнения кода. Если код подключает моторчик, то этот моторчик крутится пока его не остановит другой кусок кода, но контроллер работает медленными шагами, ибо дебаг его тормозит. Таким образом моторчик, печка, магнитик и прочая механика получают отличную возможность сгореть пока я рассматриваю код в режиме стоп-кадра. Ушло какое-то время на решение подобных проблем.
В режиме отладчика код нашёлся за пару часов. Были освоены комплексные точки останова отладчика и алгоритмы были найдены по факту обращения к портам, а потом и по обращению к протоколам и оперативке.
Пару бессонных ночей и алгоритм чипа был собран в один файл от А до Я.
Алгоритмы.
Структура чипа позволяет читать его и прописывать без знания его криптографии, именно поэтому мой программатор начал писать чипы до этого поиска алгоритмов. Криптография чипа выполняет только одну работу - распознаёт подлинность чипа. Когда я добавлял чип в программатор, я написал код сканирования чипа, он выдавал в чип команды с различным набором параметров и собирал в файл ответы чипа. Таким образом я нашёл порядка 10-ти команд в чипе с участием криптографии. Однако в принтерной прошивке задействованы пока только 2 криптопроверки, так что производитель оставил себе в запасе пару проверок для отлова эмуляторов.
При работе с алгоритмами сразу стало понятно, что чип в картридже не одинок. Перед чтением чипа, заполнялась структура для операционной системы, среди параметров которой был адрес чипа и номер шины. При анализе номера шины выяснилось, что у контроллера есть вторая I2C шина, на которой сидел точно такой же чип как и в картридже. Он смонтирован на форматере около контроллера и сидит на другой физической шине. Как выяснилось позже, этот чип служит эталоном для проверки соответствия чипа в картридже этому чипу.
И так проверка криптографии.
Каждый чип умеет выполнить две различные команды и каждая команда делает некое вычисление. На вход формулы подаётся случайное число (алгоритм генерации числа известен, он есть в прошивке) и это число пропускается через две формулы:
первая команда делает так: 5 (+7) (+3) = 15
где 5 - случайное число, которое подано на формулу авторизации
(+7) - секретная формула внутри чипа, которую мы должны найти
(+3) - открытая формула в чипе и прошивке, которую никто не скрывает и мы её нашли
15 - выход из формулы в качестве ответа на поданное случайное число 5
вторая команда делает так: 5 (+7) = 12
где 5 то же самое число, которое было подано на первую формулу
(+7) - всё та же секретная формула внутри чипа, которую мы должны найти
12 - выход из второй формулы как ответ на поданное число
И так, каждый чип (чип на форматере и чип в картридже) умеет неким способом преобразовать поданное ему число. Формулы (+7) и (+3) в реальности имеют размер в три страницы программного кода и не имеют возможности откатиться в обратном направлении (хеш функции), так что зная 12 и 5 вы никогда не найдёте (+7). Числа 12, 15 и 5 в реальности имеют длину в 128 бит (целая строка в хекс редакторе).
Собственно сама проверка:
1. принтер отдаёт в первую формулу число 5 в чип на форматере и получает от него ответ 15 (это результат действия полной формулы из гарантированно оригинального чипа).
2. принтер отдаёт во вторую формулу число 5 в чип на картридже и получает от него ответ 12 (проверяет знает ли чип картриджа секретную формулу (+7))
3. ответ 12 принтер прогоняет через формулу (+3), которая есть в его прошивке и мы её знаем и получает на выходе 15.
4. если ответ чипа форматера 15 совпал с ответом проверки 15, то чип подтвердил свою подлинность.
The End.
Так же в ходе работ были найдены генераторы контрольных сумм. Оказывается, что в прошивке нового чипа хранится контрольная сумма серийного номера чипа (не помню адрес, где-то в географическом центре прошивки). После заполнения счётчиков, принтер стирает контрольную сумму из прошивки и больше этот чип работать не будет пока вы не впишите сумму на место. Если формула генерации известна, то проблем нет :).
Любые копирования и использования материалов этой статьи разрешены только с указанием источника www.resetkits.lv