Brute-forcing a macOS user’s real name from a browser using mDNS
fingerprint.com
fingerprint.com
https://www.obdev.at/products/littlesnitch/index.html
I’ve occasionally stumbled on it during remote logins, usually when an SSH session wants to download something new, like NPM requesting NodeJS bits. The text terminal SSH download will block; if I figure out it’s the Little Snitch then I have to walk all the way to my desk downstairs, wiggle the mouse to wake up the monitor and unlock the screen saver, and click “Allow” on the Little Snitch dialog box.
Works as intended.
BUT by default it’s common to set such things to silently allow local network requests, so I don’t know if such shenanigans in the OP would work in my case.
Not great I suppose, but better than nothing. Generally what I'll see for Firefox itself are requests for non 80/443 ports.
Besides, unencrypted SNI means that if my ISP wanted to get the hosts I was looking at, they could.
- An American
It's surprising what sneaky socket connections applications connect too; including bank apps.
Any windows comparable?
- [0] https://safing.io/
Portmaster is actually a privacy suite consisting of many features and modules. It is often described as an "application firewall" to give people a quick, but incomplete idea of what it is.
The SPN is one of these features. It is a blend of VPN and Tor - oversimplified - and is fully optional. In fact, it is a paid feature and won't activate without logging in with an eligible account.
EDIT: typo
Also saw this on the main page today and had to share here:
I never caught anything weird, but it surely annoyed me a lot for all my basic tasks.
Just FYI, DNS-resolutions do still occur BEFORE THE POPUP DIALOGUE TO CONFIRM/DENY CONNECTION (i.e. www.example.com gets resolved to 1.1.1.1 , but no connection is made to 1.1.1.1 until `Confirm` is selected).
Add a PiHole to your network, you will not regret this time/$$$/investment.
From the mDNS side of things, you could easily block if your firewall allows you to set up port based deny rules (in this case UDP/5353). This should resolve the privacy leak from the OP, though you may find that you lose expected functionality on your host and local network depending on whether you block inbound, outbound, or both.
Unicast DNS gets a bit trickier (even without considering DoH). Depending on browser and OS configuration, you won’t be talking to more than a handful of resolvers directly. Ideally, you allow communication with these resolvers and block all other DNS traffic. You definitely don’t want to set a rule that allows you to accept each and every query, so in that sense, DNS will be bypassing the firewall.
What’s better in this case is resolver with filtering capabilities, e.g., pihole.
The middle ground is setting up your own rules once and then dealing with the popups occasionally.
Yes, but why say "just"? You won't find anything better.
(Not to suggest bringing back IE's Local Intranet Zone permission...)
https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simpl...
(Aside, is MDN's href linking broken for everyone or just me?)
For the full definition of what is a "simple" request: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simpl...
EDIT: Lol @ jakear making an almost identical response with the same Mozilla link.
Depends on the resource request. For example, <img> can be used to load remote resources without CORS, since the image data isn't shared with JS (trying to read it via a canvas marks it "tainted", and errors read requests). Meltdown/Spectre breaks this barrier down, which led to the introduction of COOP/COEP headers that require CORS on remote requests and would break this attack—except that you can ask the browser to send requests without cookies, re-introducing this timing attack.
||local^$all
This will block all requests to .local, even from .local itself. If you want to allow foo.local to talk to itself, say because you run a webserver on it, you'll have to add additional overrides for each such domain: @@||foo.local^$domain=foo.local,all
... or if you trust your .local entirely to allow any foo.local to talk to any bar.local, you can add one override for all of .local: @@||local^$domain=local,allThe "new material" is https://developer.chrome.com/blog/private-network-access-upd... and changed from restricting all "public websites" to only restricting non-HTTPS sites.
It does at least say:
>Restricting private network requests to secure contexts is only the first step in launching Private Network Access.
... so maybe it'll become better later.
This experiment is of course limited to users who do not change defaults, since any MacOS user can easily change their hostname to anything they want, and that is quite easy to do, even for people who do not read HN. The "real name" might not be real if the user has changed the default. Is there any reliable way for the website to distinguish "real" from "fake" names in MacOS hostnames.
And, indeed, when I run the PoC from the article, all the requests are blocked by uB0.
When your browser navigates to a Discord channel's join page, it sends a request to localhost via this port and sends the channel ID to the client. This lets the app pop open a native 'Join Channel' experience.
I discovered this when I noticed how this behavior worked even in incognito mode and my browser was signed out of Discord.
Not. Cool. We need to massively improve sandboxing - of all applications - in the desktop world.
That is exactly what is nice about the feature, not having to be logged in on the browser, I love it.
This is just gross. I mean, not surprising. But appalling in so many ways that it's even possible.
If you're not familiar with fingerprint.com, they do "deep user profiling" - think "maintaining a constant user ID across computers, browsers, OSes, etc." They have a demo on the main page that's a little bit creepy in how good it is.
I haven't tested it, but presumably they also wouldn't be able to track me between domains, even without clearing cookies.
Tor works for blocking it.
All in all they have created a creepy wee tool.
A little disappointed that Privacy Badger didn't seem to make any difference. Was active the whole time.
Edit: ublock origin filter, which breaks the demo:
||fpjscdn.nethttps://github.com/Flu1dTeam/PortScanner
A while ago, eBay got caught doing this.
Apple's default naming is a privacy error. One time I was on a first date with someone in law enforcement. Being a woman alone and obviously interested in protecting herself, she'd done a background check on me and had informed several fellow community members of our whereabouts.
I, on the other hand, didn't know her last name. We joked about that. When we got in her car after dinner, the intrigue was up when her dashboard display showed that it auto-paired with her iPhone... which was named with her first and last name. I didn't point this out, and challenged her to figure out how I knew her name by the time the drive was over.
So many times a rental car comes with a dozen of profiles from previously paired phones along with their phone books, saved map locations, history. Not much use, of course, still, it leaks out without much thought to it.
Guess what, the hardest thing is to remind myself to clear my profile before returning the car...
This is surprising --- I'd expect a DNS lookup failure to be much faster than a default connection timeout which comes after a successful DNS lookup.
That said, I've always found the <name>s-mac-xxxx to be a bit of an odd choice, especially considering it's from a company that advertises privacy as a huge selling point; either they don't expect you to use your real name, or this is a case where "user friendliness" took precedence. From the privacy perspective, Windows' randomly generated hostnames would be better.
Unlike regular DNS where you're asking a single server at a single IP for a yes/no answer, mDNS is multicast, so no single server can authoritatively say no†. You can only detect that there are no records when the lookup times out because no servers have responded.
† Not technically true, a device can say no if it knows it owns that name.
In addition to the sibling's comment, the other factor is that they received a "connection refused" -- RST, not a connection timeout.
There still hasn’t been any known reported case where this would be possible or used. Very impractical.
This allows to test wether hostnames exists on your network.
It’s maybe not an issue for a unique hostname but what about fixed hostnames or default hostnames that are common in the IoT world.
This allows a website to secretly guess if you own a given device. It’s even worse used in a targeted attack : if you know some devices of the network, you can guess that the connected user is on the targeted network.
I predict in the future through, I’ll have no choice but to have it off by default due to privacy concerns
A fun countermeasure would be to change the device hostname to something like atemptingurl.local that entices the attacker to try visiting that website where a webpage is carefully crafted to run the exact same technique on them and return:
"Hi [hacker's device name]! Your machine information, IP address, geolocation and other fingerprint information has been captured and reported to [insert scary cyber agency here]." Even if they are seasoned veterans rather than script kiddies, it could at least give them a smile.
People need more reasons to smile. :-)
This should only trigger when when JavaScript is making a request where CORS would kick in AND connection is refused
This isn't really a "timing attack." A timing attack implies exploitation of an unintended behavior by executing something at some specific time. This just sounds like a workaround for the fact that the Javascript API doesn't expose a way to detect a hostname resolution error, which really should exist.
https://github.com/pion/offline-browser-communication
If the W3C accepted this as a valid use case it could be available quickly.
At work, let's just call things what they are.
I set my iPhone to an emoji, and apparently it's one of the emojis that is composed of multiple emojis to render correctly. It's fun to see how every device it connects to draws the emoji or more likely boxes a little different.
Back in college my boss named a sun workstation lab with aleutian islands, and another after indonesian islands. (Some of those were fun to remember, there was an umnak and an unimak.) The servers were named after seas and oceans. We tried to name a new lab of windows machines after bugs, but the department nixed that.
I then went for Scottish Single Malt names (eg. Laphroaig, Jura, etc.).
After quitting alcohol, I've now settled on Douglas Adams names (eg. Deep Thought, Grunthos the Flatulent, etc.).
Naming machines is the most fun part of the job.
Seems pretty in line with the RFC about this https://www.ietf.org/rfc/rfc1178.txt
I do something similar but with other mobile/gacha game characters since those names are always in abundance. I also try to do some kind of correlation with the fictional settings too (groups of devices will correspond to meaningful in-domain names)
For non-mobile devices like workstations or servers, I also tend to directly give FQDN, like (name).(location).(my-personal-domain.tld)
"ENJOY COCA-COLA"
or more likely
"TOM BRADY SAYS BUY CRYPTO"
[1] - https://www.ghacks.net/2014/10/29/add-_nomap-to-your-routers...
A lesson learned with early feature phones and Bluetooth names in high school
At home my wifis are currently Japanese emojis, but anything funny goes
Some other leaky, seemingly private identifiers are SSH pubkeys (I always delete the comment trailer), which are sent to every server you SSH to and also published to places like GitHub, and WiFi SSIDs (which are visible to any application with access to the network stack, and unfortunately aren't entirely within your control - often a list of nearby SSIDs, combined with a mapping of SSID to geolocation, is enough to triangulate your location to within a meter, which is one of many reasons I disable WiFi in favor of ethernet whenever possible).
I use this in my .ssh/config file:
Host *
IdentitiesOnly = yes
... then you'll only send keys that are specified per-host in .ssh/config with 'IdentityFile' or with a command-line argument.More discussion: https://news.ycombinator.com/item?id=10004678
Thanks for linking to the previous HN discussion!