Pull to refresh

Comments 75

sbox_calculation.asm:25
> brcc PC+2 ;if lsb of operand 0 was 1
Это же такая шикарная атака по времени!
Тут нет никакой секретной информации. Алгоритм вычисления SBOX известен, как и конечный результат.
А потом заказчик попросит портировать на arm, mips, sparc и его личную pupkin_105bit_architecture.
За деньги клиента любой каприз.
Как это обычно бывает:

За те-же деньги, которые оговаривались при старте проекта :)
Тут поможет грамотное ТЗ и смета :)
Старательный Псион передал 10КБ в порт и ждет указаний
Честно скажу — далёк от этого. НО (!) я хочу чтоб об этом сняли эпизод звёздных войн…
Псион любит Звездные Войны и не против побыть актером.

Фото
Браво!

Я тоже делал AES-bootloader для PIC16, PIC24 и dsPIC33. На ассемблере удалось уложиться в <2048 инструкций. Правда, я не пользовался такими трюками, как вычисление S-box или отказ от использования inv-S-box. Так что таблицы занимали у меня 512 байт. Но дело в том, что область, резервируемая для Bootloader в этих контроллерах, все равно большая (минимум 2048 инструкций), так что особого пресса по размеру кода не было. Я использовал флаг защиты области бутлоадера от записи, чтобы в случае программного сбоя устройство не превратилось в кирпич.

Но проведенная вами работа по сложности и защищенности намного превосходит мой проект. Так что большое вам спасибо за идеи и примеры реализации!
Спасибо!
В AVR область бутлоадера тоже больше, причем, в два раза, чем я использовал. Просто область бута отъедается от объема всей памяти и захотелось сделать полноценное шифрование за минимальную стоимость.
Бутлоадер сам не разрешает себя модифицировать — он расположен в самом конце прошивки и просто не будет принимать страницы дальше пользовательской области. Все это вычисляется в разделе констант.
Мой бутлоадер тоже не разрешает себя модифицировать, но все же я предпочел включить аппаратную защиту от записи на случай сбоя в программе. Ведь сбой может привести к исполнению произвольного кода, а где-то внутри бутлоадера есть процедуры записи Flash. А использование аппаратной защиты вынуждает резервировать под бутлоадер столько места, сколько счел необходимым производитель контроллера. К счастью, в моем случае, обычно бутлоадер туда влезает с большим запасом :)

Впрочем, защита от записи не спасет от того, что может оказаться затертым ключ шифрования. В этом случае для юзера устройство превратится в кирпич, и разница только в том, что производитель сможет его восстановить по кабелю, не выпаивая контроллер и не подключаясь к нему программатором, если схема это позволяет.
У клиента проще заменить всю плату, как гарантийный случай.
Если речь идёт о такой защите ПО, стоимость железа хорошо если 10% от стоимости изделия.
Вопрос по защите ключей, а то из статьи не совсем понятно.

У вас ключ, как я понимаю, хранится в ПЗУ контроллера, защищенном от считывания. Если взломщик сможет считать защищенный контроллер — он узнает и ключ, и текущую версию прошивки. Допустим, вы выпускаете новую прошивку. Сможет ли в этом случае взломщик ее дешифровать, не прибегая заново к считыванию защищенного контроллера?

С другой стороны, имеет ли каждый экземпляр выпускаемого устройства свой ключ для расшифрования прошивки, или же вся серия устройств имеет одинаковый ключ?
Да, все ключи в ПЗУ, защищенной от чтения. Если взломщик может считать защищенный контроллер — он может слить всю прошивку и узнать ключ. Да, в таком случае, взломщик может расшифровать и все последующие версии для данного ключа.

