Пользователь
0,0
рейтинг
29 августа 2011 в 22:52

Обход встроенной защиты PIC-микроконтроллеров из песочницы

В комментариях к недавнему топику о вскрытии процессора была упомянута статья о том, как удалось обойти встроенную защиту от чтения прошивки микроконтроллера (т.н. Fuse-биты). Мне она понравилась, ниже — перевод с некоторыми дополнениями и пояснениями.

Взлом МК PIC18F1320


Я подумал, что было бы неплохо попробовать что-нибудь из тех техник взлома микроконтроллеров семейства PIC, о которых я слышал. Обычно PIC-микроконтроллеры имеют некоторое количество так называемых fuse-бит, которые служат для защиты от чтения или модификации каких-то частей памяти. Однако бывают случаи, когда возникает необходимость прочитать содержимое уже запрограммированного и защищенного контроллера (на законных основаниях). Типичный пример — потеря компанией технической документации на устройство, либо увольнение тех людей, которые изначально разрабатывали защищенную прошивку микроконтроллера. Такое так же часто случается, когда компания хочет обновить линейку своих продуктов.
Ну, сами понимаете, есть еще некоторые ситуации, когда такие навыки могут пригодиться.


Я купил четыре PIC18F1320 и начал их мучать. Вот так выглядит PIC18F1320 в первозданном, не раскуроченном виде:
image
Первое, что предстоит сделать, это внять верхнюю часть корпуса, чтобы стали доступны кремниевые внутренности микроконтроллера. Хотя существует достаточно много любительских способов сделать это, но обычно они основаны на применении азотной или серной кислоты. Во-первых, это, скорее всего, не те вещи, которые вы очень хотите видеть рядом с собой. Во-вторых, их непросто достать, поскольку, например, азотная кислота является одним из компонентов для изготовления взрывчатых веществ. Я решил, что самый простой и надежный способ — отправить микроконтроллеры в лабораторию анализа отказов, такую как MEFAS, и за $50 и 2 дня получить на руки уже «обезглавленные» компоненты. Для этого проекта я удалил компаунд с трех микроконтроллеров. Два из них остались полностью рабочими, а один лишился корпуса полностью, т.е. остался только сам чип. Это было продиктовано конструктивными особенностями моего микроскопа при больших увеличениях.
image
Недолгое обследование поверхности чипов позволило выявить некоторые характерные участки микроконтроллера, показанные ниже:

Видны (по часовой стрелке): 8 KB flash-памяти, источник опорного напряжения, зарядовый насос для программирования flash/EEPROM памяти, 256 байт EEPROM памяти, втроенные таймеры и цепи тактирования, вычислительное ядро, ПЗУ с микрокодом, массив с fuse-битами, 256 байт ОЗУ, АЦП. (
было бы очень интересно узнать, как он все это определил по внешнему виду
)
Одна структура сразу привлекла мое внимание: ряд металлических экранов над транзисторами, которые располагались в правильном порядке, и количество которых совпадало с количеством fuse-бит. Полное перекрытие элементов металлическими экранами на кремниевых кристаллах встречается очень редко, и само собой такие элементы привлекают к себе внимание, т.к. содержат что-то крайне важное.

