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 Internet­kommunikation auszubauen.

Neben der Internettelefonie wird WebRTC auch auch bei browser­basierten Video­konferenz­systemen wie Jitsi Meet eingesetzt. Bei der direkten 1:1 Kommunikation ist für den Daten­strom eine Ende-zu-Ende Verschlüsselung vorgesehen. Bei Konferenz­systemen ist es häufig so, dass der Konferenz­server als Endpunkt agiert, die Daten entschlüsselt und für jeden Teil­nehmer 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 Plugin standardmäßig deaktiviert. Oft sind Probleme mit browserbasierten Video­konferenzen darauf zurück zu führen, dass das Plugin nicht aktiviert wurde.

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 Fire­walls 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 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.
Mit dem WebRTC Test kann man prüfen, ob die Einstellungen korrekt funktionieren. 

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önnen 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. 

WebRTC, Media Device Enumeration und OpenH264 Plugin deaktivieren

Wenn man den Browser nur zum Surfen verwendet und nicht für Videokonferenzen mit Jitsi Meet oder ähnlichen Systemen, kann man WebRTC, Media Device Enumeration und das OpenH264 Plugin deaktivieren, um Trackingfeatures und Angriffsfläche zu minimieren:

media.peerconnection.enabled  = false
   
media.navigator.enabled= false
media.navigator.video.enabled= false
   
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 moderaten und strengen Konfiguration aktiviert.)
Lizenz: Public Domain