Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
книги хакеры / практический хакинг.pdf
Скачиваний:
23
Добавлен:
19.04.2024
Размер:
31.35 Mб
Скачать

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

дачи–9600,38400,19200,57600 и 115200; каждую из них скрипт Хеф-

 

 

 

 

 

m

 

w Click

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

фнера проверяет по умолчанию.

 

w

 

df-x chan

 

o

 

 

.

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

e

 

JTAG и SWD

Как и UART, интерфейсы JTAG и SWD на встроенных устройствах IoT могут поспособствовать перехвату контроля над устройством. В этом разделе мы рассмотрим основы этих интерфейсов и способы взаи- модействия с ними. В разделе «Взлом устройства с помощью UART и SWD» будет приведен подробный пример взаимодействия с SWD.

JTAG

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

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

Команды граничного сканирования

Стандарт JTAG определяет специальные команды для проведения граничного сканирования, включая следующие:

zzBYPASS–позволяеттестировать конкретный чип без накладных расходов на прохождение через другие чипы;

zzSAMPLE/PRELOAD – берет образец данных, поступающих на устройство и выходящих из него, когда оно находится в нор- мальном рабочем режиме;

zzEXTEST – устанавливает и считывает состояния контактов.

Устройство должно поддерживать эти команды, чтобы считаться JTAG-совместимым. Устройства могут поддерживать дополнитель- ные команды, такие как IDCODE (для идентификации устройства), INTEST (для внутреннего тестирования устройства) и др. Вы можете встретитьэтиинструкции,когдаиспользуетеинструменттипаJTAGu-

Уязвимости портов UART,JTAG и SWD  199

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

lator (см. раздел «Идентификация контактов JTAG») для идентифика-

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

 

w Click

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

ции контактов JTAG.

 

w

 

df-x chan

 

o

 

 

.

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

e

 

Порттестового доступа

Граничное сканирование включает тесты четырехпроводного порта тестовогодоступа(TAP)–портаобщегоназначения,которыйобеспе- чивает доступ к функциям поддержки тестирования JTAG, встроен- ным в компонент. Он использует 16-ступенчатый конечный автомат, который переходит из состояния в состояние. Обратите внимание, что JTAG не определяет какой-либо протокол для данных, поступаю- щих в микросхему или из нее.

TAP использует следующие пять сигналов:

1)вход тестовых тактовых импульсов (Test clock input, TCK).

TCK – это тактовые импульсы, которые определяют, как часто контроллер TAP будет выполнять одно действие (другими сло- вами, переходить к следующему состоянию в конечном устрой- стве).Тактовая частота не указана в стандарте JTAG.Устройство, выполняющее тест JTAG, может определить ее значение;

2)вход выбора тестового режима (Test mode select, TMS). TMS

управляет конечным устройством. На каждом тактовом им- пульсе контроллер JTAG TAP устройства проверяет напряжение на выводе TMS. Если напряжение ниже определенного порога, сигнал считается низким и интерпретируется как 0; если напря- жение выше определенного порога, сигнал считается высоким и интерпретируется как 1;

3)вход тестовых данных (Test data input, TDI). Это вывод, который отправляет данные в микросхему через ячейки сканирования. Каждый поставщик отвечает за определение протокола связи через этот вывод, потому что JTAG этого не определяет. Сигнал, представленный в TDI, дискретизируется по нарастающему фронту TCK;

4)выход тестовых данных (Test data output, TDO). TDO – это вы-

вод,через который поступаютданные из микросхемы.Согласно стандарту, изменения в состоянии сигнала, передаваемого че- рез TDO,должны происходитьтолько на заднем фронте TCK;

5)вход тестового сброса (Test reset input, TRST). Дополнительный

TRST сбрасываетконечное состояние в заведомо исправное.Ак- тивен на низком уровне (0). В качестве альтернативы, если TMS удерживается на 1 в течение пяти последовательных тактовых циклов, вызывает сброс, так же как вывод TRST; поэтому TRST является необязательным.

Как работает SWD

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

200  Глава 7

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

редьдлятестирования микросхем и плат,SWD является протоколом,

 

 

 

 

 

m

w Click

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

разработанным специально для отладки ARM. Учитывая широкоеdf-x chan

.c

 

 

.

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

e

 

распространение процессоров ARM в мире интернета вещей, SWD приобретает все большую значимость. Если вы найдете интерфейс SWD,выпочтивсегда можетеполучитьполныйконтрольнад устрой- ством.

Интерфейс SWD требует двух выводов: двунаправленного сигнала SWDIO, который является эквивалентом выводов TDI, TDO и такто- вых импульсов JTAG, и SWCLK, который является эквивалентом TCK в JTAG. Многие устройства поддерживают Serial Wire или JTAG Debug Port (SWJ-DP), комбинированный интерфейс JTAG и SWD, который позволяет подключать зонд SWD или JTAG к целевому устройству.

Аппаратные средства для взаимодействия с JTAG и SWD

Разнообразные инструменты позволяют нам обмениваться данными с JTAG и SWD. Популярные инструменты включают в себя микросхе- му Bus Blaster FT2232H, а также любые инструменты с микросхемой

FT232H, такие как коммутационная плата Adafruit FT232H, Shikra

или Attify Badge. Bus Pirate также может поддерживать JTAG, если вы загрузите в него специальную прошивку, но мы не рекомендуем ис- пользовать эту функцию, поскольку она может быть нестабильной. Black Magic Probe, специализированный инструмент для взлома JTAG и SWD, имеет встроенную поддержку GNU Debugger (GDB), которая полезна,поскольку вам не потребуютсядополнительные программы,

такие как Open On-Chip Debugger (OpenOCD) (см.далее раздел «Уста-

новка OpenOCD»). Профессиональный инструмент отладки Segger J-Link Debug Probe поддерживает JTAG, SWD и даже SPI, но поставля-

ется с проприетарным программным обеспечением. Если вы хотите работать только с SWD, можно использовать такой инструмент, как программатор ST-Link (см. ниже раздел «Взлом устройства с помо-

щью UART и SWD»).

Дополнительные инструменты, их описания и полезные ссылки приводятся в разделе «Инструменты для взлома интернета вещей».

Идентификация контактов JTAG

Иногданапечатнойплатеестьмаркировка,указывающаярасположе- ние разъема JTAG (рис. 7.6). Но в большинстве случаев вам придется самостоятельно найти разъем, а также выяснить, какие выводы соот- ветствуют четырем сигналам (TDI , TDO, TCK и TMS).

Вы можете использовать несколько подходов для идентификации контактов JTAG на целевом устройстве. Самый быстрый, но самый дорогой способ обнаружения портов JTAG – использовать JTAGula- tor, устройство, созданное специально для этой цели (хотя оно так- же может определять распиновку UART). Инструмент, показанный на рис. 7.7, имеет 24 канала, которые можно подключить к контактам платы. Он выполняет сканирование прямым перебором (брутфорс),

Уязвимости портов UART,JTAG и SWD  201

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

выдавая команды граничного сканирования IDCODE и BYPASS для

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

w Click

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

df-x chan

 

o

 

каждого сочетания контактов, и ожидает ответа. При получении от-

.

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

e

 

вета он отображает канал, соответствующий каждому сигналу JTAG, позволяя идентифицировать распиновку JTAG.

Рис.7.6.Иногда заголовок JTAG четко обозначен на плате,как в этом мобильном платежном терминале (Point of Sales,POS),где помечены даже отдельные контакты JTAG (TMS,TDO,TDI,TCK)

Рис.7.7.JTAGulator (http://www.grandideastudio.com/jtagulator/) может помочь идентифицировать контакты JTAG на целевом устройстве

Чтобы использовать JTAGulator, подключите его к компьютеру с по- мощьюUSB-кабеля,азатемсоединитесьснимчерезпоследовательный порт (например, с помощью утилиты screen в Linux). Пример взаимо- действия через последовательный порт будет показан ниже, в разделе «Подключение USB к последовательному адаптеру».Вы можете посмо- треть, как создатель JTAGulator Джо Гранд (Joe Grand) демонстрирует свою разработку: https://www.youtube.com/watch?v=uVIsbXzQOIU/.

202  Глава 7