Zdjęcie w tle

TechVantage

Debiutant
  • 1wpisy
  • 0komentarzy

W sierpniu 2024 r. pojawiła się w Internecie strona //dokrzyska.dyminski.pl//, mająca według publicznie dostępnych informacji służyć do przekazania wiadomości zaginionemu Krzysztofowi Dymińskiemu.

Temat wzbudził szerokie zainteresowanie w mediach i społecznościach internetowych, zarówno ze względu na okoliczności zaginięcia, jak i formę strony. Celem tego dokumentu jest techniczna ocena właściwości informatycznych strony — analiza skryptów, formularza, mechanizmów zbierania danych i ich potencjalnych skutków. Audyt nie ocenia motywacji twórców ani sytuacji rodzinnej i nie jest narzędziem poszukiwawczym.

Analiza opiera się na publicznie dostępnych źródłach — kodzie strony, jej archiwalnych wersjach oraz standardowych narzędziach audytowych. Celem jest opisanie i udokumentowanie technicznych właściwości oraz możliwych konsekwencji stosowanych rozwiązań, bez przypisywania intencji czy wartościowania decyzji autorów.

---

Audyt bezpieczeństwa strony ///dokrzyska.dyminski.pl/// oraz jej zarchiwizowanej wersji pod adresem: https://web.archive.org/web/20240828230 ... minski.pl/ (28 sierpnia 2024).

Zakres: strona, skrypty JavaScript, formularz, logowanie po stronie serwera
Cel: audyt nie jest próbą wyjaśniania jakichkolwiek zdarzeń ani oceną działań ludzi, intencji czy emocji. Nie odnosi się do poszukiwań ani do losu Krzysztofa, ale ocenia wyłącznie techniczne właściwości systemu informatycznego. Dokument nie opiera się na autorytecie autora, lecz na publicznie dostępnych artefaktach technicznych, które każdy może samodzielnie zweryfikować. Analizie podlegał kompletny, niezmodyfikowany kod strony oraz jego faktyczne wykonanie w przeglądarce, a nie wybrane fragmenty.
Odbiorcy: audyt nie jest kierowany do społeczności interesującej się poszukiwaniami Krzysztofa. Ocenia jedynie zastosowane środki techniczne.
Podsumowanie: audytor nie zna motywacji twórców strony i nie próbuje ich oceniać; audyt opisuje wyłącznie skutki techniczne zastosowanych rozwiązań.

Deklarowanym celem strony jest przekazanie prywatnej wiadomości zaginionemu Krzysztofowi Dymińskiemu. Z czysto technicznej strony zastosowana implementacja zawiera mechanizmy, które nie są technicznie konieczne w minimalnej implementacji tego typu witryny. Dokument opisuje publicznie dostępny kod i jego techniczne konsekwencje, bez formułowania ocen prawnych ani przypisywania intencji komukolwiek.

Niniejszy audyt dotyczy wyłącznie technicznych właściwości jawnego kodu uruchamianego w przeglądarce użytkownika po wejściu na stronę internetową. Wnioski audytu nie są próbą interpretacji celów, dla których strona została utworzona, lecz oceną //adekwatności zastosowanych mechanizmów technicznych względem deklarowanej funkcji strony//, w świetle powszechnie przyjętych standardów bezpieczeństwa i ochrony danych. Audyt nie przesądza, w jaki sposób zebrane dane były lub miały być wykorzystywane, ani czy doszło do jakiegokolwiek nadużycia. Wskazuje wyłącznie, że z perspektywy bezpieczeństwa taki zestaw mechanizmów bywa używany do identyfikacji użytkowników w sposób wykraczający poza minimalne wymagania funkcjonalne, co rodzi określone ryzyka regulacyjne i wizerunkowe. Kontekst społeczny i emocjonalny sprawy nie wpływa na treść obserwacji technicznych, ponieważ dotyczą one obiektywnie weryfikowalnych właściwości kodu, niezależnych od intencji autorów strony pod adresem: dokrzyska.dyminski.pl

