Извлечение прошивки uart nand

В этой статье я покажу, как разобрать девайс, чтобы исследовать интерфейсы отладки, получение прошивки устройства или доступа к консоли управления. Если вы новичок в этой области, статья предложит вам подробный алгоритм действий, который позволит успешно справиться с подобной задачей.

Вы наверное как и я любили в детстве все разбирать и изучать, как и что работает. Некоторые повзрослели, а я все еще люблю этим заниматься )). В этой статье, я расскажу о том, как вытащить прошивку с любого устройства и как разрабы пытаются это предотвратить.

У старых ламповых при­емни­ков не было вообще никаких про­шивок, а единс­твен­ная защита, которая у них была — это анод­ное нап­ряжение. В наше время все иначе: мне попада­ются гаджеты, которые пытаются противодействовать уже на эта­пе вскрытия кор­пуса. Нач­нем наше увлекательное путешествие.

Оборудование

Тут мож­но толь­ко ска­зать, чего делать не сто­ит: не надо брать дешевые инс­тру­мен­ты и рас­ходни­ки. Из моего любимо­го — при­пой, который пла­вит­ся при совер­шенно неожи­дан­ных тем­перату­рах, про­водя­щий флюс (!) и одно­разо­вые пин­цеты.

Под­робнее хочет­ся рас­ска­зать о дешевом флю­се. Как при­мер — ТТ, так­же извес­тный как розовый гель. Он хорош, но он не отмы­вает­ся и про­водит ток на высоких час­тотах. Это не проб­лема в совет­ском радио или даже сов­ремен­ном бло­ке питания, но вот на пла­тах компь­юте­ров с гигагер­цами час­тоты он катего­ричес­ки про­тиво­пока­зан.

Сня­тие ком­паун­да — это воп­рос тем­перату­ры. Я обыч­но грею феном на ~250 гра­дусов, но есть одна проб­лемка. И сос­тоит она в том, что под ком­паун­дом ком­понен­ты могут быть при­паяны низ­котем­ператур­ным при­поем, вро­де спла­вов Розе или Вуда. Да, ком­паунд ты сни­мешь, но вмес­те с ним сой­дет полови­на пла­ты. А хит­рая флеш­ка может не завес­тись без кучи рас­сыпухи, которую обратно уже не соб­рать.

При сня­тии ком­паун­да не забывай о вытяж­ке — твое здо­ровье важ­нее любой мик­росхе­мы!

Что делать, если пла­та пок­рыта лаком? Мож­но поп­робовать свес­ти его аце­тоном, но он может пов­редить тек­сто­лит. Делай так, толь­ко если тебе терять нечего. Для осталь­ных слу­чаев — прос­то сни­мать скаль­пелем в нуж­ных мес­тах, а осталь­ное не тро­гать.

При пай­ке ори­енти­руй­ся на гра­фик тер­мопро­филя в кон­це даташи­та на мик­росхе­му. Он там раз­меща­ется не прос­то так, и на моей памяти дей­стви­тель­но были слу­чаи, ког­да мик­росхе­ма уми­рала от перег­рева при извле­чении. Как извес­тно, люди делят­ся на тех, кто не смот­рит гра­фики в докумен­тации, и тех, кто уже смот­рит.


Извлечение прошивки uart nand

К завод­ско­му при­пою час­то име­ет смысл при­мешать менее тугоп­лавкий сплав Розе или ПОС63, ну или сплав Вуда, если все сов­сем пло­хо. Это зна­читель­но понизит тем­перату­ру пай­ки и уве­личит шан­сы не сжечь мик­руху.

Память

Преж­де чем я рас­ска­жу, что и как делать с памятью, давай сна­чала раз­берем­ся, какая она вооб­ще быва­ет и как ее отли­чить от дру­гих ком­понен­тов на пла­те.


Извлечение прошивки uart nand

По опы­ту про­цес­сор (на скрин­шоте выше по цен­тру) обыч­но квад­ратной фор­мы и исполня­ется в BGA, а память пря­моуголь­ная и дела­ется в SOP-кор­пусах.

Час­то в уль­тра­пор­татив­ных вычис­литель­но мощ­ных устрой­ствах (смар­тфо­нах, нап­ример) исполь­зует­ся бутер­брод из про­цес­сора и памяти — так мень­ше раз­меры и задер­жки при работе. Форм‑фак­тор, конеч­но, BGA — прос­то потому, что ничего дру­гого в кро­хот­ный кор­пус запих­нуть нель­зя.


Извлечение прошивки uart nand

ROM — пос­тоян­ную память — отли­чить доволь­но лег­ко. Пред­положим, чип с ней ты уже нашел. Теперь давай раз­берем­ся, какая она быва­ет.

Нас инте­ресу­ет EEPROM (Electrically Erasable Programmable Read-Only Memory), FRAM (сег­нето­элек­три­чес­кая память) и NOR/NAND flash — они тебе уже и так зна­комы. Из них ты мог не слы­шать толь­ко о FRAM — ее начали при­менять око­ло пяти лет назад, так что она еще не осо­бо популяр­на.

EEPROM

Сре­ди осо­бен­ностей этой памяти — побай­товые чте­ние и запись. Такая память самая дол­говеч­ная: по рас­четам, она может сох­ранять информа­цию в течение при­мер­но двух­сот лет! Но за надеж­ность при­ходит­ся пла­тить — глав­ным обра­зом объ­емом, с котором у это­го вида памяти все пло­хо: типич­ный объ­ем такого чипа изме­ряет­ся в килобай­тах. Из‑за низ­кого объ­ема для хра­нения про­шивок этот тип памяти поч­ти не при­меня­ется. Ну а раз загово­рили о минусах — сто­ит и о низ­кой ско­рос­ти ска­зать.


Извлечение прошивки uart nand

Устройство ячейки памяти EEPROM

Ре­сурс ячей­ки — око­ло мил­лиона цик­лов переза­писи. По срав­нению с сов­ремен­ными ячей­ками NAND, у которых этот показа­тель находит­ся в пре­делах нес­коль­ких десят­ков тысяч цик­лов, EEPROM-память прос­то нере­аль­но надеж­ная.

РЕКОМЕНДУЕМ:
Как снять дамп прошивки и получить доступ к консоли управления гаджета

