
Вокруг каждого из нас постоянно что-то «шумит» в радиоэфире: брелоки от шлагбаумов, датчики «умного дома», метеостанции, беспроводные звонки. Огромный пласт бытовой электроники работает на частоте 433 МГц и не защищен от анализа и воспроизведения сигналов. Зачастую безопасность этих устройств держится на честном слове и надежде производителя, что «никто не будет в этом ковыряться».
Раньше, чтобы исследовать радиоэфир или изменить параметры сигнала, нужно было брать в руки паяльник и пересобирать колебательный контур. С приходом SDR (Software Defined Radio) правила игры изменились. Теперь радио — это не столько «железо», сколько математика и программный код. Любой сигнал можно визуализировать, разобрать на биты и собрать заново, не отходя от ноутбука.
В этой статье пройдем путь от теории к практике SDR-реверсинга бытовой техники. Вспомним необходимый минимум физики, разберем «зоопарк» доступных SDR-устройств — от копеечных свистков до USRP — и реализуем три вектора атаки на обычный беспроводной звонок: от простого перехвата до чистого программного синтеза сигнала.
Когда полтора века назад Александр Попов изобретал радио, для генерации и приема волн использовались исключительно аналоговые инструменты. Инженеры оперировали катушками индуктивности и конденсаторами (колебательными контурами), массивными антеннами и заземлением. Генерация радиоволн была чисто физическим процессом, параметры которого жестко зависели от номиналов компонентов. Эта «нестареющая классика» и сегодня применяется в простейшей радиоаппаратуре, однако в сложных системах подобные раритеты уступают место транзисторам и программным алгоритмам.
Наиболее ярким примером цифровой революции в радиосвязи стала технология SDR (Software Defined Radio), то есть программно-определяемое радио. В нем радиокомпоненты (фильтры и детекторы) реализуются программно, а не аппаратно. Оцифровка и обработка сигнала, изменение рабочих параметров радиосистем — всё это выполняет специализированное ПО. Таким образом, повышаются гибкость и адаптивность радиосистем, появляется возможность работать в различных диапазонах частот и с разными типами модуляции.
Немного «школьной» физики
При всех плюсах SDR даже самые передовые технологии и крутые девайсы оказываются бесполезны без базовых представлений о радиоволнах.
Специалист по программно-аппаратному взлому должен уметь не только принимать, но и передавать качественный и чистый сигнал. Для этого нужно правильно подобрать длину антенны, которая зависит от частоты сигнала. В общем, без базовой физики никуда. Так что повременим с историями взломов в духе Watch Dogs и для начала вспомним азы школьной программы.
Радиоволна — это электромагнитное излучение, лежащее в определенном диапазоне частот.

Основные свойства радиоволн
Длина — расстояние между пиками синусоид волны. Она обратно пропорциональна частоте сигнала. Волны бывают длиной от нескольких миллиметров до нескольких километров.
Амплитуда — расстояние от пика до впадины волны.
Частота — количество пиков в секунду. Частотный диапазон радиоволн — от 3 КГц до 3 ТГц (по стандартной классификации Международного радиотехнического союза).
Проницаемость — способность волн проходить через различные материалы и среды без значительного ослабления. Длинноволновые сигналы (с более низкой частотой) в этом плане выигрывают у коротковолновых (с высокой частотой), поэтому мы так хорошо слышим басы с соседской вечеринки.
Отражаемость — свойство радиоволн отражаться от земной поверхности, ионосферы, облаков и других объектов. Оно используется в радиолокации и радиосвязи.
Дифракция — способность радиоволн огибать препятствия. Длинные волны делают это лучше, чем короткие, поэтому они используются для связи на больших расстояниях.
Интерференция — перераспределение энергии волн при их наложении друг на друга. В местах, где волны совпадают по фазе (гребень накладывается на гребень, впадина — на впадину), происходит усиление сигнала. В противофазах (гребень накладывается на впадину) сигнал, напротив, слабеет или даже полностью гасится. Именно так работают «глушилки», которые правильней было бы назвать «подавилки». Полезный сигнал подавляется намного более мощным, который специально генерируется на той же частоте.

