Podstawione linki Facebooka

ciemnastrona.com.pl 2 dni temu
Zdjęcie: Zdjęcie ryby żabnicy. Na końcu jej wabika widać link do Youtube'a, a tuż za paszczą logo Facebooka.


Facebook nie należy do czołówki uwielbianych stron. Przez kilka lat narażał się jednej stronie politycznej, w tej chwili zmienił front i naraża się drugiej. Zaś powszechność automatycznie generowanego spamu to czynnik odstraszający niezależnie od polityki.

Dorzucę do tego tygla jeszcze inną kontrowersję, na tle prywatnościowym.
Mianowicie: w momencie kliknięcia w niektóre linki na stronie facebook.com dochodzi do ich podmiany na takie, które dają Facebookowi pełniejszy wgląd w nasze zachowania, a także możliwość wybiórczej cenzury.

To istotne rozwinięcie metod, które dotąd opisywałem – do tradycyjnych parametrów śledzących doszły przekierowania przez stronę zależną, a choćby maskowanie całej akcji przez kod JavaScript. Facebook poszedł na całość w kwestii użytych sztuczek.

Dzięki temu ich linki są wdzięcznym obiektem do analizy. Podsumuję różne metody, jakie zostały w nich wykorzystane i pokażę, jak się ochronić. W sposób, mam nadzieję, zrozumiały dla wszystkich.
Zapraszam!

Ku swojemu zdziwieniu znalazłem artykuły sugerujące, iż ta metoda jest na Facebooku od dawna. Z jakiegoś powodu nie miałem z nią wcześniej styczności (choć kopiowałem linki).
W każdym razie, stara czy nowa – bez znaczenia. Pokonamy ją.

Źródło: Wikimedia Commons, na podstawie artykułu Masaki Miya i in. Przeróbki moje.

Spis treści

  • Praktyczny przykład
  • Szpiegolinki krok po kroku
    • Dyskretna podmiana linków
    • Przechwytywanie przez Facebooka
    • Parametry śledzące
  • Jak to obejść?

Praktyczny przykład

Na początek można sobie otworzyć na komputerze, w ogólnej przeglądarce, stronę facebook.com (musi być strona, a nie aplikacja, bo ta działa inaczej).

Tam trzeba znaleźć jakiś link prowadzący do strony zewnętrznej, poza Facebooka. Może być na przykład ten losowy z Zaufanej Trzeciej Strony. Linkujący do prezentacji o nieaktywności Fejsa w sprawie powszechnych oszustw. Kolejna interesująca patologia, gdyby komuś nie wystarczyły linki śledzące :wink:

A wracając do linków – w treści posta znajduje się link do YouTube’a, widoczny w całości:

https://www.youtube.com/embed/AastpuFMHEU

Jeśli po raz pierwszy najadę na niego myszką (nie klikając), to przeglądarka wyświetli w lewym dolnym rogu ekranu, dokąd on prowadzi.
Co ciekawe, będzie wyglądał ciut inaczej niż ten z posta. Będzie dłuższy, wzbogacony o parametr śledzący fbclid. Dodam dla jasności: dodany przez Facebooka, a nie Z3S.

https://www.youtube.com/embed/AastpuFMHEU&fbclid=DUŻO_ZNAKÓW

…Tylko iż ten parametr to stare dzieje, w światku prywatnościowym jest dobrze znany. Również na tym blogu. Gdyby to tylko o niego chodziło, to nie byłoby tutaj nic ciekawego.

Ciekawiej robi się natomiast, jeżeli klikniemy na link z posta prawym przyciskiem myszy. Wybierzemy opcję Kopiuj odnośnik (albo link, albo coś podobnego). A następnie wkleimy skopiowany link do Notatnika lub innego programu:

https://l.facebook.com/l.php?u=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DAastpuFMHEU%26fbclid%3DDUŻO_ZNAKÓW&h=TEŻ_DUŻO_ZNAKÓW&__tn__=-UK-R&c[0]=ZNÓW_DUŻO_ZNAKÓW

Ależ się zmienił! Jest teraz naszpikowany paroma rzeczami, które umożliwiają wzmożone gromadzenie danych. Omówię je krok po kroku.

Sprawdzanie linków na telefonie

Na telefonie może być trudniej sprawdzić działanie linków, bo Facebook przegania użytkowników urządzeń mobilnych na aplikację (gdzie ma większe możliwości zbierania danych). A kiedy jesteśmy w aplikacji, to nie ma opcji kopiowania linków. Przytrzymanie na którymś z nich palca po prostu go otwiera.

