Ис­сле­дова­тели выяс­нили, что код, который Meta* и «Яндекс» ста­вят на мил­лионы сай­тов, устра­ивает деанон юзе­ров, хит­ро исполь­зуя легитим­ные про­токо­лы. Chrome и дру­гие бра­узе­ры вти­харя шлют уни­каль­ные иден­тифика­торы натив­ным при­ложе­ниям на устрой­стве. В этой статье — под­робный раз­бор того, как это работа­ет.

Это близ­кий к тек­сту перес­каз статьи «Meta and Yandex are de-anonymizing Android users’ web browsing identifiers» с сай­та Ars Technica. Ее автор — Дэн Гудин.

В рас­сле­дова­нии учас­тво­вали:

  • Ани­кет Гириш, аспи­рант в IMDEA Networks;
  • Гю­неш Акар, доцент груп­пы циф­ровой безопас­ности и iHub в Уни­вер­ситете Рад­бауд;
  • Нар­сео Вал­лина‑Род­ригес, доцент IMDEA Networks;
  • Ни­пуна Вирасе­кара, аспи­рант IMDEA Networks;
  • Тим Влу­менс, аспи­рант в COSIC, Лёвен­ский католи­чес­кий уни­вер­ситет.

(*) Деятель­ность ком­пании Meta Platforms приз­нана экс­тре­мист­ской и зап­рещена в Рос­сии.

(**) Прог­раммы Facebook и Instagram при­над­лежат ком­пании Meta, деятель­ность которой приз­нана экс­тре­мист­ской и зап­рещена на тер­ритории РФ.

Пе­соч­ница Android изо­лиру­ет про­цес­сы, что­бы те не вза­имо­дей­ство­вали с ОС или дру­гими при­ложе­ниями на устрой­стве, отре­зая дос­туп к важ­ным дан­ным и сис­темным ресур­сам. Меры защиты, такие как раз­деление сос­тояния и раз­деление хра­нения, встро­енные во все основные бра­узе­ры, кон­тей­неризу­ют дан­ные сай­тов, защищая от покуше­ний со сто­роны дру­гих сай­тов. Одна­ко это уда­лось обой­ти.

Скры­тое отсле­жива­ние через тре­керы Meta Pixel и «Ян­декс Мет­рики» поз­воля­ет Meta и «Яндексу» обхо­дить основные механиз­мы безопас­ности и кон­фиден­циаль­нос­ти как Android, так и бра­узе­ров для этой ОС.

 

Прорыв

«Один из основных прин­ципов безопас­ности в вебе и мобиль­ных сис­темах называ­ется песоч­ницей, — объ­ясня­ет в интервью Нар­сео Вал­лина‑Род­ригес, один из иссле­дова­телей, нашед­ших проб­лему. — Ты запус­каешь все в песоч­нице, и меж­ду раз­ными эле­мен­тами вза­имо­дей­ствия нет. Одна­ко эта уяз­вимость поз­воля­ет обой­ти песоч­ницу, которая отде­ляет мобиль­ный кон­текст от веб‑кон­тек­ста. Этот канал дает воз­можность переда­вать информа­цию о том, что про­исхо­дит в бра­узе­ре, в мобиль­ное при­ложе­ние».

Бай­пас, который в «Яндексе» запус­тили еще в 2017 году, а в Meta под­хва­тили прош­лой осенью, поз­воля­ет ком­пани­ям про­киды­вать cookie и дру­гие иден­тифика­торы из бра­узе­ров на базе Firefox и Chromium в натив­ные Android-при­ложе­ния Facebook, Instagram и раз­ные при­ложе­ния «Яндекса». В резуль­тате всю твою исто­рию в бра­узе­ре мож­но свя­зать с учет­кой, под которой ты залоги­нен в при­ложе­нии.

За­мече­но такое пока толь­ко на Android. Иссле­дова­тели говорят, что теоре­тичес­ки схо­жим методом мож­но ата­ковать и iOS. Ведь бра­узе­ры на этой плат­форме поз­воля­ют раз­работ­чикам прог­рам­мно уста­нав­ливать соеди­нения с localhost, а при­ложе­ния — отсле­живать такие под­клю­чения.