К другим типам электромагнитного излучения относятся инфракрасное, видимое, ультрафиолетовое, рентгеновское и гамма-излучение. Следует отличать электромагнитное излучение от других видов радиации: например, альфа- и бета-излучения представляют собой потоки частиц и не входят в электромагнитный спектр.
Частоты и модуляции
У любой радиоволны есть несущая стена частота. Передаваемый по ней сигнал может быть аналоговым или цифровым — это относится как к способу модуляции, так и к характеру полезных данных. Для передачи полезного сигнала по несущей частоте применяются различные виды модуляции, например, знакомые всем радиослушателям AM (амплитудные модуляции) и FM (частотные модуляции).

На рисунке ниже показано, как работают амплитудная и частотные модуляции. Есть базовая радиоволна — несущая, у нее постоянные частота и амплитуда. По ней передаются данные (полезная нагрузка). Модуляция — это способ «вшить» эти данные в несущую волну. В зависимости от выбранного способа модуляции итоговый сигнал в эфире выглядит по-разному.

В данном случае амплитудная модуляция накладывается на несущую частоту, меняя ее по оси Y. При частотной модуляции видоизменяется частота волны, но амплитуда остается на том же уровне.
Длина волны
Именно от этого параметра зависит выбор антенны. Чтобы рассчитать длину волны, надо разделить скорость света на частоту радиоволны. Вернемся за школьную парту и решим несложную, но наглядную задачку.
Дано: вы едете на машине и слушаете радио на частоте 100 МГц.
Вопрос: какова длина радиоволны?
Решение: скорость света ≈ 300 000 000 м/с, частота 100 МГц — это 100 000 000 Гц. Делим одно на другое и получаем ответ: длина волны для автомобильного радио составляет примерно 3 метра.
К примеру, практически все IoT-устройства для систем «умный дом» работают на частоте 433,92 МГц. Соответственно, длина волны составит примерно 69,1 см.

Получается, вот и нужная длина антенны? Не совсем так, иначе, скажем, авто с FM-радио походили бы на троллейбусы. Параметры антенны определяются тем, насколько высока частота по сравнению с длиной волны. Оптимальная протяженность улавливающего устройства часто составляет ½ или ¼ длины волны (полуволновые и четвертьволновые антенны соответственно). К тому же антенны в различных гаджетах (смартфонах, Flipper Zero и прочих) нередко сворачивают в спирали или придают им другие формы для компактности.

Оборудование и ПО для SDR
Теперь пробежимся по «зверинцу» инструментов, которые применяются для взлома радиосистем.
RTL-SDR

Это незамысловатое, но полезное устройство представляет собой обычную микросхему с обвязкой, позаимствованную из телевизионного приемника. Имеет два недостатка: узкий диапазон частот (всего лишь до 1,6 ГГц, т. е. Wi-Fi и Bluetooth он не захватывает), а также невозможность отправлять сигнал в эфир (работает только на прием). Из достоинств — способность принимать очень чистый сигнал, качество которого даже выше, чем у устройств именитых брендов.
Flipper Zero

В блоге Бастиона выходила отдельная статья про этот хайповый хакерский девайс, который применяется, в том числе, для приема и передачи радиосигналов. У «дельфинчика» немало плюсов: кастомные прошивки и постоянное расширение функциональности, легкая модификация (например, нетрудно найти на GitHub, а потом залить на устройство нужные скрипты для работы с SDR), высокая автономность, возможность управления со смартфона. Есть и несколько «ложек дегтя»: ограниченный диапазон частот (от 300 до 900 МГц, то есть он покрывает IoT-устройства, немного GSM и всё), необоснованно завышенная цена, а также невозможность выполнения сложных атак и синтезирования сигнала.
LimeSDR

Многие профессионалы пользуются этим дорогим и классным прибором, который может одномоментно работать и на прием, и на передачу (полнодуплексный). Это необходимое условие для взлома мобильного сигнала GSM. Также устройство применяется для передачи и приема сигналов UMTS, LTE, Wi-Fi, WiMax, ZigBee, Bluetooth, Tetra, LoRa и других целей. Диапазон частот прибора — от 100 кГц до 3,8 ГГц.
AirSpy