Dodam przy okazji, iż w obrębie samej aplikacji Facebook choćby nie musiałby stosować podmiany linków. I tak widzi więcej. Po kliknięciu w link do strony zewnętrznej apka Facebooka otwiera bowiem fałszywą przeglądarkę. Wygląda to tak, jakbyśmy przeszli do szerszego internetu. A w rzeczywistości przez cały czas tkwimy wewnątrz apki Facebooka (która może dodawać od siebie kod śledzący).

Łatwiej po prostu sprawdzić wszystko na kompie. Ale jeżeli ktoś ma tylko telefona, to można zrobić tak:

  • otworzyć przeglądarkę (Firefox, Chrome itd.),
  • wejść w ustawienia i wybrać opcję Wersja na komputery,
  • odwiedzić facebook.com (powinna się teraz wyświetlić pełna wersja strony, ciut za duża na ekran mobilny),
  • znaleźć link, przytrzymać na nim palec i wybrać opcję skopiowania.

Szpiegolinki krok po kroku

Dyskretna podmiana linków

Zanim w ogóle zagłębimy się w budowę linku, może nas ciekawić fakt, iż po skopiowaniu dostaliśmy coś innego niż wskazywała przeglądarka.

I nie była to zwykła, banalna niezgodność tekstu z linkiem (jak wyżej w tym wpisie, pod słowami „ten losowy”). W takim wypadku przez cały czas istniałaby zgodność między tym, co pokazuje przeglądarka w rogu, a docelową lokalizacją. Tutaj ta zgodność zanikła.

Wniosek? Link przed kliknięciem prowadził w inne miejsce niż po kliknięciu. Facebook go podmienił.

A na taką podmianę jest (chyba) tylko jeden sposób – JavaScript. Bardzo popularny język programowania, który ma niemalże monopol w internecie i jest obecny na większości współczesnych stron.
W domyśle ma być używany do nieco przyjaźniejszych celów. Jak nadanie stronom pewnej interaktywności, ładowanie elementów na bieżąco w miarę przewijania strony… Ale, ze względu na wgląd w wiele funkcji przeglądarki, gwałtownie stał się narzędziem profilowania.

Pod różne elementy strony – również linki – da się podpinać funkcje. Kod, który uruchomi się w momencie jakiegoś działania. Coś w tym stylu (zapisane pseudokodem):

link_X -> po_kliknięciu: nowy_link = podmień_link( link_X ) link_X = nowy_link

Link domyślnie prowadzi w miejsce A, co pokazuje przeglądarka. Ale po kliknięciu aktywuje się regułka podmieniająca, zmieniając lokalizację na B.
Podmianka nosi oficjalnie nazwę link shimming. Jest wredna… ale sama w sobie daje tylko maskowanie, a nie zbieractwo danych. To dopiero będzie.

Przechwytywanie przez Facebooka

Pierwszym, co rzuca się w oczy w nowym linku, jest jego początek. Już nie www.youtube.com, tylko l.facebook.com. Inny trzon strony, czyli domena, oznacza jedno – link nie prowadzi do YouTube’a, tylko do innej strony Facebooka. Nasz docelowy link, w nieco zmienionej postaci, został wepchnięty gdzieś w głąb tego nowego.

Ale przecież jak w niego kliknę, to przejdzie do YouTube’a!

Owszem, ale nie od razu. Najpierw przeglądarka poprosi l.facebook.com o zawartość tkwiącą pod danym linkiem. W odpowiedzi dostanie przekierowanie, czyli instrukcję mówiącą, żeby teraz poprosiła youtube.com o odpowiednią stronkę.

Inni winowajcy

Przekierowania w żadnym razie nie są unikalną cechą Facebooka. Występują również na YouTubie, do tego od niepamiętnych czasów na Twitterze (skracarka t.co; opisana zresztą we wpisie z linku wyżej).
Facebook wyróżnia się natomiast na niekorzyść tym, iż podmienia linki. Na Twitterze występuje niezgodność między linkiem w treści a linkiem faktycznym… Ale przynajmniej wchodzimy w to, co pokazuje przeglądarka w dolnym rogu. Bez niespodzianek.

Przekierowanie pozwala obejść typowe zachowanie przeglądarki.
Normalnie, po kliknięciu w link, od razu prosi ona o nową stronę, zaś strony w tej chwili wyświetlanej o tym nie informuje.
Ale kiedy tą „nową stroną” zostaje podpucha Facebooka, to mogą łatwo przechwycić brakującą informację: „mój użytkownik A właśnie kliknął w link do strony Y”.

Zastosowanie śledzące

W ten sposób Facebook może monitorować, w skali pojedynczych osób i całych populacji, klikanie w linki.

