Защитите свой HDMI… плоскогубцами и изолентой

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

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


Цель

HDMI используется для передачи аудио и видео, но предлагает ряд дополнительных функций (HPD, CEC, HEAC, MHL). Это увеличивает поверхность атаки, и, поскольку безопасность реализации этих функций во встроенных устройствах далека от идеала, злоумышленник может внедрить вредоносный код — и ваше ничего не подозревающее видеооборудование будет угрожать безопасности сети. Монитор сможет взломать любое подключённое к нему устройство.

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

Брандмауэр блокирует все дополнительные интерфейсы и разрешает передачу только аудио- и видеоданных. Он основан на исследовании Пьера-Мишеля Рикорделя и Хосе Лопеса Эстевеса из ANSSI/SDE/ST/LSF, представленном на конференции по ИТ-безопасности SSTIC 2021. Некоторые исследования безопасности и уязвимости CEC и EDID вы увидите на слайде 4.

Применение

Брандмауэр поставляется с общим профилем HD, но может не соответствовать возможностям монитора. Результирующее изображение может искажаться или отсутствовать полностью. Поэтому сначала нужно скопировать информацию расширенных идентификационных данных дисплея (EDID). Эти данные содержат поддерживаемые разрешения. Прочитать их вы можете с помощью интерфейс Display Data Channel (DDC) на основе I²C. Скопируйте эти данные EDID в EEPROM брандмауэра HDMI и сломайте выступ плоскогубцами, чтобы включить защиту от записи, что не позволит внедрить вредоносную полезную нагрузку. Сделать это нужно один раз для каждого монитора. Скопировать EDID можно с помощью программатора брандмауэра HDMI или по инструкции в разделе установка.

Подключите брандмауэр к защищаемому монитору, затем подключите кабель, который идёт к ненадёжному устройству на брандмауэре HDMI — это защитит оборудование.

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

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

Ограничения

Защита широкополосного цифрового содержимого (HDCP) не поддерживается, поскольку интерфейс DDC ограничен информацией EDID.

Доступность

Несколько брандмауэров HDMI доступны на tindie.

Схема в формате pdf и gerber-платы доступны в релизе.

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

Режим работы

Для защиты монитора брандмауэр HDMI перенаправляет только сигнальные линии передачи аудио/видео (A/V) данных (D0, D1, D2, CK). Все остальные сигнальные линии не подключены (CEC, SDA, SCL, utility/HEAC+, HPD). Это заблокирует все интерфейсы, кроме аудио/видео (например, DDC, HPD, CEC, HEAC, MHL). Линии SDA/SCL для интерфейса DDC для предоставления информации EDID устройству подключены к EEPROM на брандмауэре. Сюда нужно скопировать информацию о мониторе. Это ограничивает интерфейс DDC информацией EDID.

Установка

Для корректного применения брандмауэра HDMI требуется копия данных EDID.

Эти инструкции предназначены для Linux. Для Windows см. инструкции, представленные на слайдах исследования, (не проверены).

Установите инструменты чтения/записи устройств I²C:

  • для дистрибутивов на базе Debian

sudo apt install i2c-tools

Откройте пользователю доступ к I²C (в /dev/i2c-*):

sudo modprobe i2c-dev

Теперь нужно выяснить, какая шина I²C соответствует порту HDMI. Перечислите доступные шины:

sudo i2cdetect -l

Вы увидите нечто вроде этого:

i2c-0	smbus     	SMBus PIIX4 adapter port 0 at 0b00	SMBus adapter
i2c-1	smbus     	SMBus PIIX4 adapter port 2 at 0b00	SMBus adapter
i2c-2	smbus     	SMBus PIIX4 adapter port 1 at 0b20	SMBus adapter
i2c-3	i2c       	AMDGPU DM i2c hw bus 0          	I2C adapter
i2c-4	i2c       	AMDGPU DM i2c hw bus 1          	I2C adapter
i2c-5	i2c       	AMDGPU DM i2c hw bus 2          	I2C adapter
i2c-6	i2c       	AMDGPU DM i2c hw bus 3          	I2C adapter
i2c-7	i2c       	AMDGPU DM aux hw bus 0          	I2C adapter
i2c-8	i2c       	AMDGPU DM aux hw bus 2          	I2C adapter
i2c-9	i2c       	AMDGPU DM aux hw bus 3          	I2C adapter
i2c-10	i2c       	DPMST                           	I2C adapter
i2c-11	i2c       	DPMST                           	I2C adapter

Шины-кандидаты от 3 до 9, используемые GPU (номер после i2c — в первом столбце).

Отключите всё от порта HDMI и выполните поиск устройств на каждой шине I²C (замените BUS номером шины):

sudo i2cdetect -y BUS

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

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

Подключите брандмауэр на стороне устройства к порту HDMI и повторите поиск устройств. Если вы видите следующий результат, то вы нашли шину I²C порта HDMI. В противном случае продолжайте до следующей шины.

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: 50 51 52 53 54 55 56 57 -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

Подключите монитор, с которого вы хотите скопировать EDID, напрямую к порту HDMI.

Для дампа EDID воспользуйтесь модулем EEPROM:

sudo modprobe eeprom

Отобразите обзор EDID и убедитесь, что название модели соответствует вашему монитору (здесь DELL 2408WFP на шине номер 4):

ddcmon 4

Checksum:               OK
EDID Version:           1.3
Manufacturer ID:        DEL
Model Number:           0xA02C
Model Name:             DELL 2408WFP
Serial Number:          G286H9642GLS
Manufacture Time:       2009-W23
Display Input:          Digital
Monitor Size (cm):      52x32
Gamma Factor:           2.20
DPMS Modes:             Active Off, Suspend, Standby
Color Mode:             RGB Multicolor
Vertical Sync (Hz):     56-76
Horizontal Sync (kHz):  30-83
Max Pixel Clock (MHz):  170
Timing:                 640x480 @ 60 Hz
Timing:                 640x480 @ 75 Hz
Timing:                 720x400 @ 70 Hz
Timing:                 800x600 @ 60 Hz
Timing:                 800x600 @ 72 Hz
Timing:                 800x600 @ 75 Hz
Timing:                 1024x768 @ 87 Hz (interlaced)
Timing:                 1024x768 @ 75 Hz
Timing:                 1152x864 @ 75 Hz
Timing:                 1280x1024 @ 60 Hz
Timing:                 1600x1200 @ 60 Hz
Timing:                 1920x1200 @ 60 Hz

Полный дамп EDID (замените BUS соответствующим номером шины):

cat /sys/bus/i2c/devices/BUS-0050/eeprom > edid.bin

Подключите порт устройства брандмауэра HDMI к выходу HDMI. Убедитесь, что защита от записи отключена (пластина сломана, на контактные площадки WP добавлен припой).

Запись данных на неправильную шину I²C может привести к необратимому повреждению компьютера или других устройств.

Освободите доступ I²C к EEPROM:

sudo modprobe -r eeprom

Запишите извлечённые данные EDID в брандмауэр HDMI (замените BUS на соответствующий номер шины):

for addr in `seq 0 255`; do echo $addr; sudo i2cset -y BUS 0x50 $addr 0x`xxd -p -l 1 -s $addr edid.bin`; done

Сравните исходные данные с данными в EEPROM:

# display original dumped data
xxd -g 1 edid.bin
# display data written on EEPROM
sudo i2cdump -y BUS 0x50

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

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

Устранение проблем

Если монитор не обнаруживает устройство или ничего не отображает (но должен), попробуйте снова включить прямое питание 5В (по умолчанию), припаяв контактные площадки 5В. В кабеле HDMI есть линия 5В с питанием от устройства. В нашем случае мы используем его для питания памяти брандмауэра HDMI. Переадресацию на монитор можно отключить, перерезав дорожку на контактах 5V.

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

Советы

xrandr

xrandr может выполнить дамп информации EDIO:

xrandr --properties

sysfs

sysfs также предоставляет необработанную информацию EDID (измените путь соответствующим образом):

edid-decode /sys/devices/pci0000:00/0000:00:08.1/0000:05:00.0/drm/card0/card0-HDMI-A-1/edid

I²C без root

Для доступа к шинам I²C без root:

# add UDEV rule
cat << EOF | sudo tee /etc/udev/rules.d/20-i2c.rules
KERNEL=="i2c-[0-9]*", GROUP="i2c"
EOF
# give user access to devices (you have to re-login in for the change to take effect)
sudo groupadd i2c
sudo gpasswd -a $USER i2c
# reload rules
sudo udevadm control --reload-rules
sudo udevadm trigger

Стирание

Если вы хотите очистить память брандмауэра для использования с другим монитором:

for page in seq 50 57; do echo 0xpage; for addr in `seq 0 255`; do echo addr; sudo i2cset -y BUS 0xpage addr 0xff; done; done

edid-decode

Чтобы разобрать и отобразить полную информацию EDID, вы можете использовать edid-decode.

  • для дистрибутивов на базе Debian

sudo apt-get install edid-decode
  • для дистрибутивов на основе Arch

pikaur -S edid-decode-git

Чтобы просмотреть дамп EDID:

edid-decode edid.bin

edid-rw

EDID-RW немного упрощает чтение и запись EDID.

Установите эти средства:

  • для дистрибутивов на базе Debian

sudo apt-get install python3-smbus
  • для дистрибутивов на основе Arch

pikaur -S python-smbus-git

Получение EDID-RW:

git clone https://github.com/bulletmark/edid-rw
cd edid-rw/

Чтобы получить данные EDID с подключённого монитора, выполните:

sudo ./edid-rw 4 > edid.bin

Чтобы записать дамп EDID в память брандмауэра HDMI:

sudo ./edid-rw -w 4 < edid.bin

Чтобы убедиться, что данные записаны правильно, прочтите их:

sudo ./edid-rw 4 | edid-decode

А мы поможем вам прокачать навыки или с самого начала освоить профессию, актуальную в любое время:

  • Профессия «Белый хакер»

  • Профессия Data Scientist

Выбрать другую востребованную профессию.

Источник: https://habr.com/ru/company/skillfactory/blog/673382/


Интересные статьи

Интересные статьи

Основной посыл этого поста - рассказать о развитии своей старой идеи, которая переделывалась несколько раз, и прошла путь от простой кривой WinForm до полноценного кросс-...
Ровно год назад я начал вести свой блог, чтобы протестировать все идеи проектов, которые хранились у меня в телефонных заметках. Хотя это просто хобби, меня заинтересовала возможно...
Если вы владеете Telegram-каналом (или несколькими), раскрученным аккаунтом в Instagram или любой другой социальной сети, то уже наверняка задавались вопросом: А как мне планировать пос...
Началось всё с обсуждение на математическом StackOverflow: Meaning of Rays in Polar Plot of Prime Numbers «Недавно я начал экспериментировать с gnuplot и быстро сделал интересное откр...
Существует традиция, долго и дорого разрабатывать интернет-магазин. :-) Лакировать все детали, придумывать, внедрять и полировать «фишечки» и делать это все до открытия магазина.