Приложение Instagram* и Facebook* для iOS отображает все сторонние ссылки и рекламу в своем приложении с помощью собственного встроенного браузера. Это создает различные риски для пользователя, поскольку хост-приложение может отслеживать каждое взаимодействие с внешними веб-сайтами, от всех данных формы, таких как пароли и адреса, вплоть до каждого нажатия.
Чтобы упростить пост, будет использоваться термин «Instagram*» вместо «Meta*» или «Facebook*».
[H2]Что делает Инстаграм*?[/H2]
- Ссылки на внешние веб-сайты отображаются внутри приложения Instagram*, вместо того чтобы использовать встроенный Safari.
- Это позволяет Instagram* отслеживать все, что происходит на внешних веб-сайтах, без согласия пользователя или поставщика веб-сайта.
- Приложение Instagram* внедряет свой
Для просмотра ссылки необходимо нажать Вход или Регистрацияв каждый показанный сайт, в том числе при нажатии на рекламу, что позволяет отслеживать все действия пользователя, такие как нажатие каждой кнопки и ссылки, выделение текста, скриншоты, а также любые вводимые формы, такие как пароли, адреса и номера кредитных карт.
Apple активно работает против такого рода отслеживания:
- Начиная с iOS 14.5
Для просмотра ссылки необходимо нажать Вход или Регистрациядает пользователю возможность контролировать ситуацию:
- Приложения должны получить разрешение пользователя, прежде чем отслеживать его данные в приложениях, принадлежащих другим компаниям.
- Safari уже
Для просмотра ссылки необходимо нажать Вход или Регистрацияпо умолчанию.
- Google Chrome скоро откажется от сторонних файлов cookie.
- Firefox только что объявил о внедрении
Для просмотра ссылки необходимо нажать Вход или Регистрацияпо умолчанию для предотвращения любого межстраничного отслеживания.
- Некоторые интернет-провайдеры раньше
Для просмотра ссылки необходимо нажать Вход или Регистрацияна все веб-сайты, однако они могли делать это только для незашифрованных страниц. СДля просмотра ссылки необходимо нажать Вход или Регистрацияпо умолчанию это больше не вариант. Подход, который использует приложение Instagram* & Facebook*, работает для любого сайта, независимо от того, зашифрован он или нет.
Простое предупреждение Apple об iPhone обходится Facebook* в 10 миллиардов долларов в год
Facebook* пожаловался, что Apple App Tracking Transparency отдает предпочтение таким компаниям, как Google, потому что App Tracking Transparency «вырезает браузеры из подсказок отслеживания, которые Apple требует для приложений».
—Веб-сайты, которые вы посещаете на iOS, не вызывают запросы на отслеживание, поскольку встроены функции защиты от отслеживания.
Для просмотра ссылки необходимо нажать
Вход или Регистрация
и
Для просмотра ссылки необходимо нажать
Вход или Регистрация
.С 1 миллиардом активных пользователей Instagram* количество данных, которые Instagram* может собирать, вводя код отслеживания на каждый сторонний веб-сайт, открытый из приложения Instagram* и Facebook*, является ошеломляющим. Поскольку веб-браузеры и iOS добавляют в руки пользователя все больше и больше средств управления конфиденциальностью, становится ясно, почему Instagram* заинтересован в мониторинге всего веб-трафика внешних веб-сайтов.
—Facebook* атаковал своих пользователей сообщениями, умоляя их снова включить отслеживание. Он угрожал антимонопольным иском против Apple. Это заставило малые предприятия защищать отслеживание пользователей, утверждая, что когда гигантская корпорация шпионит за миллиардами людей, это форма развития малого бизнеса.
Для просмотра ссылки необходимо нажать
Вход или Регистрация
[H3]FAQs для тех, кто не является разработчиками[/H3]
- Может ли Instagram*/Facebook* читать все, что я делаю в Интернете? Нет! Instagram* может читать и просматривать ваши действия в Интернете только тогда, когда вы открываете ссылку или рекламу в своих приложениях.
- Действительно ли Facebook* крадет мои пароли, адреса и номера кредитных карт? Нет! Я не собрал все данные, которые отслеживает Instagram*, но хотел продемонстрировать, какие данные они могут получить без вашего ведома. Как было показано в прошлом, если компания может получить доступ к данным бесплатно, не спрашивая разрешения у пользователя, она будет отслеживать это.
- Как я могу защитить себя? Для получения полной информации прокрутите статью до конца. Резюме: всякий раз, когда вы открываете ссылку из Instagram* (или Facebook*, или Messenger), не забудьте щелкнуть точки в углу, чтобы вместо этого открыть страницу в Safari.
- Инстаграм* делает это намеренно? Я не могу сказать, как решения принимались внутри. Все, что я могу сказать, это то, что создание вашего собственного браузера в приложении требует нетривиального времени для программирования и обслуживания, значительно больше, чем просто использование конфиденциальности и удобной альтернативы, которая уже была встроена в iPhone за последние 7 лет.
[H4]Meta* Pixel[/H4]
Внешний файл JavaScript, который внедряет приложение Instagram* (pcm.js в документации), представляет собой метапиксель, а также некоторый код для создания моста для связи с хост-приложением. Это не просто пиксель/изображение, а реальный код JavaScript, который выполняется:
– документация разработчиков (Июнь 2022)Meta* Pixel — это фрагмент кода JavaScript, который позволяет отслеживать действия посетителей на вашем сайте. Он работает, загружая небольшую библиотеку функций, которую вы можете использовать всякий раз, когда посетитель сайта совершает действие, которое вы хотите отслеживать […]
Meta* Pixel может собирать следующие данные: […]
Данные о нажатиях кнопок — включают все кнопки, нажатые посетителями сайта, метки этих кнопок и любые страницы, посещенные в результате нажатия кнопок.
Названия полей формы — включает имена полей веб-сайта, такие как электронная почта, адрес, количество и т. д., когда вы покупаете продукт или услугу. Мы не фиксируем значения полей, если вы не включите их как часть расширенного сопоставления или необязательных значений.
«Meta* pixel позволяет отслеживать активность посетителей на вашем веб-сайте». Вот в чем проблема: поставщик веб-сайта совершенно нормально решает внедрить meta* pixel для отслеживания активности посетителей. Однако в данном случае оператор веб-сайта не давал согласия на установку Meta* Pixel. Кроме того, у провайдера веб-сайта даже нет возможности отказаться.
[H2]Дисклеймер[/H2]
У меня нет списка точных данных, которые Instagram* собирает. У меня есть доказательства того, что приложения Instagram* и Facebook* активно запускают команды JavaScript для внедрения дополнительного JS SDK без согласия пользователя, а также отслеживают выбор текста пользователем. Если Instagram* уже делает это, они также могут внедрить любой другой код JS. Само приложение Instagram* хорошо защищено от атак «human-in-the-middle», и только изменив двоичный файл Android, удалив привязку сертификата и запустив его в симуляторе, я смог проверить часть его веб-трафика.
Даже тогда большая часть фактических данных имела еще один уровень шифрования/сжатия. Понятно, что они действительно не хотят, чтобы вы исследовали, какие данные отправляются обратно в API. Я решил не тратить на это больше времени.
[HR=2][/HR]
В целом цель этого проекта заключалась не в том, чтобы получить точный список данных, которые собираются, а в том, чтобы выделить проблемы с конфиденциальностью и безопасностью, вызванные использованием браузеров в приложениях, а также доказать, что такие приложения, как Instagram* уже используют эту лазейку.
Подводя итог рискам и недостаткам встроенных браузеров в приложениях:
- Конфиденциальность и аналитика: Хост-приложение может отслеживать буквально все, что происходит на веб-сайте, каждое касание, ввод данных, поведение при прокрутке, какой контент копируется и вставляется, а также отображаемые данные, такие как онлайн-покупки.
- Кража учетных данных пользователя: физических адресов, ключей API и т. д.
- Реклама и рефералы: Хост-приложение может размещать рекламу на веб-сайте или заменять ключ API рекламы, чтобы украсть доход от хост-приложения, или заменять все URL-адреса, чтобы включить ваш реферальный код (
Для просмотра ссылки необходимо нажать Вход или Регистрация).
- Безопасность: браузеры потратили годы на оптимизацию безопасности UX в Интернете, например, показ статуса шифрования HTTP, предупреждение пользователя о схематичных или незашифрованных веб-сайтах и многое другое.
- Внедрение дополнительного кода JavaScript на сторонний веб-сайт может вызвать проблемы и сбои, что может привести к поломке веб-сайта.
- Пользовательские расширения браузера и блокираторы контента недоступны.
- Диплинки не работают в большинстве случаев.
- Часто нет простого способа поделиться ссылкой через другие платформы (например, через электронную почту, AirDrop и т. д.).
[H2]Тестирование различных приложений[/H2]
Instagram* iOS
Messenger iOS
Facebook* iOS
Instagram* Android
WhatsApp по умолчанию открывает iOS Safari, поэтому там проблем нет.
[H2]Как это работает[/H2]
Насколько мне известно, нет хорошего способа отслеживать все команды JavaScript, которые выполняются хост-приложением iOS (
Для просмотра ссылки необходимо нажать
Вход или Регистрация
). Я создал новый простой файл HTML с некоторым кодом JS, чтобы переопределить часть документа. методы:Я создал новый простой файл HTML с некоторым кодом JS, чтобы переопределить часть документа. методы:
Код:
document.getElementById = function(a, b) { appendCommand('document.getElementById("' + a + '")') return originalGetElementById.apply(this, arguments); }
Instagram* iOS
Сравнивая это с тем, что происходит при использовании обычного браузера или, в данном случае, Telegram, который использует рекомендуемый
Для просмотра ссылки необходимо нажать
Вход или Регистрация
:Сравнение с Telegram
Как видите, обычный браузер или SFSafariViewController не запускает JS-код. SFSafariViewController — это отличный способ для разработчиков приложений показывать сторонний веб-контент пользователю, не выходя из приложения, сохраняя при этом конфиденциальность и удобство для пользователя.
[H2]Технические подробности[/H2]
- Instagram* добавляет новый listener, чтобы получать подробную информацию о каждом выборе пользователем любого текста на веб-сайте. Это, в сочетании с отслеживанием скриншотов, дает Instagram* полное представление о том, какая конкретная информация была выбрана и передана.
- Приложение Instagram* проверяет, есть ли элемент с идентификатором iab-pcm-sdk: на удивление, я нашел очень мало информации об этом в Интернете. По сути, это кроссплатформенный SDK для отслеживания, предоставленный
Для просмотра ссылки необходимо нажать Вход или Регистрация, однако я недостаточно знаю об отношениях между Instagram* и IAB Tech Lab (например,Для просмотра ссылки необходимо нажать Вход или Регистрация).
- Если элемент с идентификатором iab-pcm-sdk не найден, Instagram* создает новый элемент скрипта, устанавливает его источник на pcm.js, который является исходным кодом для Meta* pixel.
- Затем он находит первый элемент сценария на вашем сайте для вставки Meta* Pixel прямо перед ним, внедряя Meta* Pixel на ваш сайт.
- Instagram* также запрашивает iframe на вашем веб-сайте, однако я не смог найти никаких указаний на то, что они с ним делают.
- Избегайте in-app-webview. В большинстве встроенных в приложение браузеров есть способ открыть отображаемый в данный момент веб-сайт в Safari. Как только вы попадете на этот экран, просто используйте эту опцию, чтобы выйти из него. Если эта кнопка недоступна, вам придется скопировать и вставить URL-адрес, чтобы открыть ссылку в браузере по вашему выбору.
- Используйте веб-версию. Большинство социальных сетей, включая Instagram* и Facebook*, предлагают достойную мобильную веб-версию с аналогичным набором функций. Вы можете без проблем использовать приложение в iOS Safari.
Пока Instagram* не решит эту проблему (если вообще когда-либо), вы можете довольно легко обмануть приложения Instagram* и Facebook*, чтобы они поверили, что код отслеживания уже установлен. Просто добавьте в свой HTML-код следующее:
Код:
<span id="iab-pcm-sdk"></span> <span id="iab-autofill-sdk"></span>
Код:
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*/Facebook*, проверив user agent, однако я не смог найти хороший способ автоматически выйти из браузера в приложении, чтобы вместо этого открыть Safari. Если вы знаете решение, я
Для просмотра ссылки необходимо нажать
Вход или Регистрация
.[H2]Предложения[/H2]
[H2]Для Apple[/H2]
Apple проделывает фантастическую работу, создавая свою платформу с учетом конфиденциальности пользователей. Один из 4 принципов конфиденциальности:
–Прозрачность и контроль пользователей. Убедитесь, что пользователи знают, какие данные передаются и как они используются, и что они могут контролировать их.
Для просмотра ссылки необходимо нажать
Вход или Регистрация
(Апрель 2021).На момент написания статьи не существовало правила проверки AppStore, которое запрещало бы компаниям создавать собственные браузеры в приложениях для отслеживания пользователей, чтения их входных данных и размещения дополнительной рекламы на сторонних веб-сайтах. Однако Apple явно рекомендует использовать SFSafariViewController:
–Избегайте использования web view для создания веб-браузера. Использование web view, позволяющего людям ненадолго получить доступ к веб-сайту, не выходя из контекста вашего приложения, — это нормально, но Safari — это основной способ просмотра веб-страниц. Попытка воспроизвести функциональность Safari в вашем приложении не нужна и не рекомендуется.
Для просмотра ссылки необходимо нажать
Вход или Регистрация
(Июнь 2022).–Если ваше приложение позволяет пользователям просматривать веб-сайты из любой точки Интернета, используйте класс SFSafariViewController. Если ваше приложение настраивает, взаимодействует или управляет отображением веб-контента, используйте класс WKWebView.
Для просмотра ссылки необходимо нажать
Вход или Регистрация
(Июнь 2022)Внедрение App-Bound Domains
Для просмотра ссылки необходимо нажать
Вход или Регистрация
- это новая замечательная функция WebKit, позволяющая разработчикам обеспечить более безопасный просмотр веб-страниц в приложении при использовании WKWebView. Как разработчик приложения, вы можете определить, к каким доменам может получить доступ ваше приложение, и все веб-запросы будут ограничены ими. Чтобы отключить защиту, пользователь должен будет явно отключить ее в настройках приложения iOS.Функция App-Bound Domains появилась в iOS 14 (~1,5 года назад), однако разработчики могут использовать ее только по желанию, что означает, что подавляющее большинство приложений для iOS не используют эту функцию.
Я выделил часть "хотят улучшить конфиденциальность пользователей", так как это недостающая часть: App-Bound Domains должны быть обязательным требованием для всех приложений iOS, поскольку именно приложения социальных сетей внедряют код отслеживания.Если разработчики SocialApp хотят улучшить конфиденциальность пользователей, у них есть два пути:
Использовать SafariViewController вместо WKWebView для просмотра внутри приложения. SafariViewController защищает данные пользователя от SocialApp, загружая страницы вне пространства процессов SocialApp. Используя SafariViewController, SocialApp может гарантировать своим пользователям наилучший доступный опыт конфиденциальности.
Согласие на App-Bound Domains. Дополнительные ограничения WKWebView от App-Bound Domains гарантируют, что SocialApp не сможет отслеживать пользователей с помощью API, описанных выше.
В июле 2022 года Apple представила
Для просмотра ссылки необходимо нажать
Вход или Регистрация
, чтобы лучше защитить людей, подверженных высокому риску. К сожалению, режим блокировки iOS не меняет способ работы веб-просмотров в приложении. Я подал радар в Apple:
Для просмотра ссылки необходимо нажать
Вход или Регистрация
, на что Apple ответила: "Режим блокировки не для этого".[H2]Несколько срочных шагов, которые необходимо предпринять компании Apple[/H2]
Обновите правила проверки приложений, чтобы потребовать использования SFSafariViewController или App-Bound Domains при отображении любых сторонних веб-сайтов.
- Должно быть только несколько исключений (например, браузерные приложения), которые требуют двух дополнительных шагов: запросить дополнительное разрешение, чтобы убедиться, что это корректный случай использования, а также пользователь должен подтвердить это дополнительное разрешение.
- Сторонние веб-сайты/контент по-прежнему могут отображаться с помощью класса WKWebView, так как они часто используются для элементов пользовательского интерфейса, или приложение фактически изменяет свой сторонний контент (например, автоматическое отключение собственных баннеров cookie).
Я также отправил радар (Для просмотра ссылки необходимо нажать Вход или Регистрация) в Apple в рамках моей прошлойДля просмотра ссылки необходимо нажать Вход или Регистрация.
Сделайте то, что Meta* уже делает с WhatsApp: Прекратите модифицировать сторонние сайты и используйте Safari или SFSafariViewController для всех сторонних сайтов. Так будет лучше для пользователя, и так будет правильно.
Я сообщил об этой проблеме через Bug Bounty Program, где в течение нескольких часов они подтвердили, что смогли воспроизвести "проблему", однако за последние 9 недель я больше ничего не услышал, кроме просьбы подождать, пока они не подготовят полный отчет. Поскольку на мои последующие вопросы не последовало никаких ответов, и они не перестали внедрять код отслеживания на внешние сайты, я решил обнародовать эту информацию (предупредив их еще за 2 недели).
Ознакомьтесь с
Для просмотра ссылки необходимо нажать
Вход или Регистрация
, касающимися конфиденциальности и безопасности.*Meta признана в России экстремистской организацией, деятельность ее сервисов Facebook и Instagram в стране запрещена.
*Facebook и Instagram продукты компании Meta, которая признана в России экстремистской организацией, деятельность ее сервисов Facebook и Instagram в стране запрещена.
[HR=2][/HR]
Для просмотра ссылки необходимо нажать
Вход или Регистрация