Na poziomie społeczeństw będą widzieli, co jest na czasie, co rośnie w siłę. Już kiedyś w podobny sposób (tyle iż przez aplikację Onavo, stającą na drodze przepływu danych w telefonie) wyłapali zawczasu, iż WhatsApp wyrasta na konkurencję dla ich Messengera. Po czym go kupili.

Na poziomie jednostek będą mogli z kolei jeszcze lepiej widzieć, co kogo interesuje. Już wcześniej Facebook widział:

  • jakie fanpejdże, profile itd. odwiedzamy w obrębie ich platformy,
  • jakie strony zewnętrzne odwiedzamy – ale tylko jeżeli zaszła któraś z dwóch rzeczy:

    • właściciele tych stron dobrowolnie dodali do siebie element śledzący Facebook Pixel,
    • używaliśmy apki Facebooka.
      Apka otwiera bowiem linki we własnej podstawionej przeglądarce, więc zachowuje wgląd w odwiedzone treści.

Przekierowania uzupełniają lukę, martwe pole w ich przenikliwym wzroku. Widzą dzięki nim również odwiedziny na cudzych stronach wykonane przez ogólną przeglądarkę, a nie apkę. choćby jeżeli te strony nie dodały u siebie FB Pixeli.

…Ale czy nie mogli tego osiągnąć w inny sposób? Ktoś mógłby zapytać:

A po co przekierowanie? Skoro JavaScript i tak się uruchamia w momencie kliknięcia w link, to nie mógłby po prostu wysłać Facebookowi informacji, iż to zrobiliśmy?

Sensowne pytanie! JavaScript jak najbardziej może przesyłać informacje.
Nie wydaje się to również jakimś większym obciążeniem dla Facebooka – danych do wysłania jest mało. ID użytkownika plus ID klikniętego linku, tyle. Do tego nie byłoby to słane jakoś nagminnie na tle innych działań, jak przewijanie strony.

…A jednak mamy przekierowania. Być może jest coś, co mi umyka. Jakaś techniczna cecha ich infrastruktury, która zniechęca do śledzenia kliknięć przez JS-a.

Zastosowanie cenzorskie

Możliwe również, iż wybrali akurat przekierowania ze względu na ich drugą zdolność – umożliwiają łatwą cenzurę wybranych stron.

Jak wspomniałem, normalny link byłby sprawą ściśle między naszą przeglądarką a stronką, do której tenże link prowadzi. Klikamy, przeglądarka prosi o stronę spod linku, ładuje jej zawartość. Zero udziału Fejsa.
Ale teraz Facebook dosłownie wstawia się między nas a stronkę. I może umieścić na l.facebook.com taką regułkę:

  • odczytaj wartość parametru u (URL, czyli link do strony docelowej);
  • jeśli ta wartość jest na liście stron zakazanych, to wyświetl informację o braku strony;
  • jeśli jej tam nie ma, to przekieruj do tej strony.

Ta sama krótka, niezmienna regułka. A listę stron zakazanych mogliby aktualizować na bieżąco.

Nie jest to żadna moja paranoja; Facebook pisał o tym wprost, choć oczywiście w superlatywach.
Również strony z branży marketingu internetowego opisały nieoficjalne możliwości, tyle iż stawiając przekierowania w korzystnym świetle:

If your website is legitimate and safe, you have nothing to worry about.

Wbrew tym słowom rzeczywistość pokazała, iż warto zachować sceptycyzm :wink:

Taki straszak wyświetlał się ludziom chcącym poczytać indyjską stronę nagłaśniającą kwestię ataków na neutralność sieci i faworyzowania wielkich graczy. Takich jak Facebook.

Parametry śledzące

Na koniec klasyka, która skutecznie uzupełnia poprzednie rzeczy. Parametry śledzące.

Do każdego linku po znaku zapytania można dodać dodatkowe informacje. Są rozdzielane znakami & i mają postać nazwa=wartość.
Nie wpływają zwykle na działanie samego linku, ale mogą zawierać – czasem w skompresowanej postaci – dowolne informacje. Takie jak identyfikatory użytkowników, wzmianki o tym, z jakiej strony przychodzą itd.

