Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
книги хакеры / практический хакинг.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

 

 

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

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

 

w Click

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

устройств FTDI и инструмента Bus Pirate.

 

w

 

df-x chan

 

o

 

 

.

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

e

 

Чтобы узнать больше об OpenOCD, обратитесь к подробному руко-

водству пользователя: http://openocd.org/doc/html/index.html.

Установка отладчика GNU Debugger

GDB – портативный отладчик, работающий в Unix-подобных систе- мах.Он поддерживаетмногие целевые процессоры и языки програм- мирования. Мы будем использовать GDB для удаленного отслежива- ния и изменения выполнения целевой программы.

В Ubuntu потребуется установить оригинальные пакеты gdb и gdb-multiarch, которые расширяют поддержку GDB для нескольких целевых архитектур, включая ARM (архитектура в основе Black Pill). Вы можете сделать это, введя в терминал команду:

$ sudo apt install gdb gdb-multiarch

Кодирование целевой программы на Arduino

Теперь напишем на Arduino программу,которую мы загрузим в Black Pill и попытаемся взломать. В реальном тесте у вас может не быть доступа к исходному коду устройства, но мы показываем его вам по двум причинам. Во-первых, вы узнаете, как код Arduino переводится в двоичный файл, который можно загрузить на устройство. Во-вто- рых, когда выполняется отладка с помощью OpenOCD и GDB, вы уви- дите, как код ассемблера соответствует исходному коду.

Программа (листинг 7.1) использует последовательный интерфейс для отправки и получения данных. Он имитирует процесс аутенти- фикации,проверяяпароль.Еслиполученправильныйпарольотполь- зователя, то выводится сообщение ACCESS GRANTED («доступ пре- доставлен»). В противном случае пользователю снова предлагается войти в систему.

Листинг 7.1. Программа последовательной связи в Arduino для микросхемы

STM32F103

const byte bufsiz = 32; char buf[bufsiz];

boolean new_data = false; boolean start = true;

void setup() { delay(3000); Serial1.begin(9600);

}

void loop() {

if (start == true) { Serial1.print("Login: ");

208  Глава 7

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

to

 

 

 

 

 

 

start = false;

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

m

w Click

 

 

 

 

e

}

 

.

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

 

 

p

df

 

 

 

g

.c

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

n

 

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

recv_data();

 

 

 

 

 

 

 

 

 

 

 

 

if (new_data == true) validate();

}

void recv_data() { static byte i = 0; static char last_char; char end1 = '\n'; char end2 = '\r'; char rc;

while (Serial1.available() > 0 && new_data == false) { rc = Serial1.read();

// пропускаем следующий символ, если предыдущий был \r или \n и текущий \r или \n if ((rc == end1 || rc == end2) && (last_char == end2 || last_char == end1))

return; last_char = rc;

if (rc != end1 && rc != end2) { buf[i++] = rc;

if (i >= bufsiz) i = bufsiz - 1;

}else {

buf[i] = '\0'; // terminate the string i = 0;

new_data = true;

}

}

}

void validate() { Serial1.println(buf); new_data = false;

if (strcmp(buf, "sock-raw.org") == 0) Serial1.println("ACCESS GRANTED");

else {

Serial1.println("Access Denied."); Serial1.print("Login: ");

}

}

 

 

 

 

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

 

 

 

 

 

-x cha

 

 

 

 

Начнем с определения четырех глобальных переменных . Пере- менная bufsiz содержит количество байтов для символьного массива buf,вкоторомхранятсябайты,поступающиечерезпоследовательный порт от пользователя или устройства,взаимодействующего с портом. Переменная new_data – это логическое значение, которое становится истинным каждый раз,когда основной цикл программы получаетно- вую строку последовательных данных. Логическая переменная start истинна только на первой итерации основного цикла, поэтому она выводит первое приглашение «Login».

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

 

 

 

 

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

 

 

Функция setup() является встроенной в функции Arduino, кото-

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

w Click

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

df-x chan

 

o

 

рая выполняется один раз при инициализации программы. Внутри­

.

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

e

 

этой функции мы инициализируем последовательный интерфейс (Serial1.begin) со скоростью 9600 бит в секунду.Обратите внимание, что Serial1 отличается от Serial, Serial2 и Serial3 – все они соответ- ствуют разным контактам UART на Black Pill. Объект Serial1 соответ- ствует контактам A9 и A10.

