- Der standardmäßige lokale Hostname von macOS kann den Benutzernamen enthalten, sodass eine Website ohne Berechtigung über Zeitunterschiede bei der mDNS-Namensauflösung mögliche Namen eingrenzen kann
- Angreifer kombinieren 50 beliebte Vornamen nach Land und Geschlecht mit Kandidaten für Gerätenamen; im Experiment wurde der Name von macOS-Nutzern in durchschnittlich 65 % der Fälle korrekt erraten
- Browser-JavaScript kann keine beliebigen UDP-Sockets öffnen, aber über Anfragen mit
fetch,iframe,ImageundWebRTClassen sich Antwortverzögerungen bei.local-Adressen vergleichen - Informationen wie Zeitzone, Sprache, IP-Standort,
navigator.languagein Safari, Bildschirmauflösung undscreen.isExtendedhelfen dabei, Kandidaten für Locale und Gerätemodell einzugrenzen - Die praktische Nutzbarkeit ist gering und im Netzwerk-Tab der Entwicklertools leicht sichtbar, doch dieselbe mDNS-Erkundungsmethode könnte auch zum Erkennen von Druckern, Smart-TVs, Smart Speakern und IoT-Geräten verwendet werden
Wie Namen über macOS-Local-Hostnames durchsickern
- Der echte Name eines macOS-Nutzers kann im Browser ohne Berechtigungsanfrage geschätzt werden; der Kern des Problems sind das mDNS-Protokoll und das Format des standardmäßigen lokalen Hostnamens
- Schon mit einer Liste von 50 beliebten Vornamen pro Geschlecht aus einem bestimmten Land wurde der Name von macOS-Nutzern in durchschnittlich 65 % der Fälle korrekt erkannt
- Fingerprint verwendet diese Technik nicht im Produkt und bietet auch keinen Cross-Site-Tracking-Dienst an
- Ziel der öffentlichen Diskussion ist es, Browser-Anbieter dabei zu unterstützen, solche Techniken schnell zu beheben
Wie mDNS und Apple Bonjour funktionieren
- multicast DNS ist ein Protokoll zum Registrieren, Erkennen und Broadcasten von Gerätenamen im lokalen Netzwerk
- Geräte wie Drucker senden UDP-Registrierungspakete an die reservierte interne IP
224.0.0.251; diese können Hostnamen wieHP_LaserJet_Printer.localenthalten - Die Top-Level-Domain
.localzeigt an, dass dieser Hostname per mDNS aufgelöst werden soll - Router broadcasten solche Pakete automatisch an andere Geräte im lokalen Netzwerk, damit diese den Hostnamen cachen können
- Geräte senden Abfragepakete an dieselbe reservierte IP, um Geräte mit einem bestimmten Namen zu finden, die im Netzwerk vorhanden sein könnten
- Beispiel-Hostnamen sind:
johns-mac-mini.localdavid-ZenBook-UX431DA-UM431DA.localjames-iphone.localcanon-mf644c.localbedroom-appletv.localdlinkrouter.local
- Auf Apple-Geräten wird mDNS breit genutzt, unter anderem als Teil von Apple Bonjour
- Im standardmäßigen lokalen Hostnamen kann der Benutzername sichtbar werden; unter macOS lässt sich der lokale Hostname in Systemeinstellungen > Freigabe einsehen oder ändern
Umgehungsmethode zum Prüfen von mDNS-Hostnamen im Browser
- mDNS basiert auf UDP-Paketen und kann deshalb in Browser-JavaScript nicht direkt über beliebige UDP-Sockets genutzt werden
- Stattdessen wird ein Timing-Angriff genutzt, indem ausgenutzt wird, dass der Browser versucht, den Hostnamen einer URL aufzulösen
- Der Proof of Concept sendet normale
fetch-GET-Anfragen an ein existierendesdevice-1.localund ein nicht existierendesdevice-2.local - Wird die Adresse aufgelöst, sendet der Browser ein TCP-Paket an Port 80, der meist geschlossen ist
- Auf Netzwerkebene erscheinen unterschiedliche Fehler:
- existierendes
device-1.local:ERR_CONNECTION_REFUSED - nicht existierendes
device-2.local:ERR_NAME_NOT_RESOLVED
- existierendes
- In JavaScript werden beide Fehler jedoch auf denselben Fehler
Failed to fetchabgebildet, daher kann man sich nicht auf den Fehlertyp selbst verlassen - Da lokale Netzwerke schnell sind, werden gültige mDNS-Hostnamen deutlich schneller als das Standard-Connection-Timeout aufgelöst
- Im Beispiel lag die Zeit für eine gültige Adresse bei 4 ms, für eine ungültige bei 5 Sekunden
- Dieser Ansatz ist für einen Proof of Concept ausreichend konsistent und funktioniert ähnlich in den wichtigsten Browsern
- In der Praxis lassen sich DNS-Timing-Angriffe neben
fetchauch mit Netzwerk-JavaScript-APIs wieiframe,ImageundWebRTCdurchführen
Wie sich macOS-Benutzernamen per Brute Force erraten lassen
- Der standardmäßige lokale macOS-Hostname enthält Benutzernamen und Gerätenamen; das Format variiert je nach System-Locale
- Englisch:
<name>s-macbook-pro.local - Französisch:
macbook-air-de-<name>.local - Russisch:
mac-mini-<name>.local
- Englisch:
- Mit einem einfachen Ansatz aus den 1.000 häufigsten Namen, den 10 wichtigsten Locales und 5 typischen macOS-Geräten müssten 50.000 Hostnamen geprüft werden
- Ein vollständiger Durchlauf könnte in diesem Fall mehr als eine Stunde dauern
- Eine effizientere Strategie beschränkt den Suchraum auf eine einzelne Locale, ein einzelnes Gerät und 50 häufige Namen dieser Locale
- Das verringert zwar die Genauigkeit, macht das Angriffsszenario durch die kürzere Dauer aber realistischer
- Zur Auswahl der Locale können Browser-Zeitzone, Sprache und der Standort der IP-Adresse genutzt werden
- Safari legt über die Eigenschaft
navigator.languagedie System-Locale offen; dieser Wert stimmt meist mit der Locale des Ziel-Hostnamens überein - Eine weitere Umgehungsmethode zur Bestimmung des Herkunftslands eines Nutzers ist die zuvor behandelte Methode zur Apple-ID-Regionserkennung
- Kandidaten für das Gerät lassen sich über die Bildschirmauflösung eingrenzen
- So deutet etwa eine Auflösung von
1728x1117stark auf ein 16-Zoll-MacBook Pro hin - Ein erweiterter Bildschirm lässt sich über die Eigenschaft
screen.isExtendederkennen - Wird ein erweiterter Bildschirm erkannt, lassen sich die Gerätekandidaten auf die 3 bis 5 häufigsten Apple-macOS-Geräte zurücksetzen
- So deutet etwa eine Auflösung von
Grenzen und andere Einsatzmöglichkeiten
- Dieser Angriff ist wegen inhärenter Schwächen und verschiedener Einschränkungen nicht praktikabel
- Wenn eine Website Besucher nicht absichtlich deanonymisieren will, ist die Methode im Netzwerk-Tab der Browser-Entwicklertools leicht erkennbar
- In Kombination mit installed applications detection könnte daraus jedoch eine schädliche Website entstehen, die ohne Berechtigung den echten Namen eines Nutzers und daraus abgeleitet aus einer Liste professioneller Anwendungen seine Berufsrolle anzeigt
- Apple-Geräte mit macOS sind das Hauptbeispiel, aber die mDNS-Erkundungstechnik lässt sich auf verschiedene Weise erweitern
- Sie könnte auch verwendet werden, um über lokale Netzwerkscans Drucker, Smart-TVs, Smart Speaker und andere IoT-Geräte im Haushalt zu erkennen
- Auch auf iPhone und iPad ist sie anwendbar, sofern Wi‑Fi-Synchronisierung oder die Safari-Funktion für Remote-Debugging aktiviert ist
1 Kommentare
Hacker-News-Kommentare
Ich nutze Little Snitch auf macOS; es hat eine ganz gute UI, mit der man festlegen kann, dass vor dem Erlauben einer Netzwerkanfrage der lokale Benutzer ausdrücklich gefragt wird
https://www.obdev.at/products/littlesnitch/index.html
Das erwischt mich gelegentlich bei Remote-Logins, meist wenn eine SSH-Sitzung gerade etwas neu herunterladen will, etwa wenn NPM eine NodeJS-Komponente holt. Dann bleibt der SSH-Download im Textterminal hängen, und sobald ich herausfinde, dass Little Snitch die Ursache ist, muss ich zum Schreibtisch im unteren Stockwerk gehen, die Maus bewegen, um den Monitor aufzuwecken, den Bildschirmschoner entsperren und im Little-Snitch-Dialog auf „Allow“ klicken
Also eigentlich genau wie vorgesehen. Solche Tools sind allerdings oft standardmäßig so eingestellt, dass Anfragen im lokalen Netzwerk stillschweigend erlaubt werden, daher weiß ich nicht, ob der Trick aus dem Originalpost in meiner Umgebung funktionieren würde
Es ist erstaunlich, welche Socket-Verbindungen Apps heimlich öffnen, auch Banking-Apps
https://havoc.app/package/netfence
https://news.ycombinator.com/item?id=35363343
Confirmklickt, wird noch keine echte Verbindung zu 1.1.1.1 aufgebautWenn man dem Netzwerk ein Pi-hole hinzufügt, wird man weder Zeit noch Geld noch Mühe bereuen
Gibt es eine Möglichkeit zu verhindern, dass Websites im weiteren Internet Netzwerkanfragen an mein lokales Netzwerk stellen? Ich kann mir nur schwer vorstellen, warum das standardmäßig erlaubt sein sollte
Ich will damit nicht sagen, dass man die Berechtigungen der Local Intranet Zone von IE wiederbeleben sollte
Aber selbst wenn auf https://192.168.2.1 etwas läuft, kann eine Web-App, die auf https://my-own-domain.com läuft, nicht darauf zugreifen, solange der Dienst auf 192.168.2.1 nicht my-own-domain.com als
Originerlaubthttps://brave.com/privacy-updates/27-localhost-permission/
HN-Post: https://news.ycombinator.com/item?id=36574775
Wenn der Browser auf eine Einladungsseite für einen Discord-Channel navigiert, sendet er über diesen Port eine Anfrage an localhost und übergibt die Channel-ID an den Client. Dann kann die App das native „Join Channel“-Erlebnis anzeigen
Ich habe das bemerkt, weil es sogar im Inkognito-Modus funktionierte und auch dann weiter passierte, wenn der Browser bei Discord ausgeloggt war. Nicht gut. Auf dem Desktop müssen wir die Sandboxing-Mechanismen für alle Anwendungen massiv verbessern
||local^$allDamit werden alle Anfragen an .local blockiert, auch Anfragen von .local selbst. Wenn man aus Gründen wie einem Webserver erlauben will, dass foo.local mit sich selbst kommuniziert, braucht man pro Domain eine zusätzliche Ausnahme:
@@||foo.local^$domain=foo.local,allOder wenn man .local insgesamt vertraut und erlauben will, dass jedes foo.local mit jedem bar.local kommuniziert, kann man eine allgemeine Ausnahme für .local hinzufügen:
@@||local^$domain=local,allMit der Zeit fühlt es sich immer beruhigender an, das Internet überwiegend in einer Qubes-Box zu nutzen, in einer Wegwerf-Whonix/Tor-VM und mit deaktiviertem JavaScript
Das ist wirklich widerlich. Nicht überraschend, aber schon die Tatsache, dass es möglich ist, ist in vielerlei Hinsicht schrecklich
Falls dir fingerprint.com nichts sagt: Sie betreiben „tiefgehendes User-Profiling“. Vereinfacht gesagt behalten sie dieselbe Benutzer-ID bei, selbst wenn Computer, Browser und Betriebssystem unterschiedlich sind. Auf der Startseite gibt es eine Demo, und es ist ein bisschen gruselig, wie gut sie trifft
uBlock-Origin-Filter, der die Demo kaputtmacht:
||fpjscdn.netMit einer ähnlichen Art von Timing-Angriff lassen sich aus dem Browser heraus der lokale Rechner und andere Geräte im lokalen Netzwerk per Port-Scan untersuchen
https://github.com/Flu1dTeam/PortScanner
eBay wurde früher dabei erwischt, genau das zu tun
https://blog.nem.ec/2020/05/24/ebay-port-scanning/
Zum Glück ändere ich meinen Gerätenamen immer
Apples Standardbenennung ist ein Privacy-Fehler. Ich hatte einmal ein erstes Date mit einer Person aus der Strafverfolgung; sie kam allein, war eine Frau und achtete offensichtlich darauf, sich selbst zu schützen, also hatte sie Nachforschungen über mich angestellt und ein paar Leute aus ihrem Umfeld über unseren Aufenthaltsort informiert
Im Gegensatz dazu kannte ich nicht einmal ihren Nachnamen und machte noch Witze darüber. Als wir nach dem Abendessen ins Auto stiegen, zeigte das Display im Armaturenbrett an, dass ein iPhone automatisch gekoppelt wurde, und der Name dieses iPhones war ihr Vor- und Nachname, was ich ziemlich interessant fand. Ich sprach es nicht direkt an, sondern ließ sie bis zum Ende der Fahrt raten, woher ich ihren Namen wusste
Das Schwierigste ist eigentlich, sich vor der Rückgabe des Autos selbst daran zu erinnern, das eigene Profil zu löschen
Im obigen Beispiel dauert eine gültige Adresse 4 Millisekunden, eine ungültige 5 Sekunden
Das ist überraschend. Ich hätte erwartet, dass ein fehlgeschlagener DNS-Lookup viel schneller ist als der Standard-Connection-Timeout nach einem erfolgreichen DNS-Lookup
Trotzdem fand ich
s-mac-xxxxschon immer eine etwas seltsame Wahl. Besonders wenn man bedenkt, dass die Firma Privacy als großes Verkaufsargument nutzt. Ich hätte erwartet, dass keine echten Namen verwendet werden, oder dass hier einfach „Benutzerfreundlichkeit“ Vorrang hatte. Aus Privacy-Sicht sind die zufällig generierten Hostnamen von Windows besser† Streng genommen ist das nicht ganz korrekt. Wenn ein Gerät weiß, dass es diesen Namen selbst besitzt, kann es nein sagen
Der Artikel ist gut geschrieben und interessant. Besonders gefällt mir der nüchterne Ton wie bei „Angesichts der inhärenten Schwächen und vieler Einschränkungen ist dieser Angriff nicht praktikabel“
Diese Methode erlaubt es, zu testen, ob ein bestimmter Hostname im Netzwerk existiert
Bei einem einzelnen eindeutigen Hostnamen ist das vielleicht kein großes Problem, aber was ist mit fest kodierten oder Standard-Hostnamen, wie sie in der IoT-Welt häufig sind
Eine Website könnte so heimlich erraten, ob der Nutzer bestimmte Geräte besitzt. Für zielgerichtete Angriffe ist das noch schlimmer. Wenn man einige Geräte in einem Netzwerk kennt, kann man daraus ableiten, ob der eingeloggte Nutzer sich im Zielnetzwerk befindet
Es wäre schön, wenn das Deaktivieren von JavaScript nicht gleich auch die gesamte Endnutzererfahrung abschalten würde
Trotzdem scheint es, als müsse ich es wegen Privacy-Bedenken künftig standardmäßig ausgeschaltet lassen
Zum Glück heißen meine Geräte meistens so etwas wie „xxxs's MacBook Pro (34)“. Kein Bug, sondern ein Feature
userund den Hostnamen aufhostname. Je mehr Leute das machen, desto besserInteressant, gut geschrieben, und sogar mit einem ordentlichen Proof of Concept. Gut gemacht
Als lustige Gegenmaßnahme könnte man den Hostnamen des Geräts in etwas wie atemptingurl.local ändern, damit der Angreifer Lust bekommt, diese Website zu besuchen. Die Seite könnte dann raffiniert so gebaut sein, dass sie dieselbe Technik gegen den Angreifer ausführt und eine Nachricht wie diese anzeigt:
„Hallo [Gerätename des Hackers]! Informationen über deine Maschine, IP-Adresse, geografische Position und weitere Fingerprint-Daten wurden erfasst und an [Name einer furchteinflößenden Cyber-Behörde einfügen] gemeldet.“ Selbst wenn es kein Script-Kiddie, sondern ein erfahrener Veteran ist, dürfte es ihn zumindest zum Lachen bringen
Die Leute brauchen mehr Gründe zum Lachen :-)