Миниатюрное устройство, работающее исключительно на прием сигнала. Различные модели AirSpy охватывают широкий частотный диапазон: от 9 кГц до 1,8 ГГц. Еще одна важная особенность устройства — высокочастотное разрешение и пропускная способность, что позволяет одновременно контролировать большие участки спектра.
USRP (Universal Software Radio Peripheral)

Одна из самых дорогих платформ для работы с SDR. Стоимость базовых моделей линейки начинается от $1000. Это программно-аппаратное устройство, которое позволяет передавать и принимать радиосигналы в широком диапазоне частот.
HackRF

Широкополосный полудуплексный трансивер с открытым исходным кодом. Был разработан в 2014 году основателем компании Great Scott Gadgets Майклом Османом. Девайс стоит не дороже 10 000 рублей и соответствует всем российским нормативным требованиям. Важный нюанс заключается в том, что для соответствия прибора требованиям законодательства ряда стран мощность HackRF ограничена до 0,5 Вт. Как следствие, передача сигнала ограничивается 5–10 метрами в зависимости от частоты. Но для исследовательских целей этого достаточно, так что мы будем использовать для взлома звонка именно это устройство.

Отметим, что у всех вышеперечисленных устройств, за исключением Flipper Zero, есть общее преимущество. Вся обработка сигнала — модуляция, демодуляция и т. д. — выполняется на компьютере с помощью специального ПО (например, GNU Radio), что делает эти системы гибкими и универсальными.
О программном обеспечении
Существует более 30 приложений, работающих с программно-определяемым радио. Есть как универсальное ПО (Cubic SDR, GQRX), так и специализированные программы для конкретных устройств. Мы же будем использовать в нашем исследовании, помимо прочего, консольную версию HackRF One. Она хороша тем, что позволяет осуществлять различные перенаправления, дополнительные обвязки и всячески настраивать ПО под всевозможные задачи. Также «вооружимся» инструментом Universal Radio Hacker (URH) для исследования неизвестных протоколов беспроводной связи и GNU Radio.

Взламываем звонок на радиоуправлении
На этом минутка теории закончена — теперь переходим ко взломам. Мы возьмем в качестве Proof of Concept обычный радиозвонок с кнопкой. Выбор не случаен, ведь такое устройство работает по тем же принципам, что и откатные ворота, шлагбаумы, автомобильная сигнализация и другие.
Прежде чем взламывать радиоволны, взглянем на внутренности устройства. Здесь всё по классике: батарейка, кнопка, генератор несущей частоты, микросхема, кодирующая сигнал, и три транзистора для усиления.

Мы будем взламывать звонок несколькими способами. Сначала проведем обычную replay-атаку, используя родное ПО для HackRF, затем реализуем аналогичный вектор через URH (Universal Radio Hacker — инструмент для анализа цифровых радиопротоколов). И, наконец, синтезируем сигнал сами.
Первый способ взлома: replay-атака
В двух словах, это кибератака на беспроводные системы связи путем перехвата и последующей повторной передачи корректных пакетов данных. Такой метод позволяет злоумышленнику выдать себя за легитимного пользователя или устройство.
Первым делом запускаем HackRF и проверяем через командную строку, распознал ли его компьютер: hackrf_info. Если да, то мы увидим серийный номер, дату прошивки и другие параметры ПО.

Затем запускаем программу HackRF Transfer, у которой есть множество ключей:
f— рабочая частота (в нашем случае 433,987 МГц);s— полоса пропускания (sample rate), т. е. то, сколько символов мы будем захватывать устройством за секунду (в нашем случае это 2 МГц);r— имя файла, куда записывается сигнал;t— имя файла с ранее записанным сигналом, который будет передаваться в эфир.
Теперь объединим эти ключи и напишем команду приема:
hackrf_transfer -f 433987000 -s 2000000 -r doorbell