Jeden z nich to klasyczny, istniejący od dawny fbclid. Jest dodawany prosto do linku do zewnętrznej strony (czyli do tego prowadzącego np. na youtube.com). Poniżej kilka sposobów na jego wykorzystanie:

  • Skoro jest dodawany do końcowego linku, to strona zewnętrzna też go otrzyma i będzie mogła ustalić, iż przychodzimy na nią z Facebooka.

    Trafiały się już stronki oszustów, które traktowały takich użytkowników gorzej niż innych.

  • Ponadto, jeżeli na tej stronie znajdują się gościnnie elementy reklamowe od Facebooka, to będą mogły odczytać identyfikator (bo widzą to samo, co strona-gospodarz), wyszukać go w bazie i wyświetlić na tej podstawie reklamy.
  • Jeśli ktoś skopiuje link i wyśle go do innej osoby – choćby poza Facebookiem – to zarówno platforma, jak i odwiedzana strona, mogą powiązać te osoby ze sobą.

    Sytuacja, gdy raz z identyfikatorem abcd638… przychodzi jedna osoba, a potem inna, z całkiem innego urządzenia, a do tego na przykład przez Messengera, mogą się wyróżniać.

    Ma to oczywiście swoje ograniczenia; jeżeli ktoś wrzuci link na publiczne forum, to liczba odwiedzających z tym samym identyfikatorem zostanie sztucznie zawyżona.

A to dopiero ten pierwszy parametr. Oprócz niego do nowych linków z przekierowaniem są dodawane jeszcze trzy inne: __tn__, f oraz c[0].

Można sobie przyjąć taką intuicyjną regułkę: im dłuższy ciąg znaków oraz im większy ich możliwy zakres (cyfry, litery…), tym więcej informacji się tam zmieści.

Patrząc w ten sposób, pierwszy parametr __tn__ to taka klasyka i wydaje się niegroźny na tle innych. Jest krótki, przewidywalny, przyjmuje tylko niewielki zakres wartości.

Pozostałe dwa są natomiast długimi ciągami znaków. Gdyby ktoś chciał, to mógłby tam wbić na przykład informacje identyfikujące użytkownika, znacznik czasu (moment kliknięcia w link) lub informacje o poście, w którym link się pojawił.

To moje gdybanie, bo nie znam znaczenia parametrów. I raczej łatwo go nie poznam.

Omówienie utrudnień

Teoretycznie sens parametrów mógłby tkwić gdzieś w kodzie JavaScript z Facebooka, który w końcu konstruuje linki na etapie podmianki. A każda przeglądarka daje łatwy wgląd do tego kodu. Czyżby rozwiązanie zagadki było tuż przed moimi oczami?

Problem w tym, iż kod jest ściśnięty, zminifikowany (to powszechny zabieg twórców portali, oszczędzający nieco przesył danych).
Po pierwsze: spacje i znaki końca linijek są usunięte. Ale to akurat można względnie łatwo odwrócić. Gorzej, iż nazwy zmiennych są zastąpione pojedynczymi literami i musiałbym dużo główkować, żeby odczytać sens kodu.

Taka trochę inżynieria wsteczna dla internetu. A iż znajomość JavaScriptu jest u mnie podstawowa, to wyzwanie mnie przerosło.
Nie miałem też żadnej gwarancji, iż trafiłbym na coś ciekawego. Równie dobrze w kodzie dodającym parametry mogło być jedynie przyporządkowanie w takim (zmyślonym) stylu:

{ linkID_1234: 'abdakdhja', linkID_3456: 'zycmnalsr' }

…Gdzie abdakdhja i spółka to jakieś niepodpisane identyfikatory, pobrane z bazy Facebooka podczas ładowania strony.

Mając do czynienia z czymś nieznanym, ale potencjalnie groźnym, lepiej dmuchać na zimne. Na szczęście między te wszystkie dziwne rzeczy jest wciśnięty nasz link docelowy, ten którego chcemy. I da się go wyłuskać.

Jak to obejść?

Zwyczajne parametry śledzące dało się po prostu uzunąć „z palca”. Tym razem trzeba się nieco bardziej namęczyć.
Ale nie jest źle, to kwestia kilku kroków. Pokażę teraz różne sposoby.

Ręcznie i krok po kroku

Można skopiować link do jakiegoś Notatnika, po czym wyszukać w nim znaki &. Wszystko od ostatniego znalezionego znaku do końca (włącznie z nim) – usunąć.

https://l.facebook.com/l.php?u=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DAastpuFMHEU%26fbclid%3DDUŻO_ZNAKÓW&h=TEŻ_DUŻO_ZNAKÓW&__tn__=-UK-R&c[0]=ZNÓW_DUŻO_ZNAKÓW

Potem wyszukujemy u=, czyli ostatnią rzecz przed adekwatnym linkiem (upewniamy się na oko, iż tuż po tym zaczyna się https). Usuwamy ten tekst oraz wszystko przed nim.

https://l.facebook.com/l.php?u=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DAastpuFMHEU%26fbclid%3DDUŻO_ZNAKÓW