FRAM

FRAM — это сов­сем новый тип энер­гонеза­виси­мой памяти. Про­мыш­ленно его при­менять ста­ли все­го нес­коль­ко лет назад, так что шанс встре­тить имен­но FRAM в каком‑нибудь умном холодиль­нике неболь­шой, но ско­ро все может поменять­ся. Пока что основная проб­лема в цене, которая нес­коль­ко выше, чем у дру­гих типов памяти.


Извлечение прошивки uart nand

Ус­трой­ство FRAM-ячей­ки. Похоже на DRAM, прав­да?

От EEPROM отли­чает­ся фун­дамен­таль­но дру­гим прин­ципом запоми­нания информа­ции: хра­нит­ся не заряд на зат­воре, а знак поляри­зации сег­нето­элек­три­ка. При при­ложе­нии нап­ряжения она меня­ется на про­тиво­полож­ную, что поз­воля­ет читать такую память и писать в нее.

Из‑за нового прин­ципа работы такая память зна­читель­но быс­трее, чем EEPROM, но ее дол­говеч­ность оста­лась прак­тичес­ки неиз­менной.

NOR/NAND Flash

NOR/NAND-флеш‑память — это прос­то EEPROM, соб­ранный в мас­сив. N OR от NAND отли­чает­ся толь­ко спо­собом упа­ков­ки в мас­сив, но это неболь­шое раз­личие ведет к дос­таточ­но силь­ным отли­чиям в такой памяти.


Извлечение прошивки uart nand

NOR быс­трее и надеж­нее, чем NAND, но сто­ит дороже из‑за мень­шей плот­ности ком­понов­ки. N AND же, нап­ротив, дешевый как мусор, но име­ет проб­лемы с надеж­ностью.

NOR- и NAND-память исполь­зует­ся в SSD и вся­ких флеш­ках. Из‑за низ­кой надеж­ности NAND-памяти такие накопи­тели в обя­затель­ном поряд­ке име­ют боль­шой пул запас­ных яче­ек, недос­тупных для обыч­ного исполь­зования, и умный кон­трол­лер, который всем этим хозяй­ством рулит. Дер­жать такой овер­хед в шир­потреб­ных умных муль­тивар­ках неп­рости­тель­но дорого, так что при­меня­ется обыч­но NOR, а NAND оста­ется для поль­зователь­ских накопи­телей, где проб­лемы надеж­ности мож­но перело­жить на поль­зовате­ля, который не дела­ет бэкапы. Хотя нет — даже в дешевых роуте­рах он все чаще при­меня­ется бла­года­ря прог­рам­мным механиз­мам защиты целос­тнос­ти.

Сводная таблица NOR NAND FRAM EEPROM

NOR был бы иде­ален, если бы не его цена, так что рыночек порешал — и теперь у нас всех исполь­зует­ся NAND поч­ти вез­де. Даже во встра­иваемой тех­нике уже поч­ти научи­лись с ним безопас­но работать — кон­троль­ные сум­мы, ECC-коды и резер­вные бло­ки. Кра­сота!

Чтение прошивки

Пом­ни, что память NOR flash идет с завода без битых яче­ек, а у NAND есть допус­тимый про­цент бра­ка, так что, если в NAND вид­ны битые ячей­ки, не спе­ши расс­тра­ивать­ся.


Извлечение прошивки uart nand

Прог­рамма­тор перед чте­нием нуж­но пра­виль­но нас­тро­ить. В час­тнос­ти, надо зас­тавить его читать все, вклю­чая сис­темные стра­ницы в начале и кон­це памяти — они быва­ют край­не важ­ны!

Раз­работ­чики чипа нас­тоятель­но рекомен­дуют раз­работ­чикам устрой­ства исполь­зовать свои чипы в соот­ветс­твии с некото­рыми пра­вила­ми. Но вто­рые воль­ны не под­чинять­ся пер­вым, так что сис­темные стра­ницы порой ока­зыва­ются хра­нили­щем клю­чей шиф­рования или каких‑то дру­гих дан­ных. В общем, читай все — лиш­ним точ­но не будет.

РЕКОМЕНДУЕМ:
Способы защиты микроконтроллера

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

Статья написа­на по мотивам док­лада Демида Узень­кова — спе­циалис­та ком­пании ИНФО­РИОН. Выс­тупле­ние сос­тоялось на кон­ферен­ции RuCTFE 2020. За помощь в под­готов­ке пуб­ликации редак­ция бла­года­рит коман­ду «Ха­кер­дом».

(9 оценок, среднее: 4,33 из 5)

Определяем интерфейсы на контактах

После того как мы разобрались с контактами, нам потребуется определить, какие протоколы работают на отладочных пинах. В этой части статьи мы рассмотрим оборудование, предназначенное для исследования протоколов взаимодействия с нашим девайсом.

Осциллограф

С осциллографами многие уже знакомы. Этот прибор позволяет визуально и программно определить активность на соответствующих пинах. Минус такого решения заключается в высокой стоимости осциллографа. А плюс — в том, что вы получаете полноценное оборудование для определения интерфейсов. К тому же многие дорогие осциллографы имеют функцию логического анализатора.


Извлечение прошивки uart nand

Логический анализатор

Существует несколько конкурирующих логических анализаторов, например DSLogic и Saleae Logic. Сравнительные характеристики этих устройств можно найти в интернете, мы же рассмотрим работу с анализатором Saleae Logic.


Извлечение прошивки uart nand

Стоимость девайса — от 500 долларов (для студентов предусмотрена скидка 50%). Контакты подключаем к исследуемым пинам, включаем устройство в режим прослушивания и наблюдаем примерно следующую картину.


Извлечение прошивки uart nand

Определить протоколы, которые используются на выбранных нами пинах, можно либо визуально, либо программно — для этого в интерфейсе приложения анализатора имеется специальная вкладка Analyzers. В некоторых случаях вам придется подбирать параметры — например, скорость передачи данных.

Мультиметр

При помощи мультиметра можно установить наличие сигнала на определенных пинах — достаточно найти контакты, на которых периодически будет подскакивать напряжение. Это удобно, если на исследуемой вами плате полно пинов, на проверку которых другими способами может уйти много времени.


Извлечение прошивки uart nand