Ключ на устройство или серию — это на усмотрение пользователя. На устройство — конечно же лучше с точки зрения защищенности — к примеру, каждый пользователь может получать свою, полностью уникальную прошивку, в которой, к примеру, изменен порядок некритичных инструкций. Если мы находим в интернете наш дамп — мы без проблем узнаем, кто это сделал и в будущем не предоставляем обновления китайскому шпиону, удаляя его скомпрометированный файл ключей из нашей базы.
Делюсь своей реализацией AES для процессора Z80. Она была опубликована на форуме zx.pk.ru. Все подпрограммы вместе с таблицами S-box и Si-box занимают 1001 байт кода. При этом реализовано шифрование в прямом и обратном направлениях. Может, кому-нибудь пригодится.
Еще один вопрос. Вы говорили о том, что оверклок может сотворить с контроллером много полезных взломщику вещей. А если бутлоадер работает исключительно на внутреннем RC-генераторе — можно ли исключить в этом случае какие-то из возможных атак? Или пониженное напряжение, нагрев, охлаждение и т.д. все равно могут несанкционированно передать управление в произвольную точку программы? Можно ли отключить Brown-Out-Reset без стирания всего контроллера? Конечно, все это специфично для конкретных производителей, но может у вас есть хоть какие-то данные на этот счет.
Я сам не взломщик микроконтроллеров, просто наслышан :)
Думаю, да — если нет внешнего тактирования — взломщик не сможет полезть в кварц обслюнявленным пальцем, но останутся возможности помучить бедное устройство другими способами.
Конкретно в AVR, программирование фьюзов, в том числе, включение\отключение brownout detection, запрещено при отключенной записи во Flash.
И все это бессмысленно, если производитель МК оставляет какой-то сервисный режим, о способе входа в который, конечно же, никто никогда не узнает…
UFO just landed and posted this here
Да, спиливают крышку лазером, потом им же тыкаются в лок-биты, используют микропробники для подключения прямо к кристаллу…
Все программные меры защиты — лишь способ отложить неизбежное физическое спиливание. Но против него тоже есть меры — к примеру, специальный материал крышки, который не растворяется, не спиливается, а загорается, плавится и портит кристалл. Есть оригинальные топологии, в которых нельзя без разрушающего вмешательства докопаться до нужных ячеек или которые рушатся без поддержки крышкой. Но физически защищенные чипы стоят больших денег и недоступны маленьким группкам инженеров, живущих в лаборатории университета на первом этаже, прямо за вахтой :)
Ну почему-же недоступны, голь на выдумку хитра, я не то-что бы злобный хаккер, просто в своё время пришлось делать устройство, которое заведомо будет изучаться… Общался с людьми, ставил эксперименты, прикидывал РЕАЛЬНУЮ модель угроз, и нашел некий комплекс решений актуальный даже против производителей чипа, которые могли\оставили аппаратные закладки…
… и дело тут совсем не в химии
Интересно.
А статью опубликовать в солидном журнале не хотите, или NDA?
Не, статью не хочу, хотя была бредовая идея сделать презентацию на каком-нибудь тематическом, культурном мероприятии :-) Однако волка кормят ноги, и мне было не много не до того, семья, музыка, нет я лучше на улице на гуслях поиграю, кайфа в этом больше, да и профита тоже…

Знание об этой уязвимости не уникальное, есть готовые решения её эксплуатирующие, правда только на МК но не суть… Если в чём-то и есть моё know-how то только в глубине исследования, скажем так, я далеко не самый умный, «отжигать» микросхемам ноги широко распространённая практика, правда мало кто знает что это в некоторой степени обратимо\обходимо…

Поскольку изделие предполагалось серийное, я искал способ защиты который мог бы в итоге растиражирован, и при этом гарантировал не возможность считывания\изменения прошивки и флагов. До специального устройства дело не дошло (хотя отдельные элементы и были собраны), но на стенде алгоритм защиты и проверке был проверен, а защищённые контроллеры отправлены в лаборатории…
В общем, может быть я когда-нибудь к этому и вернусь, но пока просто не могу позволить себе потратить на это время…
UFO just landed and posted this here
Ну не знаю, сервисный режим или простая глупость, но различные производители микроконтроллеров (и не только) допускают одну и туже логическую ошибку…
Спиливать, ничего не надо (если только не отожгли ноги) мега засунула те самые регистры в толщу кристалла, и хрена с два до них доберёшься, но это и не нужно.
Про тактирование не уверен что в этом есть большой практический смысл, конкретно АВРы неплохо гонятся и стабильны к различным внешним воздействиям.
У авр фьюзы стираются в последнюю очередь, это делается физической схемой а не микропрограммой, по этому как не передёргивай, или подвиснет или сотрёт всё.
Это у старых PIC ЕМНИП можно было инициировать стирание и отрубить питание.
Но всё равно, есть одна логическая ошибка, позволяющая снимать только фьюзы, и более того, попасть в один конкретный, даже можно…
Очень интересно. Логическая ошибка — это вы имеете в виду бэкдоры от производителя?