Немного подумаем об этих металлических экранах. Для чего они нужны? Во-первых, вспомним некоторые интересные факты о технологии flash (этот тип памяти применяется в том числе и в PIC-микроконтроллерах для хранения fuse-бит). Flash-технология подразумевает использование транзисторов с плавающим затвором, очень похожие на те, что применялись в старых микросхемах ПЗУ с ИФ-стиранием (вы же помните 2616-е в керамическом корпусе и с кварцевым стеклом?). И во flash, и в УФ-ППЗУ данные сохраняются путем инжектирования электронов на плавающий затвор при помощи тоннельного эффекта, где эти электроны могут находиться десятилетиями. Дополнительные электроны в плавающем затворе создают заметные изменения в характеристиках транзистора. Разница заключается в том, что во flash-памяти для стирания информации достаточно электрических импульсов, в то время как в УФ-ППЗУ для того чтобы «выгнать» электроны с плавающего затвора необходимы фотоны с высокой энергией. Для этого необходим ультрафиолет с длинной волны примерно 250 нм. Для того, чтобы УФ-излучение не слишком сильно ослабевало, применяются кварцевые стекла (те самые окошечки на старых микросхемах ПЗУ).
Важный вывод, который можно сделать из вышеуказанных фактов: flash память тоже может быть стерта при помощи УФ-излучения, т.к. она имеет практически ту же транзисторную структуру, что и УФ-ППЗУ устройства. Корпус устройств с flash-памятью обычно мешает попаданию ультрафиолета на поверхность кристалла, но так как наш PIC микроконтроллер теперь лишен пластиковой верхушки корпуса, то мы может применить УФ-излучение и посмотреть, что из этого выйдет.
Я провел эксперимент, в котором запрограммировал PIC-контроллер последовательными значениями от 0x00 до 0xFF, и затем проэкспонировал его в моем УФ-ППЗУ стирателе, пока принимал душ и проверял почту.
Когда я извлек контроллер из стирателя, то обнаружил, что flash-память действительно была очищена и вернулась в изначальное состояние (все значения 0xFF), и что защитные fuse-биты так же были деактивированы. Так же следует учитывать, что УФ-излучение действует и на EEPROM-память.
Ясно, что металлические пластины над защитными fuse-битами как раз служат защитой от того, чтобы сбросить их отдельно от flash-памяти программ.

Картинка иллюстрирует проблему (и ее решение), с которой я столкнулся. Для того чтобы стереть информацию на транзисторе flash-памяти, сильное УФ-излучение должно достигать его плавающего затвора. А металлические экраны препятствуют этому, эффективно отражая УФ-лучи.
Однако, благодаря разности между коэффициентами преломления света для оксида и кремния, свет, падая под некоторым углом, будет отражаться от его поверхности. Чтобы получше понять этот эффект можете прыгнуть в бассейн и посмотреть на воду почти на уровне глаз. Вода будет обладать очень хорошей отражательной способностью как раз из-за разницы коэффициентов преломления воды и воздуха. Это называется полное внутреннее отражение.
Это отражение как раз можно использовать, чтобы заставить УФ-излучение отражаться от металлической поверхности экрана и падать обратно на плавающий затвор транзистора. Итак, поворачивая PIC-микроконтроллер внутри ПЗУ-стирателя, я могу направить достаточно света для того чтобы он, отразившись в области транзистора flash-памяти, вызвал его стирание. После нескольких попыток я разработал технологию, которая кажется работает вполне неплохо.

Это фото микроконтроллера внутри ПЗУ-стирателя (синее свечение вокруг контроллера обусловлено работой УФ-лампы). Микроконтроллер закреплен под углом в антистатическом материале.
Но все это не может защитить от стирания нужных данных в той части flash-памяти, где хранится программа микроконтроллера. Для того чтобы предотвратить стирание этих данных используется сплошная маска, которая была очень аккуратно вырезана из изоленты и прикреплена к кристаллу с помощью двух пинцетов, микроскопа и недрогнувшей руки ) Изолента эффективно блокирует прохождение ультрафиолета, тем самым защищая закрытую область памяти от стирания, а так же поглощает отраженный от кремниевой подложки ультрафиолет.
image
Это фото кристалла с прикрепленной маской над областью flash-памяти.
Используя эту технику я наконец смог сбросить защитные fuse-биты без стирания основной программы микроконтроллера. Этим же способом можно стирать только некоторую часть flash-памяти. Ура!

Замечания

Очевидно, что описанный способ подходит только для тех устройств, которые содержат перепрограммируемые fuse-биты. Если биты защиты программируются лишь однократно (а такое бывает), то такая методика не подходит. В этих устройствах просто пережигаются тонкие проводники на кристалле. Однако мой коллега сказал, что и на этот случай разработаны свои методы борьбы (я думаю, восстанавливают контакт каким-то схожим микрохирургическим образом). Знаю так же, что эта операция стоит ой как недешево.
Так же хочется заметить, что во всенародно любимых микроконтроллерах AVR fuse-биты имеют похожую структуру (точно так же перепрограммируются), что позволяет надеяться, что описанная методика пригодна и для них!