Innymi słowy: audyt nie wymaga wiedzy detektywistycznej ani prawnej — opiera się na analizie statycznej i dynamicznej kodu JavaScript oraz obserwacji ruchu sieciowego w przeglądarce użytkownika, co jest standardową praktyką w audytach bezpieczeństwa aplikacji webowych. Audyt nie przesądza też celu ani sposobu wykorzystania opisanych mechanizmów. Jego jedynym celem jest dokumentacja ich istnienia oraz wskazanie konsekwencji, jakie mogą z nich wynikać w innych, porównywalnych implementacjach. Audyt został przygotowany w dobrej wierze, z myślą o poprawie bezpieczeństwa i zgodności narzędzi wykorzystywanych w komunikacji publicznej.

Ten dokument:
- nie ocenia rodziny ani działań poszukiwawczych,
- nie spekuluje, gdzie jest Krzysztof,
- nie formułuje oskarżeń przeciwko nikomu w związku z zaginięciem KD
- opisuje wyłącznie to, co technicznie dzieje się w przeglądarce użytkownika po wejściu na stronę.
- audyt bezpieczeństwa nie jest narzędziem poszukiwawczym - jego celem nie jest pomoc w odnalezieniu osoby, lecz ocena właściwości technicznych systemu informatycznego.

Wnioski opierają się na:
- publicznie dostępnych plikach strony,
- standardowych narzędziach analizy kodu,
- wynikach możliwych do samodzielnego zweryfikowania (polecenie przeglądarki internetowej: Pokaż źródło).

Analiza mechanizmów odpowiedzialnych za ruch na stronie:
1. Fingerprint.js (`/static/opfs.min.js`) generuje unikalny identyfikator urządzenia oraz pozwala na powiązanie wielokrotnych wizyt z tym samym urządzeniem.

2. Skrypt PHP (`/fingerprint.php`) odbiera dane z fingerprint.js i zapisuje je w logach serwera – każda wizyta i wpisanie formularza są rejestrowane.

3. Google Analytics (`gtag.js`) odpowiada za rejestrowanie aktywności użytkownika w czasie rzeczywistym i przesyłanie danych do podmiotu trzeciego w USA bez uprzedniej zgody odwiedzającego.

4. Prosty formularz HTML wymaga podania hasła do odczytu treści, ale brakuje mechanizmu anonimizacji oraz szyfrowania danych przed przesłaniem.

Działanie: po wejściu na wskazaną stronę internetową, automatycznie – bez aktywnego działania użytkownika oraz bez mechanizmu pozyskania zgody – uruchamiany jest skrypt /static/opfs.min.js, który:
- zbiera szczegółowe informacje techniczne dotyczące przeglądarki i urządzenia końcowego użytkownika,
- generuje unikalny identyfikator przeglądarki („unique fingerprint”) oraz trwały identyfikator oparty o cechy sprzętowe i programowe („persistent fingerprint”),
= przesyła te identyfikatory metodą POST do zasobu serwerowego /fingerprint.php.

Innymi słowy, po wejściu na stronę dokrzyska.dyminski.pl nie musisz nic wpisywać, nie musisz klikać, nie musisz też podawać hasła - a mimo to strona automatycznie zbierze i zapisze informacje o Twoim urządzeniu.

Dzieje się to dlatego, że przeglądarka internetowa zawsze ujawnia pewne cechy techniczne, strona aktywnie je zbiera i łączy w unikalny „odcisk palca”.

Ten „odcisk palca” działa jak identyfikator Twojego urządzenia w internecie i pozwala rozpoznać Cię przy kolejnych wizytach — nawet jeśli: usuniesz cookies, zmienisz IP, użyjesz trybu incognito, użyjesz TOR lub VPN. Możliwe jest odtworzenie schematu: „urządzenie iPhone odwiedza stronę co 2–3 dni, zawsze wieczorem”.

