Ник | Пост | Дата |
---|---|---|
shiel | Android приложения, опирающиеся на sing-box, по своему дизайну используют открытое для всех приложений соединение на localhost. Помимо возможности обойти обход proxy соединения, приложения могут достичь DoS атаки, потенциально доведя падение до DNS утечки благодаря Google Issue Tracker. Предлагаю сообществу изучить этот вектор атаки со мной. | 2025-03-10T19:58:54.405Z |
shiel | Мне также интересно, додумалось ли какое-либо государство до обнаружения VPN серверов таким образом. | 2025-03-10T20:00:37.449Z |
notcvnt | Интересно. А при каких условиях происходит утечка?
А что насчёт sing-box в этом плане?Для начала: sing-box использует TUN-интерфейс для перехвата сетевого трафика и реализует собственную DNS-подсистему. Что вроде бы должно огорождать от утечки? Да ведь?Но sing-box при этом использует стандартную модель VPN на Android через API, это видно здесь:
А в файле protocol/tun/inbound.go вообще явно указано создание VPN конфигурации через API
А что дальше?С учётом что ещё есть репорты о том же самом на Reddit где представитель VPN ответил следующее (перевод):
ОригиналHi! Kill Switch on Android is an OS-dependent implementation, rather than dependent on our client itself (which is why other users have also reported this behavior with other VPNs, viz. Mullvad & native WireGuard - source). The behavior has been flagged to our developers, and we’re investigating further if there’s anything we can do from our end in order to address this. Additionally, there’s a GrapheneOS specific issue that might be related to this: Thanks for flagging. We’ll update this post if we have any news regarding the matter. Разработчик GrapheneOS (ОС, который использовал реддитор выше) почти разделяет моё итоговое мнение
| 2025-03-10T22:35:45.268Z |
shiel |
Плохая формулировка с моей стороны. Ещё DoT, DoH, которые нативные с Android 13, можно выставить в качестве системных. Единственное - я предполагаю, что можно совершить даунгрейд атаку, так что лучше перестраховаться и воспользоваться сервером с ограниченным/отсутвующим незашифрованным резолвером. А по мне так античит доктрина, где нужно перетянуть ресурсы разработчика. Переписать интеграцию с sing-box - нетривиальная задача. К тому же, это сломает множество сделал и забыл решений. | 2025-03-10T23:50:29.631Z |
notcvnt |
Как вариант кстати, но использует ли Android всегда DOH/DOT аюсолютно для всего - вопрос интересный. ??? А при чём тут GUI натянутая на sing-box, если это проблема sing-box, а не условного nekobox? Как вариант я описал в возможных решениях, тогда да, разработчик условного nekobox сможет у себя такое реализовать. Или может я вприницпе неправильно понял Вас? | 2025-03-10T23:58:08.011Z |
shiel |
Думаю, вы не поняли суть костыля. Любое установленное приложение может просканировать локалхост на предмет наличия прокси, и сделать запрос через него, тем самым установив айпи адрес впн сервера. Это не ресурсозатратное решение. Нет, это проблема именно nekobox, v2rayng и других. sing-box предполагает использование tun интерфейса, а не прокси. | 2025-03-10T23:58:29.514Z |
notcvnt |
Для того чтобы использовать свой tun - пользователю нужны root права Ну, допустим чтобы отправить запрос vless серверу нужно как минимум UUID знать? Не? Иначе он себя поведёт как обычный веб сервер, откинет HTTP 200 OK или что-то в том роде. Как приложение должно узнать UUID для подключение? Это самая интересная часть | 2025-03-11T00:14:02.869Z |
shiel |
Речь идёт о socks/http прокси, создаваемых v2rayng, nekoray по умолчанию на порту 10808. Вы можете убедиться в этом, отправив запрос курлом. | 2025-03-11T00:16:57.521Z |
notcvnt | Отправил curl’ом, получил 400 или я что-то не так делаю? | 2025-03-11T00:24:12.467Z |
shiel |
Эта часть моего ответа касалась источника проблемы. sing-box им не является т.к в принципе не предполагает раскрытия socks/http прокси. Ещё раз: Речь идёт о прокси сервисе на локалхосте, создаваемом V2RayNG, Nekoray при старте приложения. Запустите V2RayNG на телефоне и подключитесь к любому серверу. Откройте Termux/скомпилируйте curl+busybox и отправьте запрос: curl --proxy http://localhost:10808 “https://ipinfo.io” | 2025-03-11T00:26:34.563Z |
notcvnt | Емаё, я уже сонный, пол 4-го, не сразу понял что на телефоне делать надо)) Сейчас попробую | 2025-03-11T00:27:52.571Z |
shiel |
Не интересовался ситуацией на десктопе т.к в принципе не использую Nekoray из-за постоянных утечек днс. Предполагаю, что там по умолчанию отключен прокси сервис для упоротой схемы маршрутизации/обратились не к тому порту. | 2025-03-11T00:28:42.350Z |
notcvnt |
Ниразу не встречал пока что, ну или не замечал На скрине видно что к тому, как и на телефоне сейчас проверил если к порту 2080 обратиться то да, выдаёт ip моего сервера, но может можно просто порт повыше кинуть, как вариант? Я спать пойду всё таки, время много. Напишу в android studio apk и гляну как это будет работать сегодня | 2025-03-11T00:39:24.327Z |
shiel |
Так можно просканировать весь диапазон портов. | 2025-03-11T00:59:03.980Z |
0ka(0ka) | любое приложение на андроид может определить что в системе включен впн и видит все listen порты разом, доступ к инету без впн можно запретить в настройках для прог, но проблема ваша высосана из пальца и вообще с ней лучше на другой форум | 2025-03-11T05:18:29.836Z |
shiel |
Да. Но к чему это? Можно, но эта настройка не влияет на описанную проблему. Посылаю вас с вашей грубостью и невежеством туда же. | 2025-03-11T09:52:07.521Z |
notcvnt |
Этим и занимается всякие Ростикс и вкусно и точка, ты их не проксируешь, но пока VPN включен они ничего не загрузят. Он насчёт вопроса - зачем приложению curl’ом что-то отправлять если добавляется в код следуещее:
и в boolean будет заветное значение, есть ли включенный VPN или нет. @shiel Я бы сказал это ничем (для пользователя) не исправавить. Если хотите поглубже заняться вопросом то можете “упаковать” L2/L3 в L4, и на этом принципе и основе сделать своё VPN приложение. Этот вопром звучит как “А вдруг хуЯндекс браузер будет проводить MITM-атаку через сертификат для прочтения нашего трафика”. Может, но дорого это ему обойдётся. Так же хочу сказать что Ваш изначальный вопрос вообще не звучит как curl на localhost, а идёт речь про утечку
Я в итоге не понял Вашего вопроса, Вы про dns или curl на localhost? | 2025-03-11T17:59:59.241Z |
shiel |
Человек совершенно не понял суть проблемы. Приложение может тривиально обойти geoip и per-app tunneling правила, которые настраивают китайцы для того, чтобы не “палить” перед mainland адрес VPN сервера. Банальность вроде того, что приложения могут обнаружать друг друга 1000 и 1 способом никак не относится к модели угрозы, которую я описал. Я про изучение площади атаки sing-box оберток на Android. Я не понимаю, каким образом добавление небольшого сниппета кода в WeChat, госуслуги обойдется государству коллосальными затратами. Высокий уровень дискуссии, как говорится. | 2025-03-11T18:25:02.473Z |
notcvnt |
Вы не поняли, что я имел в виду не финансовые потери) Способ возможного решения проблемы я описал выше | 2025-03-11T18:42:46.646Z |
shiel | Я честно не понимаю, отчего сразу у двух пользователей развилась дислексия. В сотый раз повторяю, что речь идет об установлении соединения с proxy сервисом на localhost телефона, который ведет трафик через V2RayN(G), Nekoray соединения. В этом сценарии достаточно иметь одно зловредное приложение на телефоне. Вы одновременно не понимаете и модели угрозы, и технического описания способа обойти настройки туннелирования. Модель угрозы:
Приложения могут вшивать обращения к подконтрольному GFW серверу, который находится за пределами Китая (важно подпасть под geoip правила), чтобы таким образом вычислить адрес прокси сервера. Для этого в V2RayNG, Nekoray предусмотрен режим per-app туннелирования, чтобы WeChat гарантированно проходил через mainland соединение. Проблема в том, что приложение может в обход настроек туннелирования пропустить запрос через прокси. | 2025-03-11T18:42:49.563Z |
notcvnt |
Понимаю, но что Вы предлагаете сделать в данном случае тогда? Так Вы определитесь можно ли geoip правила обойти или нет. Я Вас понял, только не пойму что Вы хотите в итоге? Способ решение или диалог что такая проблема существует? Проблема в реализации api на стороне android. С ПК я с того же nekobox Вам выслал скрин что такая схема не прокатывает на ПК, приходит HTTP/400 и всё. Решение через конвертирование L2/L3 в L4 возможно поможет. Или гарантированно устанавливать VPN на роутер и там ставить правила, но это костыли, а не решение проблемы | 2025-03-11T18:49:14.003Z |
shiel |
Можно обойти и geoip правило, и per-app туннелирование. Подумали бы хоть немного, прежде чем писать. this. На ПК существование этой проблемы зависит от изоляции приложений, настроек фаерволла. На скрине, который вы вчера отправили, не было совершено запроса curl’ом через прокси, а HTTP 400 нельзя однозначно трактовать, потому что непонятно, какой тип прокси использует Nekoray. V2RayNG, Nekoray нужно по умолчанию отключить прокси сервис, добавить возможность установить методы аутентификации. Я не встречал приложений, которые бы отказывались работать из-за наличия tun интерфейса. Насколько я понимаю, по правилам GPlay такое приложение нельзя выпускать в стор. Но даже для такого эджкейса можно договориться об IPC соединениях с разработчиками, или, что проще, попросить их внедрить методы аутентификации. | 2025-03-11T19:07:47.513Z |
artenox |
Думаю, от этого можно защититься, используя double vpn. Когда входной IP не равен выходному. У некоторых коммерческих сервисов такое реализовано. Таким образом, вражий сервер узнает только выходной IP впна и не узнает входной (к которому соединяется пользователь на стороне ISP), соответственно не сможет заблокировать. К примеру, может заблокировать выходной (у местных китайских сайтов для входящих). Это приведёт к тому, что через VPN местные сайты не откроются. Хотя, на местные сайты через VPN обычно не ходят в Китае. Те, кто настраивает впски, знают ли об этом? Надёжнее защититься разнеся IP. | 2025-03-13T03:19:28.668Z |
shiel |
Не поможет, если добавить уникальности пользователям. Скажем, возьми с такого-то зарубежного сервера файл по уникальному пути. Но это действительно усложнит техническую реализацию. Двойной впн у Китайцев повсеместен. | 2025-03-13T11:37:07.873Z |
notcvnt |
Я думаю можно такое реализовать через warp от CF или через worker (BNB панель (точного названия не помню)) от того же CF. И получается напрмимер User ↔ VPS w/ VLESS ↔ WARP. | 2025-03-13T16:18:06.309Z |
artenox | Представим такую картину. Есть полезный местный сервис (в виде сайта в браузере на десктопе или мобильное приложение на смартфоне), но со злым намерением среди прочего вычислить vpn.
Таким образом, geoip разделение не очень надёжно. Надо или per app или всё пускать через VPN/прокси. Но тогда на местные сайты не ходить (ничего критичного, вы будете как иностранец, но незачем). А если ходить, то не авторизовываться (утечка). Можно для местных завести отдельный браузер или девайс. Но это всё имеет значение, если цензор настолько мощный, что может сверять запросы со всех ISP в стране, сравнивать с логами проверочных серверов. Я думаю, непростая задача. | 2025-03-13T16:39:59.262Z |
notcvnt |
Допустим, но помним, но ipv4 не бесконечны, а их всего 4 млрд., людей в 2 раза больше, а устройств ещё в 5 раз больше (у большинства есть телефоны, планшеты (оба с симкой), роутеры, общественные роутеры и так далее). За NAT около нереально вычислить кто сидит, даже в офф. документе РКН про новый закон просят до NAT ставить ТСПУ. Я сделал tracert до google.com, очень интересно от Вас узнать где ip моего vpn. Да и фикситься это легко, пишется вот эта команда на VPS:
И выглядить Ваш VPS будет вот так: Чем сетевые настройки помогут в обнаружение IP VPS? Понять что есть адаптер? Есть ещё 100500 способов понять что у юзера VPN стоит. В большинстве случаев такой вариант будет означать покупку ещё одного девайса, IMEI, Fingerprint у браузера и другие опознавательные методы никуда не деваются. UPD: насчёт curl на ПК с nekobox: И выдаёт мой ip, а не ip VPS | 2025-03-13T16:59:20.600Z |
Crus |
V2RayNG не использует sing-box вообще. Название ветки (Площадь атаки sing-box костылей на Android) вводит в заблуждение. Есть Аndroid приложения, использующие ядро sing-box, но не создающие по умолчанию прокси на локалхосте - тот же SFA. | 2025-03-16T17:56:21.589Z |
shiel | И правда, V2RayNG не использует sing-box. Я изначально использовал неправильный, но, поверьте, и костыли этим страдают.
Я постараюсь найти время задокументировать свои тесты. | 2025-03-16T19:39:04.925Z |
shiel |
Не прокатит из-за возможности корреляции трафика. Провайдеры передают цензору передают пользовательские идентификаторы, злое приложение в нашем сцценарии тоже присваивает каждому пользователю уникальный идентификатор. Тогда цензору необязательно сверять трафик множества людей. Атака всё ещё экономична. А, блин, вы и так с этим согласны… Не совсем понимаю, к чему это, если на устройстве с доступом за стену не будет зловредных приложений в принципе. Чуточку лучше, Но настройка из коробки, вероятно, следует какому-то встроенному geoip правилу, так что к ней применима наша дискуссия. Но я не готов хулить разработчика за это, потому что у десктопа в принципе по умолчанию отсутствует модель безопасности. К моменту, когда зловредное приложение окажетс на компьютере, у среднестатистического пользователя Linux/Windows будут проблемы куда хуже. | 2025-03-16T19:57:08.170Z |
shiel | На самом деле, у современных версий Android нет сетевой взаимосвязи между главным пользователем и остальными. Можно содержать государственные приложения в приватной области/профиле, тем самым отбивая нужду во втором телефоне. | 2025-03-16T20:04:55.644Z |
notcvnt |
На моём скрине видно что localhost всё таки поднят и используеться. Нет, вы не угадали, все geoip правила стоят на стороне сервера (по причинам более страшего поколения, которому 1 большую кнопку для вкл или выкл нажать - уже надо диплом получать по сис. администрированию, не суть), только private идёт напрямую, и то, я проверил и удаление всех geoip правил оставляет ситуацию прежней. Единственное сценарий как можно спалить реальный ip VPS это если только некоторые домены проксируется через CF, а другой домен - нет. На ПК это проблемма неактуальна. Приложение видит прокси на localhost, но ip он выдаёт реальный, а не VPS. Ну а реальный IP vps будет скрыт в итоге. Если за каждым будут приходить космонавты с волшебными палочками, то это нанесёт общего ущерба в сотни раз больше, чем просто этого не делать. Да и не забываем про WS, gRPC и другое Не могу проверить, на моём пикселе при попытки открытия Termux в private space, появляется ошибка “Unable to install bootstrap. Termux can only be run as the primary user.” | 2025-03-17T23:06:30.626Z |