В отли­чие от iOS, Android дает боль­ше воз­можнос­тей для локаль­ных ком­муника­ций и фоновой работы про­цес­сов мобиль­ных при­ложе­ний. Meta Pixel и «Яндекс Мет­рика» без тру­да могут отправ­лять веб‑зап­росы с иден­тифика­тора­ми для веб‑тре­кин­га на локаль­ные пор­ты, которые пос­тоян­но отсле­жива­ются при­ложе­ниями Facebook, Instagram и «Яндекса». В ито­ге эти при­ложе­ния могут свя­зывать веб‑айден­тити с реаль­ными поль­зователь­ски­ми дан­ными, даже если ты сидишь в при­ват­ном режиме.

info

В Google Play сей­час ужес­точили пра­вила для заг­ружа­емых в магазин при­ложе­ний — как раз что­бы пре­секать такое.

Meta Pixel и «Яндекс Мет­рика» — это ана­лити­чес­кие скрип­ты, соз­данные, что­бы помочь рек­ламода­телям. Meta Pixel уста­нов­лен при­мер­но на шес­ти мил­лионах сай­тов, а «Яндекс Мет­рика» — на трех мил­лионах ресур­сов.

Meta и «Яндекс» умуд­рились обой­ти огра­ниче­ния, исполь­зуя базовую воз­можность сов­ремен­ных мобиль­ных бра­узе­ров — обще­ние с натив­ными при­ложе­ниями. Эта шту­ка поз­воля­ет бра­узе­рам отправ­лять веб‑зап­росы на локаль­ные пор­ты Android, что­бы, нап­ример, соз­давать соеди­нения через про­токол RTC, шей­рить фай­лы и отла­живать при­ложе­ния.

Вот кон­цепту­аль­ная схе­ма, где вид­но, как веб‑тре­керы, работа­ющие в бра­узе­ре, обме­нива­ются иден­тифика­тора­ми с натив­ными при­ложе­ниями Facebook, Instagram и «Яндекс» для Android.

Хо­тя тех­ничес­кие детали раз­лича­ются, Meta Pixel и «Яндекс Мет­рика» занима­ются сво­еоб­разным зло­упот­ребле­нием про­токо­лом, что­бы получить дос­туп к ло­каль­ным пор­там на IP 127.0.0.1, который пре­дос­тавля­ет Android. Бра­узе­ры спо­кой­но обра­щают­ся к этим пор­там без каких‑либо уве­дом­лений для поль­зовате­ля. При­ложе­ния Meta и «Яндекса» тихо слу­шают эти пор­ты, в реаль­ном вре­мени сни­мают иден­тифика­торы и свя­зыва­ют их с поль­зовате­лем, который залоги­нен в при­ложе­нии.

Пред­ста­витель Google заявил, что такое поведе­ние наруша­ет усло­вия исполь­зования плат­формы Play и ожи­дания поль­зовате­лей Android в пла­не кон­фиден­циаль­нос­ти.

«Прог­раммис­ты, которых упо­мяну­ли в этом док­ладе, умуд­рились исполь­зовать воз­можнос­ти бра­узе­ров на iOS и Android так, что это прос­то в кор­не про­тиво­речит нашим прин­ципам безопас­ности и кон­фиден­циаль­нос­ти, — заявил пред­ста­витель, имея в виду тех, кто пишет JavaScript для Meta Pixel и «Яндекс Мет­рики». — Мы уже внес­ли изме­нения, что­бы пре­дот­вра­тить подоб­ные манев­ры. Так­же мы запус­тили свое рас­сле­дова­ние и нап­рямую обща­емся с при­час­тны­ми сто­рона­ми».

Пред­ста­витель Meta не стал отве­чать на воп­росы, но прис­лал такое заяв­ление:

«Мы ведем перего­воры с Google, что­бы ула­дить недопо­нима­ние отно­ситель­но при­мене­ния их пра­вил. Ког­да мы поняли, что воз­никли воп­росы, решили при­оста­новить исполь­зование этой воз­можнос­ти, пока вмес­те с Google не раз­берем­ся в ситу­ации».

В пись­ме пред­ста­витель «Яндекса» сооб­щил, что в ком­пании прек­раща­ют эту прак­тику и уже работа­ют с Google:

