Реверс-инжиниринг VPN-сервиса Onavo Protect под Android позволил определить методы, которые можно использовать для перехвата зашифрованного HTTPS-трафика на мобильном устройстве. Если вкратце, злоумышленник должен поставить на телефон собственное приложение и сертификат УЦ (удостоверяющего центра).

Например, в РФ вступил в действие закон, который требует с 2025 года обязательной предустановки на все смартфоны конкретных приложений. Теоретически, при наличии уязвимостей это может угрожать безопасности многих пользователей.

Пример перехвата зашифрованного трафика показывает технический анализ работы мобильного приложения Facebook на устройствах с установленным приложением Onavo Protect (защитная программа, которая работает по принципу VPN).

Предыстория


Из судебных документов следует, что проект слежки внутри компании назывался Project Ghostbusters. Он был частью программы In-App Action Panel (IAPP), в рамках которой использовалась методика «перехвата и расшифровки» зашифрованного трафика приложений от пользователей Snapchat, а затем и от пользователей YouTube и Amazon. Изначально это проводилось с целью сбора аналитики, то есть слежки за действиями пользователей.

Для этого разработчики использовали программу Onavo Protect, которую Facebook купил в 2013 году. В 2019 году сервис был закрыт после расследования о его неправомерном использовании, а разработчики оштрафованы.

Технический анализ


В данном случае имел место перехват HTTPS-трафика посредством MITM-атаки. Сами разработчики называли эту технику 'ssl bump', по одноимённой функции из кэширующего прокси Squid. Алгоритм атаки схематично изображён на КДПВ.

Перехват производился с помощью мобильного приложения Onavo Protect, которое предлагало пользователю установить сертификат УЦ в доверенное хранилище на устройстве. Кроме того, функция требовала нескольких разрешений на телефоне, которое приложение просило якобы «для отображения статистики трафика»:



Хотя в судебных документах говорится, что сертификаты «генерируются на сервере и отправляются на устройство», но некоторые старые версии программы содержат сертификаты непосредственно в составе приложения как встроенные активы old_ca.cer и new_ca.cer:



Сертификаты лежат в папке assets:



Один из сертификатов действителен до 2027 года. В коде приложения был найден метод KeyChain.createInstallIntent(), который производил установку сертификата:



Есть также процедура с проверкой, установлен сертификат или нет:



Этот метод использовался только в ранних версиях программы, с версии Android 7 пользователь должен был устанавливать сертификаты вручную.

Затем весь трафик устройства шёл через VPN в инфраструктуру, контролируемую злоумышленником. Трафик перенаправляется на кэширующий прокси-сервер Squid, настроенный как прозрачный прокси с функцией ssl bump.

Копия электронного письма с описанием техники из судебных документов:



Помимо основной функции сбора аналитики из других приложений путём злоупотребления разрешением от пользователя, в Onavo есть функции для получения других конфиденциальных данных, таких как IMSI абонента:



Хотя история случилась несколько лет назад, с технической точки зрения интересно посмотреть, как далеко могут зайти разработчики приложений, злоупотребляя разрешениями на мобильных телефонах (сейчас против компании-разработчика подан судебный иск). Интерес представляет также запуск процедуры установки УЦ и как добавлялись сертификаты в операционную систему.

Вскоре после описанной истории в 2020 году вышла новая версия Android 11, в которой практически невозможно установить свой сертификат УЦ, действующий для всех приложений, так что на новых смартфонах разработчики предлагают использовать другие техники, например, Accessibility API.

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


  1. R3EQ
    06.10.2024 19:12
    +7

    HTTPS может, а не HTTS?


    1. Graid
      06.10.2024 19:12

      Или даже HSTS.


  1. vikarti
    06.10.2024 19:12

    А причем тут вообще Onavo?

    Способ общий.

    Ну и сертификат использовать - поставить пользовательский сертификат слегка...гемморойно. И приложение может сказать что ему не интересно пользовательские.

    Ах да, поставить в системные при сборке прошивке тоже не так просто - есть https://httptoolkit.com/blog/chrome-android-certificate-transparency/ грабля (идет проверка через СT Log'и)

    Начиная с Android 14 - с рутом в системные поставить тоже не так просто https://httptoolkit.com/blog/android-14-breaks-system-certificate-installation/

    Именно предустановку как дыру использовать...сложно.