Как стать автором
Обновить
213.79
Бастион
Проводим пентесты, проектируем защищенные системы

Инфракрасный хакинг: взламываем пульт от телевизора Samsung

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров7.5K

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

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

В статье поговорим о реверс-инжиниринге и аппаратном хакинге протоколов дистанционного ИК-управления: от подготовки необходимого оборудования до перехвата и декодирования сигналов. Взломаем пульт от телевизора Samsung и поделимся библиотекой ИК-сигналов, которая позволит вам с легкостью декодировать передачи для других устройств — например, камина Electrolux и кондиционера Funai. 

Подготовка

Сначала подготовим необходимое оборудование и ПО. Основное приложение, которое мы будем использовать — цифровой осциллограф. Существует как минимум две такие программы: Logic 2 и PulseView. Обе совершенно бесплатны, их можно свободно скачать и установить на ПК или Mac. 

К слову о PulseView: его можно также установить на Linux и он полностью опенсорсный, в отличие от проприетарного Logic 2. Кроме того, в PulseView «из коробки» есть как минимум три анализатора инфракрасных сигналов (NEC, RC-5, RC-6), а в Logic 2 их нет.

Разумеется, можно установить дополнительные модули из интернета, но это лишняя головная боль: придется искать подходящий вариант (повезет, если в нем нет троянов), устанавливать все игры все библиотеки и надеяться, что всё заработает. 

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

HackingIR-001
Внешний вид Logic 2 (сверху) и PulseView (снизу)

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

HackingIR-002
Макетная плата

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

ИК-приемник
ИК-приемник

В этом проекте будем использовать ИК-приемник из набора датчиков Elegoo 37 Sensor Kit. У него есть три контакта: G — земля, R — питание Vcc (в нашем случае до 5 В) и Y — вывод (для передачи полезной нагрузки). Схему подключения ИК-приемника можно найти на странице 107 этого туториала.

HackingIR-004
Схема подключения

Теперь о перемычках (джамперах), без которых мы бы не смогли ничего подключить. При выборе джамперов нужно отталкиваться от схемы подключения, но лучше иметь под рукой все вариации: «папа-папа», «папа-мама», «мама-мама», ведь в начале проекта вряд ли получится предсказать, какие из них вам пригодятся.

HackingIR-005
Джамперы

Еще нам понадобится логический анализатор. Это отладочный инструмент, предназначенный для перехвата, анализа и визуализации цифровых сигналов в цепи. Логический анализатор помогает диагностировать проблемы, выполнять мониторинг протоколов связи (например, I2C, SPI или UART), а также проверять соотношения таймингов между множественными сигналами.

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

Последний элемент в нашей схеме — внешний источник постоянного тока, способный выдавать не менее 3,3 В. Можно использовать любой подходящий вам, но в нашем случае это будет Raspberry Pi 4B. Этот малыш имеет восемь контактов заземления, два контакта на 5 В и один контакт на 3,3 В. 

Главное преимущество Pi 4B в том, что все эти контакты определены заранее и их не нужно программировать — это особенно удобно для новичков. Если у вас есть, например, Orange Pi или Arduino, то они тоже подойдут, но придется искать подходящие контакты для подключения.

HackingIR-007
GPIO-контакты Raspberry Pi

Соединяем всё вместе

Итак, у нас есть все необходимые компоненты, чтобы приступить к реверс-инжинирингу ИК-сигналов. Соберем их в единую схему.

Сначала возьмем ИК-приемник и подключим его к макетной плате.

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

Теперь возьмите два джампера «папа-папа» и соедините их в следующем порядке: линию 33 (заземление датчика) с синей линией над основной цепью, линию 34 (Vcc датчика) с красной линией над основной цепью. Если сделаете все правильно, у вас получится схема, похожая на эту: 

HackingIR-008
Подключение ИК-приемника

Далее нужно подать питание на плату. Возьмем Raspberry Pi (или любой другой внешний источник питания) и два джампера «папа-мама». Подключим «маму» первого джампера к первому контакту Raspberry Pi (тот, где 3,3 В), а другой конец — к красной линии над основной цепью. Затем подключим «маму» второго джампера к шестому контакту RPi (это тот, где находится заземление), а другой конец к синей линии над основной цепью. Итоговый результат будет выглядеть так:

HackingIR-009
Подключение Raspberry Pi

Теперь подключим Raspberry Pi к кабелю питания. На плате замигают светодиоды, сигнализируя, что устройство включено и загружается. Но для нас это неважно, ведь сразу после подключения RPi к питанию ИК-приемник сразу же начинает работать.

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

HackingIR-010
Передача ИК-сигнала

Теперь нам нужно подключить логический анализатор. Перед подключением его к ПК возьмем два джампера «папа-мама». Подключим первый джампер к каналу 0 (или 1, в зависимости от маркировки на логическом анализаторе) или к любому другому; другой конец джампера подключим к линии 35 макетной платы (к ней же подключен контакт Y ИК-приемника).

Далее подключим второй джампер к заземлению логического анализатора, а другой его конец — к синей линии над основной цепью. Затем соединим USB-кабелем логический анализатор и ПК. Теперь мы сможем передавать перехватываемый сигнал на наш компьютер.

Logo
Подключение логического анализатора

Перехват и анализ

Отлично, ИК-приемник подключен и работает (по крайней мере, реагирует на пульт от телевизора), а логический анализатор подключен к ПК. Схема готова, настало время творить магию!

Запустим цифровой осциллограф. При работе с Logic 2 не возникает вообще никаких проблем: после запуска он автоматически распознает оборудование и самостоятельно всё настроит.

Logic 2
Logic 2

При работе с PulseView всё уже не так просто. После запуска приложения нужно выбрать устройство, нажав кнопку <No Device>.

На этапе Step 1: Choose the driver выберите fx2lafw (общий драйвер для логических анализаторов на основе FX2).

HackingIR-015
PulseView: выбор драйвера

На этапе Step 2 оставьте настройку по умолчанию (USB interface).

На этапе Step 3 нажмите кнопку Scan for devices using driver above. Если логический анализатор подключен, то во время Step 4 приложение автоматически обнаружит оборудование.

HackingIR-016
PulseView: выбор устройства

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

Прежде чем приступить к записи сигналов, нужно настроить скорость передачи битов и размер записи. Для ИК-передачи более чем достаточно скорости в 1 мегабит в секунду (MS/s) и 1 ГБ памяти. 

На самом деле, если мы говорим о распространенных ИК-протоколах наподобие NEC или RC5, то обычно используется несущая частота 38 и 36 кГц, и такой скорости будет достаточно. Но для страховки лучше использовать 1 MS/s.

HackingIR-017
Выбор настроек в Logic 2

Момент истины: нажимаем кнопку Run. Вы можете увидеть, что линия на канале 0 начинает двигаться. После этого возьмите пульт и нажмите любую кнопку — в нашем случае это будет кнопка питания (Power). Если вы всё сделали правильно, то увидите сигнал.

HackingIR-018
Считывание сигнала в Logic 2

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

Во-первых, у сигнала есть заголовок (header) — начальный импульс и пауза, которые предшествуют передаче данных. Начальный импульс используется приемником для настройки усиления под сигнал. Обычно он довольно долгий (несколько миллисекунд). 

В случае стандарта NEC начальный импульс длится 9 мс, затем следует пауза в 4,5 мс. Но в нашем случае (телевизор Samsung) начальный импульс длится 4,5 мс, а пауза — 4,4 мс. Эти временные промежутки могут иметь небольшие погрешности, так что при замерах мы каждый раз будем получать немного разные числа.

HackingIR-019
Заголовок сигнала в Logic 2. Импульс выделен красным, пауза — зеленым.

На картинке ниже мы видим два схожих сигнала, но которые немного отличаются по длительности.

HackingIR-020
Два последовательных сигнала с небольшими отличиями по длительности

После заголовка идет слово данных — полезная нагрузка сигнала, управляющая телевизором. Короткий импульс с последующей длинной паузой — это, по сути, один бит, равный 1, или TRUE. Короткий импульс, за которым следует короткая пауза — это 0, или FALSE.

