SimpleX. Слив IP, корреляция
После выхода двух предыдущих статей многие начали искать альтернативы и, похоже, нашли - SimpleX.Не удалось прогрузить медиа
Если кратко: это интересное решение, но у него есть ряд важных проблем, о которых стоит знать:
Утечка IP
Корреляция и построение графа связей
Сначала разберём базовую архитектуру.
Не удалось прогрузить медиа
https://smp11.simplex.im/i#ZJkTxKCwI1v2Wq9IQXFNeVSpfQWNcrDf/gun09zFJ1d5TIQjw9e_9YJjG0ivd5kUHVLIyzb9wLdw
1. IP и порт сервера (в примере 5223 и 443, ведь по умолчанию)
2. Позиция в очереди (токен)
3. Публичный ключ
Этот токен гарантирует, что только пользователь сможет получить адресованные ему сообщения.
Пользователь B, получив ссылку, создаёт свою одноразовую ссылку (уже на другом сервере) и
отправляет зашифрованное сообщение на указанный сервер и очередь(токен) пользователя A. Реле принимает сообщение и доставляет его A.
Пользователь A может ответить тем же способом пользователю B, уже по установленной связи.
Слив IP
Не удалось прогрузить медиа
Когда пользователь B отправляет сообщение, его IP виден серверу, указанному в ссылке пользователя A. Если A контролирует этот сервер, он может напрямую узнать IP B.
Но есть и обратный сценарий, более опасный.
Пользователь B в ответе пользователю A, может указать свой сервер для обратной связи. Клиент пользователя A автоматически подключится к нему. Пользователь не будет знать об этом сервере. В результате A раскрывает свой IP серверу B. Пользователь A сможет узнать об этом сервере лишь после установления связи.
Корреляция
Любой сервер может сопоставить IP клиентов и их очереди (токены)
По умолчанию клиенты используют сервера SimpleX и Flux. Свой же сервер поднять проблематично. Нормальная поддержка есть только на Ubuntu 22,24. Из требований - TLS сертификат, домен, а так же ограничения по геолокации, ведь в некоторых странах SimpleX прокол или IP серверов заблокированы.
Спойлер: PS: DPI
Отдельно стоит отметить DPI, хоть это и не основаная проблема. Трафик SimpleX легко распознаётся. 5 сегментов TCP по 2880 байт, затем TLS 1.2 Этот шаблон повторяется независимо от размера сообщения. Провайдер может определить использование SimpleX. IP simplex или Flux известны, поэтому факт использования установить ещё проще.
Cхема выглядит так:
UserA --> SimpleX_1_Relay --> UserB
UserB --> SimpleX_2_Relay --> UserA
UserA --> SimpleX_3_Relay --> UserC
UserC --> SimpleX_4_Relay --> UserA
Несмотря на то, что реле несколько, они принадлежат SimpleX, а IP пользователей статичен. Этого уже достаточно, чтобы сопоставить, кто с кем общается.
SimpleX может создать граф связей пользователей.
Официальное решение этих проблем?
В новых версиях клиента есть опция Private Routing.
Не удалось прогрузить медиа
Она позволяет направлять данные на реле собеседника через ваш реле:
UserA --> SimpleX_1_Relay --> Bad_Relay -- > UserBПользователям всё ещё известны реле друг друга, просто они отправляют данные на эти реле, используя своё реле в качестве прокси.
Это должно маскировать IP пользователей от плохих реле, при этом плохой реле будет видеть вместо IP пользователя, IP его реле.
Если используются дефолтные серверы SimpleX, а так происходит всегда, возникает проблема:
UserA --> SimpleX_1_Relay --> SimpleX_2_Relay --> UserB
Связь легко восстанавливается, ведь релеи SimpleX видят очереди друг друга, как и обращение к ним.
В Private Routing их можно воспринимать как один релей.
UserA <--> SimpleX <--> UserB
То есть SimpleX (как оператор инфры) может установить, кто с кем общается, более того, как и в прошлом случае, построить граф связей.
Если же использовать свой SMP сервер (реле), это имеет смысл лишь при Private Routing
Схема будет выглядеть так:
UserA <--> Custom SMP <--> SimpleX SMP <--> UserB
Учитывая вышеперечисленные проблемы, ваш сервер будете использовать лишь вы, что позволит SimpleX, который видит и ваш relay сервер и IP ваших собеседников - установить граф.
Это проблема актуальна для людей, которые разглашают свой контакт публично, или, имеют много собеседников. Отказ инфраструктуры приведёт к потере контакта.
Резюмирую:
1. Происходит слив твоего IP, ведь собеседник которому ты выдаёшь ссылку для общения с тобой - самостоятельно устанавливает сервер для обратной связи. Сервер может видеть IP подключённых к нему людей, а так же связывать его с "очередью".
2. При использовании Private Routing на серверах SimpleX - можно легко установить корреляцию между тобой и другим пользователем, получить ваши IP. Private Routing не имеет смысла в таком сценарии.
3. Если ты используешь свой собственный SMP сервер, при использовании Private routing ты сливаешь IP сервера не только собеседнику, но и его SMP серверу.
4. Если сервер собеседника от SimpleX - он увидит IP пользователя, как и то, что он обратился к вашему серверу по причине из пункта 1.
Вышеперечисленные проблемы образуют граф связей с твоим IP или твоего сервера, а так же c IP твоих собеседников.
PoC слив IP
Не удалось прогрузить медиа
Всё что необходимо - поднять сервер и смотреть подключения к нему.
Поднятие сервера:
Лучше всего делать это на Ubuntu 24.
Для поднятия SMP сервера необходим TLS сертификат.
Помимо сервера, никаких затрат не нужно. Домен можно получить бесплатно на cloudns.net, а TLS подключить через Let's Encrypt
Поднять SMP сервер:
curl --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/simplex-chat/simplexmq/stable/install.sh -o simplex-server-install.sh && chmod +x ./simplex-server-install.sh; ./simplex-server-install.sh; Далее, для логирования подключений можно использовать всё что угодно. Я же использую код из другой статьи /threads/1083/
./honey 443 5223 для логирования служебных портов, которые использует SimpleXНа этом статья подходит к концу.
У меня есть идея, как можно решить все вышеперечисленные проблемы, однако это требует серъезного патча, скорее даже форка SimpleX.
А пока что, лучшим решением будет использовать Tor с максмально частым интервалом обновления, ну и оффициальные серверы SimpleX.
Автор @ec5745y
Специально для forum.LIMB.cc
Специально для forum.LIMB.cc
👍60
❤️9
😁7
😮9
👏17
💯7
LIMB