Конфиденциальность iOS: Instagram и Facebook могут отслеживать всю вашу активность в браузере внутри приложения

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.
Instagram и Facebook могут отслеживать всю вашу активность
Instagram и Facebook могут отслеживать всю вашу активность

Приложение Instagram и Facebook для iOS отображает все сторонние ссылки и рекламу в своем приложении с помощью собственного встроенного браузера. Это создает различные риски для пользователя, поскольку хост-приложение может отслеживать каждое взаимодействие с внешними веб-сайтами, от всех данных формы, таких как пароли и адреса, вплоть до каждого нажатия.

Чтобы упростить пост, будет использоваться термин «Instagram» вместо «Meta» или «Facebook».

Примечание. Если статья покажется интересной, то вот тут я пишу об iOS-разработке и о том, что с ней связано.

Что делает Инстаграм?

  • Ссылки на внешние веб-сайты отображаются внутри приложения Instagram, вместо того чтобы использовать встроенный Safari.

  • Это позволяет Instagram отслеживать все, что происходит на внешних веб-сайтах, без согласия пользователя или поставщика веб-сайта.

  • Приложение Instagram внедряет свой код отслеживания в каждый показанный сайт, в том числе при нажатии на рекламу, что позволяет отслеживать все действия пользователя, такие как нажатие каждой кнопки и ссылки, выделение текста, скриншоты, а также любые вводимые формы, такие как пароли, адреса и номера кредитных карт.

Почему это так важно?

Apple активно работает против такого рода отслеживания:

  • Начиная с iOS 14.5 прозрачность отслеживания приложений дает пользователю возможность контролировать ситуацию:

  • Приложения должны получить разрешение пользователя, прежде чем отслеживать его данные в приложениях, принадлежащих другим компаниям.

  • Safari уже блокирует сторонние файлы cookie по умолчанию.

  • Google Chrome скоро откажется от сторонних файлов cookie.

  • Firefox только что объявил о внедрении Total Cookie Protection по умолчанию для предотвращения любого межстраничного отслеживания.

  • Некоторые интернет-провайдеры раньше внедряли свой собственный код отслеживания/рекламы на все веб-сайты, однако они могли делать это только для незашифрованных страниц. С появлением HTTPs по умолчанию это больше не вариант. Подход, который использует приложение Instagram & Facebook, работает для любого сайта, независимо от того, зашифрован он или нет.

Instagram намеренно работает над системой разрешений App Tracking Transparency, которая была разработана для предотвращения именно этого типа сбора данных. После его представления Meta объявила:

Простое предупреждение Apple об iPhone обходится Facebook в 10 миллиардов долларов в год

Facebook пожаловался, что Apple App Tracking Transparency отдает предпочтение таким компаниям, как Google, потому что App Tracking Transparency «вырезает браузеры из подсказок отслеживания, которые Apple требует для приложений».

Веб-сайты, которые вы посещаете на iOS, не вызывают запросы на отслеживание, поскольку встроены функции защиты от отслеживания.

Daring Fireball и MacWorld.

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

Facebook атаковал своих пользователей сообщениями, умоляя их снова включить отслеживание. Он угрожал антимонопольным иском против Apple. Это заставило малые предприятия защищать отслеживание пользователей, утверждая, что когда гигантская корпорация шпионит за миллиардами людей, это форма развития малого бизнеса.

—  EFF - Facebook Says Apple is Too Powerful. They’re Right.

FAQs для тех, кто не является разработчиками

  • Может ли Instagram/Facebook читать все, что я делаю в Интернете? Нет! Instagram может читать и просматривать ваши действия в Интернете только тогда, когда вы открываете ссылку или рекламу в своих приложениях.

  • Действительно ли Facebook крадет мои пароли, адреса и номера кредитных карт? Нет! Я не собрал все данные, которые отслеживает Instagram, но хотел продемонстрировать, какие данные они могут получить без вашего ведома. Как было показано в прошлом, если компания может получить доступ к данным бесплатно, не спрашивая разрешения у пользователя, она будет отслеживать это.

  • Как я могу защитить себя? Для получения полной информации прокрутите статью до конца. Резюме: всякий раз, когда вы открываете ссылку из Instagram (или Facebook, или Messenger), не забудьте щелкнуть точки в углу, чтобы вместо этого открыть страницу в Safari.

  • Инстаграм делает это намеренно? Я не могу сказать, как решения принимались внутри. Все, что я могу сказать, это то, что создание вашего собственного браузера в приложении требует нетривиального времени для программирования и обслуживания, значительно больше, чем просто использование конфиденциальности и удобной альтернативы, которая уже была встроена в iPhone за последние 7 лет.