А насчет тактирования — все равно ведь возможности чипа небесконечны. Подобрать такую тактовую частоту, при которой он начнет сбоить, и далее как повезет.
Я рассуждаю так, если бы это был косяк отдельного производителя\дизайнера, он не был бы таким распространённым среди прочих производителей, и распространялся бы только на микроконтроллеры, например, а он далеко и не только, какие отсюда могут быть выводы…
Не берусь утверждать что этим страдают все, но нескольких популярных производителей, я пощупал лично, и что интересно есть специальные, защищённые чипы с аппаратными модулями шифрования, для серьёзных целей, в красивых корпусах, но они тоже…

Не бесконечны, но пока там конкретный адрес счётчик не на считает, фьюзы не очистятся, и это счётчик аппаратный, если что залипнет или отвалится он просто встанет и кина не будет.
Я не очень понимаю в микроконтроллерах, но, ИМХО, против параллельной прошивки нет приема.
Прошить залоченый кристалл проблем нет. а вот считать записанное…
Отнюдь, если вы попытаетесь прочесть залоченную мегу, она не пошлёт вас в баню, а ответит безумным потоком цифр (!) может быть это просто случайные числа, а может зашифрованная прошивка, об этом достоверно знают только авторы чипа, но меня это наводит на странные мысли…

Та уязвимость о которой говорю я выше, она хоть и логическая но аппаратная, возможно если кто-нибудь плотно подойдёт к исследованию вопроса с математической стороны, он откроет ещё одну, распространённую уязвимость.
Не вдавался в подробности лочки мег, а вот у моего любимого микрочипа очень даже предсказуем результат чтения залоченной прошивки. Вот под рукой лежит спека на древний 16с5хх. Берется 3 ниббла (полубайта) подряд (размер одной инструкции), два ниббла прочитаются нулями, а третий будет ксором всех трех нибблов.
Зачем это сделано? А чтобы проконтроллировать правильность зашивки кристалла.
А есть дешевый рентгеновский/ультрафиолетовый лазер с рентгеновским или электронным микроскопом, с набором масок чипа? Защита, она не предназначена для абсолютной невозможности её преодолеть — такой не существует в мире. Задача защиты — усложнить взлом. Где-то обычной щеколды хватает, а где-то нужен особый подход к топологии чипа. Все решения имеют свою цену, глупо ведь хранить на даче лопату в сейфе за 1млн зеленых денег?
Начальная прошивка делается автором софта.
Пользователь получает прошитый контроллер с уникальным ключом.

А вот обновления софта шьются пользователем, и если два юзера скооперируются и купят обновление вместе, оно прошьётся только тому, на чей аккаунт было куплено, потому что зашифровано этим самым уникальным ключом.
UFO just landed and posted this here
Именно он! Debian Woody. Ядро 2.4.18.
Установка линукса на него напоминала археологические раскопки — половина ссылок мертва, кругом web 1.0 :)
Ресурсы, которыми я пользовался:
linux-7110.sourceforge.net/
staff.washington.edu/dushaw/psion/
На нем даже иксы поднимаются.
Теперь я хочу псион. Не знаю, что я буду с ним делать, но я хочу.
Регулярно всплывают на всяких аукционах и барахолках за копейки, поищите :)
В крайнем случае — ebay. Обращайте внимание на состояние шлейфа экрана (хотя, в крайнем случае, запасные до сих пор производятся фанатами), не обращайте внимание на нерабочую шахту стилуса — чинится просто.
Я открою страшную тайну, что вдохновившись этим постом, погуглил по теме. Есть дофигища клавиатурных КПК, в т.ч. и цветных, на которых поднимается нормальный линукс с иксами!
UFO just landed and posted this here
Чего такого особенного в псионе?

А что за компы по ссылкам? Первый ноут я обозревал habrahabr.ru/post/147221/. Я не могу подобрать подходящего эпитета, чтобы охарактеризовать качество навоза.
UFO just landed and posted this here
Ведройд-не линукс. Мой планшет с джейлом и USB + bluetooth клавиатура вполне превращается в такой ноут, но зачем?

