Авторы приложения тестируют модуль обхода блокировок в странах-цензорах

Популярная социальная сеть была запрещена в России в 2022 году. Для многих поклонников приложения это стало настоящим ударом, а трафик Instagram* понес огромные потери: по данным Brand Analytics на октябрь 2022 года, количество авторов (блогеров) сократилось с 38 млн до 17 млн за год, а количество отправленных сообщений упало со 135 млн до 40 млн за тот же период. Теперь, вероятно, владельцы соцсети ищут новые способы вернуть свою аудиторию. Одним из них может стать работа Instagram* с уже встроенным модулем обхода блокировок в странах-цензорах.

Что использует Instagram*

Во время тестирования обновленной версии приложения Instagram* одним из сотрудников компании i2crm было установлено, что приложение работает в обычном режиме без использования VPN-сервиса. Для выяснения причины компания обратилась к стороннему специалисту по реверс-инжинирингу.  В результате реверса мобильного приложения удалось обнаружить, что в Android-версии Instagram* 260.0.0.23.115 arm64 появился модуль Psiphon.

Что такое реверс-инжиниринг

 Реверс-инжиниринг (обратная разработка) — это исследование некоторого готового устройства или программы, а также документации на него, с целью понять принцип его работы.

Реверс-инжиниринг приложения: как именно был обнаружен модуль Psiphon

Сервис Psiphon имеет открытый код, который опубликован на веб-хостинге для IT-проектов GitHub. Для обнаружения модуля, прежде всего, необходимо было ознакомиться с документацией по внедрению модуля в Android-приложение:

Было установлено, что для работы модуля Psiphon на смартфоне требуется несколько условий, а именно: 

Первый этап

С помощью архиватора 7-zip был открыт apk-файл Instagram*, в котором были обнаружены файлы.

Среди этих данных были интересны:

  • AndroidManifest.xml — он предоставляет подробную информацию о приложении;

  • файлы classes.dex — classes9.dex — это скомпилированный java-код;

  • папка lib — нативные библиотеки.

Файл AndroidManifest.xml содержит много информации о приложении, но в данной ситуации специалистов интересовали разрешения на доступ в сеть. Так как приложение Instagram* активно использует интернет-соединение, то проверку разрешений можно пропустить, сделав вывод, что условие по доступу в сеть выполняется.

Второй этап: Java-код

Далее требовалась распаковка apk-файла в декомпиляторе Bytecode-viewer. В нем был обнаружен класс модуля Psiphon.

На этом этапе Java-часть в apk-файле Instagram* была обнаружена, что подтвердило второе условие для поддержки модуля Psiphon.

Данное расширение указывало на то, что файл является скомпилированным (преобразованным) java-кодом. Чтобы понять, что внутри java-кода, специалистам потребовалось преобразовать его в исходный вид, т.е. декомпилировать. В изначальном java-коде и был обнаружен модуль для обхода блокировок Psiphon.

Третий этап: работа с нативной библиотекой

«Заглянуть» внутрь java-кода и обнаружить класс модуля Psiphon удалось с помощью Bytecode-viewer. Реверс apk-файла позволил найти dex-файлы, а при их последующей декомпиляции обнаружить класс модуля Psiphon.

Далее, чтобы понять, как обеспечивается работа модуля на Android, необходимо было найти java-метод, который загружает нативную библиотеку. Когда этот метод был найден, специалисты занялись поиском нативной библиотеки. С ее помощью нужно было установить, какая часть кода отвечает за загрузку этой библиотеки на смартфон. 

Нативная библиотека для 64-разрядных arm-процессоров в репозитории располагается также в открытом доступе на GitHub здесь и имеет имя «libtun2socks.so».

Для подтверждения использования модуля специалисты исследовали java-код и обнаружили метод «startRouting()», который отвечает за загрузку нативной части модуля.

В методе «startRouting()» был обнаружен интерфейс, в который передается имя нативной библиотеки. Сам интерфейс использует системный Android api-метод «loadLibrary()». Этот метод является кодом самого Android и отвечает за загрузку нативной библиотеки в память устройства и делает ее экспортированные функции доступными для java-кода. В свою очередь это дает возможность взаимодействия со скомпилированным С/С++ кодом из java. 

Вот так выглядит та же функция в декомпилированном java-коде:

При распаковке приложения расположение библиотек в каталоге обычно выглядит так: lib\<архитектура процессора>.