Arduino

Если у вас есть Arduino и, желательно, небольшой экран для него, из этого комплекта вполне можно собрать портативный осциллограф. Как это делать, подскажет Великий Гугль — в интернете можно отыскать готовые проекты подобных приборов.


Извлечение прошивки uart nand

JTAGenum

В некоторых случаях нужно догадаться, какой протокол вероятнее всего используется на том или ином интерфейсе. Для интерфейса JTAG существует специальный проект JTAGenum.

С помощью JTAGenum исследователь может определить, какой пин на изучаемой плате за что отвечает. Для этого достаточно приобрести Arduino, загрузить на него ПО JTAGenum и подключить контакты со 2-го по 11-й к тестируемой плате, после чего запустить сканирование. Пример работы такого устройства показан на следующей иллюстрации.


Извлечение прошивки uart nand

JTAGulator


Извлечение прошивки uart nand

Эта гламурная розовая плата в стиле Hello Kitty предназначена для решения тех же проблем, что и JTAGenum. Преимущества у этой платы, которая называется JTAGulator, следующие:

Кроме того, в настоящее время ведется разработка ПО для применения JTAGulator в роли логического анализатора.

Из минусов стоит отметить только ее высокую стоимость — порядка 175 долларов.

Какой вариант лучше? Об этом подробно рассказано в статье JTAGulator vs. J TAGenum, Tools for Identifying JTAG Pins in IoT Devices. Спойлер: и Arduino, и JTAGulator прекрасно справились со своей задачей.

Корпуса микросхем

Как видишь, с кор­пусами у памяти все пло­хо: помимо показан­ных на кар­тинке вари­антов, мож­но зап­росто вспом­нить еще с десяток, и не факт, что про­изво­дитель не решил исполь­зовать неч­то экс­клю­зив­ное, у чего может вооб­ще не быть наз­вания.

Маркировка

До­пус­тим, тебе повез­ло най­ти чип с памятью. Пер­вым делом нам нуж­но про­читать его мар­киров­ку.


Извлечение прошивки uart nand

Ес­ли мар­киров­ка есть — немал шанс встре­тить ее имен­но в таком фор­мате, как показан на кар­тинке выше. Пер­вые две бук­вы — код вен­дора, потом тип памяти в чипе, потом внут­ренний номер серии — и даль­ше уже чет­кой логики не прос­лежива­ется.

Так как еди­ного стан­дарта нет и не пред­видит­ся, про­изво­дите­ли воль­ны писать на сво­их чипах, что счи­тают нуж­ным. Это порой при­водит к кол­лизи­ям, вро­де того, что пред­став­лено на той же кар­тинке: два чипа раз­ных про­изво­дите­лей, оба 29-й серии, но один NOR, а дру­гой — NAND. Короче, не уга­даешь, и такие чипы при­ходит­ся про­бивать в поис­ковиках, что­бы выяс­нить хоть что‑то.

Типовой дизайн

Ус­трой­ства одно­го сег­мента про­екти­руют­ся очень похожи­ми — это впол­не оче­вид­но. Нап­ример, все бытовые роуте­ры изнутри выг­лядят поч­ти оди­нако­во. Та же ситу­ация на рын­ке устрой­ств SCADA, у которых свои каноны, но они прос­лежива­ются вез­де без осо­бых изме­нений.

Я рас­ска­жу о пяти катего­риях устрой­ств, с которы­ми тебе, воз­можно, при­дет­ся иметь дело:

Са­мо собой, мир кру­тит­ся не толь­ко вок­руг смар­тфо­нов да компь­юте­ров, но с ними у тебя шанс встре­тить­ся куда боль­ше, чем с каким‑нибудь кон­трол­лером для управле­ния ракет­ными дви­гате­лями. Поэто­му давай рас­смот­рим типовое устрой­ство толь­ко этих пяти катего­рий девай­сов.

Ус­трой­ство обыч­ных ПК под­разуме­вает модуль­ность, то есть поч­ти все детали мож­но лег­ко вынуть. Из‑за это­го на мат­пла­те из эле­мен­тов памяти есть толь­ко флеш­ка с BIOS/UEFI. При этом BIOS обыч­но сидит на мик­росхе­мах 24-й серии — I2C EEPROM, а в новых моделях сто­ит 25-я серия SPI NOR flash с UEFI.


Извлечение прошивки uart nand

Ес­ли же уста­нов­лен взрос­лый инте­лов­ский про­цес­сор с под­дер­жкой ME — на пла­те мож­но най­ти вто­рую такую же флеш­ку, но с про­шив­кой для ME. Это дела­ется в целях безопас­ности: находя­щуюся на физичес­ки отдель­ной мик­росхе­ме про­шив­ку заразить или под­менить слож­нее.

Intel Management Engine — это осо­бая сис­тема для UEFI-сов­мести­мых ПК на базе про­цес­соров Intel. Она име­ет свою выделен­ную мик­росхе­му памяти и собс­твен­ный про­цес­сор, а так­же собс­твен­ные каналы дос­тупа к сетевым адап­терам и основной опе­ратив­ной памяти. Может без огра­ниче­ний вза­имо­дей­ство­вать поч­ти с чем угод­но в сос­таве компь­юте­ра, что очень силь­но повыша­ет тре­бова­ния к ее защите.

Бытовые роутеры

С роуте­рами пот­ребитель­ско­го клас­са все доволь­но прос­то: тут ста­вят память SPI NOR 25-й серии, если тре­бует­ся не боль­ше 8 Мбайт, или NAND-память объ­емом поболь­ше. Изредка мож­но най­ти eMMC, но мне такое пока не попада­лось.


Извлечение прошивки uart nand

Устройства для ответственного применения

Тут все нем­ного слож­нее. Стан­дарты тре­буют стран­ных вещей, поэто­му с боль­шим шан­сом устрой­ства этой катего­рии будут сос­тоять из нес­коль­ких плат, соеди­нен­ных переход­ными интерфей­сами. Будет мно­го раз­ных запоми­нающих устрой­ств, что­бы прос­то прой­ти сер­тифика­цию.


Извлечение прошивки uart nand

