Git Product home page Git Product logo

cover-your-tracks's Introduction

Cover Your Tracks (formerly Panopticlick)

How Unique - and Trackable - Is Your Browser?

Installation

The easiest way to set up an instance of Cover Your Tracks is with docker and docker-compose, but it can be installed on a host machine if desired.

Partial Installation on Host

You may need to install libmysqlclient-dev and python3.11-dev for Debian-based systems.

pip install pipenv
pipenv --python 3.11
pipenv install
cp config_example.py config.py

Then modify the relevant variables in config.py

Now, you can run

pipenv run python main.py

Full Docker Installation

To generate self-signed certificates for the Cover Your Tracks hosts, cd into examples/nginx and run

./generate_self_signed_certs.sh

Change each of the secrets in docker/secrets/ to a random value.

Then, from the git root, run

docker-compose up

Admin Routes

The following routes allow you to perform administrative tasks on the application. For each of the following curl commands, be sure to change the password to what you've set as the admin password in your config.py or docker-compose.yml file. Remove the --insecure flag in production.

POST /refresh-key

To have the application re-read the keyfile, which contains the key to the HMAC function for storing IP addresses, issue the following command:

curl -X POST -H 'Content-Type: application/json' -d '{"password": "changeme"}' --insecure https://coveryourtracks.eff.org/refresh-key

POST /migrate-db

To migrate the database to the latest version of the application, issue the following command:

curl -X POST -H 'Content-Type: application/json' -d '{"password": "changeme"}' --insecure https://coveryourtracks.eff.org/migrate-db

POST /epoch-update-totals

To update the totals table to reflect the number of times we've seen each fingerprinting characteristic in the last epoch (45 days), issue the following command:

curl -X POST -H 'Content-Type: application/json' -d '{"password": "changeme"}' --insecure https://coveryourtracks.eff.org/epoch-update-totals

Viewing Locally

Unless you've changed the server names specified in config.py, you'll have to add the following line to your /etc/hosts file:

127.0.0.1 coveryourtracks.eff.org trackersimulator.org firstpartysimulator.org firstpartysimulator.net eviltracker.net do-not-tracker.org

If you generated the certs yourself, in Firefox you'll have to go into private browsing mode to see the "I Understand the Risks" dialogue. You may also have to manually go to each of the above domains and go through the certificate exception process for each one in order for the application to be fully functional. Or with chrome, you can start chrome with the --ignore-certificate-errors flag, but beware this will ignore all certificate errors.

License

This project is licensed under the Affero General Public License, version 3. See the LICENSE file for details.

Credits

This is a rewrite of the original Cover Your Tracks codebase, developed by Peter Eckersley at the Electronic Frontier Foundation. Currently maintained by William Budington.

cover-your-tracks's People

Contributors

chrisantaki avatar cowlicks avatar dependabot[bot] avatar eenblam avatar esoterik avatar hainish avatar lenazun avatar lschatzkin avatar martijnvermaat avatar maximillianh avatar olivercole avatar wgreenberg avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cover-your-tracks's Issues

Allow users to modify specific characteristics and see the fingerprint result based on this modification

User feedback:

Dear eff,

I want to recommend a useful Feature for the fingerprint test: please make the fingerprints browsable in a way how one can keep some values fixed (e.g. iOS Apple mobile safari) and list the variations in other entropy elements, e.g. Screen size. Some settings in iPhone seem to change fingerprint, and I want to find out how my iPhone is different from other iphone of same model. So one could find uncommon settings active..

"among the N browsers tested so far" -> tested in the past x months?

We currently say things like:

Your browser fingerprint appears to be unique among the 808,147 tested so far.

But it would be less confusing and more informative to say

Your browser fingerprint appears to be unique among the 808,147 tested in the past N months?

N=3 IIRC?

Should ignore OS Version in User Agent String

I think the fingerprinting Info could be improved by ignoring the OS Version Number in the User Agent. A real tracking company would also ignore it, because it changes frequently. For me it always shows a high uniqueness, but that’s only the case because I updated to the newest version and the website didn’t see many devices on that version yet.

Broken link to pdf paper

Subject: Browser Uniqueness paper on Cover Your Tracks is a dead link
From:
Date: Thu, 4 Mar 2021 12:25:18 -0500
To: [email protected]