Однако по данному пути libtun2socks.so обнаружить не удалось. Поэтому пришлось заглянуть assets\lib, где приложение Instagram* также может хранить нативные библиотеки.

В папке находились два файла:

  • libs.spo -— архив с библиотеками;

  • metadata.txt — перечень библиотек с указанием sha-256 хэша и размера каждого файла.

Но и в metadata.txt нативная библиотека снова не была обнаружена. Все, что было известно изначально — Instagram* при первом запуске приложения автоматически распаковывает архив libs.spo в защищенную часть памяти устройства /data/data/com.instagram.android/lib-compressed/.

Таким образом, третье условие было не выполнено (наличие нативной библиотеки libtun2socks.so). Из первых трех условий можно сделать вывод, что использование модуля невозможно из-за отсутствия ключевой библиотеки.  

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

Вызов java-кода Psiphon-модуля из java-кода Instagram* на примере установки в Android-приложение

Чтобы понять, как именно устанавливается модуль Psiphon в Android-приложение, можно рассмотреть пример из открытых источников

Создание модуля происходит с помощью метода newPsiphonTunnel(), его код выглядит так:

Метод newPsiphonTunnelImpl() выглядит так:

При установке модуля в Android встречается еще одна нативная библиотека gojni. При реверс-инжиниринге она не была замечена. При повторном изучении репозитория был обнаружен maven aar- модуль для интеграции Psiphon в проекты Android Studio. 

Далее при открытии aar-файла архиватором 7-Zip специалисты нашли искомую библиотеку и ресурсы.

На основании этого можно сделать такой вывод: для работы Psiphon модуля требуется libtun2socks.so и libgojni.so. 

После проведенных установок специалисты снова вернулись к Instagram* и зафиксировали пути, где хранятся библиотеки:

  • /data/data/com.instagram.android/lib-compressed/

  • <apk>/lib/<архитектура процессора>

    Библиотека вновь не была обнаружена. Тогда была сделана попытка найти Instagram*- код, который ссылается на метод newPsiphonTunnel().

При этой операции был найден вызов из кода Instagram* искомого Psiphon модуля. Данное исследование с установкой модуля Psiphon в Android показало, что в целом модуль не используется полноценно, а, как и предполагалось, находится на этапе внедрения. Вероятно, этот сервис компания Meta* может использовать в дальнейшем для того, чтобы избежать блокировок Instagram* со стороны стран-цензоров.

Что представляет собой сервис Psiphon?

VPN-сервис Psiphon разработан в 2006 году в Университете Торонто. Он предназначен для обхода цензуры со стороны госрегуляторов в таких странах, как Китай и Иран. Подробно о принципах работы VPN-сервисов можно прочитать в этой статье

Psiphon имеет сложный механизм, и его трафик почти невозможно поймать, например, через системы фильтрации DPI. Он предоставляет доступ в интернет через прокси-сервер в другой стране, а если сервер становится недоступным, то меняет его автоматически. Теперь, по-видимому, Instagram* решил «зашить» модуль обхода блокировок непосредственно в приложение, чтобы избавить пользователей от необходимости искать варианты зайти в него.

Опасен ли модуль Psiphon с точки зрения передачи данных между пользователями Instagram*? Его создатели могут видеть домены, к которым происходит доступ, но не могут видеть пользовательские данные. Это объясняется тем, что модуль — это локальный прокси-сервер, на который перенаправляется зашифрованный Instagram*-трафик. Однако для его чтения недостаточно перехвата, требуется еще расшифровка. Иными словами, модуль может получать данные в обобщенном виде и использовать, например, для настройки рекламного трафика, но не может получать историю браузера и файлов cookies.

Почему Instagram* не использует методы Telegram

Трафик Instagram* блокируется с 14 марта 2022 года интернет-провайдерами России по требованию Генпрокуратуры РФ. Приложение не может самостоятельно обходить блокировки, как это делает Telegram, используя разные IP-адреса.

Telegram для обхода блокировок использует моментальное изменение IPv4-адресов на хостингах Amazon, Google, DigitalOcean. Если заблокировать эти адреса принудительно, то неизбежно произойдет сбой в работе других сайтов и приложений, базирующихся на данных хостинга. Этот способ не используется в Китае, где перечисленные сервера заблокированы госрегулятором.

Также Telegram использует IPv6-адреса, которые регулирующие органы пока не умеют массово выявлять и блокировать. Еще одним способом защиты от возможных блокировок является возможность proxy-подключений через протоколы SOCKS5 и MTProto и ботов автоматической настройки от провайдеров услуг proxy и VPN.

Передача сообщений между пользователями Telegram осуществляется напрямую по протоколу P2P с использованием встроенного Proxy, подобного Tor. Заблокировать такой протокол возможно лишь по конечным IP-адресам пользователей, то есть фактически отключив от сети всех.

Заключение

Исследование работы модуля Psiphon в Android-версии Instagram* 260.0.0.23.115 arm64 было проведено двумя способами: с помощью реверс-инжиниринга приложения и методом вызова java-кода Instagram* на примере установки в Android-приложение. Изучение было проведено с помощью информации, полученной из открытых источников и ресурсов.

Специалисты установили, что в настоящее время модуль не используется полноценно. Скорее  всего, он тестируется и в дальнейшем будет встроен в приложение для того, чтобы избежать блокировок Instagram* со стороны регуляторов в странах-цензорах.

*Meta Platforms Inc. (Facebook, Instagram) — признана экстремистской, ее деятельность запрещена на территории России.

Комментарии (12)


  1. ValdikSS
    00.00.0000 00:00
    +3

    Psiphon имеет сложный механизм, и его трафик почти невозможно поймать, например, через системы фильтрации DPI.

    Подавляющее большинство «вшитых» серверов в РФ блокируются, прямые соединения к серверу едва ли работают. Причём блокируют таким образом, чтобы программа не сразу догадалась о проблеме: подключение к серверу устанавливается, но затем либо блокируется спустя несколько килобайт переданных данных, либо замедляется до неприлично низких скоростей.


    1. Javian
      00.00.0000 00:00
      +1

      off У меня браузер Brave каким-то образом умудряется игнорировать блокировки. Сходу мне определить как он это делает мне не удалось. Подозреваю что-то включено по-умолчанию и скрыто от глаз обычного пользователя.


    1. KillJ0y
      00.00.0000 00:00

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


      1. Barnaby
        00.00.0000 00:00

        Ну почему, можно автоматически менять обфускацию трафика и выдавать ип ограниченному кругу пользователей. Жаль ipv6 не успел взлететь, с п2п между пользователями было бы сильно проще и дешевле.


    1. Barnaby
      00.00.0000 00:00
      -1

      У меня со второй попытки заработало, 0.5-1 мбит при пинге в 1сек. Для инсты да и современного веба такое не годится.


      1. ValdikSS
        00.00.0000 00:00

        У Psiphon есть и Domain fronted-сервера через Akamai, Amazon, Cloudflare, Fastly, Azure. Они работают стабильно, но это не прямое подключение. Также есть серверы, которые временно оккупируют незанятые IP-адреса (либо же существующие веб-сайты), такой вид доступа работает с переменным успехом.


        1. KillJ0y
          00.00.0000 00:00
          +1

          Ага, пока ркн не начнёт блочить все сервера по ip, и так начнётся новая эпоха отвалов как это было с блокировкой телеграма


          1. dartraiden
            00.00.0000 00:00

            Примерно такое уже давно практикуют в Туркмении, где заблокирована треть всех существующих в мире IP-адресов.


  1. peyonir
    00.00.0000 00:00
    +2

    VPN-сервис Psiphon

    через прокси-сервер в другой стране, а если сервер становится недоступным, то меняет его автоматически

    Это вам не телеграмм, тут заднюю не включат.

    Да и тут недавно читал статью на хабре про то, что любой впн можно определить.


  1. zlo1
    00.00.0000 00:00
    +1

    Странные дела в последнее время происходят, в сети появились тысячи публичных HTTPS прокси на порту 9002из разных регионов, пример "C:\Program Files\Google\Chrome\Application\chrome.exe" --ignore-certificate-errors --ignore-ssl-errorsrs --proxy-server="https://154.6.130.24:9002" --user-data-dir="%TEMP%\chr1" "https://ip-api.com/"


    1. myhambr
      00.00.0000 00:00

      Спонсор АНБ ?


      1. AcckiyGerman
        00.00.0000 00:00

        Скорее очередной взлом какой-нибудь старой линейки роутеров, но вместо ботнета взломщики решили проксей наоткрывать. А уж через них можно хоть ботофермы запускать, хоть серфить из стран, где интернет огораживают.