Ло­ги обыч­но пишут­ся в EEPROM или FRAM 24-й серии, заг­рузчик лежит на NOR 25-й серии, а все встро­енное ПО кла­дут на NOR 26-й, 29-й серии. N AND исполь­зуют ред­ко, а если исполь­зуют — сра­зу боль­шими мас­сивами с резер­вирова­нием.

IoT

Сей­час понятие IoT слиш­ком рас­тяжимое: по сути, туда мож­но записать вооб­ще все умное домаш­нее и даже не очень домаш­нее. Из‑за это­го память там может быть любая: хоть EEPROM, хоть eMMC — это ког­да NAND с хост‑кон­трол­лером упа­кова­ны в один чип.


Извлечение прошивки uart nand

Смартфоны

В смар­тфо­нах обыч­но все самое передо­вое: тут тебе и eMMC, и eUFS, и даже NVMe SSD, как у Apple. При этом, как ни кру­ти, все эти чипы выг­лядят плюс‑минус оди­нако­во, так что ты их ни с чем не спу­таешь.


Извлечение прошивки uart nand

Осмотр платы устройства

Ес­ли вскры­тие не показа­ло, что паци­ент умер от вскры­тия, я сна­чала осматри­ваю пла­ту в поис­ках пинов отла­доч­ных интерфей­сов — обыч­но это JTAG или UART. Глав­ная проб­лема не в том, что нуж­ные кон­такты могут быть в очень неожи­дан­ных мес­тах, а в том, что обыч­но они отклю­чены. Конеч­но, даже в 2021 году все еще хва­тает уни­кумов, которые отправ­ляют в прод устрой­ства с вклю­чен­ным UART, но количес­тво таковых стре­митель­но пада­ет.


Извлечение прошивки uart nand

Ес­ли тебе не повез­ло — вари­антов нем­ного: или пла­кать в подуш­ку, или искать чип памяти на бор­ту и читать его непос­редс­твен­но.

И вот с этим тебя ожи­дает уйма инте­рес­ного! Думал, нуж­но прос­то вытащить вось­миногую мик­руху в DIP-кор­пусе, похожую на ста­рый чип с BIOS? Как бы не так! Сей­час есть минимум четыре отно­ситель­но широко при­меня­емых вида памяти, и некото­рые из них могут быть похожи друг на дру­га так, что не раз­личишь.

Изучение платы устройства

После вскрытия устройства нас будет интересовать только его электронная плата.

Поиск информации в интернете

Часто на печатной плате устройства пишут ее номер или название, можно нагуглить по ним схему с описанием всех интерфейсов и пропустить сразу несколько этапов тестирования, которые проводятся, чтобы определить протоколы.


Извлечение прошивки uart nand

Ищем информацию о чипах

Кроме названия платы, следует найти и записать наименования всех чипов на ней. После этого нужно погуглить их назначение и поддерживаемые интерфейсы.

На фото ниже показан пример найденной технической спецификации чипа STM32F207: в этом документе приведены подробные описания предназначения каждого из контактов микросхемы.


Извлечение прошивки uart nand

Изучаем разъемы

Если на видном месте платы расположены разъемы, вероятнее всего разработчики девайса предполагали, что они будут как-то задействованы. Нужно помнить, что некоторые из портов устройства могут также использоваться как отладочные.

Так, у многих видеокамер разъем Ethernet используется еще и в режиме Power Over Ethernet (PoE). Если это ваш случай, то советую приобрести специальные разветвители.


Извлечение прошивки uart nand

Кроме того, у некоторых устройств этот порт может использоваться как RS-232, о котором я расскажу чуть позже. Для таких случаев подойдет другой специальный проводок.


Извлечение прошивки uart nand

Обратите внимание: если на плате нашелся подходящий разъем, не факт, что переходник к нему идеально подойдет, ведь есть несколько стандартов распиновки.

Разъемы USB на платах умных устройств встречаются реже, и предназначены они преимущественно для подключения цифровых накопителей. Иногда такой порт может использоваться как отладочный, например на смартфонах с Android.

Разъемы RS-232 чаще всего встречаются на промышленном оборудовании и нужны для решения задач администрирования. Переходники для таких разъемов продаются на каждом углу.


Извлечение прошивки uart nand

Поиск документации

Гуг­лить, думаю, ты и сам уме­ешь, но для поис­ка докумен­тации ко вся­ким экзо­тичес­ким чипам это может быть бес­полез­но. Во‑пер­вых, более эффекти­вен поиск по пер­вым N сим­волам наз­вания мик­росхе­мы. Во‑вто­рых, час­то про­ще най­ти по коду на Aliexpress или дру­гих круп­ных тор­говых пло­щад­ках.

Ес­ли уж любишь Google, поп­робуй поиск по кар­тинкам — там порой мож­но най­ти то, что тек­стом не ищет­ся.

Еще огромные базы чипов есть в ПО для прог­рамма­торов — я исполь­зую ПО ком­пании Elnec. Зачас­тую там даже есть даташи­ты, но слиш­ком на это наде­ять­ся не сто­ит.

И еще одно хорошее мес­то для поис­ков — GitHub. С боль­шим шан­сом там най­дет­ся что‑нибудь по зап­росу в духе «X microcircuit read poc». Даль­ше мож­но выд­рать ссыл­ку на даташит или что‑то еще полез­ное. Мне попада­лись даже скры­тые сер­висные коман­ды для бло­киров­ки/раз­бло­киров­ки чипа, что, конеч­но, очень при­ятно при изу­чении.

Разбираем устройство

Скорее всего, многие читатели решат пропустить эту часть статьи. Именно так я бы и поступил несколько месяцев назад, но оказалось, что в этой теме есть множество нюансов, знание которых может заметно облегчить жизнь начинающему исследователю.

Винты

Чтобы максимально усложнить задачу любителям покопаться в потрохах электронных устройств, их производители напридумывали огромное количество специальных винтов самой причудливой формы.


Извлечение прошивки uart nand

И не зря: в случае чего придется вскрывать устройство другими методами, в результате мы можем повредить плату и добровольно избавить разработчика гаджета от грустной обязанности выполнять гарантийные обязательства. На иллюстрации ниже показан классический пример нераскручиваемого винта.

А вот так выглядит концепт «безопасного» винта Apple.


Извлечение прошивки uart nand

