- Vue 58.7%
- Python 30.8%
- CSS 6%
- TypeScript 2%
- Dockerfile 1.7%
- Other 0.8%
| backend | ||
| front | ||
| .gitignore | ||
| docker-compose.yaml | ||
| README.md | ||
Liens
Lien git : https://forge.piair.dev/piair/GPD-P1
Lien démonstration : https://gdp.piair.dev/
Lien vidéo : https://www.youtube.com/watch?v=HcUazafnOLU
Menace étudiée
Ce projet étudie le risque liée au Browser Fingerprinting ou empreinte du navigateur. Cette méthode a pour objectif de pouvoir suivre un utilisateur, même si ce dernier refuse le suivi via des cookies ou par un compte.
Les données observées
Afin de pouvoir établir un profil, notre solutions récupère de nombreuses informations liées à la machine de l'utilisateur ainsi qu'à son navigateur. On peut citer le user-agent, mais aussi la résolution d'écran ou le fabriquant de la carte graphique. Toutes les informations collectés sont affichée sur la page d'accueil, avec une description de leur usage.
Ces données sont collectées lors du chagement de la page via un script JavaScript. Il n'y a aucune interactions de la part de l'utilisateur.
Les implications
Comme cette solution ne necessite aucune interraction de l'utilisateur et qu'elle n'a pas besoin d'utiliser de cookies ou de stockage local, il est compliqué de s'en protéger. Il est possible de créer un profil pour un utilisateur, qui va persister même si ce dernier utilise un VPN ou la navigation privée.
Les limites
Notre démonstration ne se concentre que sur la partie client. Une mise a jour du navigateur risque alors de créer un nouveau profil. Afin de mitiger ces risques, les solutions commerciales utilisent aussi des informations coté serveur (comme l'adresse IP) afin d'améliorer le suivi.
De plus, afin de rendre la démonstration plus parlante, nous avons choisi d'être très aggressif sur la gestion des profils. Cela veut dire qu'il y a de plus fortes chances de faux positifs, car des paramètres plus distants risquent d'être considérés comme égaux.
Enfin, les navigateurs "privacy focused" ont mis en place des solutions contre le suivi, ce qui limite encore plus notre application.
Scénario reproductible
Scénario fonctionnel
- Visiter la page avec Chrome
- Visiter la page avec Chrome en navigation privée
- constater que l'identifiant est le même
- fermer, puis réouvrir Chrome
- constater que l'identifiant est toujours le même
- visiter la page avec un autre navigateur, ou un autre appareil
- constater que l'identifiant diffère
Protection par un navigateur plus sécurisé
- Visiter la page avec Firefox en navigation privée
- fermer le navigateur
- Visiter la page avec Firefox en navigation privée
- constater que l'identifiant est différent
Lancement
Le projet se lance avec Docker via la commande docker compose up.
Le front sera alors accessible à l'adresse : http://localhost:8000/ Le back à l'adresse : http://localhost:8080