Meta Pixel

Внешний файл JavaScript, который внедряет приложение Instagram (connect.facebook.net/en_US/pcm.js), представляет собой метапиксель, а также некоторый код для создания моста для связи с хост-приложением. Это не просто пиксель/изображение, а реальный код JavaScript, который выполняется:

Meta Pixel — это фрагмент кода JavaScript, который позволяет отслеживать действия посетителей на вашем сайте. Он работает, загружая небольшую библиотеку функций, которую вы можете использовать всякий раз, когда посетитель сайта совершает действие, которое вы хотите отслеживать […]

Meta Pixel может собирать следующие данные: […]

Данные о нажатиях кнопок — включают все кнопки, нажатые посетителями сайта, метки этих кнопок и любые страницы, посещенные в результате нажатия кнопок.

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

– developers.facebook.com/docs/meta-pixel (Июнь 2022)

«Meta pixel позволяет отслеживать активность посетителей на вашем веб-сайте». Вот в чем проблема: поставщик веб-сайта совершенно нормально решает внедрить meta pixel для отслеживания активности посетителей. Однако в данном случае оператор веб-сайта не давал согласия на установку Meta Pixel. Кроме того, у провайдера веб-сайта даже нет возможности отказаться.

Дисклеймер

У меня нет списка точных данных, которые Instagram собирает. У меня есть доказательства того, что приложения Instagram и Facebook активно запускают команды JavaScript для внедрения дополнительного JS SDK без согласия пользователя, а также отслеживают выбор текста пользователем. Если Instagram уже делает это, они также могут внедрить любой другой код JS. Само приложение Instagram хорошо защищено от атак «human-in-the-middle», и только изменив двоичный файл Android, удалив привязку сертификата и запустив его в симуляторе, я смог проверить часть его веб-трафика.

Даже тогда большая часть фактических данных имела еще один уровень шифрования/сжатия. Понятно, что они действительно не хотят, чтобы вы исследовали, какие данные отправляются обратно в API. Я решил не тратить на это больше времени.


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

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

  • Конфиденциальность и аналитика: Хост-приложение может отслеживать буквально все, что происходит на веб-сайте, каждое касание, ввод данных, поведение при прокрутке, какой контент копируется и вставляется, а также отображаемые данные, такие как онлайн-покупки.

  • Кража учетных данных пользователя: физических адресов, ключей API и т. д.

  • Реклама и рефералы: Хост-приложение может размещать рекламу на веб-сайте или заменять ключ API рекламы, чтобы украсть доход от хост-приложения, или заменять все URL-адреса, чтобы включить ваш реферальный код (это случалось раньше).

  • Безопасность: браузеры потратили годы на оптимизацию безопасности UX в Интернете, например, показ статуса шифрования HTTP, предупреждение пользователя о схематичных или незашифрованных веб-сайтах и ​​многое другое.

  • Внедрение дополнительного кода JavaScript на сторонний веб-сайт может вызвать проблемы и сбои, что может привести к поломке веб-сайта.

  • Пользовательские расширения браузера и блокираторы контента недоступны.

  • Диплинки не работают в большинстве случаев.

  • Часто нет простого способа поделиться ссылкой через другие платформы (например, через электронную почту, AirDrop и т. д.).

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

Тестирование различных приложений Meta

Instagram iOS

Messenger iOS

Facebook iOS

Instagram Android

WhatsApp по умолчанию открывает iOS Safari, поэтому там проблем нет.

Как это работает

Насколько мне известно, нет хорошего способа отслеживать все команды JavaScript, которые выполняются хост-приложением iOS (хотелось бы услышать, есть ли лучший способ). Я создал новый простой файл HTML с некоторым кодом JS, чтобы переопределить часть документа. методы:

Я создал новый простой файл HTML с некоторым кодом JS, чтобы переопределить часть документа. методы:

document.getElementById = function(a, b) {
    appendCommand('document.getElementById("' + a + '")')
    return originalGetElementById.apply(this, arguments);
}

