Terug naar blog

Canvas-fingerprinting en mitigatie: consistentie werkt beter dan randomisatie

Canvas-fingerprinting maakt van renderingsverschillen van dezelfde tekeninstructies op uiteenlopende hardware en software een identificatiekenmerk en wordt zelden op zichzelf gebruikt. Een verstandige aanpak is niet om de waarde telkens te veranderen, maar om de kenmerken binnen één omgeving onderling consistent te houden.

Het principe achter Canvas-fingerprinting is niet ingewikkeld, maar veel rondgaande tegenmaatregelen werken juist averechts.

Dezelfde instructies geven op verschillende machines andere resultaten

Canvas is een tekencomponent van HTML5 waarmee een webpagina via scripts vormen en tekst kan tekenen. Dezelfde tekeninstructies kunnen op verschillende apparaten kleine renderingsverschillen opleveren door onderliggende factoren zoals het besturingssysteem, de browserversie, de lettertypebibliotheek en het grafische stuurprogramma. Met het blote oog zijn die verschillen vrijwel niet te zien, maar zodra de canvasinhoud als gegevens wordt geëxporteerd, worden het waarden die onderling te vergelijken zijn.

Het proces verloopt ongeveer zo: de webpagina tekent eerst vormen en tekst en gebruikt daarna toDataURL() om het resultaat als Base64-string te exporteren. Die string kan vervolgens als identificatiekenmerk worden gebruikt. Verschillende apparaten leveren verschillende exportresultaten op, waardoor de waarde in veel gevallen uniek is. Cookies verwijderen heeft er geen invloed op, en de cache legen evenmin.

Het wordt zelden afzonderlijk gebruikt

Een enkele Canvas-waarde is beperkt bruikbaar en kan verschuiven na een browserupgrade of een update van het grafische stuurprogramma. In de praktijk wordt Canvas meestal gecombineerd met meerdere andere kenmerken die onderling worden gecontroleerd:

  • Grafische gegevens zoals WebGL, lettertypelijsten en het model van de videokaart
  • Omgevingsgegevens zoals UA, tijdzone, taal en schermresolutie
  • Sessiegerelateerde gegevens zoals cookies, lokale opslag en netwerkuitgang

De reden om deze signalen te bundelen is consistentiecontrole. Elk kenmerk kan afzonderlijk binnen een normaal bereik vallen, maar tegenstrijdigheden vallen op zodra ze worden gecombineerd: de tijdzone staat op de Verenigde Staten, de talenlijst bevat alleen Chinees en de Canvas-waarde past bij geïntegreerde graphics terwijl de UA een nieuw high-end apparaat opgeeft. Het platform hoeft niet te bewijzen wie u bent. Het hoeft alleen te zien dat deze combinatie niet op een echte machine lijkt.

Uitschakelen laat de omgeving juist opvallen

Veel mensen denken er als eerste aan om Canvas uit te schakelen, maar dat kan precies het tegenovergestelde effect hebben.

Vrijwel alle browsers van gewone gebruikers ondersteunen Canvas. Een omgeving die Canvas duidelijk niet ondersteunt, is statistisch een uitzondering en verraadt daarmee dat er speciale aanpassingen zijn gedaan. Er is ook een praktisch probleem: veel websites gebruiken Canvas voor het bijsnijden van afbeeldingen, grafieken en het renderen van CAPTCHA's. Als Canvas wordt uitgeschakeld, kunnen functies stukgaan en ontstaat er nog een afwijking.

Een andere aanpak is om bij elk bezoek nieuwe willekeurige waarden te gebruiken. Ook dat levert problemen op: fingerprints van echte apparaten zijn stabiel. Een omgeving die telkens verandert, gedraagt zich anders dan een normaal apparaat en kan daardoor juist makkelijker apart worden gemarkeerd. Randomisatie kan zelf een herkenbaar signaal zijn.

De verstandige richting is interne samenhang

Het is realistischer om de kenmerken binnen een omgeving op elkaar te laten aansluiten en het geheel niet afwijkend te maken dan om alles bij ieder bezoek anders te laten zijn.

In de praktijk moeten kenmerken elkaar ondersteunen: tijdzone, taal en de geografische locatie van het uitgaande IP-adres moeten bij elkaar passen. Het apparaat dat de UA opgeeft en de grafische mogelijkheden die Canvas en WebGL tonen, moeten in dezelfde klasse vallen. De omgeving van hetzelfde account moet op lange termijn stabiel blijven en bij herhaalde bezoeken niet opvallend veranderen. Vertrouw niet op plug-ins die alleen één functie uitschakelen; die leveren vaak juist duidelijkere kenmerken op. Laat waar mogelijk minder scripts van derden draaien om het verzameloppervlak te verkleinen.

Als meerdere omgevingen onderling van elkaar moeten verschillen, is dat een probleem voor omgevingsisolatie. Tools zoals PurpleMark geven bij isolatie van meerdere accounts doorgaans ieder account een vaste omgeving in plaats van parameters willekeurig te laten verspringen, omdat platforms vooral letten op de vraag of de combinatie van kenmerken stabiel en onderling logisch is.

Samenvatting

Canvas kan voor tracking worden gebruikt omdat het kleine verschillen in hardware en software omzet in een stabiele, vergelijkbare string. Een effectieve aanpak is niet om Canvas uit te schakelen of willekeurig te laten verspringen, maar om het hetzelfde verhaal te laten vertellen als de andere kenmerken van dezelfde omgeving. Gewoon lijken is veiliger dan uitzonderlijk lijken.