Чтобы быть максимально готовым к подобным сюрпризам, вам нужно заранее закупиться набором отверток с необходимыми переходниками. Не буду рекламировать решения конкретных производителей (тем более, они не платят за это денег), но наборы, специально предназначенные для разборки мобильных устройств, в среднем стоят около шестидесяти баксов.


Извлечение прошивки uart nand

Однако даже самый крутой набор отверток не гарантирует стопроцентного успеха. На практике мне попадались устройства с нормальными винтами, при откручивании которых внутри корпуса ломалась пластмассовая часть с внутренней винтовой резьбой. Поэтому очень важно обращаться с хрупкими девайсами аккуратно, используя отвертки руками, растущими строго из нужного места.

Сторонние материалы на плате

Думаю, вы наверняка в детстве из любопытства разбирали электронику и изучали платы разных устройств. Очень часто на ней обнаруживалась странная черная «клякса» — примерно такая, как на картинке ниже.


Извлечение прошивки uart nand

Она называется «компаунд». Если сказать проще, это отвердевшая полимерная смола с некоторыми добавками. Используется она преимущественно как электроизоляционный материал и иногда может мешать подключиться к определенным контактам на плате. Примем за основу компаунда эпоксидную смолу, как самый популярный тип.

Если вы поищите по форумам советы о том, чем ее убрать, то найдете много разных способов для самых различных случаев. Бессмысленно перечислять их все, подскажу только самый проверенный: нагревать верхние слои смолы и удалять. Это, конечно, не так красиво, как растворение, но зато почти всегда работает!

Кроме того стоит упомянуть, что на китайских платах иногда может встретиться прозрачный клей. Он легко удаляется, поэтому не будем на нем останавливаться.

Защита от вскрытия

На практике другие методы защиты от вскрытия встречаются крайне редко. В специализированной литературе мне попадались упоминания о наличии специальных клипс, после вскрытия которых устройство уже будет нецелесообразно изучать. Так вот, это настолько диковинный способ защиты, что я даже не могу предложить пример такого устройства. Если вам попадалось что-то подобное, обязательно поделитесь своим опытом в комментариях.

Расшифровка имени

Те­перь, ког­да наш­ли нуж­ный чип и про­чита­ли мар­киров­ку, ее нуж­но декоди­ровать. Кста­ти, мар­киров­ка далеко не всег­да чита­ется целиком: часть может быть слу­чай­но или намерен­но скры­та, а то и вов­се под­делана, как любят устра­ивать китай­цы со сво­ими деталя­ми на Али.

Осо­бо круп­ные про­изво­дите­ли могут пре­дос­тавлять на сво­их сай­тах декоде­ры име­ни мик­росхе­мы, но поч­ти ник­то так не дела­ет.

Пох­валь­ный при­мер — про­изво­дитель Micron, который дал на сай­те внят­ную инс­трук­цию и фор­му для получе­ния даташи­та на свои мик­росхе­мы.


Извлечение прошивки uart nand

Ес­ли же декоде­ра нет, при­дет­ся вык­ручивать­ся. Мож­но поп­робовать разоб­рать­ся по схе­ме на скрин­шоте ниже, но, естес­твен­но, безо вся­ких гаран­тий успе­ха. Воз­можно, даже луч­ше сра­зу идти к япон­цам — они очень любят неадек­ватно запутан­ные наз­вания без извес­тной логики. Она, конеч­но, есть, но пока что ник­то ее не смог понять.


Извлечение прошивки uart nand

Взаимодействие с интерфейсами

UART — один из наиболее часто встречающихся отладочных протоколов. В зависимости от платы и прошивки устройства он позволяет общаться с загрузчиком и терминалом операционной системы.

Протокол использует минимум два обязательных пина: RX — приемник, TX — передатчик — и два необязательных: GND — земля, VCC — напряжение. Чаще всего на плате потребуется искать четыре сгруппированных пина.

Для работы с Serial-консолью устройства понадобится соответствующая программа. В Unix-based-системах лучше всего использовать minicom, а в Windows — Realterm.


Извлечение прошивки uart nand

После загрузки программы вам потребуется вручную подключать пины RX, и если не получится, то еще и GND, пока на экране при включении устройства не появится периодически прерывающийся (это важно!) поток байтов. Затем остается лишь подобрать частоту передачи данных, чтобы на экране вместо потока нечитабельных символов появились читабельные. Самые популярные частоты приведены в следующей таблице (первая колонка).

Подобрать частоту можно вручную, переключая значения в самой программе, а можно с использованием популярного скрипта на питоне baudrate.py.

Для работы с протоколом UART используются специальные переходники, например позволяющие подключиться к разъему USB.


Извлечение прошивки uart nand

Переходник с USB на COM-порт тоже можно приспособить в качестве переходника USB — UART, достаточно использовать только контакты RD, TD и Ground.

Вот как выглядит переходник для UART, переделанный из переходника USB — RS-232.


Извлечение прошивки uart nand

А еще в качестве переходника UART — USB можно использовать Arduino Uno. Для этого следует закоротить контакты Reset и GND.


Извлечение прошивки uart nand

Как вариант, можно приобрести плату Bus Pirate, которая позволяет решать целый спектр задач, но сейчас мы поговорим о ее использовании в качестве переходника USB — TTL.


Извлечение прошивки uart nand

Для перевода платы в режим переходника потребуется подключить ее к компьютеру и, используя Realterm/minicom (о которых я рассказывал ранее) на частоте 115 200 начать общаться с командной строкой устройства.


Извлечение прошивки uart nand

Не будем вдаваться в подробности настройки этого девайса. Листинг общения во время переключения платы в режим переходника предоставлен на картинке ниже.


Извлечение прошивки uart nand

А теперь настало время снова вспомнить про девайс под названием JTAGulator. Хоть изначально он создавался не для этого, JTAGulator все же можно приспособить в качестве переходника USB — TTL. Для этого аналогично Bus Pirate требуется подключиться к консоли управления устройством и вбить команды, показанные на следующей иллюстрации.


Извлечение прошивки uart nand

Перед тем как приступить к творческим экспериментам, проверьте все пины мультиметром на отсутствие высокого напряжения, иначе велик шанс спалить такие устройства, как Arduino и USB — UART. На удивление, на моей практике именно переходники USB — Serial показали себя с лучшей стороны и ни разу не сгорели во время тестирования плат.

