that-one-time-at-defcon
Этот год ознаменовался вторым случаем развертывания специальной для события прошивки Meshtastic на DEF CON, и первым случаем сотрудничества с организаторами события и сообществами, такими как Darknet-NG и Lonely Hackers Club, для её создания и внедрения. Хотя официальные данные еще не опубликованы, многие участники сообщили о наблюдении более 2000 индивидуальных узлов, подключенных во время события, с тысячами сообщений, включая значительную долю Rickrolls и даже полные скрипты фильма Bee Movie, циркулирующими по публичным и приватным каналам по всему Лас-Вегасу. Это крупнейшая известная на сегодняшний день сеть Meshtastic.
{/ truncate /}
Цель этой кастомной прошивки и развертывания на DEF CON была двукратной: расширить границы возможностей Meshtastic и продвинуть проект, подвергнув его стресс-тестированию в крупномасштабной среде с высоким трафиком. Насколько «реальным миром» могут быть 2000 узлов в конференц-центре Лас-Вегаса, это предоставило уникальную возможность увидеть, как система работает в экстремальных условиях.
В духе DEF CON участники подвергли сеть всестороннему тестированию и обнаружили ошибки практически на всех платформах, включая Android, iOS, прошивку и аппаратное обеспечение. Эти ошибки варьировались от странностей в отображении эмодзи до полных сбоев приложений. То, что делает это сообщество таким ценным, — это то, что многие из этих открытий сопровождались четкими техническими описаниями и даже предложенными решениями, помогая нам улучшить Meshtastic для всех.
Подробности об этой уязвимости
Во время DEF CON исследователь в области безопасности провел воспроизведение модифицированных сообщений NodeInfo в большом масштабе. Эта техника возможна только в случае, если злоумышленник знает предварительно разделяемый ключ. Такой тип атаки возможен против ad-hoc сети вроде Meshtastic из-за отсутствия централизованного органа управления идентификацией. Это был первый случай, когда подобная атака была наблюдена в активной сети Meshtastic и сообщена команде разработчиков проекта.
Из-за своей ad-hoc конструкции Meshtastic работает по модели Trust on First Use (ToFU). В первый раз, когда устройство видит пакет NodeInfo от данного пира, оно доверяет этой информации. У Meshtastic есть дополнительная сложность: индивидуальные узлы ограничены по памяти. Это означает, что прошивка может отслеживать информацию об узлах только примерно для 100 узлов одновременно. На DEF CON присутствовало более 2000 узлов, поэтому индивидуальный узел просто не может хранить всю базу данных.
По мере появления новых узлов старые узлы вытесняются из базы данных. Когда это происходит, прошивка может принять и сохранить поддельный NodeInfo. Это известное ограничение, которое смягчается системой избранного и дополнительными проверками через мобильные клиенты. Когда узел помечается как избранный, он никогда не вытесняется из NodeDB. Узлы автоматически добавляются в избранное при отправке DM на этот узел или при обмене контактами через QR-код.
Мобильные клиенты обеспечивают дополнительный уровень защиты, храня полную копию NodeDB. Когда получен новый NodeInfo с измененным публичным ключом, мобильные приложения отмечают несоответствие и уведомляют пользователя красным предупреждающим сообщением в интерфейсе. Это сработало как задумано с технической стороны, но мы поняли, что здесь требуется доработка пользовательского опыта.

Проблема, требующая дальнейшего внимания, заключается в том, что каналы Meshtastic, использующие предварительно разделяемые ключи, не имеют проверки сообщений. Злоумышленник может внедрять сообщения, которые кажутся исходящими от других пользователей, если ему известен предварительно разделяемый ключ канала.
Еще одна отмеченная проблема: поддельный пакет NodeInfo, использующий правильный публичный ключ и номер узла, может перезаписать другие детали этого узла в NodeDB всех остальных. Именно так списки узлов показывали узлы с эмодзи ниндзя 🥷, что было забавным и подходящим для DEF CON способом демонстрации.
Демонстрация выявила дополнительную уязвимость: прошивка Meshtastic хранит копию своего собственного NodeInfo в локальной NodeDB. Когда получен поддельный пакет с номером узла локального узла, эта копия может быть частично перезаписана. Сам узел затем отобразит эту поддельную информацию в подключенном клиенте. Это ограничено полями вроде длинного имени узла (Longname) и короткого имени (Shortname), а также несколькими другими метаданными (не включая публичный ключ). Однако после перезагрузки эти данные будут сброшены к правильной информации владельца, хранящейся в прошивке.
Несколько замечаний/исправлений относительно некоторых исследований, опубликованных публично:
- Публичные ключи не обновляются автоматически при получении нового пакета NodeInfo. Они неизменяемы в NodeDB на протяжении всего времени существования узла в NodeDB.
- Прямые сообщения (Direct Messages) шифруются и подписываются с использованием AES-CCM на основе публичного ключа, полученного при начальном обмене nodeinfo. Если у злоумышленника нет знаний о приватных ключах узла или он не может полностью контролировать начальный обмен NodeInfo, на данный момент нет известных методов перехвата и расшифровки двустороннего разговора по DM.
Устранение выявленных проблем
Уязвимость с поврежденным отображением NodeInfo устранена с помощью целевого патча, который предотвращает обработку пакетов, имитирующих локальный узел, модулем NodeInfoModule. Грядет целая серия дополнительных укрепляющих исправлений, которые устранят более широкий вектор атаки, связанный с обработкой узлом поддельных пакетов, кажущихся исходящими от него самого.
Помимо этой уязвимости, было особенно интересно увидеть технику подделки пакетов, примененную в реальных условиях. Рассматриваются улучшения пользовательского опыта, такие как опция для мобильного клиента повторно развертывать доверенные ключи на локально подключенное устройство.
Развертывание на DEF CON этого года подчеркнуло необходимость подписанных сообщений в каналах PSK, а также расширенной функциональности проверки идентификации. Это даст пользователям Meshtastic инструменты для положительного подтверждения, что сообщение отправлено именно тем пользователем, за которого оно себя выдает. Подпись сообщений давно является целью проекта, но криптографические подписи часто дороги по ресурсам устройства и пропускной способности. Проект сейчас продвигается в этом направлении и продолжит внедрять отзывы сообщества для достижения целей.
Создание устойчивой экосистемы mesh-сетей
Meshtastic разрабатывается без единого сценария использования, и проект тщательно избегает рекомендаций по применению для чувствительных коммуникаций. Протоколы маршрутизации усилены до уровня удобства использования в mesh-сети из 2000+ человек, и теперь фокус смещен на другие аспекты, такие как безопасность, идентификация и прикладная криптография, необходимая для удовлетворения этих новых потребностей. PKI была внедрена менее года назад, и концепция крупномасштабной/открытой/городской mesh-сети не была изначальной целью проекта, но это то, что мы как сообщество с энтузиазмом развиваем и стремимся лучше поддерживать.
Проект Meshtastic ценит усилия исследователей и создал список задач для устранения наблюдавшегося:
- Привлечь помощь специалистов по прикладной криптографии для определения наилучшего способа реализации (например) схемы подписи с ограничением по пространству для различных типов сообщений.
- Внедрить и задокументировать рекомендуемый рабочий процесс для ручной проверки идентификации.
- Внедрить и задокументировать централизованную VDP, чтобы отчеты можно было подавать ответственно.
- Для этого DEF CON была создана VDP с Intigriti, и проект внедрит более постоянное решение. Кроме того, отчеты об уязвимостях продолжают поддерживаться в ключевых GitHub-репозиториях проекта.
Если вы специалист по прикладной криптографии с слабостью к LoRa, приходите пообщаться в Discord.
Мы очень довольны результатами развертывания Meshtastic на DEF CON и продолжим развивать проект в направлении функциональной, бесплатной и открытой mesh-сети.
TL;DR
TL;DR: На DEF CON исследователь продемонстрировал способ подделки информации об узлах при определенных условиях, что привело к последующим проблемам в сообщениях каналов. Зашифрованные DM и приватные ключи не пострадали. Конкретная проблема уже исправлена патчем, а событие подчеркнуло области для будущих улучшений, включая пользовательский опыт, проверку идентификации и подпись сообщений.
Дополнение
Обновлено 18/8/2025
Атака, продемонстрированная на DEF CON, пересекается с проблемами, ответственно сообщёнными через security advisories GitHub, которые скоро станут публичными. Тот факт, что узлы могут вытесняться из базы данных, является известным ограничением аппаратного обеспечения с ограниченными ресурсами, используемого Meshtastic. Существующие защиты, такие как система избранного и расширенная база данных узлов в мобильных клиентах, доказали свою неоценимую ценность на DEF CON. Это напрямую благодаря исследователям, работавшим над улучшением модели безопасности Meshtastic.
DEF CON этого года — первый случай, когда подобная атака была продемонстрирована в реальных условиях против крупной публичной mesh-сети. В попытке не преуменьшить эту демонстрацию, этот пост в блоге непреднамеренно преуменьшил существующие исследования по атакам подделки на NodeInfo и другие типы пакетов. Это не было сделано намеренно, и приносим извинения исследователям, которых невольно задели.