Открытие этого HTML-файла из приложения Instagram для iOS дало следующее:

Instagram iOS

Сравнивая это с тем, что происходит при использовании обычного браузера или, в данном случае, Telegram, который использует рекомендуемый SFSafariViewController:

Сравнение с Telegram

Как видите, обычный браузер или SFSafariViewController не запускает JS-код. SFSafariViewController — это отличный способ для разработчиков приложений показывать сторонний веб-контент пользователю, не выходя из приложения, сохраняя при этом конфиденциальность и удобство для пользователя.

Технические подробности

  • Instagram добавляет новый listener, чтобы получать подробную информацию о каждом выборе пользователем любого текста на веб-сайте. Это, в сочетании с отслеживанием скриншотов, дает Instagram полное представление о том, какая конкретная информация была выбрана и передана.

  • Приложение Instagram проверяет, есть ли элемент с идентификатором iab-pcm-sdk: на удивление, я нашел очень мало информации об этом в Интернете. По сути, это кроссплатформенный SDK для отслеживания, предоставленный IAB Tech Lab, однако я недостаточно знаю об отношениях между Instagram и IAB Tech Lab (например, этот твит).

  • Если элемент с идентификатором iab-pcm-sdk не найден, Instagram создает новый элемент скрипта, устанавливает его источник на https://connect.facebook.net/en_US/pcm.js, который является исходным кодом для Meta pixel.

  • Затем он находит первый элемент сценария на вашем сайте для вставки Meta Pixel прямо перед ним, внедряя Meta Pixel на ваш сайт.

  • Instagram также запрашивает iframe на вашем веб-сайте, однако я не смог найти никаких указаний на то, что они с ним делают.

Как защитить себя как пользователя?

  • Избегайте in-app-webview. В большинстве встроенных в приложение браузеров есть способ открыть отображаемый в данный момент веб-сайт в Safari. Как только вы попадете на этот экран, просто используйте эту опцию, чтобы выйти из него. Если эта кнопка недоступна, вам придется скопировать и вставить URL-адрес, чтобы открыть ссылку в браузере по вашему выбору.

  • Используйте веб-версию. Большинство социальных сетей, включая Instagram и Facebook, предлагают достойную мобильную веб-версию с аналогичным набором функций. Вы можете без проблем использовать https://instagram.com в iOS Safari.

Как защитить себя как провайдеру веб-сайта?

Пока Instagram не решит эту проблему (если вообще когда-либо), вы можете довольно легко обмануть приложения Instagram и Facebook, чтобы они поверили, что код отслеживания уже установлен. Просто добавьте в свой HTML-код следующее:

<span id="iab-pcm-sdk"></span>
<span id="iab-autofill-sdk"></span>

Кроме того, чтобы Instagram не отслеживал выбор текста пользователем на вашем веб-сайте:

const originalEventListener = document.addEventListener
document.addEventListener = function(a, b) {
    if (b.toString().indexOf("messageHandlers.fb_getSelection") > -1) {
        return null;
    }
    return originalEventListener.apply(this, arguments);
}

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

Приложению также легко определить, является ли текущий браузер приложением Instagram/Facebook, проверив user agent, однако я не смог найти хороший способ автоматически выйти из браузера в приложении, чтобы вместо этого открыть Safari. Если вы знаете решение, я хотел бы знать.

Предложения

Для Apple

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

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

– Apple Privacy PDF (Апрель 2021).

На момент написания статьи не существовало правила проверки AppStore, которое запрещало бы компаниям создавать собственные браузеры в приложениях для отслеживания пользователей, чтения их входных данных и размещения дополнительной рекламы на сторонних веб-сайтах. Однако Apple явно рекомендует использовать SFSafariViewController:

Избегайте использования web view для создания веб-браузера. Использование web view, позволяющего людям ненадолго получить доступ к веб-сайту, не выходя из контекста вашего приложения, — это нормально, но Safari — это основной способ просмотра веб-страниц. Попытка воспроизвести функциональность Safari в вашем приложении не нужна и не рекомендуется.

– Apple Human Interface Guidelines (Июнь 2022).

Если ваше приложение позволяет пользователям просматривать веб-сайты из любой точки Интернета, используйте класс SFSafariViewController. Если ваше приложение настраивает, взаимодействует или управляет отображением веб-контента, используйте класс WKWebView.

– Apple SFSafariViewController docs (Июнь 2022)

Внедрение App-Bound Domains

App-Bound Domains - это новая замечательная функция WebKit, позволяющая разработчикам обеспечить более безопасный просмотр веб-страниц в приложении при использовании WKWebView. Как разработчик приложения, вы можете определить, к каким доменам может получить доступ ваше приложение, и все веб-запросы будут ограничены ими. Чтобы отключить защиту, пользователь должен будет явно отключить ее в настройках приложения iOS.

Функция App-Bound Domains появилась в iOS 14 (~1,5 года назад), однако разработчики могут использовать ее только по желанию, что означает, что подавляющее большинство приложений для iOS не используют эту функцию.

Если разработчики SocialApp хотят улучшить конфиденциальность пользователей, у них есть два пути:

Использовать SafariViewController вместо WKWebView для просмотра внутри приложения. SafariViewController защищает данные пользователя от SocialApp, загружая страницы вне пространства процессов SocialApp. Используя SafariViewController, SocialApp может гарантировать своим пользователям наилучший доступный опыт конфиденциальности.


Согласие на App-Bound Domains. Дополнительные ограничения WKWebView от App-Bound Domains гарантируют, что SocialApp не сможет отслеживать пользователей с помощью API, описанных выше.

Я выделил часть "хотят улучшить конфиденциальность пользователей", так как это недостающая часть: App-Bound Domains должны быть обязательным требованием для всех приложений iOS, поскольку именно приложения социальных сетей внедряют код отслеживания.

В июле 2022 года Apple представила режим блокировки, чтобы лучше защитить людей, подверженных высокому риску. К сожалению, режим блокировки iOS не меняет способ работы веб-просмотров в приложении. Я подал радар в Apple: rdar://10735684, на что Apple ответила: "Режим блокировки не для этого".

Ответ Apple
Ответ Apple

Несколько срочных шагов, которые необходимо предпринять компании Apple

Обновите правила проверки приложений, чтобы потребовать использования SFSafariViewController или App-Bound Domains при отображении любых сторонних веб-сайтов.

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

  • Сторонние веб-сайты/контент по-прежнему могут отображаться с помощью класса WKWebView, так как они часто используются для элементов пользовательского интерфейса, или приложение фактически изменяет свой сторонний контент (например, автоматическое отключение собственных баннеров cookie).

    Я также отправил радар (rdar://38109139) в Apple в рамках моей прошлой записи в блоге.

Для Meta

Сделайте то, что Meta уже делает с WhatsApp: Прекратите модифицировать сторонние сайты и используйте Safari или SFSafariViewController для всех сторонних сайтов. Так будет лучше для пользователя, и так будет правильно.

Я сообщил об этой проблеме в Meta через их Bug Bounty Program, где в течение нескольких часов они подтвердили, что смогли воспроизвести "проблему", однако за последние 9 недель я больше ничего не услышал, кроме просьбы подождать, пока они не подготовят полный отчет. Поскольку на мои последующие вопросы не последовало никаких ответов, и они не перестали внедрять код отслеживания на внешние сайты, я решил обнародовать эту информацию (предупредив их еще за 2 недели).

Ознакомьтесь с другими моими публикациями, касающимися конфиденциальности и безопасности.


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

Авторский канал об iOS-разработке
Авторский канал об iOS-разработке

Источник: https://habr.com/ru/post/681980/


Интересные статьи

Интересные статьи

В прошлый раз мы говорили о библиотеках для отрисовки графических интерфейсов плагинов DAW. Сегодня покажем пару программных инструментов, которые позволят настроить полноценную цифровую звуковую стан...
Планету Земля часто называют колыбелью жизни, и в этом титуле совсем мало преувеличений. Жизнь можно найти и в вечнозеленых тропиках, и в знойных пустынях, и на бескрайних ледяных про...
Создание пайплайнов CI с помощью Tekton (Часть 2/2) В этой статье мы собираемся продолжить создание пайплайна CI с Tekton. В первой части мы установили Tekton на локальный кластер kind и...
Всем привет! Меня зовут Виталий Бендик. Я тимлид команды разработки Android приложения в компании Lamoda. В 2018 году я выступал на Mosdroid Aluminium c докладом, расшифровкой которого хочу п...
Мы публикуем видео с прошедшего мероприятия. Приятного просмотра.