JTAG — это название рабочей группы по разработке стандарта IEEE 1449, но многие ассоциируют его с названием отладочного интерфейса. Доступ к этому интерфейсу в большинстве случаев дает нам неограниченный контроль над устройством, например возможность сдампить его прошивку. Чаще всего для работы с JTAG используется система отладки для микроконтроллеров — OpenOCD.

У этого интерфейса есть четыре обязательных рабочих пина: TDI (сигнал данных на вход), TDO (сигнал данных на выход), TCK (тактовая частота), TMS (выбор режима тестирования) — и один необязательный — TRST (TestReset).


Извлечение прошивки uart nand

Чаще всего контакты на плате группируются с другими в одну-две дорожки, поэтому поиск нужных пинов осложняется. Способы определить, за что отвечает каждый порт, указывались ранее, а сейчас мы рассмотрим примеры общения с устройствами по интерфейсу JTAG.

Сергей Поделкин уже подробно описал использование Arduino в качестве программатора для некоторых чипов, поэтому настоятельно советую вам ознакомиться с его статьей «Превращаем Arduino в полноценный AVRISP программатор». От себя добавлю, что проектов для Arduino существует множество, и если вам вдруг понадобился программатор для определенной архитектуры, то ищите информацию в интернете — скорее всего, кто-то уже его реализовал.

Если мы уже знаем, за что отвечает каждый пин, и у нас есть плата JTAGulator, можно переключить ее в режим совместимости с OpenOCD и заставить работать как переходник.

Один из дешевых и многофункциональных программаторов, позволяющих работать с большим количеством различных процессоров и совместимых с OpenOCD, называется J-Link. Обойдется он примерно в 5000 рублей.


Извлечение прошивки uart nand

Извлечение прошивки uart nand

Напоследок стоит упомянуть о возможности работы с интерфейсом JTAG с использованием платы Bus Pirate и ПО OpenOCD. Подробно настройка устройства описана в статье Gonemad’s Bus Pirate/OpenOCD walk through.

I2C

Этот интерфейс чаще всего используется для общения с памятью EEPROM. Для подключения минимально требуется две дорожки. Рассмотрим способы, позволяющие прослушивать общение.

Активность I2C можно мониторить при помощи Arduino — есть соответствующий проект на GitHub.

Подробный туториал по использованию Bus Pirate можно посмотреть в блоге Digitalpeer.

Существует еще девайс под названием I2CDriver: он предназначен для взаимодействия компьютера с I2C-интерфейсом по каналу USB. Он позволяет не только управлять устройством, но и прослушивать или декодировать его трафик. Сам я пока это приспособление не использовал, но выглядит оно крайне интересно.


Извлечение прошивки uart nand

SPI

Хоть и нечасто приходится работать с этим интерфейсом, но рассмотреть его надо.

SPI — интерфейс для последовательного обмена данными между микросхемами. Работает он по принципу Master — Slave и использует четыре сигнала: MOSI (от ведущего к ведомому), MISO (от ведомого к ведущему), SCK (тактовый сигнал) и CS (выбор ведомого).

Как всегда, начнем мы с Arduino. Проект под названием spi-dump позволяет использовать этот компьютер для дампа прошивки с SPI EEPROM. Много об этом писать не буду, на GitHub лежит хороший туториал по использованию этой технологии, написанный ее автором.


Извлечение прошивки uart nand

У Bus Pirate тоже есть функция SPI-сниффера. Настраивается так же, как и I2C.


Извлечение прошивки uart nand

SWD

Скажу сразу: ни разу не встречал этот интерфейс в устройствах IoT, но, поскольку он широко применяется разработчиками микроконтроллеров, то, вероятнее всего, в скором времени появится и в составе умных устройств. Интерфейс SWD использует тот же протокол, что и JTAG. Для работы ему требуется только три провода: DIO (input-output), CLK и GND.

Пример работы с SWD

После того как мы рассмотрели работу с интерфейсами, разберемся, чем же нам это поможет при тестировании умного девайса.

Извлечение прошивки камеры

Для эксперимента я использовал камеру с незатейливым названием WiFi Smart Camera. Это очень симпатичный девайс, внешне похожий на гибрид фена с ночником.


Извлечение прошивки uart nand

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


Извлечение прошивки uart nand

В первую очередь изучим название платы.


Извлечение прошивки uart nand

Теперь посмотрим на нее с другой стороны.


Извлечение прошивки uart nand

Наименование платы видно на первой фотографии: IPG-RM-BLK510-0062-S. Гуглим.


Извлечение прошивки uart nand

Сайт 121.40.191.139:81 на момент написания статьи был отключен, поэтому воспользуемся кешем Google.


Извлечение прошивки uart nand

В первой колонке таблицы перечислены названия контактных площадок на плате, во второй — номера контактов, в третьей и четвертой — их описание и предназначение.

Быстро просматриваем табличку в поисках интересных интерфейсов и обнаруживаем, что у площадки J10 вынесены порты UART.


Извлечение прошивки uart nand

Находим ее на плате.


Извлечение прошивки uart nand

Количество пинов совпадает, нумерация есть. Дело за малым! Подключаем Arduino к пинам GND (земля), UART0_TXD (отправка) и UART0_RXD (прием).


Извлечение прошивки uart nand

Включаем программу для работы с Serial-устройствами: в моем случае это IONinja, перезапускаем устройство и зажимаем Ctrl + C на клавиатуре для входа в консоль загрузчика U-Boot.


Извлечение прошивки uart nand

Получить рутовую консоль не удалось, так что перейдем к следующему пункту. У нас есть возможность использовать команды cramfsls и cramfsload. Попробуем сдампить файлик с именами пользователей и паролями.


Извлечение прошивки uart nand

Вот мы и получили первый зашитый пароль в камере:

На одном из форумов находим уже декодированный хеш.


Извлечение прошивки uart nand

Итак, мы получили пароль root:
. С этим разобрались, вернемся к первой фотографии платы.


Извлечение прошивки uart nand

Красным отмечен чип памяти EEPROM с контактной площадкой SOP8. На нем написано его название: 25L6433F. Погуглив, определяем, что общение идет по SPI, а также находим распиновку микросхемы.


Извлечение прошивки uart nand

Считать содержимое чипа напрямую с платы не получилось. Придется выпаивать.


Извлечение прошивки uart nand

Подключаем извлеченную при помощи паяльника микросхему к программатору.


Извлечение прошивки uart nand

Записываем дамп, припаиваем чип обратно и удостоверимся, что в сохраненном файле есть то, что нам требуется. Для этого воспользуемся утилитой binwalk.


Извлечение прошивки uart nand

Посмотрим, что получилось распаковать.


Извлечение прошивки uart nand

Вот мы и получили все файлы с этого устройства!

Контакты микросхем

Для работы с аппаратными интерфейсами требуется сначала определить их наличие и расположение на микросхеме. Для этого рассмотрим восемь самых распространенных вариантов их размещения.

Внимательно посмотрите на следующую фотографию платы.


Извлечение прошивки uart nand

Видите вот эти контакты?


Извлечение прошивки uart nand

Почти со стопроцентной уверенностью утверждаю, что какие-то из них будут отвечать за отладку устройства по определенному интерфейсу, а может, даже и нескольким. Для подключения к этим пинам придется воспользоваться паяльником.

Также у некоторых устройств подобные контакты могут быть хорошо спрятаны.


Извлечение прошивки uart nand

А вот другой пример. Посмотрите на картинку.


Извлечение прошивки uart nand

Некоторые контакты представляют собой сквозные отверстия с металлизацией. Для подключения к ним можно использовать стандартные пины, например для Arduino UNO. Но нужно учитывать ширину штырьков, иначе есть шанс повредить плату при подключении.

А вот еще один пример.


Извлечение прошивки uart nand

Если пины от Arduino не подойдут, можно использовать следующий метод. Берем провод с разъемом, показанным на следующем рисунке, — похожие разъемы часто используются для подключения индикаторов и управляющих кнопок к материнской плате компьютера. Удаляем пластмассовую оболочку, затем корректируем размер клеммы плоскогубцами и оборачиваем ее изолентой, чтобы избежать контакта с соседними пинами.


Извлечение прошивки uart nand

Извлечение прошивки uart nand

У устройства, показанного на следующей иллюстрации, отладочный разъем был смонтирован отдельно для удобства подключения. Лучше всего тут воспользоваться паяльником и вывести все нужные контакты на отдельные проводки.


Извлечение прошивки uart nand

Рассмотрим еще один пример.


Извлечение прошивки uart nand

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


Извлечение прошивки uart nand

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

Некоторые пины могут быть спрятаны припойным покрытием — такой вариант показан на следующей картинке. Но опять же подобное встречается крайне редко.


Извлечение прошивки uart nand

Исследователь Деннис Гис (Dennis Giese) на DEFCON 26 рассказывал (PDF) про безопасность устройств Xiaomi. Во время изучения платы одного из гаджетов производства этой компании он столкнулся с тем, что контактная площадка чипов находилось точно под ними, из-за чего не было никакой возможности подключиться к ним без пайки.


Извлечение прошивки uart nand

Но позже он заметил на плате контактные дорожки, идущие к другому чипу. После этого Деннису потребовалось немного времени для поиска datasheet этой микросхемы.


Извлечение прошивки uart nand

Таким образом он смог определить, что эти контактные дорожки отвечают за общение чипа с RAM. Осталось лишь подключиться к дорожкам и сдампить прошивку.


Извлечение прошивки uart nand

В завершение

На этом статья, посвященная дампу прошивки и доступ к консоли управления устройства, заканчивается. Многое в ней не было затронуто, а по некоторым из ее частей можно написать отдельные статьи для подробного рассмотрения всевозможных случаев. Тем не менее, надеюсь, этот материал поможет вам изучить внутреннее устройство окружающих нас умных гаджетов.

(16 оценок, среднее: 5,00 из 5)

Полезная нагрузка

Используя обнаруженные ранее интерфейсы, мы постараемся получить исчерпывающую информацию о устройстве — версию ПО, исходники, доступ в консоль управления и прочее.

Посредством UART чаще всего мы сможем общаться с загрузчиком операционной системы. Так как возможности интерфейса командной строки загрузчика ограничиваются требованиями разработчиков платы, мы не сможем изучить все случаи, поэтому будут рассмотрены два отдельных варианта с разными загрузчиками: Universal Boot Loader (U-Boot) и Common Firmware Environment (CFE).

Чтобы подключиться к загрузчикам, мы воспользуемся одной из программ для работы с Serial-устройствами — Minicom или Realterm. Частоту передачи данных мы уже определили на предыдущих этапах исследования. Также для активации консоли может потребоваться зажать Ctrl + C или другие комбинации клавиш, поэтому придется следить за сообщениями, появляющимися на экране.

Если вы используете U-Boot, после подключения к консоли можно посмотреть список доступных команд, набрав на клавиатуре волшебное слово help.


Извлечение прошивки uart nand

В этом примере нас интересуют три команды:
,
и
. Используя команду cramfsls, мы можем получить список файлов в файловой системе устройства.


Извлечение прошивки uart nand

Далее выбираем нужный нам файл (пусть будет /etc/hosts) и считываем его командой
.


Извлечение прошивки uart nand

В ответ мы получим сообщение, что по адресу
во флеш-памяти записан наш файл. Прочитаем его командой
(memory display).


Извлечение прошивки uart nand

В дальнейшем этот процесс можно автоматизировать, например при помощи библиотеки PySerial.

В случае с загрузчиком CFE меняется только последовательность вводимых команд.

Для начала посмотрим список подключенных устройств с помощью команды
.


Извлечение прошивки uart nand

Попробуем прочитать 100 байт с устройства nflash1.nvram.


Извлечение прошивки uart nand

После этого нам остается лишь прочитать флеш-память по адресу
.


Извлечение прошивки uart nand

И, аналогично случаю с U-Boot, можно автоматизировать процесс чтения памяти при помощи PySerial.

В зависимости от конфигурации загрузчика иногда вместо того, чтобы тратить время на получение дампа памяти по UART (бывало, 15 Мбайт скачивались всю ночь), можно отправить их по протоколу TFTP или записать на microSD.