HackingIR-021
Определение сигналов в Logic 2. Импульс TRUE выделен красным, импульс FALSE — зеленым.

Опираясь на этот паттерн, попробуем определить полный сигнал кнопки питания нашего пульта. 

HackingIR-022
Сигнал целиком

Раскрасив каждый бит, подсчитаем их: три красных (то есть 111), за которыми следуют пять зеленых (00000), затем снова три красных (111), 6 зеленых (000000), и так далее. Вот что получится, если соединить их все вместе: 

 11100000111000000100000010111111

Не очень удобное представление. Давайте попробуем его улучшить.

Для начала разобьем эти данные на блоки по 8 бит (то есть по одному байту): 

 11100000 11100000 01000000 10111111

Отлично, такое представление гораздо лучше, и мы видим паттерн: первые 2 байта одинаковы.

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

Как выполнить преобразование

Во-первых, можно использовать онлайн-калькулятор CyberChef, задав перевод из двоичного и в шестнадцатеричный. Результат будет таким: E0 E0 40 BF.

HackingIR-023

Во-вторых, можно использовать калькулятор на компьютере:

HackingIR-024

Еще один конвертер можно использовать в командной строке. В Linux есть приложение bc — язык и калькулятор десятичной арифметики с произвольной точностью. В качестве атрибутов он получает входное (-I) и выходное (-O) значения, а также число для декодирования (-e).

HackingIR-025
bc

В данном случае мы попросили преобразовать нашу двоичную (-I 2) полезную нагрузку (-e) в десятичную (-O 10) и шестнадцатеричную (-O 16). Как видите, этим способом можно добиться тех же результатов.

Окончательный результат для кнопки питания пульта телевизора Samsung выглядит так:

Кнопка

BIN

DEC

HEX

Power

11100000 11100000 01000000 10111111

3772793023

E0E040BF

 Этим же способом можно перехватывать и декодировать другие кнопки.

Библиотека сигналов

В ходе эксперимента мы пробовали искать базы данных ИК-сигналов от устройств крупных производителей. К сожалению, за исключением репозиториев flipper zero и probonopd в Github ничего конкретного найти не удалось.

Более того, сигналы записаны необычным образом, который можно понять только конкретному устройству. Например, вот что можно найти про кнопку Power от нашего пульта в базе данных Flipper:

Name

Type

Protocol

Address

Command

Power

Parsed

Samsung32

07 00 00 00

E6 00 00 00

А вот что про ту же кнопку можно найти во втором репозитории:

functionname 

protocol 

device 

subdevice

function

KEY_POWER NECx2 

NECx2 

7

2

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

Чтобы исправить это недоразумение, мы создали на GitHub новый проект, где можно найти все сигналы как в двоичном виде, так и в форматах DEC и HEX. Перехваченный сигнал также сохранен в формате .SAL, чтобы пользователи могли считывать его в приложении Saleae. Кроме того, мы решили разобрать пульты, чтобы каждый, кто интересуется темой, мог понять их внутреннее устройство и способ работы, в том числе спецификации чипов.

Полный адрес нашего репозитория: 

https://github.com/IvanGlinkin/Default-IR-vendors-samples

Репозиторий структурирован по названиям поставщиков и типам устройств (телевизоры, обогреватели, вентиляторы и так далее). В последнем каталоге находятся папки Datasheet, Remote Pictures и Samples.

HackingIR-026

Кстати, по этой ссылке можно найти декодированные сигналы от того самого пульта Samsung: 

HackingIR-027

Заключение

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

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

Если вы хотите внести вклад в этот репозиторий, добро пожаловать! Но пожалуйста, сохраняйте формат и структуру.

PURP — телеграм-канал, где кибербезопасность раскрывается с обеих сторон баррикад

t.me/purp_sec — инсайды и инсайты из мира этичного хакинга и бизнес-ориентированной защиты от специалистов Бастиона

Теги:
Хабы:
Всего голосов 46: ↑42 и ↓4+53
Комментарии46

Публикации

Информация

Сайт
bastion-tech.ru
Дата регистрации
Дата основания
2014
Численность
101–200 человек
Местоположение
Россия
Представитель
Игорь Santry