You are browsing as a guest. Sign up (or log in) to start making projects!

  • 2 Devlogs
  • 51 Total hours

Fingerprinting browsers using authoritative DNS

Open comments for this post

49h 52m 16s logged

Lots of work!!

It’s been a while, and I might have forgot to make a devlog. But I’ve been trying to figure everything out and make sure everything will be stable.

I got a server so I can host a demo for dnf and I spent some time setting up all up, with tailscale, grafana, prometheus, loki, alloy, ect. So now I have full monitoring of everything with lots of nice dashboards, which I think will really help test and develop dnf.

I also spent a bunch of time doing all the small details in terms of coding, I added:

  • Docker Compose env
  • Linting and Connection timeouts
  • Full support for SOA and NS
  • GitHub release pipeline
  • Install script
  • Service file
  • Structured logging
  • Setup dependabot
  • Fix shutdown logic
  • Implement EDNS and ECS
  • Auto deploy to demo server

Currently I’m working on adding TCP support to my DNS server, and adding rate-limiting to both the DNS and HTTP servers.

I’m also gonna have to implement ACME in my DNS server that generates TLS certificates for the HTTP server.

After that I’m gonna start working on core fingerprinting code itself and the demo site too.

0
0
69
Open comments for this post

55m 22s logged

How my DNS browser fingerprinting works

The idea is that different browsers fetch DNS records differently. But in order to capture all DNS traffic we have to avoid DNS caching!! To solve that we generate a new subdomain for every request, so it’s impossible to cache.

Say our domain is example.com, if we generate 12 random digits (the longer the random number the less likely you are to hit collisions), using something like base36. We can generate random IDs like 2eg2mpkwgylh or zokydwitx5pu and then we just append our domain, and we have unique DNS records.

We just have to implement a DNS server where we serve the same A/AAAA/HTTPS record for anything .example.com

Implementing this into a normal website

All you have to do is add a script that will generate the random ID and fetch it. You can also make the returned A/AAAA/HTTPS record lead to a HTTP server that will just serve 200 if you dont want the fetch to fail.

I’m ignoring all the backend systems work you’d have to do to integrate the DNS server with the rest of your stack. But that’s different for everyone so you’ll have to figure it out.

Implementing this into a demo site

My plan is to have a demo website with a script that will query a rest API on a randomly generated domain like mentioned above. Then the API can check the host header to return the result of the DNS queries which can then be displayed in the demo site.

What I have done so far

  • Implemented DNS server
  • Implemented HTTP rest api
  • Implemented some frontend demo code

What I need to do

  • DNS fingerprinting algorithm itself
  • Way for rest api to retrieve results
  • Rest of demo frontend code
0
0
13

Delete project?

Are you sure you want to permanently delete this project? This action cannot be undone.

All devlogs, followers, and associated data will be removed.

Followers

Loading…