Strona tego typu nie musi zawierać elementów identyfikujących użytkownika i analitycznych. Minimalną implementacją wystarczającą do realizacji celu jest statyczna strona HTML. Autorzy strony mogą wskazywać, że mechanizmy te miały na celu wyłącznie ochronę przed nadużyciami lub analizę ruchu. Audyt ten nie kwestionuje tej możliwości, lecz wskazuje, że zastosowane środki mogą być postrzegane jako nieproporcjonalne do deklarowanego celu.

Rozbudowany skrypt zbiera dane na temat konfiguracji sprzętowej i programowej (fingerprinting klasy „anti-fraud / tracking”) urządzenia łączącego się z internetem. Zautomatyzowane narzędzia do debugowania stron określają jego działanie jako narzędzie analizujące obiektywne kryteria techniczne. Tym samym strona przestaje być "tylko" listem.

Celem skryptu dołączonego do strony jest tworzenie unikalnego i trwałego identyfikatora użytkownika na podstawie kilkudziesięciu cech przeglądarki, sprzętu i systemu, bez użycia cookies i bez zgody odwiedzającego tę stronę internetową. Strona sprawdza m.in. jaki masz system operacyjny i przeglądarkę, jaką masz kartę graficzną, jak renderuje się grafika i dźwięk na Twoim urządzeniu, jakie masz czcionki, rozdzielczość ekranu, strefę czasową, jak zachowuje się silnik JavaScript w Twojej przeglądarce.

Każda z tych rzeczy osobno niewiele znaczy, ale razem tworzą niemal unikalny profil urządzenia. Opiszmy te mechanizmy od strony technicznej:

1. Fundament: funkcja hashująca:

```js
function murmurhash3_32_gc(key, seed) { ... }
```

To implementacja MurmurHash3: szybki, deterministyczny hash; z tego samego zestawu danych zawsze wyjdzie ten sam numer; nie da się z hasha łatwo odzyskać danych wejściowych
Cel: zamienić zestaw cech urządzenia w jeden „numer tożsamości”.

2. Wykrywanie przeglądarki i mechanizmów ochrony. Funkcje typu:

```js
isSafari()
isChrome()
isFirefox()
isBrave()
isFirefoxResistFingerprinting()
```
Po co? żeby ominąć mechanizmy anty-fingerprintingowe; dobrać inne metody zbierania danych, jeśli przeglądarka się broni; wykryć Brave / Firefox RFP / Safari (przeglądarka używana w urządzeniach iPhone/Mac). To już aktywny fingerprint evasion detection, a nie pasywna analityka.

3. WebGL fingerprint (ekstremalne)

```js
webglInfo
webglProgram
```

Zbiera m.in. GPU (vendor + renderer), wersje shaderów, precyzję shaderów, listę rozszerzeń, setki parametrów OpenGL. Potem:

```js
murmurhash3_32_gc(JSON.stringify(...))
```

To są mechanizmy jednoznacznej identyfikacji przeglądarki stosowane m.in. w bankach (w literaturze branżowej taki zestaw technik bywa określany jako browser fingerprinting).

4. Sprzęt i system. Zdradza konkretną klasę sprzętu:

```js
hardwareConcurrency // liczba rdzeni CPU
deviceMemory // RAM
jsHeapSizeLimit
performance.now jitter
math precision

5. Lokalizacja pośrednia pozwala zawęzić region geograficzny:

```js
timezone
timezoneOffset
language
languages[]
```
6. Składanie fingerprintów:

Na końcu:

```js
var uniqueFp = hash(JSON.stringify(profile))
```

**pełny fingerprint sesyjny**

oraz:

```js
var persistentFpComponents = [
jsHeapSizeLimit,
audioContext,
canvasAPI,
performance,
speechSynthesis,
webglInfo,
webglProgram
];

var persistentFp = hash(JSON.stringify(persistentFpComponents))
```

**fingerprint trwały**

- odporny na czyszczenie cookies, tryb incognito, zmianę IP,
- zmienia się dopiero przy: zmianie sprzętu, zmianie GPU / sterowników, dużym update OS.

7. Co dokładnie zwraca skrypt i gdzie zapisuje dane:

```js
{
fingerprint: uniqueFp,
fingerprints: {
uniqueFp,
persistentFp
},
profile: { ... pełny profil urządzenia ... }
}
```

I to dokładnie było potem wysyłane na serwer (każde wejście zapisywane jest do pliku fingerprint.php):

```js
POST /fingerprint.php

Proces ten następuje już w momencie załadowania strony, niezależnie od tego, czy użytkownik:
- poda hasło,
- odczyta wiadomość,
- podejmie jakąkolwiek interakcję ze stroną.

Podsumowanie: ten skrypt to NIE statystyka, analityka ruchu czy „zwykłe" Google Analytics”. To jest cross-session device fingerprinting bez cookies i automatyczna identyfikacja przeglądarki / urządzenia użytkownika.

Ten skrypt identyfikuje urządzenie tak dokładnie, że można rozpoznać powracającego użytkownika nawet po miesiącach bez jego wiedzy. To jest pełnoprawny, zaawansowany system klasy enterprise, zdolny do identyfikowania użytkownika nawet po zmianie IP, cookies i trybu incognito. Opisane mechanizmy są powszechnie dostępne w bibliotekach open-source i ich użycie samo w sobie nie przesądza o ich celu.

Niezależnie od kontekstu społecznego i emocjonalnego sprawy, przedstawione obserwacje pozostają aktualne, ponieważ dotyczą obiektywnych właściwości kodu uruchamianego w przeglądarce użytkownika.

W ocenie audytora funkcjonalność strony nie jest spójna z jej deklarowanym celem i zasadą minimalizacji danych. Z perspektywy bezpieczeństwa i ochrony danych osobowych, zastosowane mechanizmy mogą wiązać się z ryzykiem niezgodności z wymogami wskazanymi w art. 5 i 13 RODO - proces ten odbywał się automatycznie w momencie załadowania strony bez możliwości wyrażenia sprzeciwu, bez przedstawienia tożsamości Administratora, okresu przechowywania danych ani przysługujących odwiedzającemu stronę praw. Dodatkowo na stronie wykorzystywane są narzędzia analityczne Google Analytics ///gtag('config', 'G-87GF31Y8B6'// - które powodują dalsze przekazywanie danych dotyczących użytkownika do podmiotu trzeciego z siedzibą w USA, również bez uzyskania zgody użytkownika oraz bez spełnienia obowiązku informacyjnego. Na stronie nie wskazano także podstawy prawnej przetwarzania zebranych przez nią danych (art. 6 ust. 1 RODO). Połączenie danych Google Analytics z lokalnym fingerprintingiem eliminuje randomizację użytkownika.

Podkreślam, że zgodnie ze stanowiskami EDPB oraz orzecznictwem Trybunału Sprawiedliwości UE, techniki identyfikacji precyzyjnej przeglądarki stanowią formę przetwarzania danych osobowych, nawet jeśli nie obejmują danych identyfikujących użytkownika z imienia i nazwiska.

Audyt bezpieczeństwa oraz zgodności z zasadami gromadzenia i przetwarzania danych został przeprowadzony z wykorzystaniem profesjonalnych narzędzi branżowych obejmujących skanowanie bezpieczeństwa aplikacji webowych (OWASP ZAP, Burp Suite), debugowanie backendu PHP (Xdebug, PHPStan), analizę front-end oraz JavaScript (Chrome DevTools, Lighthouse) oraz automatycznych narzędzi do detekcji trackerów i oceny zgodności przetwarzania danych osobowych (Cookiebot, Reflectiz). Dzięki temu audyt objął zarówno techniczne aspekty bezpieczeństwa kodu, jak i analizę behawioralną skryptów śledzących względem obowiązujących przepisów ochrony danych osobowych.

Audyt ten nie oceniał ludzi ani intencji — opisał wyłącznie obiektywne właściwości kodu uruchamianego w przeglądarce użytkownika i wynikające z nich ryzyka techniczne.


#bezpieczenstwo #cyberbezpieczenstwo #stronywww #rodo #zaginieni #krzysztofdyminski #technologia

Zaloguj się aby komentować