Итак, у нас есть HackRF, подключенная антенна и передатчик (кнопка звонка). Нажимаем Enter (записать) и запускаем программу для приема сигнала. Одновременно с этим активируем передатчик (кнопку звонка). Теперь сигнал, который идет от передатчика до звонка, записывается на наш компьютер. Для остановки записи просто нажимаем CTRL+C.
Следующим шагом пишем команду передачи:
hackrf_transfer -f 433987000 -s 2000000 -t doorbell -x 47
Мы не будем разбираться во внутренних деталях, таких как payload и прочее, а просто возьмем записанный сигнал и отправим его обратно в эфир. Для этого оставим всё как есть, только вместо ключа r используем ключ t — transfer, который указывает на передаваемый файл (у нас он записан как doorbell). А x 47 означает мощность при отправке этого сигнала. Поясним, что мощность по умолчанию недостаточна для генерации сильного сигнала, который удалось бы передать звонку на нужном расстоянии. Так что мы выкручиваем этот параметр в HackRF на максимум.

Вот и момент истины. Передаем сигнал в эфир и слышим победные фанфары заветный звонок.

Таким образом, мы провели простую атаку: записали сигнал и отправили его обратно в воздух. Ставим первую галочку.
Второй способ взлома: Universal Radio Hacker
Universal Radio Hacker — это функциональное приложение, которое я рекомендовал бы новичкам в этичном SDR-хакинге. Оно не требует работы с командной строкой и позволяет выполнить нужные действия нажатием «волшебной кнопки». Впрочем, приложение подойдет и гуру реверс-инжиниринга — для автоматизации рутинной работы.
Но вернемся к нашей атаке. Прежде всего запишем новый сигнал. Для этого запустим Universal Radio Hacker и выберем пункт Record Signal (запись сигнала) в меню File основного интерфейса. Перед нами обширное выпадающее меню, где нужно выбрать следующие параметры:
Device (устройство): выбираем HackRF;
Device Identifier: здесь просто нажимаем «обновить» (если подключен только один HackRF, то этого делать не нужно);
Frequency (частота): в нашем случае это 433,987 МГц;
Sample rate (Sps): 2,0 М, то есть два миллиона семплов в секунду (по умолчанию установлено значение 10,0 M).

Дальше действуем, как и в прошлом сценарии: нажимаем кнопку Start (начать запись). Отлично, сигнал захвачен! Затем нажимаем Stop и, наконец, Save. Так мы перехватываем сигнал и записываем его в файл.

Обратите внимание, что передаваемый в эфир сигнал статичен, так как это постоянный код. Сколько раз ни нажимай на кнопку передатчика, получишь один и тот же payload. По этому принципу и работает replay-атака: запись — обратная отправка.
Другое дело, если бы в устройстве использовался так называемый rolling code (плавающий код). Тогда при каждом нажатии на кнопку генерировался бы разный payload. Для нас это был бы тот еще квест: найти формулу, по которой передатчик генерирует, а приемник принимает волну, распознает ее легитимность и воспроизводит. По принципу rolling code работают, например, дорогие откатные ворота в госструктурах и сигнализации в автомобилях класса выше бюджетного. Но исследуемый радиозвонок — не правительственный Мерседес, поэтому в нашем случае всё проще.
Universal Radio Hacker умеет демодулировать сигнал в двоичный код, чем мы сейчас и займемся. По дефолту в приложении (и в звонке) установлена ASK-модуляция (Amplitude Shift Keying), при которой информация передается путем изменения амплитуды несущего колебания. Для передачи двоичных данных используется две амплитуды: одна — для логической единицы, другая — для логического нуля.

Теперь дело за малым: воспроизвести replay-атаку, отправив в эфир сохраненный сигнал нажатием на кнопку Replay Signal («Воспроизвести сигнал»). И снова звучит заветный звонок.
Третий способ взлома: делаем пульт на радиоуправлении
Для этого вектора нам понадобится приложение GNU Radio Companion (GRC) — графический интерфейс пользователя для GNU Radio, предназначенный для построения и визуализации графов обработки сигналов. Это аналог Scratch: визуально-блочная событийно-ориентированная среда программирования. В ней можно выбирать нужные блоки, перетаскивать их и соединять между собой.
Нажимаем Play — и код переписывается в виде питоновского скрипта, который можно воспроизводить, не открывая GNU Radio Companion. По сути, это компилятор визуализации в питоновский скрипт.

Для начала запускаем приложение и создаем новый проект. Снова устанавливаем две переменные:
Sample rate (частота дискретизации) — 2 МГц;
Frequency (частота) — на 433,92 МГц.
Следующий шаг — добавление блока Vector Source, который позволяет вручную задать значение входного вектора для графа обработки сигнала. Для синтезирования нам нужно передать постоянный сигнал в формате двоичного кода, который был получен в ходе предыдущей атаки.

Далее в другом блоке, Repeat, происходит repeat-интерполяция (повторение): определяется количество повторений входного сигнала. В данном случае мы показываем, какая временная длительность должна быть у вышеупомянутых единицы и нуля. Ведь любая полезная нагрузка, включая пики и паузы, обладает своей длительностью. Этот параметр нужно знать и учитывать, чтобы правильно сгенерировать звуковой сигнал.
Для этого нужно сначала записать сигнал в GNU-радио, потом запустить его в другой программе — популярном аудиоредакторе для Linux под названием Audacity — и там выбрать наименьший диапазон. Однако не будем растягивать статью до «Войны и мира»: просто поверьте на слово, что в нашем случае показатель составляет 608 сэмплов. В принципе, можно попытаться подобрать его брутфорсом, двигаясь с повышающим шагом 50.

Затем создаем еще один блок — к QT GUI Push Button. По сути, это обыкновенная кнопка, которая активирует передачу сигнала. У нее есть три состояния:
Default (стартовое): устанавливаем значение 0;
Pressed (нажатая): устанавливаем значение 1;
Released (отпущенная): устанавливаем значение 0.
Не забудем задать нашей кнопке имя.
Далее вставляем в нашу линию блоков множитель Multiply Const, в качестве значения которого указываем имя кнопки. Соответственно, когда она нажата, сигнал умножается на 1, то есть ничего не меняется. Если же кнопка отпущена, то весь сигнал перемножается на ноль и не передается в эфир.
С созданием кнопки разобрались — теперь добавляем блок QT GUI Time Sink, который отображает сигнал в виде графика во времени.
И, наконец, кладем последний «кирпичик» — вставляем блок SOAPY HackRF Sink: с его помощью мы передадим сгенерированный сигнал на HackRF (с преднастроенными частотами и sample rate), а также в «воздух» через антенну.
Теперь все приготовления закончены, и самое время запустить приложение. Если всё сделано правильно, то появится новое окно с простым графом потока и кнопкой. Остается совладать с волнением и нажать на нее, чтобы синтезировать сигнал. Запускаем и… слушаем «малиновый звон», который мы же сами создали с нуля.

Вместо заключения: учите язык и физику
Три рассмотренных нами вектора атаки — это лишь верхушка айсберга. Мир радиохакинга огромен и включает в себя анализ GSM-сетей, спутниковой навигации, проприетарных промышленных протоколов и многого другого. Однако принципы остаются неизменными: за любой магией беспроводной связи стоит физика и логика.
Если вы решили углубиться в эту тему, будьте готовы к тому, что большинство качественной литературы и документации написано на английском языке. Русскоязычных материалов по SDR все еще крайне мало, поэтому технический английский станет вашим главным инструментом наравне с трансивером. Я рекомендую начать с изучения видеокурсов Майкла Османа по GNU Radio — они считаются золотым стандартом для новичков.
Также стоит помнить о юридических и этических аспектах. Исследование собственных устройств в пределах своей квартиры — это увлекательное хобби и отличный способ саморазвития. Однако вмешательство в работу чужих систем может привести к серьезным последствиям вплоть до уголовной ответственности. Будьте этичными исследователями. Знания — это инструмент, и только от вас зависит, как он будет использован: для создания более безопасных систем или для вредительства.
SDR превращает невидимое в видимое. Освоив эту технологию, вы начнете смотреть на мир иначе, понимая, как именно ваш телефон связывается с вышкой, как брелок открывает машину и почему микроволновка может «положить» домашний Wi-Fi.
Также ненавязчиво приглашаю всех в свой Telegram-канал, где вы найдете массу интересного по теме SDR: http://t.me/glinkinivan
Удачных исследований и чистого эфира!

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