Методичка Минцифры по выявлению VPN

гуглежка иишка говорят что для этого root как минимум нужен, не? Дай пруфы

Найдена критическая уязвимость VLESS клиентов - Censorship research & publications - NTC

разве внутри туннеля нельзя маршрутизировать трафик по uuid приложения?

Похоже, что нет. По крайней мере штатными средствами без рута. А с рутом и фаервола хватит или через iptables (вроде можно).

я так и думал, что там пакеты падают в туннель без идентификатора пакета, что отличный повод все подобные запросы в директ слать

ну маршрутизировать можно как угодно. Вот только андроид с версией 5.7 ядра и выше никак не блокирует подключение любой даже не рут приложухи к произвольному интерфейсу. Почитай пост ValdikSS с примером для termux.

Решается только с помощью рута и фаирвола (iptables), который заблочит доступ к трафику приложения на определенный сетевой интерфейс. Так что все эти обсуждения про открытый socks мягко говоря ерунда….

перейди по ссылке в предыдущем сообщении

Вот хоть и прикольно. А решает ли это всё все проблемы?….

Допустим ты маршрутизируешь на сингбоксе клиентском. То есть всё, в т.ч. ру приложения, идут в tun0.

  1. Чекеры сейчас в ру приложениях максимально тупые. Они тебе делают плашку впн просто даже по факту наличия tun0 интерфейса. Соответственно, они могут и ограничивать доступ только по этому.

“Тупо? Ну тупо, а чо такова?!” скажут они…

  1. Далее вопрос по обратной ситуации. Защита от того, что приложение, пущенное в впн, узнает реальный айпи, через тот же bindtodevice.
    Можно включить block all connections except for vpn с этим режимом. Да, тогда защита железобетонная…. но остается пункт 1. Тогда для доступа к ру приложениям придется выключать и block all connections и vpn, чтобы избавиться от tun0. Неудобно. Поставить lsposed модуль для скрытия tun0 в таком режиме, наверное, невозможно. Он же и должен идти в tun0 по умолчанию….

Если же не делать block all connections. Сделать split tunneling через андроид. И еще проверку в маршрутизаторе сингбокс, чтобы не дать директ приложениям выйти в впн. Будет работать. Но в обратную сторону: не дать приложениям из тунеля выйти в директ - не будет.

Не универсальное решение в общем =/. Пока рут+afwall ничего не переплюнет. Так можно и доступ к интерфейсам не своим заблочить. И скрыть tun0.

На iOS (как минимум), у меня было другое наблюдение.

Госуслуги и Кинопоиск выдавали эту плашку не при наличии VPN, а exit IP ASN датацентра.
Фикс: WARP egress.

UPD: госуслуги начало показывать надоедливую плашку, но пользоваться все равно можно.

То есть сейчас виртуальный интерфейс + warp egress вместе позволяют зайти к ним.

Перенос точки наблюдения на OpenWRT роутер переплюнет. Использование интерфейса LTE модуля мало что даёт тоже, у некоторых, живя в регионах, exit может быть через пол страны.

Почитав методичку, подсознал, что если стоит задача запустить проприетарь на линуксе таким образом, чтобы она считала, что работает на чистом интернете, то нужно, чтобы она видела реальное Ethernet-устройство в качестве единственного линка. Если в неймспейсе существует хотя бы одно tun-, veth- и прочие виртуальные линки, это может послужить вторичным/косвенным триггером, так как домашними пользователями в быту не используются. Поэтому на линуксе последовательность противодействия может быть такая:

  1. создать macvlan или ipvlan-устройство, ведущее к реальному Ethernet,
  2. создать network namespace, указав ему провайдерский DNS,
  3. реальный Ethernet перемещаем в неймспейс, а macvlan/ipvlan оставляем на хосте.

В итоге оба неймспейса имеют доступ в сеть, а второй неймспейс (для проприетари) видит только реальное устройство. Все остальные методы обхода детектятся:

  • Наличие глобально выставленного socks-прокси считывается из gsettings или переменных окружения.
  • Наличие локально слушающих socks-прокси считывается из ss -tulpn, даже если запускают не из-под рута (при условии, что socks-прокси работает под тем же пользователем, а это обычное явление).
  • Наличие виртуальных линков считывается из ip -d link. root при этом не нужен.
  • Наличие необычных маршрутов считывается из ip rule show && ip route show table all. root при этом не нужен. Необычными считаем нехарактерные для домашнего пользователя условия типа “такой-то uid использует такую-то таблицу”.
  • Наличие непровайдерского DNS считывается из /etc/resolv.conf.
    • К сожалению, тот факт, что приложению подсовывают альтернативный (“чистый”, провайдерский) resolv.conf из /etc/netns/<iface>, тоже можно считать, глядя на stat /etc/resolv.conf (графа Device).
  • Наличие де-факто непровайдерского DNS считывается:
    • просьбой зарезольвить заблокированный домен (вернет успех);
    • просьбой зарезольвить ru-домен (вернет ошибку при наивной конфигурации);
    • отсутствием clear text запросов в провайдерский DNS в тот же самый момент (требует синхрона с ISP пользователя).
  • Наличие де-факто непровайдерского канала связи считывается:
    • через curl запрещенный-ресурс (вернет успех);
    • через curl ru-ресурс (вернет ошибку при наивной конфигурации);
    • отсутствием этих запросов к провайдеру в тот же самый момент (требует синхрона с ISP).
  • Факт запуска внутри VirtualBox/QEMU легко детектится, хотя бы наличием модулей ядра virtio.

На андроиде манипуляции с перемещением Ethernet внутрь неймспейса вряд ли удастся, поэтому наличие максофона обязательно. Ни одна операционка не дизайнилась в расчете на “обдурить юзерспейс-приложение”, а методичку явно будут дорабатывать и дальше.

Рассуждения из разряда “возможно частники не будут сильно следовать методичке” — это планирование того, как нам может повезти. При разработке методов противодействия нужно взять за основу, что везти не будет ни на каком этапе.

Запуск на десктопе злобных программ - это заведомо опасный путь
Там они имеют куда большие права, чем на смартфонах
Надо пользоваться веб версиями, а если никак - уносить в виртуалку. Самое надежное.
Да, виртуалку можно определить. Но разве использование виртуалки - это что-то невозможное и нелегальное ?
Может мне нужна и винда, и linux, и я гоняю один из них в виртуалке

На openwrt роутере можно создать отдельный VLAN для прямой маршрутизации без обходов, гипервизор в bridge, в виртуалке - подключить к VLAN

В v2rayNG выставление порта локального прокси в 0, отключение использования Hev TUN и анализа пакетов решает проблему с прослушиванием socks на 127.0.0.1:10808, RKNHardering не обнаруживает его.

Спойлер



На десктопе проблем не видно, пока не придумают установку какого-нибудь криптомодуля для “безопасности”.

Вернее сказать, ограничивается дырявостью браузера. То есть предполагается, что из браузера нельзя посмотреть сетевые интерфейсы и локальные прокси. На уровне браузера разруливать правилами в omega switchy, например.

Это при условии, что юзер не гоняет целиком через tun.

В бета версию андройд приложения Перекрёстка уже добавили данный функционал проверки наличия VPN.
Если оно включено, то приложение прямо об этом пишет и блокирует любой другой функционал.
Не стал изучать как оно реализовано, но приложение спокойно распространяется в Google Play в рамках программы бетатеста.

В целом видно, что действительно методичка живая, раз спустя пару дней некоторые компании стали реализовывать функционал.

У меня перестало обнаруживать даже с включенной функцией “Анализировать пакеты“

У моего знакомого с включённым “Анализировать пакеты” просто перестало работать вообще всё.

Думаю, для начала, нужно бы определить и перечислить все реальные методы определения VPN, какими могут пользоваться приложения и ркн.
И последовательно их решать.
И хорошо бы составить список всех этих приложений и служб.

С Андроидом всё более менее понятно. Единственным реальным решением, сейчас, вижу наличие 2 разных смартов. 1 чисто для Макса и других приложений, второй для “личного” пользования.

Вопрос ещё в том, что даже если я найду решение и включу у себя фичу, что бы на моём смарте и пк не определялись IP адреса впн, но ведь этими впн пользуюсь не только я.
Масса людей в россии которые пользуются публичными впн. Я думаю кто-то другой в любом случае засветит IP. А ркн, скорее всего будет рубить пулы адресов, а не отдельно каждый. Потому мне кажется это дело времени.

Либо смарт с рутом.

Так борьба в первую очередь с массовыми сервисами, с домозяйками. Со временем, если каток так и будет ехать, мы придём к иранской модели, когда обходы будут продавать только по рекомендации. Есть слабая надежда, что регулятор насытится домохозяйками и накал немного спадёт. Мне кажется, что Шадаев понимает и сам не рад, в какой пздц тащат связь, но никуда деться не может.

С Андроидом всё более менее понятно. Единственным реальным решением, сейчас, вижу наличие 2 разных смартов. 1 чисто для Макса и других приложений, второй для “личного” пользования.

Ну кстати, нет. Думал много об этом, как сделать безопасно для непродвинутого пользователя.

Просто отдельный браузер на андроиде, пущенный в директ, тоже решает проблему. И удаление всех ру приложений. Не будет только макс работать, ему же нужно приложение.

Писали что-то про опасность умных ссылок на андроиде. Это же и к браузерам относится? Ну так в фаерфоксе, в отличие от хрома, всегда отображается дополнительное окно подтверждения, нужно ли перейти в приложение указанное.

Так что тоже вариант.

Кстати, может кто-то пробовал такие приложения или функции как например:
Parallel Space, Android Private Space, System Cloner, Second Space, на самсунгах Secure Folder, если правильно помню.

Есть смысл пробовать или покупать такой смарт? Разделяет ли он полноценно приложения и какие минусы? Смогут определить наличие впн при разделении?

Думаю, покупать ли второй смарт или лучше купить смарт с функцией “разделения”?!