Архитектура и основы безопасности Zigbee
Представьте себе дом, где лампочки сами включаются, когда вы входите, а термостат автоматически регулирует температуру. Это реальность, которую предлагает Zigbee — беспроводная сеть, незаметно управляющая умными устройствами в вашем доме.
Но как работает эта невидимая «нить»? И насколько это безопасно? В этой статье рассмотрим основные концепции Zigbee, его архитектуру и технологические характеристики, а также погрузимся в главные механизмы обеспечения его безопасности.
Введение
Zigbee — это стандарт беспроводной связи, разработанный для создания сетей с низким энергопотреблением, поддержкой масштабируемости и надежностью. Эта технология, основанная на стандартном протоколе IEEE 802.15.4, предназначена для связи между устройствами в различных областях, включая умный дом, промышленность и медицинские приложения.
Zigbee появился как часть идеи создать сеть для устройств с низким энергопотреблением, которые могли бы общаться между собой без использования проводов. Изначально его разработка была тесно связана со стандартом IEEE 802.15.4, который отвечал за беспроводные сети в целом.
В 2002 году образовалась компания Zigbee Alliance (сейчас известная как Connectivity Standards Alliance), которая занялась продвижением и стандартизацией Zigbee. 13 июня 2005 года вышла первая спецификация протокола, которая получила распространение под названием ZigBee 2004 Specification, и на рынке стали появляться продукты, работающие на ее основе. С тех пор Zigbee рос и улучшался: появлялись новые версии, каждая из которых делала его более надежным, безопасным и гибким. Например, Zigbee PRO (2007) сделал сеть более устойчивой к помехам, а Zigbee 3.0 (2015) добавил возможность прямого подключения к Интернету.
Однако с ростом популярности технологии растут и риски, связанные с её использованием. Каждое новое подключенное устройство потенциально может стать точкой входа для злоумышленников.
Обзор Zigbee
Все устройства в сети Zigbee можно разделить на три типа: координатор, маршрутизаторы и конечные (пользовательские) устройства, — каждое из них играет свою роль.
Функция | Координатор | Маршрутизатор | Конечное устройство |
Создание сети | ✓ | ||
Выдача разрешений на присоединение к сети другим устройствам | ✓ | ✓ | |
Назначение 16-разрядного сетевого адреса | ✓ | ✓ | |
Обнаружение и хранение маршрутов | ✓ | ✓ | |
Обнаружение и хранение списка соседей, доступных через 1 хоп | ✓ | ✓ | |
Маршрутизация сетевых пакетов | ✓ | ✓ | ✓ |
Присоединение и выход из сети | ✓ | ✓ | ✓ |
Режим сна | ✓ |
Координатор — это мозг, администратор всей сети. Он устанавливает связь между устройствами и позволяет ими управлять, определяет, на каком канале будет происходить общение, а также инициализирует и передает сообщения между устройствами. Важно отметить, что в сети может быть только один координатор. Координатор Zigbee также может подключаться к другим сетям, включая Wi-Fi. Обычно это происходит через интеграцию с умными хабами или шлюзами, которые могут работать как мост между Zigbee и другими протоколами.
Маршрутизаторы (роутеры) помогают расширять диапазон сети и обеспечивают связь между координатором и конечными устройствами. Они получают и распространяют сообщения, предназначенные для конечных устройств.
Конечные устройства выполняют конкретные задачи и взаимодействуют с пользователем или окружающей средой. Они могут общаться между собой при помощи маршрутизаторов и имеют ровно столько информации об устройстве сети, сколько нужно для связи с ближайшим роутером или координатором. Ключевой особенностью конечных устройств является их обычно низкое энергопотребление, так как они способны входить в режим сна для экономии ресурсов. Примерами таких устройств могут служить датчики движения, умные замки, лампочки и многое другое.
Сеть Zigbee
Zigbee поддерживает три варианта организации топологии сети:
Звезда (star): все устройства подключаются к центральному узлу (координатору). Это простая и надежная топология, но она создает ограничения по количеству устройств и дальнодействию.
Древовидная (cluster tree): устройства создают иерархическую структуру с центральным узлом, который является как бы корнем дерева. Это более масштабируемая топология, чем звезда, но она более сложна в настройке.
Сетчатая (mesh): это самая гибкая и надежная топология, так как она обеспечивает избыточность и устойчивость к сбоям.
Топологии Zigbee
Архитектура сети Zigbee состоит из комбинации четырех уровней, из которых два нижних определены стандартом IEEE 802.15.4, а два верхних — альянсом Zigbee.
Уровни Zigbee
Физический слой отвечает за физическое кодирование и декодирование сигналов, определяя то, как данные передаются по радиоканалу; он задает такие параметры как мощность передачи, модуляция сигнала, частота передачи. Zigbee может работать в трех диапазонах частоты: 868 МГц (преимущественно в Европе), 915 МГц (в США и Австралии) и 2,4 ГГц (во всем мире). При этом заметим, что на частоте 2,4 ГГц Wi-Fi и Zigbee могут пересекаться и создавать помехи друг для друга. Для решения этой проблемы есть функция Energy Detect, которая заставит Zigbee выбрать канал, в котором будет создаваться меньше всего помех.
MAC-слой (Media Access Control) отвечает за доступ к каналу связи и управление передачей данных, тип пакета данных (Beacon, Data и т.д.), реализует механизмы доступа к каналу (CSMA/CA), управления потоком данных и контроля ошибок.
MAC-фрейм
В Data Frame инкапсулируются данные из протоколов, работающих на уровнях выше IEEE 802.15.4. Посмотрим на то, как выглядит заголовок (особое внимание обратим на Auxiliary Security Header, мы к нему вернемся позже):
Data Frame
Ack Frame нужен для подтверждения полученных данных:
Ack Frame
Во избежание возникновения коллизий передача данных может осуществляться в режиме Beacon: координатор распространяет специальные сообщения, beacon«ы, которые используются для синхронизации времени между устройствами в сети и могут содержать информацию о состоянии сети и загруженности канала, что помогает устройствам оптимизировать потребление энергии, позволяя им «спать» дальше и «просыпаться» только для получения необходимых уведомлений.
На этом же уровне определяется специальный идентификатор сети PAN ID (Personal Area Network ID), отделяющий одну сеть Zigbee от другой, если они работают на одном канале. PAN ID представляет собой 16-битное число (от 0 до 65535), которое устанавливается при настройке сети и хранится во внутренней памяти каждого устройства.
Сетевой слой отвечает за маршрутизацию данных между устройствами в сети, определяя оптимальный путь для передачи данных.
NWK Layer
Прикладной слой предоставляет интерфейс для приложений, которые взаимодействуют с сетью Zigbee.
Преимущества Zigbee
Немного отступим от темы и попытаемся ответить на вполне логичный вопрос: зачем нам нужен Zigbee, если уже есть такие беспроводные протоколы, как Wi-Fi и Bluetooth?
Bluetooth используется для кратковременной связи между устройствами, расположенными на небольшом расстоянии друг от друга. Он имеет более высокую скорость передачи данных, чем Zigbee, но гораздо менее энергоэффективен. Подключение устройства к Bluetooth может занимать до 10 секунд, а устройств в сети может быть не более 7.
Wi-Fi предназначен для более высокоскоростной связи и на большом расстоянии, и он также требует гораздо больше энергии, чем Zigbee. Чтобы устройство подключилось к сети, требуется ждать до 3 секунд, максимальное число устройств в сети — 32.
В то же время подключение устройства к сети Zigbee занимает около 30 миллисекунд, а всего устройств может быть порядка 65000 (в теории).
Безопасность Zigbee.
IEEE 802.15.4 и AES-128.
IEEE 802.15.4 использует алгоритм шифрования AES-128 (Advanced Encryption Standard) с ключом длиной 128 бит (16 байт). Такой размер ключа обеспечивает безопасность алгоритма, который еще никогда не был взломан. Выбор этого алгоритма обусловлен наличием специальных аппаратных модулей для его реализации на устройствах с ограниченными ресурсами. Также этот алгоритм используется не только для шифрования, но и для проверки целостности данных (Data Integrity), для чего применяется Message Integrity Code (MIC), который может добавляться к отправляемому сообщению. MIC создается шифрованием части фрейма 802.15.4 с использованием ключа сети. Если полученный MIC не совпадает с ожидаемым, это означает, что данные были изменены. MIC может иметь длину 0, 32, 64 или 128 бит, что определяет вероятность того, что случайным образом подобранное его значение будет верным.
Рассмотрим подробнее принцип работы AES-128. Это симметричный алгоритм блочного шифрования, оперирующий блоками по 128 бит. То есть этот алгоритм берет 128 бит исходного текста и с помощью 128-, 192- или 256-битного ключа шифрования превращает его в 128 бит шифротекста. Этот алгоритм основан на SP-сети (Substitution-Permutation network): имея на входе исходный блок и ключ шифрования, он совершает несколько идущих друг за другом циклов, состоящих из стадий подстановки и стадий перестановки блоков.
S-блок получает на вход блок входных бит и взаимно однозначно заменяет его на блок выходных, который получает P-блок, переставляет в нем все биты и снова передает S-блоку. Для каждого такого раунда используется новый раундовый ключ, сгенерированный из исходного. Если исходный ключ содержал 128 бит, то всего раундов будет 10.
В самом начале алгоритма 128-битный (или 16-байтный) или дополненный до такового блок исходного текста раскладывается в матрицу 4×4, в каждой ячейке которой содержится ровно один байт, — эта матрица (state) выглядит следующим образом:
0 | 4 | 8 | 12 |
1 | 5 | 9 | 13 |
2 | 6 | 10 | 14 |
3 | 7 | 11 | 15 |
В этой таблице 0, 1, 2 и так далее — номер байта.
Ключ же на первом этапе превращается в (n+1) ключей, где n — число раундов. Таким образом, если изначально ключ состоял из 128 бит, то он преобразуется в 11 раундовых ключей для работы алгоритма. В самом начале шифрования используем первый раундовый ключ и исходный текст и сложим их по модулю 2 (XOR).
Раунд алгоритма AES
Рассмотрим процесс, происходящий в рамках одного раунда шифрования:
1. Функция SubBytes замещает одни байты из таблицы другими (подстановка);
2. Функция ShiftRows совершает сдвиг элементов в каждой строке матрицы (перестановка);
3. Функция MixColumns перемешивает элементы в рамках столбца (перестановка) — не выполняется в финальном раунде;
4. Прибавляется раундовый ключ.
Для преобразования ключа используется функция KeyExpansion, которая циклично выполняет XOR исходного ключа с ключами из фиксированного массива Rcon.
Функция SubBytes заменяет каждый элемент state соответствующим элементом специальной таблицы SBox по формуле: sij = SBox[sij]. Сама таблица SBox представляет собой 256-байтный массив. Чтобы обратиться к его элементу S, нужно вычислить обратный байт к Sв поле Галуа GF (28) — b, а затем выполнить следующие действия: S = b ⊕ (b <<< 1) ⊕ (b <<< 2) ⊕ (b <<< 3) ⊕ (b <<< 4) ⊕ 6316. Иначе:
Вычисление элементов SBox
Функция ShiftRows выполняет перестановки элементов строк следующим образом: первая строка матрицы state (уже измененной после SubBytes) остается неизменной, элементы второй строки сдвигаются на одну позицию влево, третьей строки — на две позиции влево, четвертой строки — на три позиции влево.
Наконец, функция MixColumns перемешивает элементы в рамках каждого столбца. Каждый столбец можно представить как полином вида b (x) = b3×3 + b2×2 + b1x + b0, а далее этот полином умножается на a (x) = 3×3 + x2 + x + 2 по модулю неприводимого многочлена m (x) = x4 + 1. Все действия выполняются в поле Галуа GF (2).
Вернемся к MAC-слою протокола: он может обеспечивать безопасность передачи данных. Когда третий бит в поле Frame Control равен 1, то есть активируется режим Security Enabled, появляется дополнительный заголовок Auxiliary Security Header, который задает уровень безопасности и активирует счетчик, позволяющий исключить простейшие атаки. Этот заголовок включает три поля:
Security Control (1 байт) — определяет уровень безопасности (Security Level) и длину MIC, то есть здесь задается Security Policy;
Frame Counter (4 байта) — специальный счетчик, который выполняет две важные функции:
предотвращение повторной отправки (Replay Protection): счетчик позволяет убедиться, что пользователь не может повторно использовать старые фреймы для получения доступа к сети или изменения данных. Каждый раз, когда устройство отправляет фрейм, счетчик увеличивается на единицу. Получатель проверяет Frame Counter входящих фреймов, и если текущее значение уже встречалось, то фрейм отбрасывается.
обеспечение верной последовательности передачи данных: счетчик позволяет проверить, что фреймы приходят в правильном порядке и без пропусков.
AUX Security Header
Используя поле Security Level, принадлежащее заголовку Security Control, мы можем выбрать длину MIC и другие параметры:
Security Level
Security Level определяет, как хорошо будет защищен исходящий фрейм и как хорошо был защищен входящий. Это поле также отвечает за то, будет ли зашифрована полезная нагрузка, а также за уровень достоверности.
Поле Key ID Mode задает тип ключа, который будет использоваться при общении между отправителем и получателем. Возможные значения:
0 — ключ задается неявным образом, который не уточняется в сообщении;
1, 2, 3 — ключ задается явным образом при помощи полей Key Index (позволяет идентифицировать разные ключи из Key Source) и Key Source из Key Identifier Field и может иметь разную длину в зависимости от того, задано значение 1, 2 или 3.
Таким образом, устройство поля, содержащего полезную нагрузку, Frame Payload (рис. 4), зависит от перечисленных выше конфигураций. Иначе говоря, стандарт IEEE 802.15.4 предоставляет три уровня безопасности:
AES-CTR: данные зашифрованы при помощи 128-битного ключа по алгоритму AES, и счетчик устанавливает уникальные ID сообщений и выполняет свои описанные выше функции;
AES-CBC-MIC: в конец поля с полезной нагрузкой добавляется MIC, длина которого определена полем Security Level;
AES-CCM: этот уровень представляет собой смесь двух предыдущих.
Уровни безопасности IEEE 802.15.4
Zigbee
Механизмы обеспечения безопасности Zigbee дополняют IEEE 802.15.4, обеспечивая безопасность на уровнях Network и Application. В целом архитектура безопасности этого протокола представляет собой модель «open trust», основанную на следующих предположениях:
различные приложения, работающие в рамках одного устройства, доверяют друг другу;
данные между различными частями программного обеспечения одного устройства не шифруются;
устройство не станет без необходимости и соответствующей команды передавать ключи безопасности другим устройствам;
обмен данными между двумя различными устройствами криптографически зашифрован;
аппаратное обеспечение защищено от несанкционированного доступа.
Далее рассмотрим две различные модели безопасности Zigbee.
Распределенная модель безопасности Zigbee
Распределенная модель является наиболее простой в реализации, но в то же время менее надежной. Основная идея данной модели заключается в том, что маршрутизаторы отвечают за аутентификацию конечных устройств путем инициализации сети и генерации ключа сети (network key). Конечные же устройства должны знать pre-configured link key, чтобы иметь возможность подключиться к сети. При этом network key один и тот же для всех устройств в сети, что делает такую модель менее безопасной.
Централизованная модель безопасности Zigbee
В централизованной модели координатор отвечает не только за построение и организацию сети, но также и за безопасность в ней, являясь «центром доверия» (Trust Center). В его зону ответственности входит аутентификация устройств в сети (добавление новых устройств) и создание ключей шифрования для уровней Network и Application. Рассмотрим виды ключей, определенных в стандарте Zigbee, все они имеют длину 128 бит и генерируются также при помощи AES-128:
Network Key — ключ, используемый при широковещательном формате общения. Он регулярно генерируется центром доверия, не оставаясь постоянным долгое время. Когда центр доверия инициализирует смену Network Key, он широковещательно рассылает новый ключ, при этом Frame Counter на всех устройствах обращается в ноль. Каждое новое устройство, желающее подключиться к сети, должно сначала получить этот ключ.
Link Key (или Application Link Key) — ключи, уникальные для каждой пары устройств, используются для шифрования передач сообщений между ними.
Посмотрим (например, при помощи Wireshark), как происходит подключение нового устройства к сети Zigbee:
Подключение нового устройства
Номер пакета | Что происходит |
1852 | Beacon |
1853 | Association Request = устройство отправляет запрос на подключение к сети |
1857 | Association Response = устройство получает значение PAN ID и свой адрес |
1873 | Transport Key = координатор (или Trust Center) отправляет устройству на его новый адрес Network Key в зашифрованном виде |
На уровнях Network и Application, подобно MAC-слою, появляется Auxiliary NWK/APS Security Header, если в соответствующем поле Security из Frame Control выставлен 1 бит. Устроены они аналогичным образом.
Zigbee Security Header
Подводя итоги, можно сказать, что Zigbee предоставляет достаточный уровень безопасности для большинства приложений IoT, но важно учитывать конкретные требования к безопасности при разработке и развертывании систем Zigbee, а также стоит помнить, что никакая система безопасности не является абсолютно непробиваемой.