Scope group isolation plan to CHAT and defer UTUN
This commit is contained in:
1 parent
bb02709be3
commit
cbffb6492a
2 files changed
+53
-57
No files matched your search
@@ -1,11 +1,13 @@
|
||||
Межгрупповой доступ: план завершения изоляции
|
||||
Межгрупповой доступ: план изоляции CHAT-групп
|
||||
Дата: 03.11.2026
|
||||
Статус: проект исправления; этапы ниже ещё не реализованы.
|
||||
Уточнение объёма: по указанию пользователя UTUN пока не дорабатывать.
|
||||
|
||||
1. Цель и исходное состояние
|
||||
|
||||
На одном ядре могут существовать несколько CHAT-групп и UTUN. Узел, допущенный
|
||||
только в A, не должен получать данные, менять состояние или запускать операции B.
|
||||
На одном ядре могут существовать несколько CHAT-групп и UTUN. Текущая задача —
|
||||
изоляция CHAT-групп: узел, допущенный только в A, не должен получать данные,
|
||||
менять состояние или запускать операции другой CHAT-группы B.
|
||||
Проверка должна работать на уже открытом общем ETCP и после отзыва членства.
|
||||
Наличие транспорта, маршрута, TOPO_GROUP_NODE или записи в общем node_registry
|
||||
не является разрешением на API группы.
|
||||
@@ -19,8 +21,6 @@ topo_group_chat_allowed и закрытие запрещённых канало
|
||||
Основные подтверждённые места для исправления/проверки:
|
||||
- radio_recv/broadcast_recv: выбор группы без проверки допуска входящего соседа;
|
||||
- conn_mgr_router_recv_handler/cm_open: существование группы/узла вместо допуска;
|
||||
- TCP/UDP/ICMP proxy и routing_pkt_from_etcp_cb: отсутствует входной фильтр группы;
|
||||
- topo_group_peer_allowed: для не-CHAT возвращает разрешение;
|
||||
- MEMBER_FILES/GROUP_AVATAR и ряд других сервисов: проверка данных внутри
|
||||
callback не задаёт обязательную подпись router HELLO/ACK/CLOSE и других controls;
|
||||
- multicast mc_report_recv: проверяет форму и дескриптор группы, но не членство
|
||||
@@ -36,9 +36,19 @@ topo_group_chat_allowed и закрытие запрещённых канало
|
||||
|
||||
Развивать существующие механизмы, без второго универсального слоя авторизации.
|
||||
|
||||
Схема обычного запроса к CHAT-группе B:
|
||||
общий транспорт
|
||||
-> проверенная личность отправителя для данного протокола
|
||||
-> живая CHAT-группа B и активное локальное членство self и peer в B
|
||||
-> право на конкретную операцию и совпадение контекста запроса с B
|
||||
-> выполнение операции внутри B.
|
||||
Отказ на любом шаге прекращает обработку до соответствующих побочных действий.
|
||||
Членство в A не помогает пройти проверку B, даже при общем ETCP и тех же ID файлов.
|
||||
JOIN и восстановление MEMBERS имеют отдельные ограниченные входы из п. 2.4.
|
||||
|
||||
2.1. Групповые routed API
|
||||
|
||||
Использовать etcp_router_require_crypto и etcp_router_set_authorize. Для CHAT
|
||||
Использовать существующие механизмы обязательной криптографии и authorize router. Для CHAT
|
||||
базовый допуск уже реализован в topo_group_chat_allowed: живая группа и активное
|
||||
локальное членство self и peer (source=0, deleted=0, admitted=1).
|
||||
Криптографически проверяется конечный source из router, а не ETCP next hop.
|
||||
@@ -58,8 +68,12 @@ supernode, подпись автора, приглашение, адресат,
|
||||
CONN_MGR: он помогает создать соединение. Его локальный open и входящие команды
|
||||
проверяют допуск до загрузки узла в группу, cm_ensure_entry, таймеров и NCD.
|
||||
Повторная проверка нужна при выборе посредника, retry и публикации готового пути.
|
||||
Для сервисов, работающих и с CHAT, и с UTUN, выбор политики определяется типом
|
||||
реальной группы; неизвестный тип не получает автоматического разрешения.
|
||||
Для сервисов, работающих и с CHAT, и с UTUN, новые правила применять только к CHAT.
|
||||
Не устанавливать для них глобальное требование crypto, меняющее обмен UTUN:
|
||||
нынешний etcp_router_require_crypto задаёт требование сразу всему service ID.
|
||||
Для общих service ID потребуется выбор требований по группе; crypto-проверка
|
||||
должна предшествовать допуску по source. Существующую политику UTUN сохранять,
|
||||
попытки обратиться к несуществующей CHAT-группе отклонять.
|
||||
|
||||
2.2. Raw групповые пакеты
|
||||
|
||||
@@ -81,31 +95,13 @@ STREAM имеет собственные сессии и проверки уча
|
||||
допуска до побочных действий, сохраняя его транспортный жизненный цикл. Проверки
|
||||
соседства RADIO нельзя автоматически навязать прямому STREAM поверх общего NCD.
|
||||
|
||||
2.3. UTUN
|
||||
2.3. UTUN — отложено
|
||||
|
||||
Проверки group_id == TOPO_GROUP_UTUN недостаточно: чужой CHAT-узел может указать
|
||||
это значение. [allowed_keys] сейчас управляет входящим транспортом; allow_all=1
|
||||
нужен, в частности, для новых CHAT-узлов и не должен открывать TUN/NAT/proxy.
|
||||
|
||||
Предлагаемая политика: отдельный список публичных ключей UTUN, например секция
|
||||
[utun_allowed_keys]. По умолчанию внешний доступ закрыт; self допускается при
|
||||
работающем UTUN-сервисе. Не импортировать автоматически транспортные allowed_keys,
|
||||
все [client] или записи BGP. Список проверяется по проверенной идентичности узла,
|
||||
одинаково для UDP/STCP/REALITY и routed источника за промежуточным узлом.
|
||||
Явно открытый UTUN, если он нужен продукту, должен включаться отдельной настройкой
|
||||
UTUN; транспортный allow_all не является этой настройкой.
|
||||
|
||||
Это изменение конфигурационного контракта: на каждом принимающем UTUN-узле
|
||||
понадобится допуск конечных участников, а не только ближайшего сервера. Простой
|
||||
список ключей выбран для первого исправления; подписанное распределённое членство
|
||||
UTUN означало бы отдельный протокол управления и существенно больший объём.
|
||||
|
||||
Одной политикой UTUN закрыть BGP JOIN/обмен, CONN_MGR, NAT_DETECTION, DATA,
|
||||
NAT и обе стороны TCP/UDP/ICMP proxy. У routed API обязательна проверенная подпись
|
||||
source, иначе проверка списка ключей по подставленному node_id не имеет смысла.
|
||||
NAT/proxy сохраняют собственные ограничения provider/via, ожидаемого peer и потока.
|
||||
При изменении допуска закрывать соответствующие логические операции и сокеты,
|
||||
сохраняя общий транспорт, необходимый CHAT. Учесть start/stop и применение конфига.
|
||||
Не менять допуск UTUN, его конфигурацию, DATA/TUN, NAT и TCP/UDP/ICMP proxy.
|
||||
В общих CONN_MGR, BGP, NAT_DETECTION, multicast и router сохранить поведение UTUN;
|
||||
не распространять на него новые CHAT-проверки или обязательные crypto-флаги.
|
||||
Ранее найденные пробелы UTUN остаются отдельной отложенной задачей.
|
||||
Регрессии существующего поведения UTUN запускать, доработку доступа не выполнять.
|
||||
|
||||
2.4. Bootstrap, синхронизация и личные данные
|
||||
|
||||
@@ -145,7 +141,7 @@ self, остановка/удаление группы. Отмена серви
|
||||
Расширить подход test_media_delivery_integration: реальные ядра, SQLite,
|
||||
подписанные участники, две группы и один физический ETCP. Инъекция должна идти
|
||||
ниже локального запрета отправителя, иначе тест проверит лишь клиентскую защиту.
|
||||
Зафиксировать отрицательные воспроизведения RADIO/BROADCAST, CONN_MGR и proxy.
|
||||
Зафиксировать отрицательные воспроизведения RADIO/BROADCAST и CONN_MGR в CHAT.
|
||||
Добавить осмысленные логи отказа и очистки: service, group, source, next_hop,
|
||||
команда/операция, фаза проверки, причина; без приватных ключей/содержимого файлов.
|
||||
Критерий: в старом коде наблюдаем конкретный запрещённый эффект, после исправления
|
||||
@@ -156,7 +152,8 @@ self, остановка/удаление группы. Отмена серви
|
||||
ADMIN_KEY и routed JOIN. ADMIN_KEY дополнительно связывает канал с router group.
|
||||
CONN_MGR проверяет вход, local open, кандидатов и отложенные переходы состояния.
|
||||
NAT_DETECTION и MULTICAST_REPORT получают допуск конечного источника и подпись
|
||||
controls; STREAM routed — согласованную с его действующими проверками политику.
|
||||
controls для CHAT; STREAM routed — согласованную с его проверками политику.
|
||||
Общие service ID используют требования по группе, сохраняя контракт UTUN.
|
||||
MEDIA_DELIVERY остаётся контрольным образцом и регрессией.
|
||||
Критерий: чужой/отозванный peer не создаёт сессий, файлов, запросов подключения,
|
||||
NAT-проб и отчётов; unsigned HELLO/ACK/CLOSE не воздействуют на разрешённый канал.
|
||||
@@ -169,28 +166,19 @@ self, остановка/удаление группы. Отмена серви
|
||||
Критерий: подстановка чужого group/src не доставляет callback, не загрязняет
|
||||
dedup и не порождает пересылку; удаление участника прекращает текущую передачу.
|
||||
|
||||
Этап 4. Независимый допуск UTUN
|
||||
Реализовать отдельную конфигурацию доступа, отказ по умолчанию и применение
|
||||
политики из п. 2.3 во всех входах UTUN, включая DATA/TUN и клиентские proxy replies.
|
||||
Обновить sample, документацию и тестовые конфиги явным допуском нужных узлов.
|
||||
Критерий: CHAT-only peer с валидным транспортом не использует UTUN даже указав
|
||||
правильный UTUN group_id; разрешённый routed клиент работает через посредника.
|
||||
Проверить UDP/STCP/REALITY и существующие proxy/NAT/load тесты, включая нагрузку
|
||||
после введения подписи. Не заменять проверку членства наличием маршрута.
|
||||
|
||||
Этап 5. Личные сервисы, bootstrap и полная матрица
|
||||
Этап 4. Личные сервисы, bootstrap и полная матрица CHAT
|
||||
Проверить DM, DM_MAILBOX, DM_MEDIA, FILE_TRANSFER, CALL/CALL_AUDIO/CALL_VIDEO,
|
||||
CALL_VIDEO_CONTROL и DEVGROUP; обязательные controls и групповые/предметные права.
|
||||
Завершить тесты raw JOIN/invite, MEMBERS recovery и серверного add_key.
|
||||
Сопоставить каждый ID из etcp_api.h с реализованной политикой и сетевым тестом.
|
||||
Сопоставить каждый ID из etcp_api.h с политикой и тестом либо пометкой «UTUN отложен».
|
||||
NTP_TIME/NCD_CONTROL/SVC_ROUTE — общие транспортные службы: проверить их границы
|
||||
отдельно. Не навязывать им фиктивное CHAT-членство. Проверить отсутствие обхода
|
||||
через raw DATA/неизвестный ID и явно включаемую BLE_PROBE instrumentation.
|
||||
к CHAT через неизвестный ID и явно включаемую BLE_PROBE instrumentation.
|
||||
Критерий: по каждому ID есть разрешённый сценарий, отказ либо документированный
|
||||
транспортный/bootstrap контракт; без строки «не проверено» для групповых API.
|
||||
транспортный/bootstrap контракт; без строки «не проверено» для API CHAT-групп.
|
||||
|
||||
После каждого этапа: целевые тесты и ./check.sh; изменения фиксировать отдельными
|
||||
логически завершёнными коммитами. Этапы 2/3 не означают готовность этапов 4/5.
|
||||
логически завершёнными коммитами. Этапы 2/3 не означают готовность этапа 4.
|
||||
Успешный общий набор без новых отрицательных сценариев не закрывает задачу.
|
||||
|
||||
4. Обязательная матрица регрессий
|
||||
@@ -211,8 +199,11 @@ self, остановка/удаление группы. Отмена серви
|
||||
при совпавшем числовом stream/transfer ID. Учесть существующие границы epochs.
|
||||
11) Для запрета проверяется побочный эффект: callback/БД/файл/сокет/таймер/NCD,
|
||||
а не только отсутствие ответа. Логи объясняют точную причину отказа.
|
||||
12) Положительные JOIN, MEMBERS recovery, DM через другую общую группу и разрешённый
|
||||
UTUN проходят. Локальные loopback-вызовы соблюдают ту же предметную политику.
|
||||
12) Положительные JOIN, MEMBERS recovery и DM через другую общую группу проходят.
|
||||
Локальные loopback-вызовы соблюдают ту же предметную политику.
|
||||
13) Существующие UTUN-сценарии на общих сервисах сохраняют поведение и формат;
|
||||
новых требований к его конфигурации и криптографии не появляется.
|
||||
|
||||
Задача завершена только после реализации всех этапов и этой матрицы для каждого
|
||||
относящегося к ней сервиса. Сам этот документ не подтверждает устранение пробелов.
|
||||
относящегося к CHAT сервиса. UTUN не входит в эту гарантию и остаётся отложенным.
|
||||
Сам этот документ не подтверждает устранение пробелов.
|
||||
+11
-6
@@ -5,18 +5,23 @@
|
||||
|
||||
## Текущие задачи
|
||||
|
||||
[ ] **Завершить аудит межгруппового доступа всех сетевых сервисов** — 03.11.2026.
|
||||
[ ] **Завершить изоляцию API CHAT-групп** — 03.11.2026. UTUN пока не трогать по указанию пользователя.
|
||||
MEDIA_DELIVERY закрыт отдельной политикой router и негативными сетевыми тестами; это не гарантия для остальных сервисов.
|
||||
По чтению кода: RADIO/BROADCAST выбирают группу из wire без проверки членства входящего пира;
|
||||
CONN_MGR разрешает диспетчеризацию по существованию группы, DIRECT_REQ использует общий node_registry;
|
||||
TCP/UDP/ICMP proxy на приёме не проверяют router group. MEMBER_FILES/GROUP_AVATAR проверяют данные в обработчиках,
|
||||
MEMBER_FILES/GROUP_AVATAR проверяют данные в обработчиках,
|
||||
но не задают обязательную подпись control-пакетов в router. Нужны отдельные воспроизведения на общем ETCP,
|
||||
проверка подмены источника, отзыва доступа и соседней группы; правила JOIN/invite и личных DM учитывать отдельно.
|
||||
На этом этапе перечисленные дополнительные сценарии проверены чтением кода, сетевые регрессии ещё не добавлены.
|
||||
План исправления и критерии по пяти этапам: [group_isolation_plan.txt](group_isolation_plan.txt).
|
||||
Дополнительно включены DATA/TUN, MULTICAST_REPORT, ADMIN_KEY, NAT_DETECTION и аудит допуска DM/mailbox;
|
||||
отдельный доступ UTUN не должен наследовать transport allow_all. MEMBERS recovery и первичный JOIN требуют
|
||||
отдельных правил. План зафиксирован; новые этапы ещё не реализованы, вывод о полной изоляции преждевременен.
|
||||
План исправления и критерии по четырём этапам: [group_isolation_plan.txt](group_isolation_plan.txt).
|
||||
Включены MULTICAST_REPORT, ADMIN_KEY, CHAT-обмен NAT_DETECTION и аудит допуска DM/mailbox.
|
||||
MEMBERS recovery и первичный JOIN требуют отдельных правил. Общие service ID должны сохранить поведение
|
||||
и crypto-требования UTUN. План зафиксирован; новые этапы ещё не реализованы.
|
||||
|
||||
[ ] **Отложено: отдельный допуск UTUN и его API** — 03.11.2026. Не выполнять в текущей задаче по указанию пользователя.
|
||||
По чтению кода: TCP/UDP/ICMP proxy и routing DATA не проверяют входящий router group;
|
||||
topo_group_peer_allowed разрешает не-CHAT группы, а allowed_keys ограничивает транспорт.
|
||||
Проверка group_id сама по себе не заменяет допуск UTUN. Сетевые воспроизведения и решение остаются отложенными.
|
||||
|
||||
[+] **Панель устройств групповой лички: свои и собеседника** — 03.11.2026.
|
||||
Общий снимок текущего состава закреплённых сторон, включая offline и fallback-устройство.
|
||||
|
||||
Reference in new issue
Block a user