Hello,
The link to the 2010 paper
(https://coveryourtracks.eff.org/browser-uniqueness.pdf) that
published the initial findings of Cover Your Tracks (then
Panopticlick) is dead. I remember it used to work when the project was
still named Panopticlick.
It would be great if you could fix it, I was hoping to use the paper
as a source in a paper of my own.

More ways of fingerprinting

1 performance of js engine (see papers by mowery and shacham) and gpu rendering (http://arxiv.org/pdf/1503.01408)
2 enabled ciphersuites
3 speech synthesis engines #8 #9
4 webaudio devices list #12
5 endianess #11
6 canvas text measuring API (in the published on github version of fingerprinter I rounded the measurement to integer to store it in typed array, but I shouldn't have done that, and now I can't reverse that because it would change the fingerprints, but when implement you should preserve fraction part)

Reports that Firefox+UMatrix combo breaks tracking test

From the report:

And with uMatrix-Standard-Settings (1st party * allow), this test failed in Tracking-Protection, and reveal many System-Information.

OS: Debian Jessie
Browser: Firefox 45 ESR / Firefox 48
Extensions: uBlock / uMatrix only

Chack for GPC

Checking for GPC would be a useful way of gaining a more in depth fingerprint.

"Install Privacy Badger and enable Do Not Track" advice in a Tor Browser where both are configured

I wanted to see how 'private' a default TOR Browser is, so I accessed panopticlick.eff.org with a Tor Browser whose configuration was not modified from the defaults. I was advised to install Privacy Badger and enable Do Not Track. I did both, closed TOR browser, started TOR browser and went back to panopticlick.eff.org to re-run the tests

image

I still got the same advice:

Privacy Badger installed

Dot Not Track enabled

Is there anything I'm missing?

CanvasFingerprintBlock breaks fingerprint test

The fingerprinting test does not seem to finish with the “CanvasFingerprintBlock” extension installed in chrome (which says it blocked 20 potential canvas fingerprinting attempts by panopticlick).

Acceptable ads results not displaying

Loading gif continues to display, but results never appears.

Currently hidden by css on line 363-5 of _pages.scss:
#acceptable_ads_tr{
display: none;
}

"Partial protection" in stock Chrome browser

Running tests in a new, all-defaults Chrome profile reports "partial protection". This seems to be a bug caused by SameSite cookie changes in Chrome, where now cookies are denied in third-party contexts unless sent over https with SameSite=None.

Using EFF test domain from independent tools?

Are well-behaved independent tools (such as a script that runs once per session to warn a site visitor if they are vulnerable to tracking) allowed to use the eviltracker.net domain?

Not blocking fingerprinting (on Panopticlick.com)?

When I pull and build the current extension code (v 2016.5.24), it fails the panopticlick fingerprinting test. Is this a 'priming' issue? Is there a different way to test this from source?

screen shot 2016-08-22 at 3 59 49 pm

Most of the entropy comes from:

Hash of canvas fingerprint    12.69     6594.2
System Fonts                  16.01     65942.0

Add social share icons to the results template

Social share icons should display under these conditions:

If 1, 2 (and 3 if we do it) are all yes: “Yes! You have strong protection against Web tracking. Please share this site on social media.”
if 1 and 2 but not 3: “Yes! You have strong protection against Web tracking, though your software isn’t checking for Do Not Track policies. Share this site on social media”.

Check for Google Topics API

Additional item to test for: Google Chrome has an experimental user classification feature called "Topics API" which can be detected from JavaScript.

https://github.com/patcg-individual-drafts/topics#the-api-and-how-it-works

This is currently being deployed to a few percent of Google Chrome users, and not to those who have turned off third-party cookies.

"Topics API" is promoted as an advertising-related feature, but may end up being more commonly applied in personalized pricing and other areas.

Disabling on uBlock Origin gives inaccurate results

@gorhill I could not open this on https://github.com/gorhill/uBlock/issues/new because

An owner of this repository has limited the ability to open an issue to users that have contributed to this repository in the past.

but this is a uBlock Origin issue.

Scenario

Install uBlock origin, and visit the EFFs PanoptiClick site: https://panopticlick.eff.org/.

Click on the uBlock Origin icon and disable for this site. Click Test Me.

Result

The result shown is partial protection for blocking ads and trackers.

Expected Result

The expected result should show no protection against ads and trackers.

Explanation

Panopticlick is built to support addons like uBlock Origin as well as heuristic blockers such as Privacy Badger. The way this works is that it forwards the user through a number of first-party domains that include third-party trackers, in order to trigger the heuristic 'learning' of Privacy Badger.

At the end of the test, the results page communicates with the third-party trackers via the postMessage API to determine which first party domains were loaded. Since uBlock Origin has not disabled all the interstitial first-party domains, the third parties report that they were loaded only on https://panopticlick.eff.org/, since they were blocked on the other domains.

Further Complication

If a user runs the above scenario with Privacy Badger installed alongside uBlock Origin, uBlock Origin blocks the third party resources from loading on all interstitial first parties, thus never giving Privacy Badger the oppportunity to do heuristic learning. This gives a weaker result than expected.

Proposed Solution

Make uBlock Origin aware of first-party groupings of domains. When a user disables the extension on https://panopticlick.eff.org/, they probably intent to disable it for the entirety of the PanoptiClick site. This includes these other first-party domains:

  1. firstpartysimulator.org
  2. firstpartysimulator.net

running pipenv install results in error for gunicorn

as the title, running pipenv install results in error for gunicorn:

admin1@admin-Virtualbox:~/cover-your-tracks-master$ pipenv install
Installing dependencies from Pipfile.lock (20783f)…
  🐍   ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 19/19 — 00:00:02
An error occurred while installing -e git+https://github.com/benoitc/gunicorn.git@ff58e0c6da83d5520916bc4cc109a529258d76e1#egg=gunicorn! Will try again.
Installing initially–failed dependencies…
  ☤  ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 0/1 — 00:00:00
ERROR: Invalid requirement: 'gunicorn --hash=sha256:9dcc4547dbb1cb284accfb15ab5667a0e5d1881cc443e0677b4882a4067a807e  --hash=sha256:e0a968b5ba15f8a328fdfd7ab1fcb5af4470c28aaf7e55df02a99bc13138e6e8'

please kindly tell me how i can resolve it?

Fingerprinting results inaccurate for randomized canvas blockers

Some canvas fingerprinting blockers such as CanvasBlocker for Firefox randomize the result of canvas fingerprinting. This makes the result of canvas fingerprinting look more unique than it actually is.

One way to mitigate this is to test for the canvas fingerprint twice, and see if there is a difference. If there is, report the canvas fp to be "unknown"

Tests not finishing

We've had various reports of the tests not finishing with various different addon combinations. Creating a master ticket for this.

Expose `randomized_results` in the final report

I would be interested to see the number of randomized results (defined here) in the final report. Also, terming a fingerprint that is randomized but where the number of randomized_results < 4 as unique might be misleading... (cf. Tor Browser 10.0a6).

Tests stating no protection with Privacy Badger and Firefox

Since version 2020.10.7 of Privacy Badger, the Panopticlick tests in Firefox 82.X are stating that there are no active protections against anything and recommending to install Privacy Badger.

Panopticlick FF

I also tested this with a complete fresh Firefox profile and got the same result. The tracking protection of Firefox itself was inactive for the tests. Privacy Badger does work on other websites, though. And the Chromium-Edge with Privacy Badger and same settings doesn't show this behaviour.

Better explanations for each result category

User feedback:

As a first time user on your site, and as a person who just started to get interested in privacy/security, I would really love some more information on what’s a good result and what’s a bad result on your page. Why not color code the results and give some context to each result, so that a new user can somewhat understand what is a bad or a good result?

For example, I got a (red) No on the Do not track question. What does that mean? Am I not being tracked, am I not not being tracked? In that case, how do I fix that? I think your site would be much more useful if you gave some hints on how to solve any problem, otherwise it is just a site for experts.

What does X bits of information mean? Is that good or bad? Should I aim for a low number or a high number? Same thing for the number of browsers with the same fingerprint…

I don’t even know if I should fix anything, or how, after trying out you site… ☹

Add support for timeZone string

Specifically, Intl.DateTimeFormat().resolvedOptions().timeZone

When we last did a development push on the fingerprinting metrics, browsers lacked support for "computed timeZone"

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/resolvedOptions

Hi,

You're likely aware of this, but the value result for time zone currently
displays an integer (240), which is the UTC offset in minutes. Wouldn't
the fingerprinting test have more specificity if it used
intl.datetimeformat().resolvedoptions().timezone (when supported) since
the result (America/New_York) is a string identifying a city?

Canvas-blockers can break fingerprinting test

Canvas fingerprinting blockers on Firefox can cause the fingerprinting test to fail, if the addon overwrites the toDataURL()-function.
It causes a "TypeError: canvas.toDataURL is not a function".
Catching the error fixes this issue, however further notifications for the test that canvas-fingerprinting has been blocked might be necessary.
I opened up a pull request at #14.
Hopefully this is all to this problem.

Whorl-Uniqueness API returns Internal Server Error on valid request

When sending the following POST request:

URL: https://coveryourtracks.eff.org/api/v1/whorl-uniqueness
Data: {"name": "video","value": "1920x767x24" }

the server returns an Internal Server Error.

Expected Behavior:
The server either returns the entropy information (bits, one_in_x) or the Status "Error: that value has not yet been recorded for 'video'".

The same happens for:

  • {"name": "video","value": "1920x766x24" }
  • {"name": "video","value": "1920x769x24" }
  • {"name": "video","value": "1920x770x24" }
  • {"name": "video","value": "1920x771x24" }

Add recommendations for unsupported browsers

When the UA string check detects a browser not supported by Privacy Badger, link to the following recommendations:
iOS Safari -- AdBlock
Safari desktop -- AdBlock
Android Chrome -- Disconnect, AdAway (requires root)
Android Firefox -- AdBlock Plus
Internet Explorer -- Enable tracking protection list

Text should read "We are sorry, but right now Privacy Badger does not support your browser.

We recommend you consider installing one of the following:"

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.