Тут фишка именно в линуксе, в гибкости и т.п. А мой ноут, таки да… Видать была неудачная проба пера. Они в том же корпусе сделали на другом камушке такое чудо.
UFO just landed and posted this here
UFO just landed and posted this here
UFO just landed and posted this here
Беглым поиском на avito нашёл 2 предложения. Так что вполне всё реально! :)
UFO just landed and posted this here
UFO just landed and posted this here
В Одессе шикарный радиорынок, и если б не дерьмецо последнего времени, с удовольствием съездил бы в этот славный град, как минимум даже ради него.
UFO just landed and posted this here
Не боюсь, не пускают. С 18 до 65 лет — гемороя не оберёшься въехать.
UFO just landed and posted this here
У меня есть знакомые, которые ехали транзитом через Украину в Сочи, их сняли с поезда. Ни журналисты, ни ленточники. даже по моему кроме границы остановки не было. Так что не всё просто…
UFO just landed and posted this here
А можете обзорный псот этого писона с линем сделать?
Конечно, но не в ближайшее время. Нужно придумать, что б с ним такого оригинального сделать, иначе статья будет очень скучной и состоять из процесса распаковки пары архивов и установки пары пакетов.
Псион, любовь моя! У меня когда-то был более-менее точный клон Psion 5, у которого не было энергонезависимой памяти.
Скажите, а оригинальные Псионы тоже страдают от этого недуга?

Вещь была восхитетельная по дизайну, эргономике, удобству, весу, отзывчивости, поддержке многозадачности в EPOC OS, успешно работала с документами MS Office и ходила в интернет через ИК-порт, а полный CD с софтом в комплекте для того времени воспринимался почти как всякие Маркеты на миллион приложений.

Перестал пользоваться только когда батарейка поизносилась, именно из-за отсутствия энергонезависимой памяти.
У моего Псиона тоже нет энергонезависимой памяти. Все нужное на CF-карточке, а содержимое RAM удерживается благодаря отдельной батарейке.
У вас, вероятно, Psion Revo был — у него батарейки встроенные. У моего все как надо — 2 АА :)
Если это действительно Revo и он еще у вас — разберите его, внутри обычные аккумуляторы ААА-формата стоят.
У вас на столе, лежит блок управления бойлером Ariston. Если сломался — могу подсказать)
Спасибо за информацию. Я нашел его на старых развалинах недостройки после дождя, вряд ли оживет. Думал поупражняться на нем в выпаивании, все руки не дойдут :)
Эх, вспомнил себя в молодые годы, казалось что на ассемблере можно сделать всё что угодно и я гений программирования.… сейчас бы мне тот энтузиазм.
Ну, а это конечно повергает в уныние.
На ассемблере мы писали, потому что задачи крайне чувствительны к скорости работы. Полагаться на компилятор было нельзя и многие участки кода были просчитаны по тактам. К тому же, только на ассемблере можно делать невозможное.

А вообще статья годная, автор молодец, пиши ещё.
Все хорошо, но «decrypt» — это расшифрование. Дешифрование — это совсем другое. Дешифровка — такого слова вообще нет.
Слово «шифровка» же есть? Приставка «де» — тоже есть. Вполне себе нормальное словообразование.
.if port_used == 'A'

Очень некрасивое решение… можно было не плодить сущности а написать участок кода задав только одну букву номера порта, в препроцессоре работает конкатенация строк, можно оформить этот блок в виде макроса с единственным параметром — номером порта, препроцессор подставит вместо выражения 'PORT@0' -> PORTA.

.macro port_init cbi DDR@0, pin sbi PORT@0, pin .endmacro port_init A

Но проще наверно заменить DDRx дефайнами, которые можно определить один раз вверху исходника, или вообще отдельным инклудом, тогда не нужна будет условная компиляция с таким нерациональным копированием участков кода…
Спасибо! Не знал, что препроцессор умеет конкатенировать строки, так намного элегантнее, конечно. Поправил.
Как мне кажется, aes — это один из самых неудобных алгоритмов для реализации в микроконтроллере, как с точки зрения скорости, так и с точки зрения сложности реализации. Ваша статья прекрасно это демонстрирует. Если взять, например, chacha20, то вы получите как простоту реализации, так и большую скорость операций (более того, chacha20 — это PRP, которая работает симметрично в обе стороны, и обеспечивает она не 128 bit security, а 256). А для еще большего прироста скорости, можно снизить число раундов до 12, что также приемлимо.
А разве через JTAG не удастся видеть весь процесс выполнения в реалтайме? Даже регистры вроде можно посмотреть.
Думаешь, защитой это не предусмотрено? Когда активирована защита кода, то и отладчик задвигается в сторонку.
Sign up to leave a comment.

Articles