UPD: исправил по возможности огрехи перевода (про ширину запрещенной зоны, магнитную ленту и способ заполнения памяти контроллера).

UPD 2: эта же тема, но для микроконтроллеров AVR, затрагивается здесь и здесь. Вот тут можно заказать чтение прошивки и даже купить спец. приборы.

Оригинал статьи тут.
Гудин Владимир @Gudin
карма
12,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое

Комментарии (43)

  • +3
    интересно, китайцы так и делают, проводя реверс-инжиниринг ))
  • 0
    Рад что ссылка пригодилась :)
    >было бы очень интересно узнать, как он все это определил по внешнему виду
    Разные узлы имеют разные характерные структуры, например логично предположить, что большая однообразная площадь- это flash-память.
    • 0
      Это да, понятно. Но вот например как распознать по внешнему виду кристалла тот же ИОН? Или внутренний осциллятор например? Это ведь достаточно мелкие по площади структуры, и как там можно выделить специфические элементы я пока не понимаю.
      • 0
        осциллятор находится по подключенным к нему пинам (эти ножки не рероутятся даже на топовых контроллерах, иначе они просто не заведутся)
  • 0
    Так же хочется заметить, что во всенародно любимых микроконтроллерах AVR fuse-биты имеют похожую структуру (точно так же перепрограммируются), что позволяет надеяться, что описанная методика пригодна и для них!

    А вот тут облом! В AVR установленному Fuse- или Lock-биту соответствует записанный в ячейку ноль. То есть ультрафиолетом можно только установить защиту, но не снять.
    • +2
      Ну вообще-то при стирании биты любой флэш памяти выставляются в 1, а при записи переходят в 0. Чтобы перевести обратно в 1 нужно провести операцию стирания.
      • 0
        Если верить статье, УФ излучение переводит ячейку в состояние «0»:
        Я провел эксперимент, в котором запрограммировал PIC-контроллер значениями 0xFF вместо 0x00, и затем проэкспонировал его в моем УФ-ППЗУ стирателе

        Когда я извлек контроллер из стирателя, то обнаружил, что flash-память действительно была очищена и вернулась в изначальное состояние
        • +3
          Тысяча чертей! Всегда нужно читать оригинал.
          When I took the device out of the eraser, I found that indeed the FLASH memory was blanked to it’s normal all 1’s state

          grobik, вы правы, стертая ячейка = 1, записанная = 0, ультрафиолет стирает ячейку в 1.
          Переводчику: поправьте это место, пожалуйста, исказили суть до противоположности.
          Резюме: с АВР технология тоже должна сработать.
          • 0
            Да, сейчас поправлю все. Но возникает встречный вопрос: а почему бы действительно не сделать так, что активный бит защиты соответствует 0? Тогда не получилось бы таким методом стереть.
            • 0
              > активный бит защиты соответствует 0
              Это так и есть, что для PIC, что для AVR.
              Имеете в виду наоборот: 1-есть защита, 0-нет? Тогда атака получается еще проще: ткнул иголкой, разрушил ячейку, и всё.
              • 0
                Ну в смысле сделать бы так, что облучаем УФ и получаем защищенную прошивку (как вы сначала написали).
                Иголкой — вариант интересный, но как бы не снести то, что стоит в непосредственной близости.
                • 0
                  Так нельзя сделать потому что в этом случае вы не сможете ничего сделать с только что вышедшим с завода контроллером. Т.к. одна из групп конфиг-битов запрещает запись.
                  • 0
                    Lock-биты не запрещают стирание всей памяти. Можно же сделать так, чтобы по команде стирания Lock-биты выставлялись в 0 (записывались).
                  • +1
                    Это решаемо одним однократно программируемым на фабрике вентилем, который пережигается после дефолтной установки lock-битов.
    • 0
      Ходят легенды что когда-то их(фьюзы в аврах) прожигали лазерами.
  • –1
    Блина, надо с балкона свои платы в тенек перенести
  • –5
    Не совсем понял из статьи. На чип карты «Золотая корона» можно наличности выше имеющейся добавить?
    • 0
      Конечно. Только у них защита круче, УФ лампочки не хватит. Идите в районную поликлинику, в рентген-кабинет, и облучайте там свою карту не меньше часа.
    • +1
      Вы действительно верите, что деньги хранятся на карте?
      • 0
        А баланс мобильника — на симке, да :)
      • 0
        Написал же для сверходарённых Золотая Корона.
        Именно на ней, деньги хранятся на карте (несколько лет назад — хранились). Посредством банкомата можно перекинуть некую сумму денег со счёта на карту и оплатить покупку в кассе с терминалом, который никак в момент оплаты не соединён с банком. Внезапно!
        • +1
          А вы, уважаемый, вместо того, чтобы выпендриваться, лучше бы рассказали об этой уникальной в своем роде платежной системе, или даже провели бы исследование на предмет «что там как хранится».
          • –3
            А смысл? Я лично для вас полчаса назад комментарий со ссылкой написал. Помогло?
            • 0
              Конечно. Проникся.
              P.S.: А ссылка битая.
              • –1
                Дай угадаю. Firefox
                • 0
                  Не угадали, в Firefox как раз все заработало. Опера.
                  • +1
                    День не прошёл даром. Вы научились замечать ссылки и открывать их.
                    • +3
                      Обожаю хабр!
                      Тут даже тролли интеллигентные. Всего вам доброго :)
                      • +3
                        Уже классика. Вы оба такие муси-пуси!
    • 0
      если сможете подписать ключом банкомата, то да :)
  • 0
    Вторая интересная статья за неделю о внутренностях процессоров! И при этом достаточно нестандартная! Отлично.
  • +4
    Перевод, кстате, изобилует косяками.

    > ряд металлических «щитов» над транзисторами
    Shield — экран.

    > Магнитная пленка
    Electrical tape — изолента.

    > Я провел эксперимент, в котором запрограммировал PIC-контроллер значениями 0xFF вместо 0x00, и затем проэкспонировал его в моем УФ-ППЗУ стирателе, пока принимал душ и проверял почту.
    Когда я извлек контроллер из стирателя, то обнаружил, что flash-память действительно была очищена и вернулась в изначальное состояние, и что защитные fuse-биты так же были деактивированы.

    I performed a simple experiment where I programmed the PIC device with a ramping pattern (0×00->0xFF over and over again) and then tossed it in my UV-EPROM eraser for the length of oh, about a good long shower and some email checking. When I took the device out of the eraser, I found that indeed the FLASH memory was blanked to it’s normal all 1’s state, and that the security fuses were unaffected.

    Тут вообще весь смысл переврал.

    А оригинальное статейко неплохое.
  • 0
    PIC 18 стирается по-дефолту в 0xFFFF (PIC16 в 0x3FFFF), поправьте косяк.
    • 0
      s/0x3FFFF/0x3FFF
      • +1
        P.S.: ramping pattern 0×00->0xFF over and over again — это 00 01 02 03… FD FE FF 01 02 03…
  • +1
    Только мне кажется, что этому топику место в другом блоге?
  • 0
    Эту статью бы три года назад…
  • 0
    блин. вот есть у меня доступ до эл.микроскопа. а вот как снять корпус с микросхемы… кислота, вроде, тоже водилась… надо будет попробовать! :)
  • 0
    Хочу только добавить, что лампа которую он держит не выглядит на 250нм )
    Скорее там унылая 365нм лампа черного света, кварцевые на 254нм светят белым светом (они божественно красивые… Жаль на них нельзя смотреть...).
    • 0
      Вот этот стиратель, честные 253,7 нм. Это у камеры цветопередача хромает.
  • 0
    опечатка — вырезана из изобенты

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.