В прошлой статье мы рассказали тебе про устройство BMS и хорошенько распалили твое воображение будущими хакерскими экспериментами. И вот их час пробил! Готовься, дружище! Перед тобой статья размером аж в шесть страниц старого бумажного «Хакера». И все они посвящены исключительно взлому ;).

INFO

Большое спасибо всем моим коллегам, а в особенности Максиму Малютину (@neurojesus), Роману Бажину (@nezlooy), Алексею Кузьменко (@alekum) и Евгению Рассказову (@TheJokiv) из Digital Security. Также выражаю свой респект ребятам из Domus Sapiens, которые не побоялись предоставить для наших опытов действующий объект на KNX :).

 

Устройство сети

Перед тем как начать охоту на стадо газелей, любой порядочный лев должен определиться — а сколько же там особей? Хватит ли их, чтобы накормить целый прайд? 🙂 Как видишь:


Число газелей узлов в сети KNX может достигать 65 535. Поверь, это много, тем более что под узлом может подразумеваться как простой выключатель, так и полноценный MCU/PLC, который «рулит комфортом» в целом номере отеля.

Как видно из рисунка, в стаде у нас царит шинная топология. На одной шине (sub-line) может находиться до 255 узлов, на одной линии (mainline) может быть до 15 шин (sub-line). Одна зона (area) включает в себя до 15 линий (mainline). Всего может быть 15 зон (area). Такое разделение позволяет неплохо разбивать как на логические (управляем светом), так и на физические группы (система автоматики отвечает за конкретный этаж). Напрашивается знакомая всем фраза «разделяй и властвуй». Ведь все это многообразие (в этот момент автор попросил включить «злобный смех за кадром». — Прим. ред.) можно сломать буквально парой команд.

 

Мир KNX расширяется

Управление спортивным, наружным и внутренним освещением на стадионе «Лужники» теперь реализовано с помощью KNX. Он же будет применяться в строящемся небоскребе «Лахта центр» в Санкт-Петербурге.

Стадион «Лужники»
Стадион «Лужники»

Для начала посмотрим, что собой представляет формат сообщений/телеграмм по шине KNX-TP. Вот так выглядит общий формат сообщения в KNX.


Теперь пройдусь по каждому полю и добавлю пару комментариев.

## Control byte/Control Field

Отвечает за то, будет ли данное сообщение системным или нет. Если обычное, то будет указан его приоритет.

## Source address

Вот так оно выглядит, детальные комментарии тут, думаю, излишни.

## Receiver address

Вот так уже выглядит формат адреса получателя. Та или иная реализация зависит от того, что решил интегратор, когда устанавливал систему. И как видим, 16 бит определяют/подтверждают то, что емкость сети равна 2^16 :).

Кстати, очень хочется сказать «спасибо» документации — тому, что она есть и что ее много. Наверное, ты спросишь, почему слово спасибо я заключил в кавычки и почему заострил на нем внимание? А посмотри-ка на это изображение:


В одном месте документация нам говорит, что receiver address следует трактовать как групповой, если некий бит DAF = 1, а парой страниц ниже идет уже обратная информация — что receiver address нужно трактовать как групповой, когда DAF = 0.

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

## NPCI

Этот байт отвечает за длину данных, передаваемых по KNX-TP. Увы, не так много — максимум мы можем передать до 15 байт полезной нагрузки. Поле Routing counter отвечает за количество «прыжков/переходов» через шлюзы и gateway. Тем самым реализована борьба против зацикливания сообщений и broadcast-штормов. Идея хорошая и здравая. Но иногда можно не обращать внимания на это поле, смело ставить значение в 0, и все будет работать как надо :). Об этом чуть позже. Ну и старший бит, о котором уже немного упоминали, — бит DAF, отвечающий за то, как трактовать поле receiver address — как групповой адрес или как индивидуальный.

## TPCI/APCI

Поле TPCI проясняет вопрос, данные ли это или служебная информация. Sequence number в дополнение к TCPI, если у нас диалог между узлами не ограничивается одной телеграммой, а надо несколько телеграмм. Угадай, из какого количества телеграмм может состоять «диалог» между узлами? Если ты подумал, что максимум может быть 16 фреймов, то нет. Их может быть сколько угодно, просто когда значение sequence number дойдет до 15, следующее значение будет равно 0 и все пойдет сначала, инкрементируясь до 15.

И на десерт — поле APCI. Вот оно-то как раз зачастую и определяет смысловую нагрузку сообщений. Разумеется, существуют определенные коды для того или иного сообщения:


Как можно заметить, меня сразу заинтересовали следующие команды: MemoryRead, MemoryWrite, UserMessage. Еще одна забавная команда Escape расширяет APCI кода на еще некоторое количество дополнительных команд.

Вот так, шаг за шагом и поле за полем, разобрали фрейм KNX, который передается по KNX-TP (для тех, кто забыл, что это такое, — всего лишь пара проводов, которые подходят к узлу, его запитывают и служат для передачи данных). Немного терпения, дорогой читатель, ибо хочу еще несколько слов сказать о том, во что оборачивается телеграмма KNX-TP, когда она попадает через шлюз в Ethernet.

Когда KNX-TP попадает в Ethernet, эта телеграмма передается по UDP с помощью cEMI message. Вот как выглядит фрейм KNX в Ethernet-сети:


А вот как выглядит cEMI message:


Почему тут поставил восклицательный знак и обвел одно поле? Помнишь, я говорил, что иногда можно не обращать внимания на routing counter в поле NPCI? Это как раз тот случай: у нас вклинилось еще одно поле control field 2, которое и определяет количество hop’ов, и у нас идет групповое или индивидуальное сообщение. Но это применимо, только если ты общаешься с KNX-сетью с помощью IP-роутера.

WARNING

Вся информация предоставлена исключительно в ознакомительных целях. Ни редакция, ни автор не несут ответственности за любой возможный вред, причиненный материалами данной статьи.

 

Что ломаем?

В нашей компании мы решили ломать в первую очередь IP-роутеры. Надеюсь, следующая картинка пояснит наш выбор.


На этой картинке представлен типовой кусок KNX-сети. Имеются различные датчики (sensors) и актуаторы (actuators, исполнительные механизмы). Все это сидит на шине, которая через Line Couple и/или IP-роутер может объединяться в mainline, которая, в свою очередь, подключена к Ethernet. К Ethernet уже могут быть подключены различные инженерные системы, завязка на корпоративную сеть, ну и далее, надеюсь, читатель, ты понимаешь, к чему я клоню. Причем изначально выбираю very hard level, когда рассматриваю сценарий «заселился в отель, расковырял выключатель и подключился к KNX-TP».

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.


  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    3 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии