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

 

 

ти (указанное с помощью­

fw_p), в этот файл на диске. Он отправляет

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

 

w Click

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

w

 

df-x chan

 

o

 

последнее сообщение в системный журнал о завершении загрузки

.

.c

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

 

e

 

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

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

Запуск службы обновления

Чтобы протестировать службу обновления, для начала запустим сер- вер. Мы делаем это на хосте Ubuntu с IP-адресом 192.168.10.219. Как только сервер начинает прослушивание, мы запускаем клиента, пе- редавая ему IP-адрес сервера в качестве первого аргумента.Мы запу- скаем клиента на хосте Kali с IP-адресом 192.168.10.10:

root@kali:~/firmware_update# ls client client.c Makefile

root@kali:~/firmware_update# ./client 192.168.10.219 filelen: 6665864

calculated hash: d21843d3abed62af87c781f3a3fda52d received hash: d21843d3abed62af87c781f3a3fda52d hashes match

root@kali:~/firmware_update# ls

client client.c Makefile received_firmware.gz

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

user@ubuntu:~/fwupdate$ ./server Listening on port 31337 Connection from 192.168.10.20 Credentials accepted.

hash: d21843d3abed62af87c781f3a3fda52d filelen: 6665864

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

Уязвимости служб обновления микропрограмм

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

274  Глава 9

 

 

 

 

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

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

t

 

 

P

D

 

 

 

 

 

 

 

 

o

 

 

 

 

 

NOW!

r

 

 

 

 

 

 

BUY

 

 

Жестко запрограммированные учетные данные

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

m

w Click

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

.c

 

 

 

 

p

df

 

 

 

 

e

 

 

 

 

 

 

 

g

 

 

 

 

 

 

 

 

 

n

 

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

Сначала клиент аутентифицируется на сервере, используя пароль,

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

учетных данных (таких как пароли и криптографические ключи) си-

 

 

 

 

 

 

 

стем IoT – огромная проблема по двум причинам: во-первых, из-за

 

 

 

 

 

 

 

частоты, с которой они обнаруживаются в устройствах IoT, а во-вто-

 

 

 

 

 

 

 

рых, из-за последствий злоупотребления ими. Жестко закодирован-

 

 

 

 

 

 

 

ные учетные данные встраиваются в двоичные файлы, а не в файлы

 

 

 

 

 

 

 

конфигурации. Таким образом, конечные пользователи или адми-

 

 

 

 

 

 

 

нистраторы практически не имеют возможности менять их без тру-

 

 

 

 

 

 

 

доемкого редактирования двоичных файлов с риском их повредить.

 

 

 

 

 

 

 

Кроме того, если злоумышленники когда-либо обнаружат жестко за-

 

 

 

 

 

 

 

программированные учетные данные с помощью­

двоичного анализа

 

 

 

 

 

 

 

или реверс-инжиниринга, они могут попасть в интернет или на под-

 

 

 

 

 

 

 

польный рынок, что позволит любому получить доступ к конечной

 

 

 

 

 

 

 

точке.Другая проблема заключается втом,что чаще всего эти жестко

 

 

 

 

 

 

 

заданные учетные данные одинаковы для каждого устройства, даже

 

 

 

 

 

 

 

в разных организациях. Причина в том, что поставщикам проще со-

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

устройства. В следующем листинге вы можете увидеть часть вывода

 

 

 

 

 

 

 

команды strings для клиентского двоичного файла, которая показы-

 

 

 

 

 

 

 

вает жестко закодированный пароль (выделен):

 

 

 

 

 

 

 

 

 

 

 

 

QUITTING! firmware_update

firmware update process started with PID: %d Could not open socket %s

Could not connect to server %s: %s jUiq1nzpIOaqrWa8R21

Authenticating with %s using key %s filelen: %d

cannot allocate memory for incoming firmware calculated hash:

received hash: hashes match hash mismatch

./received_firmware.gz

Can't open file for writing %s Firmware downloaded successfully

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

Небезопасные алгоритмы хеширования

Сервер и клиент полагаются на HMAC-MD5 для вычисления крипто- графическогохеша,которыйклиентиспользуетдляпроверкицелост-

Взлом прошивки  275

 

 

 

 

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

 

MD5теперьсчитаетсявзломаннойирискованнойкриптографической

.

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

e

 

хеш-функцией,HMAC-MD5 не страдает этими недостатками.HMAC– это код сообщения аутентификации с хеш-ключом, в котором ис- пользуется криптографическая хеш-функция (в данном случае MD5) и секретный криптографический ключ (в нашем примере – общий ключ). На сегодняшний день не было доказано, что HMAC-MD5 уяз- вим для практических атак путем поиска коллизии ключей, которые есть у MD5. Тем не менее современные передовые методы безопас­ ности предполагают, что HMAC-MD5 не следует включать в будущие инструменты шифрования.

Незашифрованные каналы связи

Использованиенезашифрованногоканаласвязи–уязвимостьсвысо- ким риском для службы обновлений. Клиент и сервер обмениваются информацией, используя настраиваемый протокол открытого текста по TCP. Это означает, что, если злоумышленники занимают позицию «человек посередине» в сети, они могут захватывать и читать пере- данные данные. Сюда входит файл прошивки и ключ, используемый для аутентификации на сервере (рис. 9.6). Кроме того, поскольку HMAC-MD5 использует один и тот же криптографический ключ, зло- умышленник можетзлонамеренно изменитьпрошивку при передаче и установить в нее бэкдоры.

Рис.9.6.Снимок экрана Wireshark,показывающий передачу конфиденциальной информации (ключ аутентификации) по незашифрованному протоколу TCP

Sensitive Log Files

Наконец, что не менее важно, механизм ведения журнала клиента включает конфиденциальную информацию (значение KEY) в файлах журнала (вданном случае /var/log/messages).Мы показалиточное ме- сто,где это произошло,при просмотре исходного кода клиента.В це-

276  Глава 9