Комментарии 75
sbox_calculation.asm:25
> brcc PC+2 ;if lsb of operand 0 was 1
Это же такая шикарная атака по времени!
> brcc PC+2 ;if lsb of operand 0 was 1
Это же такая шикарная атака по времени!
0
relevant

+24
Старательный Псион передал 10КБ в порт и ждет указаний
Честно скажу — далёк от этого. НО (!) я хочу чтоб об этом сняли эпизод звёздных войн…
Честно скажу — далёк от этого. НО (!) я хочу чтоб об этом сняли эпизод звёздных войн…
+1
Браво!
Я тоже делал AES-bootloader для PIC16, PIC24 и dsPIC33. На ассемблере удалось уложиться в <2048 инструкций. Правда, я не пользовался такими трюками, как вычисление S-box или отказ от использования inv-S-box. Так что таблицы занимали у меня 512 байт. Но дело в том, что область, резервируемая для Bootloader в этих контроллерах, все равно большая (минимум 2048 инструкций), так что особого пресса по размеру кода не было. Я использовал флаг защиты области бутлоадера от записи, чтобы в случае программного сбоя устройство не превратилось в кирпич.
Но проведенная вами работа по сложности и защищенности намного превосходит мой проект. Так что большое вам спасибо за идеи и примеры реализации!
Я тоже делал AES-bootloader для PIC16, PIC24 и dsPIC33. На ассемблере удалось уложиться в <2048 инструкций. Правда, я не пользовался такими трюками, как вычисление S-box или отказ от использования inv-S-box. Так что таблицы занимали у меня 512 байт. Но дело в том, что область, резервируемая для Bootloader в этих контроллерах, все равно большая (минимум 2048 инструкций), так что особого пресса по размеру кода не было. Я использовал флаг защиты области бутлоадера от записи, чтобы в случае программного сбоя устройство не превратилось в кирпич.
Но проведенная вами работа по сложности и защищенности намного превосходит мой проект. Так что большое вам спасибо за идеи и примеры реализации!
+9
Спасибо!
В AVR область бутлоадера тоже больше, причем, в два раза, чем я использовал. Просто область бута отъедается от объема всей памяти и захотелось сделать полноценное шифрование за минимальную стоимость.
Бутлоадер сам не разрешает себя модифицировать — он расположен в самом конце прошивки и просто не будет принимать страницы дальше пользовательской области. Все это вычисляется в разделе констант.
В AVR область бутлоадера тоже больше, причем, в два раза, чем я использовал. Просто область бута отъедается от объема всей памяти и захотелось сделать полноценное шифрование за минимальную стоимость.
Бутлоадер сам не разрешает себя модифицировать — он расположен в самом конце прошивки и просто не будет принимать страницы дальше пользовательской области. Все это вычисляется в разделе констант.
0
Мой бутлоадер тоже не разрешает себя модифицировать, но все же я предпочел включить аппаратную защиту от записи на случай сбоя в программе. Ведь сбой может привести к исполнению произвольного кода, а где-то внутри бутлоадера есть процедуры записи Flash. А использование аппаратной защиты вынуждает резервировать под бутлоадер столько места, сколько счел необходимым производитель контроллера. К счастью, в моем случае, обычно бутлоадер туда влезает с большим запасом :)
Впрочем, защита от записи не спасет от того, что может оказаться затертым ключ шифрования. В этом случае для юзера устройство превратится в кирпич, и разница только в том, что производитель сможет его восстановить по кабелю, не выпаивая контроллер и не подключаясь к нему программатором, если схема это позволяет.
Впрочем, защита от записи не спасет от того, что может оказаться затертым ключ шифрования. В этом случае для юзера устройство превратится в кирпич, и разница только в том, что производитель сможет его восстановить по кабелю, не выпаивая контроллер и не подключаясь к нему программатором, если схема это позволяет.
0
Вопрос по защите ключей, а то из статьи не совсем понятно.
У вас ключ, как я понимаю, хранится в ПЗУ контроллера, защищенном от считывания. Если взломщик сможет считать защищенный контроллер — он узнает и ключ, и текущую версию прошивки. Допустим, вы выпускаете новую прошивку. Сможет ли в этом случае взломщик ее дешифровать, не прибегая заново к считыванию защищенного контроллера?
С другой стороны, имеет ли каждый экземпляр выпускаемого устройства свой ключ для расшифрования прошивки, или же вся серия устройств имеет одинаковый ключ?
У вас ключ, как я понимаю, хранится в ПЗУ контроллера, защищенном от считывания. Если взломщик сможет считать защищенный контроллер — он узнает и ключ, и текущую версию прошивки. Допустим, вы выпускаете новую прошивку. Сможет ли в этом случае взломщик ее дешифровать, не прибегая заново к считыванию защищенного контроллера?
С другой стороны, имеет ли каждый экземпляр выпускаемого устройства свой ключ для расшифрования прошивки, или же вся серия устройств имеет одинаковый ключ?
0
Да, все ключи в ПЗУ, защищенной от чтения. Если взломщик может считать защищенный контроллер — он может слить всю прошивку и узнать ключ. Да, в таком случае, взломщик может расшифровать и все последующие версии для данного ключа.
Ключ на устройство или серию — это на усмотрение пользователя. На устройство — конечно же лучше с точки зрения защищенности — к примеру, каждый пользователь может получать свою, полностью уникальную прошивку, в которой, к примеру, изменен порядок некритичных инструкций. Если мы находим в интернете наш дамп — мы без проблем узнаем, кто это сделал и в будущем не предоставляем обновления китайскому шпиону, удаляя его скомпрометированный файл ключей из нашей базы.
Ключ на устройство или серию — это на усмотрение пользователя. На устройство — конечно же лучше с точки зрения защищенности — к примеру, каждый пользователь может получать свою, полностью уникальную прошивку, в которой, к примеру, изменен порядок некритичных инструкций. Если мы находим в интернете наш дамп — мы без проблем узнаем, кто это сделал и в будущем не предоставляем обновления китайскому шпиону, удаляя его скомпрометированный файл ключей из нашей базы.
+1
Делюсь своей реализацией AES для процессора Z80. Она была опубликована на форуме zx.pk.ru. Все подпрограммы вместе с таблицами S-box и Si-box занимают 1001 байт кода. При этом реализовано шифрование в прямом и обратном направлениях. Может, кому-нибудь пригодится.
+9
Еще один вопрос. Вы говорили о том, что оверклок может сотворить с контроллером много полезных взломщику вещей. А если бутлоадер работает исключительно на внутреннем RC-генераторе — можно ли исключить в этом случае какие-то из возможных атак? Или пониженное напряжение, нагрев, охлаждение и т.д. все равно могут несанкционированно передать управление в произвольную точку программы? Можно ли отключить Brown-Out-Reset без стирания всего контроллера? Конечно, все это специфично для конкретных производителей, но может у вас есть хоть какие-то данные на этот счет.
0
Я сам не взломщик микроконтроллеров, просто наслышан :)
Думаю, да — если нет внешнего тактирования — взломщик не сможет полезть в кварц обслюнявленным пальцем, но останутся возможности помучить бедное устройство другими способами.
Конкретно в AVR, программирование фьюзов, в том числе, включение\отключение brownout detection, запрещено при отключенной записи во Flash.
И все это бессмысленно, если производитель МК оставляет какой-то сервисный режим, о способе входа в который, конечно же, никто никогда не узнает…
Думаю, да — если нет внешнего тактирования — взломщик не сможет полезть в кварц обслюнявленным пальцем, но останутся возможности помучить бедное устройство другими способами.
Конкретно в AVR, программирование фьюзов, в том числе, включение\отключение brownout detection, запрещено при отключенной записи во Flash.
И все это бессмысленно, если производитель МК оставляет какой-то сервисный режим, о способе входа в который, конечно же, никто никогда не узнает…
+1
НЛО прилетело и опубликовало эту надпись здесь
Да, спиливают крышку лазером, потом им же тыкаются в лок-биты, используют микропробники для подключения прямо к кристаллу…
Все программные меры защиты — лишь способ отложить неизбежное физическое спиливание. Но против него тоже есть меры — к примеру, специальный материал крышки, который не растворяется, не спиливается, а загорается, плавится и портит кристалл. Есть оригинальные топологии, в которых нельзя без разрушающего вмешательства докопаться до нужных ячеек или которые рушатся без поддержки крышкой. Но физически защищенные чипы стоят больших денег и недоступны маленьким группкам инженеров, живущих в лаборатории университета на первом этаже, прямо за вахтой :)
Все программные меры защиты — лишь способ отложить неизбежное физическое спиливание. Но против него тоже есть меры — к примеру, специальный материал крышки, который не растворяется, не спиливается, а загорается, плавится и портит кристалл. Есть оригинальные топологии, в которых нельзя без разрушающего вмешательства докопаться до нужных ячеек или которые рушатся без поддержки крышкой. Но физически защищенные чипы стоят больших денег и недоступны маленьким группкам инженеров, живущих в лаборатории университета на первом этаже, прямо за вахтой :)
+3
Ну почему-же недоступны, голь на выдумку хитра, я не то-что бы злобный хаккер, просто в своё время пришлось делать устройство, которое заведомо будет изучаться… Общался с людьми, ставил эксперименты, прикидывал РЕАЛЬНУЮ модель угроз, и нашел некий комплекс решений актуальный даже против производителей чипа, которые могли\оставили аппаратные закладки…
… и дело тут совсем не в химии
… и дело тут совсем не в химии
+3
Интересно.
А статью опубликовать в солидном журнале не хотите, или NDA?
А статью опубликовать в солидном журнале не хотите, или NDA?
+2
Не, статью не хочу, хотя была бредовая идея сделать презентацию на каком-нибудь тематическом, культурном мероприятии :-) Однако волка кормят ноги, и мне было не много не до того, семья, музыка, нет я лучше на улице на гуслях поиграю, кайфа в этом больше, да и профита тоже…
Знание об этой уязвимости не уникальное, есть готовые решения её эксплуатирующие, правда только на МК но не суть… Если в чём-то и есть моё know-how то только в глубине исследования, скажем так, я далеко не самый умный, «отжигать» микросхемам ноги широко распространённая практика, правда мало кто знает что это в некоторой степени обратимо\обходимо…
Поскольку изделие предполагалось серийное, я искал способ защиты который мог бы в итоге растиражирован, и при этом гарантировал не возможность считывания\изменения прошивки и флагов. До специального устройства дело не дошло (хотя отдельные элементы и были собраны), но на стенде алгоритм защиты и проверке был проверен, а защищённые контроллеры отправлены в лаборатории…
В общем, может быть я когда-нибудь к этому и вернусь, но пока просто не могу позволить себе потратить на это время…
Знание об этой уязвимости не уникальное, есть готовые решения её эксплуатирующие, правда только на МК но не суть… Если в чём-то и есть моё know-how то только в глубине исследования, скажем так, я далеко не самый умный, «отжигать» микросхемам ноги широко распространённая практика, правда мало кто знает что это в некоторой степени обратимо\обходимо…
Поскольку изделие предполагалось серийное, я искал способ защиты который мог бы в итоге растиражирован, и при этом гарантировал не возможность считывания\изменения прошивки и флагов. До специального устройства дело не дошло (хотя отдельные элементы и были собраны), но на стенде алгоритм защиты и проверке был проверен, а защищённые контроллеры отправлены в лаборатории…
В общем, может быть я когда-нибудь к этому и вернусь, но пока просто не могу позволить себе потратить на это время…
0
НЛО прилетело и опубликовало эту надпись здесь
Есть доступные защищенные чипы seculab.ru/ru/product/senselock-el-std-ssop
0
Ну не знаю, сервисный режим или простая глупость, но различные производители микроконтроллеров (и не только) допускают одну и туже логическую ошибку…
Спиливать, ничего не надо (если только не отожгли ноги) мега засунула те самые регистры в толщу кристалла, и хрена с два до них доберёшься, но это и не нужно.
Про тактирование не уверен что в этом есть большой практический смысл, конкретно АВРы неплохо гонятся и стабильны к различным внешним воздействиям.
У авр фьюзы стираются в последнюю очередь, это делается физической схемой а не микропрограммой, по этому как не передёргивай, или подвиснет или сотрёт всё.
Это у старых PIC ЕМНИП можно было инициировать стирание и отрубить питание.
Но всё равно, есть одна логическая ошибка, позволяющая снимать только фьюзы, и более того, попасть в один конкретный, даже можно…
Спиливать, ничего не надо (если только не отожгли ноги) мега засунула те самые регистры в толщу кристалла, и хрена с два до них доберёшься, но это и не нужно.
Про тактирование не уверен что в этом есть большой практический смысл, конкретно АВРы неплохо гонятся и стабильны к различным внешним воздействиям.
У авр фьюзы стираются в последнюю очередь, это делается физической схемой а не микропрограммой, по этому как не передёргивай, или подвиснет или сотрёт всё.
Это у старых PIC ЕМНИП можно было инициировать стирание и отрубить питание.
Но всё равно, есть одна логическая ошибка, позволяющая снимать только фьюзы, и более того, попасть в один конкретный, даже можно…
+1
Очень интересно. Логическая ошибка — это вы имеете в виду бэкдоры от производителя?
А насчет тактирования — все равно ведь возможности чипа небесконечны. Подобрать такую тактовую частоту, при которой он начнет сбоить, и далее как повезет.
А насчет тактирования — все равно ведь возможности чипа небесконечны. Подобрать такую тактовую частоту, при которой он начнет сбоить, и далее как повезет.
0
Я рассуждаю так, если бы это был косяк отдельного производителя\дизайнера, он не был бы таким распространённым среди прочих производителей, и распространялся бы только на микроконтроллеры, например, а он далеко и не только, какие отсюда могут быть выводы…
Не берусь утверждать что этим страдают все, но нескольких популярных производителей, я пощупал лично, и что интересно есть специальные, защищённые чипы с аппаратными модулями шифрования, для серьёзных целей, в красивых корпусах, но они тоже…
Не бесконечны, но пока там конкретный адрес счётчик не на считает, фьюзы не очистятся, и это счётчик аппаратный, если что залипнет или отвалится он просто встанет и кина не будет.
Не берусь утверждать что этим страдают все, но нескольких популярных производителей, я пощупал лично, и что интересно есть специальные, защищённые чипы с аппаратными модулями шифрования, для серьёзных целей, в красивых корпусах, но они тоже…
Не бесконечны, но пока там конкретный адрес счётчик не на считает, фьюзы не очистятся, и это счётчик аппаратный, если что залипнет или отвалится он просто встанет и кина не будет.
0
Я не очень понимаю в микроконтроллерах, но, ИМХО, против параллельной прошивки нет приема.
0
Прошить залоченый кристалл проблем нет. а вот считать записанное…
0
Отнюдь, если вы попытаетесь прочесть залоченную мегу, она не пошлёт вас в баню, а ответит безумным потоком цифр (!) может быть это просто случайные числа, а может зашифрованная прошивка, об этом достоверно знают только авторы чипа, но меня это наводит на странные мысли…
Та уязвимость о которой говорю я выше, она хоть и логическая но аппаратная, возможно если кто-нибудь плотно подойдёт к исследованию вопроса с математической стороны, он откроет ещё одну, распространённую уязвимость.
Та уязвимость о которой говорю я выше, она хоть и логическая но аппаратная, возможно если кто-нибудь плотно подойдёт к исследованию вопроса с математической стороны, он откроет ещё одну, распространённую уязвимость.
+1
Не вдавался в подробности лочки мег, а вот у моего любимого микрочипа очень даже предсказуем результат чтения залоченной прошивки. Вот под рукой лежит спека на древний 16с5хх. Берется 3 ниббла (полубайта) подряд (размер одной инструкции), два ниббла прочитаются нулями, а третий будет ксором всех трех нибблов.
Зачем это сделано? А чтобы проконтроллировать правильность зашивки кристалла.
Зачем это сделано? А чтобы проконтроллировать правильность зашивки кристалла.
0
А перешить избирательно fuse?
0
А есть дешевый рентгеновский/ультрафиолетовый лазер с рентгеновским или электронным микроскопом, с набором масок чипа? Защита, она не предназначена для абсолютной невозможности её преодолеть — такой не существует в мире. Задача защиты — усложнить взлом. Где-то обычной щеколды хватает, а где-то нужен особый подход к топологии чипа. Все решения имеют свою цену, глупо ведь хранить на даче лопату в сейфе за 1млн зеленых денег?
+1
Начальная прошивка делается автором софта.
Пользователь получает прошитый контроллер с уникальным ключом.
А вот обновления софта шьются пользователем, и если два юзера скооперируются и купят обновление вместе, оно прошьётся только тому, на чей аккаунт было куплено, потому что зашифровано этим самым уникальным ключом.
Пользователь получает прошитый контроллер с уникальным ключом.
А вот обновления софта шьются пользователем, и если два юзера скооперируются и купят обновление вместе, оно прошьётся только тому, на чей аккаунт было куплено, потому что зашифровано этим самым уникальным ключом.
+1
НЛО прилетело и опубликовало эту надпись здесь
Именно он! Debian Woody. Ядро 2.4.18.
Установка линукса на него напоминала археологические раскопки — половина ссылок мертва, кругом web 1.0 :)
Ресурсы, которыми я пользовался:
linux-7110.sourceforge.net/
staff.washington.edu/dushaw/psion/
На нем даже иксы поднимаются.
Установка линукса на него напоминала археологические раскопки — половина ссылок мертва, кругом web 1.0 :)
Ресурсы, которыми я пользовался:
linux-7110.sourceforge.net/
staff.washington.edu/dushaw/psion/
На нем даже иксы поднимаются.
+5
Теперь я хочу псион. Не знаю, что я буду с ним делать, но я хочу.
+9
Регулярно всплывают на всяких аукционах и барахолках за копейки, поищите :)
В крайнем случае — ebay. Обращайте внимание на состояние шлейфа экрана (хотя, в крайнем случае, запасные до сих пор производятся фанатами), не обращайте внимание на нерабочую шахту стилуса — чинится просто.
В крайнем случае — ebay. Обращайте внимание на состояние шлейфа экрана (хотя, в крайнем случае, запасные до сих пор производятся фанатами), не обращайте внимание на нерабочую шахту стилуса — чинится просто.
+1
Я открою страшную тайну, что вдохновившись этим постом, погуглил по теме. Есть дофигища клавиатурных КПК, в т.ч. и цветных, на которых поднимается нормальный линукс с иксами!
0
НЛО прилетело и опубликовало эту надпись здесь
Чего такого особенного в псионе?
А что за компы по ссылкам? Первый ноут я обозревал habrahabr.ru/post/147221/. Я не могу подобрать подходящего эпитета, чтобы охарактеризовать качество навоза.
А что за компы по ссылкам? Первый ноут я обозревал habrahabr.ru/post/147221/. Я не могу подобрать подходящего эпитета, чтобы охарактеризовать качество навоза.
0
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Беглым поиском на avito нашёл 2 предложения. Так что вполне всё реально! :)
+1
НЛО прилетело и опубликовало эту надпись здесь
Я, как ни странно, в ваших краях тоже нашёл несколько вкусных предложений (не псион, но тоже няшка): molotok.ru/kpk-hp-200lx-ms-dos-4-mb-ozu-chernyj-korpus-i4240874588.html :)))
0
НЛО прилетело и опубликовало эту надпись здесь
В Одессе шикарный радиорынок, и если б не дерьмецо последнего времени, с удовольствием съездил бы в этот славный град, как минимум даже ради него.
0
НЛО прилетело и опубликовало эту надпись здесь
Не боюсь, не пускают. С 18 до 65 лет — гемороя не оберёшься въехать.
0
А можете обзорный псот этого писона с линем сделать?
+2
Конечно, но не в ближайшее время. Нужно придумать, что б с ним такого оригинального сделать, иначе статья будет очень скучной и состоять из процесса распаковки пары архивов и установки пары пакетов.
+1
Псион, любовь моя! У меня когда-то был более-менее точный клон Psion 5, у которого не было энергонезависимой памяти.
Скажите, а оригинальные Псионы тоже страдают от этого недуга?
Вещь была восхитетельная по дизайну, эргономике, удобству, весу, отзывчивости, поддержке многозадачности в EPOC OS, успешно работала с документами MS Office и ходила в интернет через ИК-порт, а полный CD с софтом в комплекте для того времени воспринимался почти как всякие Маркеты на миллион приложений.
Перестал пользоваться только когда батарейка поизносилась, именно из-за отсутствия энергонезависимой памяти.
Скажите, а оригинальные Псионы тоже страдают от этого недуга?
Вещь была восхитетельная по дизайну, эргономике, удобству, весу, отзывчивости, поддержке многозадачности в EPOC OS, успешно работала с документами MS Office и ходила в интернет через ИК-порт, а полный CD с софтом в комплекте для того времени воспринимался почти как всякие Маркеты на миллион приложений.
Перестал пользоваться только когда батарейка поизносилась, именно из-за отсутствия энергонезависимой памяти.
0
У моего Псиона тоже нет энергонезависимой памяти. Все нужное на CF-карточке, а содержимое RAM удерживается благодаря отдельной батарейке.
У вас, вероятно, Psion Revo был — у него батарейки встроенные. У моего все как надо — 2 АА :)
Если это действительно Revo и он еще у вас — разберите его, внутри обычные аккумуляторы ААА-формата стоят.
У вас, вероятно, Psion Revo был — у него батарейки встроенные. У моего все как надо — 2 АА :)
Если это действительно Revo и он еще у вас — разберите его, внутри обычные аккумуляторы ААА-формата стоят.
0
У вас на столе, лежит блок управления бойлером Ariston. Если сломался — могу подсказать)
0
Эх, вспомнил себя в молодые годы, казалось что на ассемблере можно сделать всё что угодно и я гений программирования.… сейчас бы мне тот энтузиазм.
Ну, а это конечно повергает в уныние.
А вообще статья годная, автор молодец, пиши ещё.
Ну, а это конечно повергает в уныние.
На ассемблере мы писали, потому что задачи крайне чувствительны к скорости работы. Полагаться на компилятор было нельзя и многие участки кода были просчитаны по тактам. К тому же, только на ассемблере можно делать невозможное.
А вообще статья годная, автор молодец, пиши ещё.
+2
Все хорошо, но «decrypt» — это расшифрование. Дешифрование — это совсем другое. Дешифровка — такого слова вообще нет.
-6
.if port_used == 'A'
Очень некрасивое решение… можно было не плодить сущности а написать участок кода задав только одну букву номера порта, в препроцессоре работает конкатенация строк, можно оформить этот блок в виде макроса с единственным параметром — номером порта, препроцессор подставит вместо выражения 'PORT@0' -> PORTA.
.macro port_init
cbi DDR@0, pin
sbi PORT@0, pin
.endmacro
port_init A
Но проще наверно заменить DDRx дефайнами, которые можно определить один раз вверху исходника, или вообще отдельным инклудом, тогда не нужна будет условная компиляция с таким нерациональным копированием участков кода…
+1
Спасибо! Не знал, что препроцессор умеет конкатенировать строки, так намного элегантнее, конечно. Поправил.
0
Там еще много интересного есть, попробуй этот документ
0
Как мне кажется, aes — это один из самых неудобных алгоритмов для реализации в микроконтроллере, как с точки зрения скорости, так и с точки зрения сложности реализации. Ваша статья прекрасно это демонстрирует. Если взять, например, chacha20, то вы получите как простоту реализации, так и большую скорость операций (более того, chacha20 — это PRP, которая работает симметрично в обе стороны, и обеспечивает она не 128 bit security, а 256). А для еще большего прироста скорости, можно снизить число раундов до 12, что также приемлимо.
+1
А разве через JTAG не удастся видеть весь процесс выполнения в реалтайме? Даже регистры вроде можно посмотреть.
0
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.
Бутлоадер с AES-128 и EAX на AVR Assembler в 1024 байта