«Яндекс стро­го соб­люда­ет стан­дарты защиты дан­ных и не деано­ними­зиру­ет поль­зователь­скую информа­цию, — отме­чает­ся в заяв­лении. — Эта фун­кция не собира­ет никакой кон­фиден­циаль­ной информа­ции и пред­назна­чена исклю­читель­но для того, что­бы улуч­шить пер­сонали­зацию в наших при­ложе­ниях».

 

Как вычисляют пользователей Android

 

Facebook

Раз­работ­чики Meta Pixel хит­ро обхо­дили про­токо­лы, что­бы внед­рить скры­тую прос­лушку, при­чем начали они этим занимать­ся в сен­тябре прош­лого года. Сна­чала они зас­тавля­ли при­ложе­ния отсы­лать HTTP-зап­росы на порт 12387. Но уже через месяц Meta Pixel прек­ратил отправ­ку этих дан­ных, хотя при­ложе­ния Facebook и Instagram не перес­тавали монито­рить этот порт.

В нояб­ре 2024 года Meta Pixel перешел на новень­кий метод — с исполь­зовани­ем WebSocket, про­токо­ла для двус­торон­него обме­на дан­ными, который работал на пор­те 12387.

В том же месяце в Meta Pixel внед­рили новую фиш­ку — исполь­зование WebRTC. Это пирин­говый про­токол, который обыч­но при­меня­ют для звон­ков через бра­узер.

Тут дело в магии, называ­емой SDP munging: JavaScript поз­воля­ет менять дан­ные SDP (Session Description Protocol) перед их отправ­кой. SDP munging в исполне­нии Meta Pixel под­мешива­ет содер­жимое куки _fbp в поля, которые обыч­но хра­нят информа­цию о соеди­нении.

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

В мае в бета‑вер­сии Chrome появи­лась защита, бло­киру­ющая этот тип модифи­кации SDP. Одна­ко все­го через нес­коль­ко дней раз­работ­чики Meta Pixel обош­ли эту защиту, добавив новый метод, который заменял зап­росы STUN зап­росами TURN.