Функция loop() – еще одна встроенная функция Arduino, кото- рая автоматически вызывается после setup(), зацикливается и вы- полняет основную программу. Она постоянно вызывает функцию recv_data(),которая отвечаетза получение и проверкуданных из по- следовательного порта. Когда программа завершила получение всех байтов (это происходит, когда new_data принимает значение true), loop() вызывает функцию validate(),которая проверяет,составляют ли полученные байты правильную парольную фразу.

Функция recv_data() начинается с определения двух статиче- ских переменных (что означает, что их значение будет сохраняться между каждым вызовом этой функции): i для итерации через массив buf и last_char для хранения последнего символа, который мы про- читали из последовательного порта. Цикл while проверяет, есть ли какие-либо байты, доступные для чтения из последовательного пор- та (через Serial1.available), считывает следующий доступный байт с помощью Serial1.read и проверяет,являетсяли ранее сохраненный символ (который хранится в last_char) символом возврата каретки '\ r' илиновойстроки'\ n' .Циклделаетэто,посколькуможетстол- кнуться с устройствами,которые отправляют возврат каретки,новую строку или то и другое, чтобы завершить свои строки при отправке последовательных данных. Если следующий байт не указывает ко- нец строки , мы сохраняем только что прочитанный байт rc в buf и увеличиваем счетчик i на единицу. Если i достигает конца длины буфера, программа больше не сохраняет новые байты в буфере. Если прочитанный байтозначаетконец строки ,т.е.пользователь после- довательного интерфейса, скорее всего, нажал Enter, мы завершаем строку в массиве нулем, сбрасываем счетчик i и устанавливаем для new_data значение true.

В этом случае мы вызываем функцию validate(), которая печа- тает полученную строку и сравнивает ее с правильным паролем . Если пароль правильный, выводится ACCESS GRANTED («Доступ раз- решен»). В противном случае выводится Access Denied («Доступ за- прещен»), и пользователю снова предлагается войти в систему.

Записьи запуск программы Arduino

Теперь загрузите программу Arduino в Black Pill. Последовательность действий зависит оттого,приобрели ли вы модуль с предустановлен- ным загрузчиком Arduino, но мы рассмотрим оба варианта. Можно загрузить программу и еще одним методом: используя последова-

210  Глава 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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

тельный адаптер, который позволяет вам прошивать собственный

 

 

 

 

 

m

 

w Click

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

загрузчик (см., например,

 

w

 

 

 

 

 

 

 

o

 

https://github.com/rogerclarkmelbourne/STMdf--x chan

.c

 

 

 

.

 

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

e

 

32duino-bootloader/), но здесь мы не будем рассматривать этот про- цесс – в интернете можно найти множество ресурсов на эту тему.

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

Выбор режима загрузки

Чтобы убедиться, что вы загрузили программу во флеш-память Black Pill, нужно выбрать правильный режим загрузки. Устройства STM- 32F10xxx имеюттри различных режима загрузки,которые можно вы- биратьспомощьюконтактовBOOT1иBOOT0,какпоказановтабл.7.1. Обратитесь к схеме выводов на рис.7.11,чтобы найти этидва контак-

та на Black Pill.

Таблица 7.1.Режимы загрузки для Black Pill и других микроконтроллеров

STM32F10xxx

Контакты выбора режима загрузки

Режим загрузки

Псевдонимы

BOOT1

BOOT0

 

 

×

0

Основная

Выбирает основную флеш-память в качестве

 

 

флеш-память

загрузочного пространства

0

1

Системная память

Выбирает системную память в качестве

 

 

 

загрузочного пространства

1

1

Встроенная SRAM

Выбирает встроенную SRAM в качестве

 

 

 

загрузочного пространства

Используйте перемычку, поставляемую с Black Pill, для выбора ре- жима загрузки. Перемычка – это набор маленьких контактов в пла- стиковомкорпусе,которыесоздаютэлектрическоесоединениемежду двумя контактами (рис. 7.12). Вы можете использовать контакт пере- мычки, чтобы подключить контакты выбора режима загрузки к VDD (логическая 1) или GND (логический 0).

Рис.7.12.Перемычка, также известная как «джампер»

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

 

 

 

 

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

 

 

СоединитеперемычкойобавыводаBOOT0иBOOT1BlackPillкGND.

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

 

w Click

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

Если хотите писать в SRAM, следует подключить оба вывода к VDD.

 

w

 

df-x chan

 

o

 

 

.

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

e

 

Загрузка программы

Чтобы загрузить программу, сначала убедитесь, что перемычки для BOOT0 и BOOT1 подключены к GND.Создайте новый файл в средеAr- duino IDE, скопируйте и вставьте в него код из листинга 7.1, а затем сохраните файл. Мы использовали название serial-simple. Щелкни- те Tools > Board (Инструменты > Плата) и выберите Generic STM32F103C series в разделе STM32F1 Boards. Затем нажмите Tools >

Variant (Инструменты > Вариант) и проверьте, что отмечен пункт

STM32F103C8 (20k RAM, 64k Flash); он должен быть установлен по умолчанию.Убедитесь, что для метода Tools > Upload (Инструменты > Загрузить) установлено значение STLink и,в идеале,для параметра Optimize (Оптимизировать) установлено значение Debug (-g). Это гарантирует, что символы отладки появятся в конечном двоичном файле. Остальные параметры не меняйте.

Если на Black Pill был установлен загрузчик Arduino,вы можете на- прямуюподключитьегоккомпьютеручерезUSB-кабельбезпрограм- матора ST-Link. Затем укажите метод загрузки через загрузчик STM- 32duino вместо STLink. Но в учебных целях мы будем использовать программатор ST-Link, поэтому вам не понадобится предварительно прошивать загрузчик.

Чтобы загрузить программу в Black Pill, подключите к этому мо- дулю программатор ST-Link. Используйте четыре перемычки, чтобы соединить контакты SWCLK, SWDIO, GND и контакты 3,3 В ST-Link сконтактамиCLK,DIO,GND,3,3ВBlackPillсоответственно.Этивыво- ды расположены в нижней части разъема Black Pill.Как это выглядит, показано на рис. 7.14 и 7.15.

  ПРЕДУПРЕЖДЕНИЕ  Не следует подключать какие-либо устройства к портам USB до завершения подключения проводки.Рекомендуется из- бегать подавать питание на устройства при подключении их контак- тов.Таким образом вы предотвратите случайное короткое замыкание контактов, которое при включении устройств может привести к вы- ходу их из строя.

Использование логического анализатора для обнаружения выводов UART

Теперь найдите контакты UART на устройстве. Выше было показано, какэтосделатьспомощьюмультиметра,нотеперьмывоспользуемся логическиманализатором,чтобыидентифицироватьвыводUARTTX. Вывод TX передает выходной сигнал, поэтому его легко распознать. Для этого упражнения можно использовать недорогой логический анализаторHiLetgoUSBсвосемьюканалами,посколькуонсовместим с программным обеспечением Saleae Logic, которое мы используем.

212  Глава 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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Загрузите это программное обеспечение для своей операционной

 

 

 

 

 

m

w Click

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

системы со страницы https://saleae.com/downloads/. (В нашем примереdf-x chan

.c

 

 

.

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

e

 

используется версия для Linux.) Разархивируйте пакет в локальную папку, перейдите к нему в терминале и введите следующее:

$ sudo ./Logic

Эта команда откроет графический интерфейс Saleae Logic. Пока оставьте его открытым.

Убедитесь,чтовсетестируемыесистемывыключены,когдавыпод- ключаете к ним пробники логического анализатора, чтобы избежать короткого замыкания. В этом случае, поскольку Black Pill питается от программатора ST-Link, временно отключите программатор от USBпорта вашего компьютера.Помните,что если вы отключите Black Pill после загрузки кода Arduino в SRAM вместо флеш-памяти, вам при- дется повторно загрузить код в модуль.

С помощью перемычки подключите один из выводов GND логи- ческого анализатора к одному из выводов GND Black Pill, чтобы они имели общую «землю».Затем с помощью еще двух перемычек соеди- нитеканалыCH0иCH1логическогоанализатора(всевыводыканалов должны быть помечены) с выводами A9 и A10 Black Pill. Подключите логический анализатор к USB-порту на вашем компьютере.

Винтерфейсе Saleae вы должны увидеть как минимум пару кана- лов на левой панели, каждый из которых соответствует одному из каналов логического анализатора вывода схемы. Вы всегда можете добавить больше каналов, если ваш логический анализатор их под- держивает, чтобы можно было одновременно отслеживать больше выводов. Добавьте их, нажав две стрелки рядом с зеленой кнопкой Start (Пуск), чтобы открыть настройки. Затем вы можете выбрать, сколько каналов вы хотите отображать, переключая число рядом

скаждым каналом.

Внастройках увеличьте параметры Speed (Частотадискретизации) на 50 kS/s (киловыборок в секунду) и Duration (Длительность) до 20 с. Как правило, частота дискретизации цифровых сигналов должна быть как минимум в четыре раза выше, чем их частота следования. Для медленного последовательного канала частоты дискретизации 50 kS/s более чем достаточно,хотя и более высокая частота дискрети- зации не повредит. Что касается продолжительности, то 20 с хватит, чтобы устройство включилось и начало передавать данные.

Нажмите кнопку Start, чтобы начать захватывать сигналы, и не- медленно включите Black Pill, подключив программатор ST-Link к порту USB. Сеанс продлится 20 с, но вы можете в любое время оста- новить его. Если вы не видите данных по каналам, попробуйте вклю- чить и снова включить Black Pill во время сеанса. В какой-то момент вы должны увидеть сигнал, исходящий из канала, соответствующего выводу A9 (TX). Увеличивайте или уменьшайте масштаб, вращая ко- лесико мыши, чтобы рассмотреть их более четко.

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

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

w Click

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

df-x chan

 

o

 

кой Analyzers (Анализаторы) в графическом интерфейсе пользова-

.

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

e

 

теля, справа на панели выберите Async Serial (Асинхронный после- довательный порт), отметьте канал, на котором вы читаете сигнал, иустановитеBit Rate (Скоростьобмена)на9600.Обратитевнимание: если вы не знаете скорости передачи данных, можно выбрать Use Autobaud (Использовать автоподбор скорости), и пусть программа использует всю свою магию, чтобы подобрать правильное значение. Теперь вы должны увидеть приглашающее сообщение Login: про- граммыArduino в виде серии пакетов UART втолько что захваченном сигнале (рис. 7.13).

Рис.7.13.Расшифровка данных UART,поступающих с вывода TX Black Pill,с помощью программного обеспечения Saleae Logic.В правом нижнем углу вы можете увидеть приглашающий запрос Login: свидетельствующий о том,что программа Arduino запускается при загрузке устройства

Обратите внимание, как устройство на рис. 7.13 отправляет бук- ву L, которая указывает начало сообщения для входа в систему. Об- мен данными начинается с незанятой линии (при значении логи- ческой 1). Затем Black Pill отправляет стартовый бит со значением логического 0,за которым следуютбитыданных–отмладшегодо са- мого старшего. Букве L соответствует код 0x4C в ASCII, или 00110010 в двоичном формате, как вы можете видеть в передаче. Наконец, Black Pill отправляет стоповый бит (со значением логической 1) пе- ред началом буквы «о».

Мы разместили два маркера времени (A1 и A2 на рис. 7.13) по обе стороны от одного случайного бита. Маркеры времени – это своего рода флажки или метки, которые вы можете использовать для изме- рения времени, прошедшего между любыми двумя точками в ваших данных.Мы измерилидлительность100 мкс,чтодоказывает,что ско-

214  Глава 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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ростьпередачи составляет9600 бит/с.(Для передачи одного битатре-

 

 

 

 

 

m

 

w Click

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

буется 1/9600 с, или 0,000104 с,т. е. примерно 100 мкс.)

 

w

 

df-x chan

 

o

 

 

.

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

e

 

Подключение адаптера USB-UART

Чтобы протестировать адаптер USB-UART, подключим его к нашему компьютеру. Некоторые адаптеры, включая тот, который мы исполь- зовали, поставляются с перемычкой, предварительно установленной на контактах RX и TX (рис. 7.12). Перемычка соединяет выводы RX и TX, создавая петлю между ними. Это полезно для проверки работы адаптера: подключите его к USB-порту вашего компьютера, а затем откройтепрограмму-эмулятортерминала,напримерscreenилиmini- com, для этого порта. Попробуйте использовать эмулятор терминала для отправки последовательных данных на подключенные устрой- ства. Если вы видите, что нажатие клавиш отображается эхом в тер- минале, это свидетельствует о том, что адаптер работает. Дело в том, что ваша клавиатура отправляет символы через порт USB на контакт TX адаптера; из-за перемычки символы отправляются на контактRX, а затем возвращаются в компьютер через порт USB.