При работе с JTAG очень важно определиться, какое ПО может взаимодействовать с этим интерфейсом. Сейчас я расскажу, как получить дамп прошивки, используя сборку OpenOCD + Bus Pirate.


Извлечение прошивки uart nand

Нам потребуется программа OpenOCD и настроенная конфигурация для Bus Pirate, которая доступна в репозитории Proxmark.

Для начала запустим OpenOCD с нашим конфигом.


Извлечение прошивки uart nand

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


Извлечение прошивки uart nand

И в этой же директории мы обнаружим файлик backup.bin с прошивкой устройства.


Извлечение прошивки uart nand

Процесс занял всего 246 секунд, и прошивка уже у нас!

Преимущественно нас будет интересовать использование этих интерфейсов у чипов энергонезависимой памяти EEPROM. Отмечу сразу, что Arduino — не лучшее оборудование для работы с памятью, но считаю, что использовать его все-таки можно.

Для Arduino имеется как минимум два проекта по дампу прошивки чипов I2C/SPI: arduino-i2c-read-eeprom и spi-dump.

Не советую пользоваться этими разработками новичкам, так как при некорректном подключении устройства к пинам можно запросто его сжечь.


Извлечение прошивки uart nand

Отдельно хочу рассказать о программаторе tl866plus, который может работать с EPROM, EEPROM, FLASH, SPI, I2C,93Cxx, ICSP и другими чипами. По сравнению с другим аналогичным оборудованием стоит он копейки.


Извлечение прошивки uart nand

ПО для tl866plus есть только под Windows, но, если вы используете другую ОС, оно хорошо заработает в виртуалке, и проблем с пробросом устройства быть не должно. Также для этого программатора есть наборы переходников, позволяющих подключать к нему разные чипы.


Извлечение прошивки uart nand

Мы рассмотрим считывание прошивки с JTAGulator без пайки, с использованием прищепки для SOP8.


Извлечение прошивки uart nand

Сразу оговорюсь: во время работы JTAGulator находился в ждущем режиме и был запитан по USB, поскольку программатор не справлялся с обеспечением питания для всей платы устройства. Чтобы девайс не проявлял активность в процессе дампа прошивки, лучше всего зажать на чипе пин Reset.

Начнем с запуска ПО для работы с TL866 — Xpro. Ниже показан скриншот интерфейса программы.


Извлечение прошивки uart nand

На фотографии ниже отмечен чип памяти, смонтированный на плате JTAGulator, — у меня это 24LC5121.


Извлечение прошивки uart nand

Выбираем его в программе.


Извлечение прошивки uart nand

Далее подключаем к памяти клипсу зажима (как на фото).


Извлечение прошивки uart nand

Нажимаем на кнопку Chip read и получаем дамп прошивки JTAGulator.


Извлечение прошивки uart nand

Получение root-консоли

Если у вас по какой-то причине не получилось сдампить прошивку, можно попробовать получить доступ к админской консоли управления по интерфейсу UART.

Аргументы запуска

И в загрузчике U-Boot, и в CFE есть возможность как считывать, так и записывать глобальные переменные с помощью команд
и
.

Для начала посмотрим, какие переменные были установлены разработчиками.


Извлечение прошивки uart nand

Нас должна заинтересовать переменная аргументов запуска bootargs:

Для получения рутового доступа можно попробовать дописать в аргументы запуска путь до Bash/BusyBox, чтобы обеспечить автозапуск рутовой консоли при старте системы. Для этого в консоль требуется ввести одну из следующих команд:

= /==/=///= /==/=///= /==/=///=/

Этот метод срабатывает нечасто. Советую посмотреть презентацию компании Synack на DEFCON 23, где были протестированы четырнадцать устройств и к двенадцати из них получены рутовые консоли именно таким методом.

Подмена прошивки

Подменить прошивку устройства с помощью TFTP можно только при наличии порта Ethernet. В переменных окружения потребуется ввести команду
и указать настройки сети.


Извлечение прошивки uart nand

Извлечение прошивки uart nand

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

Другой метод заключается в сохранении прошивки на SD-карточку с последующей ее загрузкой. Для этого можно использовать команды
и
.

Команда
нужна для инициализации карточки, а
— для загрузки файла с карточки во флеш-память. Подробнее эта процедура описана в вики OpenMoko.

Используя команду
(memory write), вы можете записывать байты напрямую во флеш-память. Но этот процесс требует автоматизации, поскольку запись в случае разных значений байтов будет идти со скоростью четыре байта за один цикл выполнения команды
. Синтаксис команды имеет следующий вид.


Извлечение прошивки uart nand

Ниже показан пример использования этой команды.


Извлечение прошивки uart nand

Метод швейной иглы

Этому способу было посвящено выступление «pin2pwn — How to Root anEmbedded Linux Box with a Sewing Needle» на конференции DEFCON 24.

Суть хака заключалась в том, чтобы закоротить соответствующие пины на чтение во время загрузки девайса и тем самым вызвать исключение у скрипта автозагрузки, которое выкинет нас в рутовую консоль.


Извлечение прошивки uart nand

Внимание! Есть шанс сжечь память устройства, так что используйте этот метод осторожно.

На этой радостной ноте с теорией мы, пожалуй, закончим и перейдем к практике. Нам предстоит решить увлекательную задачу: извлечь прошивку из IP-камеры. Не переключайтесь.

Подготовка к чтению прошивки

Пос­ле выпай­ки ни в коем слу­чае нель­зя устра­ивать мик­росхе­ме тем­ператур­ные испы­тания: пусть полежит и осты­нет сама, а не в спир­те — так шан­сы сох­ранить работос­пособ­ность куда выше. Даль­ше нуж­но про­верить, все ли лап­ки чипа находят­ся в одной плос­кости и не обра­зова­лись ли от при­поя перемыч­ки меж­ду нож­ками. Их нуж­но убрать, что­бы не спа­лить прог­рамма­тор, не име­ющий защиты от такого, и сам чип тоже.


Извлечение прошивки uart nand

С BGA нуж­но убрать ста­рый при­пой и нанес­ти новые шарики. Ког­да чип очи­щен и под­готов­лен к чте­нию, не взду­май пихать его в прог­рамма­тор с при­жимом пря­мо в чип — велик шанс прос­то раз­давить его!

Оцените статью
Huawei Devices
Добавить комментарий