Ис­сле­дова­тели дос­кональ­но показа­ли, как устро­ена кука _fbp, которую сайт отправ­ляет в натив­ное при­ложе­ние. Отту­да информа­ция уже идет на сер­вер Meta.

  1. Поль­зователь запус­кает натив­ное при­ложе­ние Facebook или Instagram, которое затем отправ­ляет­ся в фоновый режим и соз­дает фоновую служ­бу для прос­лушива­ния вхо­дяще­го тра­фика на пор­те TCP (12387 или 12388) и на UDP (пер­вый сво­бод­ный в диапа­зоне 12580–12585). Для это­го юзер дол­жен быть залоги­нен в при­ложе­нии.
  2. Да­лее юзер откры­вает бра­узер и заходит на сайт с интегри­рован­ным Meta Pixel. На некото­рых сай­тах перед заг­рузкой Meta Pixel тре­бует­ся сог­ласие поль­зовате­ля. Но, по нашим дан­ным из 100 тысяч стра­ниц, лишь мень­шинс­тво сай­тов дела­ет это, в то вре­мя как более 75% зат­ронутых ресур­сов не тре­буют сог­ласия.
  3. Заг­ружа­ется скрипт Meta Pixel, который отправ­ляет куку _fbp в натив­ное при­ложе­ние Instagram или Facebook через WebRTC (STUN) SDP munging. Этот же скрипт шлет зна­чение _fbp на https://www.facebook.com/tr вмес­те с URL стра­ницы (dl), метадан­ными сай­та и бра­узе­ра, а так­же типом события (ev), нап­ример «Прос­мотр стра­ницы», «Добав­ление в кор­зину», «Пожер­тво­вание» или «Покуп­ка».
  4. При­ложе­ния Facebook или Instagram получа­ют куку _fbp от скрип­тов Meta, запущен­ных в бра­узе­ре, и переда­ют дан­ные на эндпо­инт GraphQL (https://graph[.]facebook[.]com/graphql) вмес­те с дру­гими пос­тоян­ными иден­тифика­тора­ми поль­зовате­ля, свя­зывая твой fbp ID (веб‑посеще­ние) с тво­ей учет­ной записью Facebook или Instagram.
Подробный процесс передачи куки _fbp из браузеров на Android в приложения Facebook и Instagram через Meta Pixel
Под­робный про­цесс переда­чи куки _fbp из бра­узе­ров на Android в при­ложе­ния Facebook и Instagram через Meta Pixel
 

«Яндекс»

Из­вес­тно, что «Яндекс Мет­рика» начала свя­зывать посещен­ные сай­ты в бра­узе­рах Android с иден­тифика­тора­ми при­ложе­ний в мае 2017 года, ког­да тре­кер стал отправ­лять HTTP-зап­росы на локаль­ные пор­ты 29009 и 30102. В мае 2018 года «Яндекс Мет­рика» начала слать дан­ные через HTTPS на пор­ты 29010 и 30103.

Шейринг идентификаторов «Яндекса»
Шей­ринг иден­тифика­торов «Яндекса»
Таймлайн
Тай­млайн

Не­кото­рые бра­узе­ры для Android начали бло­киро­вать осо­бо наг­лые скрип­ты в тре­керах. Возь­мем DuckDuckGo: он и рань­ше отсе­ивал домены и IP, свя­зан­ные с эти­ми тре­кера­ми, что­бы бра­узер ничего не сли­вал ком­пании Meta. Точ­но так же он рубит на кор­ню и боль­шую часть обра­щений к доменам, свя­зан­ным с «Яндекс Мет­рикой». Пос­ле того как иссле­дова­тели сооб­щили DuckDuckGo о непол­ном чер­ном спис­ке, раз­работ­чики быс­тро добави­ли недос­тающие адре­са.

Бра­узер Brave, кста­ти, тоже уме­ет бло­киро­вать переда­чу иден­тифика­торов бла­года­ря сво­им длин­нющим блек‑лис­там и защите от зап­росов на localhost без явно­го сог­ласия поль­зовате­ля. А вот Vivaldi, дру­гой бра­узер на базе Chromium, при стан­дар­тных нас­трой­ках при­ват­ности отправ­ляет иден­тифика­торы на локаль­ные пор­ты Android. Иссле­дова­тели говорят, что, если вклю­чить бло­киров­ку тре­керов, это реша­ет проб­лему утеч­ки исто­рии прос­мотров.

Настройки блокировки трекинга в Vivaldi для Android
Нас­трой­ки бло­киров­ки тре­кин­га в Vivaldi для Android
 

Как бороться

Ле­карс­тва, которые про­писа­ли себе DuckDuckGo, Brave, Vivaldi и Chrome, пока что дей­ству­ют как надо, но иссле­дова­тели пре­дуп­режда­ют, что в любой момент это может перес­тать работать.

«Попыт­ки соз­дать чер­ные спис­ки для бра­узе­ров закон­чатся бес­конеч­ной гон­кой воору­жений, и это все­го лишь час­тичное решение, — говорит Вал­лина‑Род­ригес о текущих методах борь­бы. — Соз­давать эффектив­ные спис­ки бло­киро­вок — задача неп­ростая, ведь раз­работ­чикам бра­узе­ров при­дет­ся пос­тоян­но монито­рить, как исполь­зуют­ся эти воз­можнос­ти, что­бы выяв­лять дру­гие хос­ты, которые могут зло­упот­реблять канала­ми localhost, и обновлять свои спис­ки».

Он про­дол­жает:

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

Chrome и боль­шинс­тво дру­гих бра­узе­ров на базе Chromium выпол­няли JavaScript так, как задума­ли в Meta и «Яндексе». Firefox тоже про­шел этот тест, но по непонят­ным при­чинам бра­узер не смог успешно выпол­нить SDP munging, исполь­зуемый в пос­ледних вер­сиях кода.

В ран­ней май­ской бета‑вер­сии Chrome заб­локиро­вал STUN-вари­ант SDP munging, а про­дак­шен‑вер­сия, выпущен­ная две недели назад, начала бло­киро­вать как STUN-, так и TURN-вари­анты.

Ско­рее все­го, дру­гие бра­узе­ры на базе Chromium внед­рят это в бли­жай­шие недели. Пред­ста­витель Mozilla заявил, что в орга­низа­ции при­дают боль­шое зна­чение кон­фиден­циаль­нос­ти поль­зовате­лей и серь­езно отне­сут­ся к это­му отче­ту.

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

Ис­сле­дова­тели пре­дуп­режда­ют, что нынеш­ние фик­сы нас­толь­ко завяза­ны на кон­крет­ный код тре­керов Meta и «Яндекса», что обой­ти их мож­но прос­тым обновле­нием.

«Они понима­ют, что если кто‑то дру­гой зай­дет и поп­робу­ет дру­гой порт, то впол­не может обой­ти эту защиту, — говорит Гюнеш Акар, тот самый иссле­дова­тель, который впер­вые нат­кнул­ся на эту уяз­вимость, имея в виду раз­работ­чиков Chrome из Google. — Но нас­коль­ко мы понима­ем, они хотят пос­лать чет­кий сиг­нал: так изде­вать­ся над сис­темой все же не про­катит».

Ис­сле­дова­тель Вал­лина‑Род­ригес счи­тает, что самый надеж­ный спо­соб пре­дот­вра­тить зло­упот­ребле­ния — это что­бы Android пол­ностью перес­мотрел, как он обра­баты­вает дос­туп к локаль­ным пор­там.

«Основная проб­лема в том, что дос­туп к сокетам локаль­ного хос­та на Android вооб­ще не кон­тро­лиру­ется, — объ­ясня­ет он. — Поль­зовате­ли не могут пре­дот­вра­тить такого рода связь на сво­их устрой­ствах. Из‑за динами­чес­кой при­роды JavaScript и слож­ности в обновле­нии блок‑лис­тов, единс­твен­ный вер­ный спо­соб пос­тоян­но бло­киро­вать такие шту­ки — это огра­ничить подоб­ный дос­туп на уров­не мобиль­ной плат­формы и бра­узе­ра, внед­ряя более стро­гие полити­ки, что­бы огра­ничить кибер­зло­упот­ребле­ния».

 

Дано ли согласие?

Нет никаких приз­наков того, что Meta или «Яндекс» сооб­щили сай­там с тре­кера­ми или поль­зовате­лям, которые на них заходят, об отсле­жива­нии. На форумах раз­работ­чиков вид­но, что мно­гие вла­дель­цы сай­тов, исполь­зующие Meta Pixel, были в шоке, ког­да обна­ружи­ли, что скрип­ты обра­щают­ся к локаль­ным пор­там.

«С 5 сен­тября наш внут­ренний тре­кер оши­бок JS начал отме­чать неудач­ные зап­росы fetch к localhost:12387, — написал один из раз­работ­чиков. — С нашей сто­роны никаких изме­нений не было, а пик­сель тре­кин­га Facebook, которым мы поль­зуем­ся, гру­зит­ся через Google Tag Manager».

«А мож­но как‑то это отклю­чить?» — спро­сил еще один раз­работ­чик, стол­кнув­шись с загадоч­ным дос­тупом к локаль­ному пор­ту.

Не сов­сем ясно, наруша­ет ли отсле­жива­ние перехо­дов из бра­узе­ра в натив­ные при­ложе­ния законы о при­ват­ности в раз­ных стра­нах. Но Meta и про­чие ком­пании, исполь­зующие ее Meta Pixel, уже не раз попада­ли под раз­дачу в суде. Вспом­ни хотя бы эти слу­чаи:

Во всех этих делах утвер­жда­ется, что сбор дан­ных наруша­ет пра­вила кон­фиден­циаль­нос­ти. Более того, в иссле­дова­нии 2023 года (ког­да Meta Pixel еще называл­ся Facebook Pixel) выяс­нилось, что он тре­кает дей­ствия поль­зовате­лей на сай­тах в пуга­ющих под­робнос­тях, осо­бен­но на тех, которые попада­ют под понятие «чувс­тви­тель­ных» сог­ласно GDPR.

 

Вывод

По­ка что в Google не сооб­щают о пла­нах изме­нить спо­соб обра­бот­ки локаль­ного дос­тупа к пор­там в Android. Если хочешь мак­сималь­но защитить­ся от слеж­ки через Meta Pixel и «Яндекс Мет­рику», самый надеж­ный спо­соб — не ста­вить при­ложе­ния Meta и «Яндекса» на свои устрой­ства с Android.

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии