All Projects → ghostwords → Chameleon

ghostwords / Chameleon

Licence: mpl-2.0
Browser fingerprinting protection for everybody.

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to Chameleon

Dfpm
DFPM is a browser extension for detecting browser fingerprinting.
Stars: ✭ 81 (-83.44%)
Mutual labels:  privacy, chrome-extension
Ping Blocker
Stop sites from tracking the links you visit through hyperlink auditing
Stars: ✭ 23 (-95.3%)
Mutual labels:  privacy, chrome-extension
Webrtc Leak Prevent
Prevent WebRTC leaks in Chromium browsers.
Stars: ✭ 182 (-62.78%)
Mutual labels:  privacy, chrome-extension
Data Selfie
Data Selfie - a browser extension to track yourself on Facebook and analyze your data.
Stars: ✭ 1,009 (+106.34%)
Mutual labels:  privacy, chrome-extension
Absolutedoubletrace
A web extension to block browser fingerprinting
Stars: ✭ 156 (-68.1%)
Mutual labels:  privacy, chrome-extension
Privacybadger
Privacy Badger is a browser extension that automatically learns to block invisible trackers.
Stars: ✭ 2,346 (+379.75%)
Mutual labels:  privacy, chrome-extension
Stylus
Stylus - Userstyles Manager
Stars: ✭ 3,642 (+644.79%)
Mutual labels:  privacy, chrome-extension
Awesome Artificial Intelligence Guidelines
This repository aims to map the ecosystem of artificial intelligence guidelines, principles, codes of ethics, standards, regulation and beyond.
Stars: ✭ 449 (-8.18%)
Mutual labels:  privacy
Tabbie
A material, customizable, and hackable new tab extension
Stars: ✭ 473 (-3.27%)
Mutual labels:  chrome-extension
Capillary
Capillary is a library to simplify the sending of end-to-end encrypted push messages from Java-based application servers to Android clients.
Stars: ✭ 445 (-9%)
Mutual labels:  privacy
Refined Twitter Old
[DEPRECATED] Chrome extension that enforces the mobile web version of Twitter and improves its interface
Stars: ✭ 442 (-9.61%)
Mutual labels:  chrome-extension
Tusk
🐘 🔒 KeePass-compatible browser extension for filling passwords.
Stars: ✭ 452 (-7.57%)
Mutual labels:  chrome-extension
Sharpapp
💩⭐️🚀A #app with cutting edge technology to #minimize windows-10 telemetry and #maximize privacy plus many more
Stars: ✭ 474 (-3.07%)
Mutual labels:  privacy
Runet Censorship Bypass
Chromium extension for bypassing censorship in Russia
Stars: ✭ 444 (-9.2%)
Mutual labels:  chrome-extension
Simpread
简悦 ( SimpRead ) - 让你瞬间进入沉浸式阅读的扩展
Stars: ✭ 5,352 (+994.48%)
Mutual labels:  chrome-extension
Read Aloud
An awesome browser extension that reads aloud webpage content with one click
Stars: ✭ 444 (-9.2%)
Mutual labels:  chrome-extension
Mitaka
A browser extension for OSINT search
Stars: ✭ 483 (-1.23%)
Mutual labels:  chrome-extension
Speech To Text Benchmark
speech to text benchmark framework
Stars: ✭ 481 (-1.64%)
Mutual labels:  privacy
Berty
Berty is a secure peer-to-peer messaging app that works with or without internet access, cellular data or trust in the network
Stars: ✭ 5,101 (+943.15%)
Mutual labels:  privacy
Tracy
A tool designed to assist with finding all sinks and sources of a web application and display these results in a digestible manner.
Stars: ✭ 464 (-5.11%)
Mutual labels:  chrome-extension

Chameleon

Browser fingerprinting protection for everybody.

Chameleon is a Chrome privacy extension that 🌟 detects fingerprinting-like activity, and ✨ protects against fingerprinting, currently by making Chrome look like Tor Browser.

⚠️ WARNING ⚠️

Chameleon is pre-alpha, developer-only software.

Please note that while Chameleon detects the use of canvas fingerprinting, Chameleon does not yet protect against it. See the coverage table below for more on Chameleon's current status.

The next step for Chameleon is to block scripts from loading based on their use of fingerprinting techniques, of which canvas fingerprinting is one. This work is in progress now (enabled by tying code execution to originating scripts in 25d7a5).

Detection

Chameleon detects font enumeration and intercepts accesses of fingerprinting-associated JavaScript objects like Window.navigator.

The number over Chameleon's button counts the number of suspected fingerprinters on the current page.

Protection

Since Tor users are supposed to all look alike, Chameleon attempts to blend in by altering request headers and JavaScript properties to match Tor Browser's values.

To start with, Chameleon covers Panopticlick's fingerprinting set, with more complete coverage in the works.

Chrome without Chameleon:

"before" screenshot

Chrome with Chameleon:

"after" screenshot

Tor Browser:

Tor Browser screenshot

Installation

To manually load Chameleon in Chrome, check out (or download and unzip) this repository, go to chrome://extensions/ in Chrome, make sure the "Developer mode" checkbox is checked, click on "Load unpacked extension..." and select the chrome folder inside your Chameleon folder.

To update manually loaded Chameleon, update your checkout, visit chrome://extensions and click on the "Reload" link right under Chameleon's entry.

You could also generate an installable CRX package. See below for details. To install from a CRX package, drag and drop the package file onto the chrome://extensions page.

Development setup

  1. npm install to install dev dependencies.
  2. npm run lint to check JS code for common errors/formatting issues.
  3. npm run watch to monitor extension sources for changes and regenerate extension JS bundles as needed. Leave this process running in a terminal as you work on the extension. Note that you still have to reload Chameleon in Chrome from the chrome://extensions page whenever you update Chameleon's injected script or background page.
  4. npm run dist to generate an installable CRX package. This requires having the signing key in ~/.ssh/chameleon.pem. To get a key, visit chrome://extensions/ in Chrome and click on the "Pack extension..." button to generate a CRX manually.

CSS sprites were generated with ZeroSprites.

Coverage

Fingerprinting technique Detection Protection Notes
Request header values detection not possible in a browser extension?
window.navigator values partial protection (not all Firefox-specific Navigator properties added, Chrome-specific properties not yet removed)
window.navigator enumeration detection only: object enumeration order differs between browsers
window.screen values
Date/time queries partial protection (need to adjust the entire timezone, not just getTimezoneOffset)
Font enumeration unable to override fontFamily getters/setters on the CSSStyleDeclaration prototype in Chrome; needs more investigation
System color enumeration detection planned, protection seems to run into the same issue as font enumeration
CSS media queries needs investigation
Canvas image data extraction protection impeded by image rendering differences between Chrome and Firefox, but this is only a problem if we are trying to match Tor Browser.
WebGL ? detection needs more work, protection needs investigation
Request header ordering/checksum, window.navigator checksum, checksumming in general needs investigation
Flash/Java-driven queries plugins need to be switched to click-to-play by default
Third-party cookies need to disable by default
JS/rendering engine differences Tor Browser masquerading showstopper ...
Packet inspection/clock skew (?) not possible in a browser extension

Roadmap

  • Minimize false positives.

  • Block fingerprinter resource loading.

  • Replace Tor masquerading with randomization: #1

  • Create Chameleon for Firefox.

  • Fix getOriginatingScriptUrl for eval'd code:

    • The V8 stack trace API fails to deliver file URLs brought in via eval'd code. For example, see all the misattributed (to jQuery) accesses on http://fingerprint.pet-portal.eu/ during a fingerprint test.
    • The problem is probably not just with eval, but with any dynamic code evaluation, meaning setTimeout('...') and new Function('...').
    • Overriding eval doesn't work.
    • Can (probably) get CSP violation reports for just eval with something like script-src * 'unsafe-inline'; style-src * 'unsafe-inline'; report-uri chrome-extension://..., but they do not appear to provide file names for eval'd script files either.
    • We can get the function that triggered our property getters via arguments.callee.caller.caller, but we still need the URL it came from.
    • Is there anything around the function we have at this point that we can use to figure out where the function came from, besides trying to match the function to page script sources?
    • We can try matching the function to page script sources. The function we have doesn't have to look anything like the originating scripts ... because eval. Can try unpacking packed scripts. What if multiple eval's? What if data/javascript URIs? Not clear how far this will get us.
  • Simplify the UI (fingerprinting detected vs. not; expand to see more info).

  • Add help/about link; explain what the UI shows.

Code license

Mozilla Public License Version 2.0

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].