Пока Хабр бурлит статьями, имеющими весьма косвенное отношение к технической стороне вопроса, я тоже решил высказаться — но несколько иначе
Война — это Мир
Свобода — это Рабство
Незнание — это Сила© Какой-то малоизвестный автор, сочиняющий всякие небылицы
Предисловие
В последнее время Государство, в силу нестабильной внешней и внутренней политической обстановки, усилило заботу о гражданах — ограждая от тлетворного влияния извне и предотвращая случайный доступ к информации, способной поколебать устои и дать пространство для вольных интерпретаций решений Государственного аппарата.
Последние новости сообщают: Государство заботливо сняло тяжкий груз защиты умов и устройств с плеч самих граждан и возложило его на свои — куда более надёжные.
Конкретно речь идёт о комплексе мер по выявлению использования гражданами так называемых Перехватчиков трафика — средств, позволяющих строить зашифрованные каналы связи через интернет — государственными сайтами и приложениями на устройствах под управлением Android.
Тем не менее, среди технически грамотных Ненадёжных элементов существуют практики, позволяющие скрыть факт использования Перехватчика трафика от приложений, обеспечивающих информационную безопасность граждан. Давайте же рассмотрим, какими средствами пользуется Враг.
Что я имею ввиду под перехватчиками трафика
Это широкий класс программ, предназначенных для перехвата пользовательского трафика — в целях учёта, фильтрации, перенаправления и так далее.
В контексте данной статьи нас интересует конкретная их разновидность — та, что позволяет строить зашифрованные каналы связи через сеть Интернет, посредством которых Ненадёжные элементы получают доступ к Тлетворной информации.
Как приложение или сайт может определить факт использования Перехватчика трафика
Прежде чем рассматривать методы противодействия, заглянем Врагу в глаза — разберём, какими инструментами располагают сайты и приложения для выявления Ненадёжных элементов.
В распоряжении веб-ресурса инструментов немного:
-
Проверить IP-адрес пользователя на принадлежность к известным VPN-провайдерам или диапазонам datacenter-адресов.
-
Сделать HTTP no-cors запрос к заведомо заблокированному ресурсу — если он доступен, это косвенно указывает на использование Перехватчика трафика. Браузер выполнит запрос по правилам маршрутизации системы, результат вернётся сайту.
-
Запросить сторонний сервис определения выходного IP пользователя.
Веб-приложение исполняется на машине гражданина, а значит все настроенные правила маршрутизации распространяются и на него. С другой стороны, современные браузеры жёстко ограничивают веб-приложения, запирая их в песочнице — прямого доступа к системе у них нет.
У нативного Android-приложения возможностей значительно больше — наиболее эффективные методы основаны на прямом взаимодействии с системой:
-
Всё то же, что и в случае с сайтом.
-
Получить список установленных пакетов и сверить с базой известных Перехватчиков трафика. Явных разрешений от пользователя для этого не требуется.
-
Получить системный флаг активного VPN-соединения — Android выставляет его автоматически при использовании VpnService API, и любое приложение может его прочитать без специальных привилегий.
-
Получить список сетевых интерфейсов и найти характерные имена —
tun0,ppp0и подобные. -
И другое.
Гибкость системы Android, однако, позволяет не только читать эту информацию, но и скрывать её — чем и пользуются Ненадёжные элементы. Задача нетривиальная, но выполнимая.
Как же Перехватчик трафика может скрыться от Праведного взора Государства?
Проверки на уровне веб-приложений Враг обходит сравнительно легко — настройкой раздельного туннелирования трафика по доменам или IP. Трафик к Государственным ресурсам идёт напрямую, как у Благонадёжного гражданина; трафик к Тлетворной информации — через Вражеские серверы.
Здесь, однако, есть важный нюанс. Обход эффективен только если раздельное туннелирование настроено в режиме «всё напрямую, кроме явно указанного». При обратной схеме — «всё через VPN, кроме Государственных ресурсов» — сайт всё равно может сделать no-cors запрос к заблокированному ресурсу и по успешному ответу зафиксировать факт использования Перехватчика. Выходной адрес Вражеского сервера при этом останется ему неизвестен — что несколько затрудняет внесение оного в списки блокировок.
Теоретически помогают расширения типа uBlock Origin, блокирующие сторонние запросы — но Ненадёжный элемент никогда не знает заранее, к каким именно ресурсам конкретный Государственный сайт делает active probing. Игра в угадайку с неизвестными правилами.
Против нативных приложений этот подход бессилен.
Даже при настроенном раздельном туннелировании по доменам и IP — приложение выполняет active probing самостоятельно, по правилам маршрутизации системы, и результат получает напрямую.
Следующий рубеж обороны Врага — раздельное туннелирование по приложениям. Трафик целевого приложения полностью исключается из туннеля и идёт напрямую. Один и тот же запрос из разных приложений даёт разный результат — Государственное приложение не видит ни VPN-адреса, ни самого факта туннелирования.
Казалось бы, победа. Но в Государственной защите умов сидят не дураки — системные векторы детекции остаются открытыми: флаг активного VPN, список пакетов, сетевые интерфейсы. Всё это приложение по-прежнему получает напрямую от Android, невзирая на любые настройки туннелирования.
Однако пронырливые Ненадёжные элементы нашли ответ и на это. Разберём пошагово.
Как Ненадёжные элементы скрывают от Государства факт использования Перехватчика трафика
Штатные инструменты Android не предусматривают возможности запретить приложению читать системную информацию — список пакетов, флаг активного VPN, сетевые интерфейсы. Система устроена так, что эти данные доступны любому желающему. Государственному приложению в том числе.
Единственный способ противодействия — перехватить соответствующие системные вызовы и подменить возвращаемые данные прежде, чем они достигнут Государственного приложения. Будто ничего и не было.
Инструмент, позволяющий это сделать, существует в единственном числе — фреймворк Xposed, позднее LSPosed, ныне актуальная версия носит название Vector. Он использует особенности архитектуры Android для точечного изменения поведения любого приложения — включая системные процессы — без модификации исходного APK.
Сам фреймворк — лишь скальпель. Хирург здесь — Xposed-модуль: обычный APK с особым манифестом, реализующий конкретную логику перехвата и подмены данных.
Для установки фреймворка обязательны разблокированный загрузчик и root-доступ — процесс их получения подробно разобран в предыдущих статьях этой, этой и этой.
Задача 1. Скрытие имен установленных пакетов
Модулей для этой задачи существует несколько, но наиболее популярный среди Ненадёжных элементов — Hide My Applist. Скачивается с GitHub, устанавливается как обычный APK, активируется в настройках LSPosed/Vector для системного процесса и требует перезагрузки. После чего живёт на устройстве как обычное приложение со своим интерфейсом.
Модуль поддерживает два режима работы:
-
Чёрный список — приложение видит все пакеты, кроме явно скрытых.
-
Белый список — приложение не видит ничего, кроме явно разрешённого.
В настройках указывается, какое приложение что видит: Государственному приложению скрываются пакеты Перехватчиков трафика. Многие предпочитают белый список с минимальным набором разрешённых пакетов — проще, чем перечислять всё что нужно скрыть.
В паре с модулем идёт приложение для проверки результата — Applist Detector, скачивается отдельно.




