Privacy Handbuch

WebRTC wurde von Google und Mozilla initiiert und später vom W3C standardisiert, um der Konkurrenz von Microsoft Skype etwas entgegen zu setzen. Google und Mozilla entschieden sich dafür, die Funktionalität für die Kommunikation in die Browser zu integrieren, um den Browser als univerelle Anwendung für jegliche Internetkommunikation auszubauen.

Neben der Internettelefonie wird WebRTC auch auch bei browserbasierten Videokonferenzen wie Jitsi Meet eingesetzt. Bei der direkten 1:1 Kommunikation ist für den Datenstrom eine Ende-zu-Ende Verschlüsselung vorgesehen. Bei Konferenzsystemen ist es häufig so, dass der Konferenzserver als Endpunkt agiert, die Daten entschlüsselt und für jeden Teilnehmer neu verschlüsselt. (Verbesserte Lösung mit durchgehende Ende-zu-Ende Verschlüsselung für Konferenzsysteme sind in der Entwicklung.)

OpenH264 Videocodecs

Um WebRTC mit Firefox zu verwenden, wird das OpenH264 Plugin von Cisco benötigt, das die Videocodecs bereitstellt. Das Plugin ist Closed Source und wird beim ersten Start von Firefox automatisch herunter geladen und im Profilverzeichnis gespeichert.

Mit folgende Einstellungen unter "about:config" wird das OpenH264 Plugin aktiviert:
media.gmp-gmpopenh264.enabled  = true
media.gmp-gmpopenh264.autoupdate  = true
media.gmp-gmpopenh264.provider.enabled  = true
Bei einigen sicherheitsoptimierten Linux Distributionen wie RHEL oder Fedora ist das OpenH264 Plugin im Firefox standardmäßig deaktiviert und wird über die Paketverwaltung installiert: > sudo dnf install mozilla-openh264

Internet Connectivity Establishment (ICE)

Der Datenstrom soll bei WebRTC möglichst direkt zwischen den Teilnehmern ausgetauscht werden. Es wird der ICE Standard (Internet Connectivity Establishment) verwendet, um eine direkte Verbindung zwischen den Clients aufzubauen.

ICE versucht im Hintergrund sehr aggressiv, die direkte Verbindung irgendwie herzustellen. Es werden Proxy Einstellungen umgangen, via UPnP wird versucht, ein Loch in Router und Firewalls zu bohren, VPNs werden teilweise ausgetrickst... Dabei kommt ein STUN Server zum Einsatz, der die verschiedene Möglichkeiten ausprobiert. Wenn wirklich keine direkte Verbindung möglich ist, wird ein TURN Server als Proxy für den Datenstrom verwendet.

Aufgrund dieser aggressiven Strategie zum Verbindungsaufbau können der Gegenseite folgende Informationen bekannt werden, wie der WebRTC Test von Browserleaks zeigt: Firefox bietet einige Möglichkeiten, diese Privacy Probleme von ICE zu reduzieren:
  1. Bei privater Nutzung kann man davon ausgehen, dass man innerhalb der eigenen Wohnung mündlich kommuniziert und nicht via WebRTC. Die internen Adressen aus dem LAN müssen somit nicht publiziert werden. Mit folgenden Optionen man es abschalten:
    media.peerconnection.ice.default_address_only  = true
    media.peerconnection.ice.no_host  = true
  2. Wenn man verhindern möchte, dass die Gegenseite die externe IP-Adresse des Routers erfährt und damit Schlussfolgerungen über den Standort via Geolocation ziehen könnte, kann man direkte Verbindungen generell ausschließen und immer eine Verbindung über einen TURN Proxy Server erzwingen: media.peerconnection.ice.relay_only = true
  3. Wenn man den STUN/TURN Servern des Videokonferenzanbieters nicht vertraut, kann man eigene Server verwenden (die Standardserver der Firma oder des Providers): media.peerconnection.use_document_iceservers = false Die eigenen Server muss man in der folgenden Variable definieren: media.peerconnection.default_iceservers = <Serverliste>
  4. Wenn man WebRTC nur via VPN verwenden möchte aber nicht, wenn man ohne VPN surft, dann kann man die zulässigen Netzwerkinterfaces definieren. Ein Beispiel:
    media.peerconnection.ice.force_interface  = tun1
    media.peerconnection.ice.no_host  = true
    Wenn das VPN nicht aktiviert wurde und damit das virtuelle VPN Interface "tun1" nicht vorhanden ist, kann man ganz normal surfen aber eine WebRTC Verbindung wird nicht akzeptiert. Nur wenn das VPN aktiv ist, ist eine WebRTC Verbindung möglich, deren Daten immer durch das VPN geschickt werden.
  5. Änlich wie bei der VPNs kann man auch die Verwendung eines Proxy erzwingen und WebRTC nur via Proxy zulassen: media.peerconnection.ice.proxy_only = true In den meisten Fällen wird WebRTC mit dieser Einstellung nicht funktionieren, da HTTP- oder SOCKS-Proxy wie Tor Onion Router nicht UDP-fähig sind.

Media Device Enumeration

Um WebRTC nutzen zu können, muss Firefox wissen, welche Media Input Devices vorhanden sind und nach Zustimmung durch den Nutzer Zugriff darauf haben:
media.navigator.enabled= true
media.navigator.video.enabled= true
Trackingdienste könnten die Media Device Enumeration ausnutzen, um Daten über Kamera und Mikrofon zu sammeln und für das Hardware Fingerprinting zu verwenden. Der Surfer muss dabei nicht um Zustimmung für den Zugriff auf Kamera oder Mikrofon gebeten werden. Der WebRTC Test demonstriert es (Beispiel: 2x Audio Input, 0x Kamera): Firefox verwendet als Device-IDs einen gesalzenen Hash. Der Salt für die Berechnung des Hashes wird beim ersten Start festgelegt und immer erneuert, wenn Cookies und Cache Daten gelöscht werden. Außerdem ist der Salt in Surfcontainern unterschiedlich. Damit ist die Device-ID in gleicher Weise wie langlebige Cookies für das Tracking geeigent oder nicht geeignet wie Cookies und als Schutz gegen Tracking anhand der Device-IDs kann man die Empfehlungen für Cookies umsetzen. 

Empfohlene Einstellungen für mehr Privatsphäre

Es wird häufig von anderen Projekten empfohlen, die Feaures Media Peerconnection (WebRTC) und Media Device Enumeration abzuschalten, um das Tracking zu erschweren.

Da die Abschaltung dieser Javascript APIs aber recht einfach von den Trackingdiensten registriert werden kann, schafft sie ein seltenes Merkmal für den Browserfingerprint und ist kontraproduktiv.

Unauffälliger ist es, das Auslesen der Multimedia Devices (Mikrofon, Kamera) mit dem Add-on JShelter zu faken und das Auslesen der Host IP Adresse zu verhindern:

media.navigator.enabled= true
media.navigator.video.enabled= true
media.peerconnection.enabled= true
media.peerconnection.ice.default_address_only  = true
media.peerconnection.ice.no_host  = true

Aus Sicherheistgründen kann man die OpenH264 Videocodecs deaktivieren:

media.gmp-gmpopenh264.enabled  = false
media.gmp-gmpopenh264.autoupdate  = false
media.gmp-gmpopenh264.provider.enabled  = false
media.gmp-gmpopenh264.visible  = false
(Diese Einstellungen sind in der medium strengen und sehr strengen Konfiguration aktiviert.)
Lizenz: Public Domain