Teraz będzie najbardziej żmudna część, bo uzyskany link ma postać „zabezpieczoną”. Wyłączono specjalność niektórych znaków, jak ukośniki czy dwukropki; zamiast nich są zamienniki, jak %3F zamiast ?.

Konwersja na postać „tradycyjną” nie jest trudna, ale mogłaby być upierdliwa przy użyciu samego znajdowania i zamieniania znaków. Proponuję zamiast tego użyć przeglądarki:

  • otworzyć narzędzia przeglądarkowe
    (na Firefoksie: kliknięcie trzech kresek w górnym rogu, Więcej narzędzi > Narzędzia dla twórców witryn; albo skrót klawiszowy Ctrl+Shift+I),
  • kliknąć u góry zakładkę Konsola,
  • wpisać tam unescape('X'), gdzie zamiast X wklejamy nasz link, po czym skopiować rezultat.

    Pamiętajcie o cudzysłowach przed i po, są ważne!
    Poza tym możliwe, iż przeglądarka poprosi o wpisanie jakiegoś tekstu, żeby odblokować możliwość wklejania.

Alternatywny sposób

Krok związany ze sprowadzeniem linków do tradycyjnej postaci można wykonać w inny sposób.

Jeśli nie chcemy zaglądać w narzędzia przeglądarki, a przy tym nie obawiamy się powierzania naszych linków obcej stronce, to można skorzystać z którejś z gotowych stronek z drobnymi narzędziami, jak popularna Browserling.

…Ale proponuję zachować zasadę ograniczonego zaufania. Stronę warto odwiedzić w trybie prywatnym (żeby nie mogła zapisywać informacji na później).
Poza tym po odwiedzeniu proponuję rozłączyć się z internetem.

Dopiero wtedy wklejamy nasz link. jeżeli narzędzie nie ma nic do ukrycia, to bezproblemowo powinno zadziałać offline. jeżeli nie działa, to proponuję z niego zrezygnować.

Mając czysty link, możemy go skopiować, po czym zamknąć stronę. Nie będzie nam już potrzebna. Można teraz ponownie włączyć internet, mając względną pewność, iż nie mieli technicznej możliwości zapisania linku.

Dodam na wszelki wypadek, iż istnieją strzępki kodu JavaScript działające chwilę po wyłączeniu przeglądarki, zwane wątkami usługowymi. Zamknięcie trybu prywatnego powinno automatycznie je usuwać, ale nie daję gwarancji. Dlatego zawsze lepiej czyścić link po swojej stronie.

Na koniec można usunąć tradycyjny parametr śledzący – wszystko od &fbclid albo ?fbclid (zależnie od tego, czy był to jedyny parametr) aż do końca.

https://www.youtube.com/embed/AastpuFMHEU&fbclid=DUŻO_ZNAKÓW

Wedle moich obserwacji Facebook dodaje swój chłam na końcu. Ale gdyby jakimś cudem były po nim inne, cenniejsce parametry, to usuwamy do najbliższego znaku & zamiast do końca.

Zostaniemy z oczyszczonym linkiem, który pozwoli całkowicie ominąć Facebooka i odwiedzić oczekiwaną stronkę bezpośrednio.

Bonus: skrypt pomocniczy

Stworzyłem też krótki, pomocny skrypt Pythona, który pozwala zautomatyzować powyższe kroki i czyścić linki szybko, całkiem offline, choćby bez narzędzi przeglądarkowych.

fblink.py (pobierz)
Mogą się Wam przydać samouczki:
  • instalowanie Pythona i używanie skryptów
Mając Pythona na komputerze, wystarczy uruchomić ten skrypt (przez kliknięcie, przez domyślny edytor IDLE, obojętne). Wyświetli się prośba o wklejenie linku. Wklejamy ten nieoczyszczony z Facebooka, a pod spodem pojawi się jego wersja bez przekierowania i parametrów śledzących.

Podsumowanie

Mając oczyszczony link, możemy go wkleić do górnego paska przeglądarki. W ten sposób pójdziemy prosto do oczekiwanej strony, nie zahaczając o terytoria Facebooka.
Gratulacje, najwredniejsze linki śledzące zostały przechytrzone :smile:

Rozwiązaniem jeszcze trwalszym może być natomiast ograniczenie czasu spędzanego na Fejsie. W ten sposób rzadziej będziemy nadziewać się na linki. Zaś zyskany czas można poświęcić na spotkania z ludźmi w realu.

Życząc takich pomyślnych spotkań, kończę ten wpis. Do zobaczenia w kolejnych!

Idź do oryginalnego materiału