Подключите адаптер к компьютеру (не убирая перемычку) и затем введите следующую команду, чтобы узнать, какой дескриптор файла устройства был назначен адаптеру:

$ sudo dmesg

usb 1-2.1: FTDI USB Serial Device converter now attached to ttyUSB0

Обычноалаптеруназначаетсядескриптор/dev/ttyUSB0,есликпор- ту не были подключены другие периферийные устройства.Затем вы- полните команду screen и передайте дескриптор файла в качестве аргумента:

$ screen /dev/ttyUSB0

Чтобы выйти из сеанса экрана, нажмите клавиши Ctrl+A, а затем \. Вы также можете указать скорость передачи в качестве второго ар- гумента.Чтобы узнатьтекущую скорость передачи адаптера,введите

следующее:

$ stty -F /dev/ttyUSB0 speed 9600 baud; line =0;

Эти выходныеданные показывают,что адаптер имеетскоростьпе- редачи 9600 бод.

Убедитесь, что адаптер работает, а затем удалите контакт пере- мычки, потому что вам нужно подключить контакты RX и TX к Black Pill. На рис. 7.14 показаны необходимые соединения.

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

 

 

 

 

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

 

 

Подключите контакт RX адаптера к контакту TX на Black Pill (в на-

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

w Click

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

df-x chan

 

o

 

шем примере – контакт A9). Затем подключите контакт TX адаптера

.

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

e

 

к контакту RX (A10). Важно использовать именно контакты A9 и A10, потому что они соответствуют интерфейсу Serial1, который мы ис- пользовали в коде Arduino.

Адаптер USB должен быть подключен к тому же проводу «земли», что и Balck Pill, потому что устройства используют GND как точку от- счета для уровней напряжения. Вывод Clear to Send (CTS) также дол- жен быть соединен с линией GND,потому что он считается активным при низком уровне (то есть на логическом уровне 0). Если этот вывод не подключить к GND, на нем будет высокий уровень, и адаптер не сможет отправлять байты на Black Pill.

GND USB GND

 

 

 

 

 

 

 

STM32F103C8T6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Blackpill

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

USB

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Адаптер

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

USB-последовательный порт

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A10

 

 

 

 

CTS RTS RXD TXD GND VCC

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A9

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

RXD

 

 

 

 

 

 

 

 

 

 

3.3V DIO CLK GND

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ПортUSB

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3.3V

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ST-Link

SWDIO

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ПортUSB

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

USB

SWCLK

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

GND

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис.7.14.Схема соединений между Black Pill,ST-Link,адаптером USB-to-serial и ноутбуком

Подключение к компьютеру

Послетогокак вы соединилимежду собой BlackPill,ST-Link иадаптер USB, подключите ST-Link к USB-порту на вашем компьютере. Затем подключите адаптер к USB-порту.На рис.7.15 показан пример конст­ рукции.

216  Глава 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

 

 

 

 

 

  ПРЕДУПРЕЖДЕНИЕ 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  Обратите внимание, что модуль Black Pill не

 

 

 

 

 

m

 

w Click

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

подключен ни к одному USB-порту. Вместо этого он работает черезdf-x chan

.c

 

 

 

.

 

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

e

 

программатор ST-Link.Если подключить Black Pill к любому USB-порту напрямую,модуль или порт могут выйти из строя.

Теперь, когда тестовая схема готова, вернитесь в среду разработки Arduino. Включите подробный вывод, нажав File > Preferences (Файл

| Настройки) и установив флажок Show verbose output during: com- pilation (Показать подробный вывод во время компиляции). Затем нажмите Sketch > Upload (Скетч > Загрузить),чтобы скомпилировать программу и загрузить ее в Black Pill.

Рис.7.15.Модуль Black Pill,программатор ST-Link и адаптер USB соединены

с помощью перемычек.Обратите внимание,что Black Pill не подключен к USBпорту,он питается через программатор ST-Link

Поскольку мы включили подробный вывод в Arduino IDE, компи- ляция и загрузка программы должны дать вам много информации о процессе, включая временный каталог, в котором хранятся проме- жуточные файлы, необходимые для компиляции (рис. 7.16).

Рис.7.16.Подробный вывод из Arduino IDE при компиляции и загрузке программы.Рамкой выделен временный каталог,который вам понадобится

ВLinuxэтоткаталогобычновыглядиткак/tmp/arduino_build_336697,

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

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