После настройки он не обнаруживает ничего подозрительного — несмотря на то что среда сильно модифицирована.
Задача 2. Скрытие системного флага активного Перехватчика трафика
На скриншотах выше заметен значок ключа в статус-баре — Android выставляет его при активном Перехватчике трафика, и этот статус без каких-либо разрешений доступен любому приложению, которое о нём спросит. Государственному в том числе.
Для перехвата этого вектора используется модуль NoVPNDetect или его расширенная версия NoVPNDetect Enhanced — большинство Ненадёжных элементов отдаёт предпочтение второй, привлечённые многообещающим словом «Enhanced».
Применяется он иначе, чем Hide My Applist: активируется точечно на целевые приложения, которым необходимо скрыть статус Перехватчика. На сами Перехватчики трафика и системные процессы не применяется — иначе система перестанет понимать, что происходит на устройстве. Настроек модуль не имеет: активировал — перезагрузился — забыл.
Результат проверяется приложением VPN Detector. Оно проверяет несколько уровней детекции — от простого поиска по имени пакета до низкоуровневых системных проверок.

До применения модуля картина была иной. После — несмотря на красноречивый значок ключа в статус-баре, детектор не обнаруживает никаких признаков Перехватчика трафика.
Задача 3. Скрытие сетевых интерфейсов
Этот же модуль закрывает и данный вектор — отдельных настроек не требуется. При активном Перехватчике трафика в системе появляется сетевой интерфейс с характерным именем — tun0, ppp0 и подобные. Опытный взгляд Государственного приложения такое не пропустит. NoVPNDetect перехватывает запрос списка интерфейсов и возвращает приложению актуальный список — но без компрометирующих записей.
Дополнительная маскировка
Автор NoVPNDetect дополнительно рекомендует устанавливать Magisk/KSU модуль PortGuard. Он закрывает ещё один вектор: список портов, которые слушает система, доступен через /proc/net/tcp и /proc/net/tcp6 — по открытым портам внимательное Государственное приложение способно восстановить картину происходящего на устройстве. PortGuard эту картину скрывает.

Альтернативные способы
Обе альтернативы реализуют описанное лишь частично — на звание полноценного решения не претендуют.
Iptables (только для root). Перехватчик трафика поднимается не через стандартный VpnService API, а через прямую настройку iptables с использованием root-доступа. Android при этом не выставляет системный флаг и не создаёт характерных интерфейсов — значок ключа в статус-баре не появляется. Однако низкоуровневые методы детекции таким образом не закрыть.
LSPatch (без root). Приложение пересобирает целевой APK, встраивая Xposed-runtime непосредственно в него — без необходимости системного фреймворка. Подпись приложения при этом меняется, что само по себе может вызвать подозрения у бдительного Государственного приложения. Не все Xposed-модули поддерживают этот режим — NoVPNDetect Enhanced поддержку LSPatch заявляет, однако вероятность что целевое приложение откажется функционировать после патча заметно выше, чем при полноценном Xposed.
Выводы
Отрадно констатировать: умы Благонадёжных граждан, не обременённых излишними техническими познаниями, находятся под надёжной защитой Государства. Выявление Перехватчиков трафика через веб-ресурсы работает практически безотказно — скрыться от Праведного взора сайта Ненадёжному элементу не представляется возможным. Использование веб-версий Государственных ресурсов обеспечивает полный контроль над Умами граждан.
Ложкой дёгтя служат нативные приложения. Описанный стек инструментов — LSPosed/Vector + Hide My Applist + NoVPNDetect Enhanced + PortGuard — позволяет технически грамотному Ненадёжному элементу планомерно закрыть все известные векторы детекции. Государству остаётся лишь надеяться, что высокий порог входа — разблокированный загрузчик, root, необходимость понимать что и куда применять — удержит большинство от этого скользкого пути.
Будем откровенны: удерживает. Но не всех.
Если ты в меньшинстве — и даже в единственном числе — это не значит, что ты безумен
ссылка на оригинал статьи https://habr.com/ru/articles/1024890/