Privacy@Home
Motivation
Mit der zunehmenden Zahl an IoT-Geräten stehen immer mehr Features für den Anwender zur Verfügung, die ihm ein hohes Maß an Komfort ermöglichen. Gleichzeitig sammeln diese IoT-Geräte Anwendungsdaten über den Nutzer, deren Weitergabe oder sogar Erfassung aus Sicht der Privatsphäre bedenklich sein kann. Um einen Kompromiss aus Nutzbarkeit und Datenschutz zu erreichen, wird in dem hier bearbeiteten Thema ein Telefunken XF32B301 Smart-TV mit Firmware-Version 2.32.4.0 im Hinblick auf Inter- und Intranetkommunikation untersucht, sodass im Anschluss passende Maßnahmen zur Kontrolle der Aufrufe im und aus dem Heimnetz getroffen werden können.
in thema 1 ist blabla, in punkt 2 wird das bearbeitet
Setup
Das Testobjekt ist wie auch der Laptop über ein Ethernet-Kabel mit dem Router verbunden, der über einen angebundenen UMTS-Stick Internetzugriff hat. Zum Starten der Aufzeichnung der Datenpakete durch die Fritzbox navigiere ich zu fritz.box/support.lua, klicke auf den Link "Paketmitschnitte" und starte für das vorgesehene Interface die Aufzeichnung durch den Klick auf "Start", in meinem Fall eth3, da dort das LAN-Kabel des Telefunken Smart-TVs angeschlossen ist. Durch "Stopp" kann der Mitschnitt beendet werden, sodass er in Wireshark ausgewertet werden kann.
Erkenntnisse
diese URLs werden aufgerufen, diese Header-Daten übermittelt das passiert, wenn man die Header filtert oder Zugriffe blockiert
Internet
In der folgenden Tabelle werden die wenigen fernseherspezifischen Domains jeweils mit vermutlicher Bedeutung aufgelistet. Senderspezifische URLs wurden in das Java-Tool im Bereich "Filterliste verwenden" aufgenommen, wo sich Aktivität und Rolle von selbst klären:
Domain | Aufgerufen bei Aktivität: | Vermutliche Rolle |
www.portaltv.tv | Fernseher anschalten | Auf Basis der Erreichbarkeit dieser Domain schlussfolgert der Smart-TV, dass er online ist oder nicht. Wird sie also blockiert, kann kein Online-Feature aufgerufen werden, auch wenn andere Domains verfügbar wären, da man in den jeweiligen Menüpunkt gar nicht erst gelangt. Im Request wird eine Textdatei angefordert, die 2048-mal das Zeichen "x" beinhaltet, nämlich www.portaltv.tv/assets/2kb.txt. |
mb100.portaltv.tv | Erstmalige Zustimmung zur Datenschutzrichtlinie, Menüpunkt "Menu -> Internet -> Smart TV" | Bei der Zustimmung zur Datenschutzrichtlinie erfolgen verschlüsselte Requests an diese Domain, in denen vermutlich Anmeldedaten eingegeben werden, um die Zustimmung an einem Ort zu hinterlegen. Der angesprochene Menüpunkt ist ein Ort, von dem aus auf dem Gerät verfügbare Apps sowie der App Store selbst gestartet werden können. |
vstlsrv.com | Suche nach und Download von Firmware-Update, Fernseher anschalten | Beim Anschalten erfolgt ein Request an http://vstlsrv.com/swtest/dial_appname_to_prefixurl_list.xml, was sich von denen beim Firmware-Update unterscheidet. Diese erfolgen nämlich unverschlüsselt über FTP, sodass auch die Logindaten im Klartext sichtbar sind. Der Smart-TV durchstöberte nacheinander Dateien namens "ping.me" sowie Informationsdateien über die Firmware, die zur Verfügung steht in verschiedenen Verzeichnissen, z.B. ftp://vstlsrv.com/6841_001/ping.me und ftp://vstlsrv.com/6841_001/0009df/6841.dcf, wobei das Verzeichnis 6841_001 zu 6841_002 gewechselt wird, das dann zu 6841_003 usw., bis das neu anvisierte Verzeichnis nicht existiert. |
europe.pool.ntp.org, go.microsoft.com, secureclock.playready.microsoft.com | Fernseher anschalten | Beim Start des Geräts werden diese Domains zur Zeitsynchronisation aufgerufen. Bei Ersterem wird dafür NTP verwendet, die zweite Domain gehört zu http://go.microsoft.com/fwlink/?LinkId=149408, die auf die dritte Domain weiterleitet (wegen 302 Moved Temporarily), wo ein HTTP-POST-Request zur Abfrage der Uhrzeit verwendet wird. |
Beim vorinstallierten Webbrowser handelt es sich, wenn die Meldung beim Schließen des Webbrowsers wahrheitsgemäß ist, um einen Opera-Browser. Im Gegensatz zu anderen Smart-TVs wie dem LG 42LM670S-ZA <ref>Daniel Rychlewski - Informationsfluss eines Smart-TVs aus dem Heimnetzwerk S. 31, Bachelorarbeit, Humboldt-Universität zu Berlin, Institut für Informatik, Lehrstuhl Systemarchitektur, 2017.</ref> werden selbstsignierte Zertifikate nicht akzeptiert und der Nutzer erhält eine angemessene Warnung. Eine solche Warnung bekommt er auch, wenn das Zertifikat für eine andere Website ausgestellt worden ist. Das hat sich beim Aufruf von Testseiten gezeigt, die ursprünglich für einen Samsung Smart-TV aufgesetzt worden sind, nämlich:
https://ssl2.wsp.lab.sit.cased.de/ - valides Zertifikat für einen anderen Host
https://ssl3.wsp.lab.sit.cased.de/ - selbstsigniertes Zertifikat <ref>Marco Ghiglieri - Incorrect HTTPS Certificate Validation in Samsung Smart TVs S. 6, Abgerufen am 07. Oktober 2017.</ref>
Heimnetz
mediastreamingoptionen dlna
Gegenmaßnahmen
Filterliste verwenden
whitelist blacklist java
import java.util.Scanner;
import java.io.FileWriter;
import java.io.IOException;
// Das Tool generiert je nach Eingabe im selben Verzeichnis eine Black- oder Whitelist fuer einen Telefunken XF32B301 Smart-TV mit Firmware-Version 2.32.4.0.
public class TelefunkenGenerator {
/* Der Scanner liest die Eingaben des Nutzers in der Kommandozeile. Bei einem "j" erfolgt der Eintrag in die Datei und bei einem "n" nicht.
* Sonstige Eingaben zaehlen als unerwartet und sorgen dafuer, dass das Programm beendet wird. */
private final Scanner scanner = new Scanner(System.in);
// Der FileWriter schreibt die Domains in eine Datei, sofern auf die Datei schreibend zugegriffen werden kann.
private FileWriter writer;
/**
* In der Main-Methode wird je nach Wunsch des Nutzers eine Blacklist oder Whitelist generiert, die seinen Beduerfnissen entspricht.
* @param args Zu diesem Zweck irrelevante Kommandozeilenparameter
*/
public static void main(String[] args) {
TelefunkenGenerator generator = new TelefunkenGenerator();
generator.starteTool();
String ersteEingabe = generator.scanner.next();
if (ersteEingabe.equals("j")) {
// Blacklist soll generiert werden
generator.erstelleBlacklist(generator.scanner);
} else if (ersteEingabe.equals("n")) {
// Whitelist soll generiert werden
generator.erstelleWhitelist(generator.scanner);
} else {
generator.beenden("Unerwartete Eingabe. Das Programm wird jetzt beendet", generator.scanner);
}
}
/**
* Informiert den Nutzer ueber den Zweck des Tools und fragt danach, welche Filterliste erstellt werden soll.
*/
private void starteTool() {
System.out.println("Dieses Tool erstellt fuer Ihren Telefunken Smart-TV eine Black- oder Whitelist, die in eine Fritzbox importiert werden kann.");
System.out.println("Soll eine Blacklist (j) oder eine Whitelist (n) erstellt werden? [j/n]");
}
/**
* Diese Methode fuegt der Black-/Whitelist bei der Eingabe "j" die gewuenschten Domains hinzu, sodass diese blockiert/erlaubt werden.
* @param frage An den Nutzer gerichtete Frage, welches Feature verboten (Blacklist) / erlaubt (Whitelist) sein soll
* @param fqdn Domains, die fuer das betrachtete Feature relevant sind
*/
private void hinzufuegen(String frage, String... fqdn) {
System.out.println(frage+" [j/n]");
String eingabe = scanner.next();
if (eingabe.equals("j")) {
// Nutzer hat bestaetigt, dass die Eintraege aus fqdn hinzugefuegt werden sollen
for (String domain : fqdn) {
try {
writer.write(domain+"\n");
} catch (IOException e) {
beenden("Es ist ein Problem beim Schreiben der Datei aufgetreten. Das Programm wird jetzt beendet", scanner);
return;
}
}
} else if (eingabe.equals("n")) {
// Kein Eintrag wird hinzugefuegt
} else {
beenden("Unerwartete Eingabe. Das Programm wird jetzt beendet", writer, scanner);
}
}
/**
* Erstellt im selben Verzeichnis wie dieses Programm eine Blacklist als Textdatei.
* @param scanner Wird verwendet, um die Eingaben des Nutzers zu erfahren und passend darauf zu reagieren
*/
private void erstelleBlacklist(Scanner scanner) {
try {
writer = new FileWriter("Blacklist_" + System.currentTimeMillis() + ".txt");
} catch (IOException e) {
beenden("Es ist ein Problem beim Schreiben der Datei aufgetreten. Das Programm wird jetzt beendet", scanner);
return;
}
hinzufuegen("Soll die Nutzung von Online-Features unterbunden werden?",
"www.portaltv.tv"); // nur wenn beim Anschalten des TVs der Zugriff auf www.portaltv.tv erfolgreich ist, denkt der TV, er sei verbunden mit Internet, ansonsten nicht
hinzufuegen("Soll der Aufruf der App-Liste, die unter Menu -> Internet -> Smart-TV gefunden werden kann, blockiert werden?",
"mb100.portaltv.tv"); // fuer Menu -> Internet -> Smart TV muss www.portal.tv und mb100.portaltv.tv aktiviert sein - es wird nämlich mb100.portaltv.tv aufgerufen
hinzufuegen("Soll die NTP-Zeitsynchronisation verboten werden?",
"europe.pool.ntp.org",
"go.microsoft.com",
"secureclock.playready.microsoft.com");
hinzufuegen("Sollen Tracking-Webseiten blockiert werden?",
"de.ioam.de",
"script.ioam.de",
"logc406.xiti.com",
"logc407.xiti.com",
"www.google-analytics.com",
"www.googletagmanager.com",
"79423.analytics.edgekey.net",
"ma1249-r.analytics.edgesuite.net",
"ma140-r.analytics.edgesuite.net",
"de.sitestat.com",
"tracksrv.zdf.de");
hinzufuegen("Sollen nicht zwingend notwendige Content Delivery Networks blockiert werden?",
"maxcdn.bootstrapcdn.com", // für 1-2-3.tv verwendet, aber im Grunde überflüssig
"cdn-gl.imrworldwide.com");
hinzufuegen("Soll ARD-alpha nicht mehr über das Internet empfangen werden dürfen?",
"brdashdvbt2-i.akamaihd.net");
hinzufuegen("Soll 1-2-3.tv nicht mehr über das Internet empfangen werden dürfen?",
"connect.media-broadcast.com", // die Navigation für freenet connect-Sender
"freenettvcon07-i.akamaihd.net"); // das eigentliche Hosting der Videodateien
hinzufuegen("Sollen die HbbTV-Features für den Fernsehsender Das Erste blockiert werden?",
"itv.ard.de",
"itv2.ard.de",
"hbbtv.daserste.de",
"www.daserste.de",
"ctv-videos.daserste.de");
hinzufuegen("Sollen die HbbTV-Features für den Fernsehsender ZDF blockiert werden?",
"hbbtv.zdf.de",
"www.zdf.de",
"epg-image.zdf.de",
"tvdl.zdf.de");
hinzufuegen("Sollen die HbbTV-Features für den Fernsehsender rbb Berlin blockiert werden?",
"hbbtv.rbb-online.de",
"hbbtv.ardmediathek.de",
"rbbmediapmdp-a.akamaihd.net",
"pd.irt.de");
/*hinzufuegen("Sollen Firmware-Updates nicht mehr gesucht und heruntergeladen werden duerfen?",
"vstlsrv.com"); // Firmware-Update erfolgt ueber FTP, also sinnlos, das zu blockieren in Fritzbox-Filterliste, denn das greift nicht*/
/* Die obige Liste kann bei Bedarf aktualisiert oder hier erweitert werden */
beenden("Die Blacklist wurde erfolgreich generiert. Das Programm wird jetzt beendet", writer, scanner);
}
/**
* Erstellt im selben Verzeichnis wie dieses Programm eine Whitelist als Textdatei.
* @param scanner Wird verwendet, um die Eingaben des Nutzers zu erfahren und passend darauf zu reagieren
*/
private void erstelleWhitelist(Scanner scanner) {
try {
writer = new FileWriter("Whitelist_" + System.currentTimeMillis() + ".txt");
} catch (IOException e) {
beenden("Es ist ein Problem beim Schreiben der Datei aufgetreten. Das Programm wird jetzt beendet", scanner);
return;
}
hinzufuegen("Soll die Nutzung von Online-Features möglich sein?",
"www.portaltv.tv");
hinzufuegen("Soll der Aufruf der App-Liste, die unter Menu -> Internet -> Smart-TV gefunden werden kann, weiterhin funktionieren?",
"mb100.portaltv.tv");
hinzufuegen("Soll die NTP-Zeitsynchronisation erlaubt sein?",
"europe.pool.ntp.org",
"go.microsoft.com",
"secureclock.playready.microsoft.com");
hinzufuegen("Sollen Tracking-Webseiten aufgerufen werden können?",
"de.ioam.de",
"script.ioam.de",
"logc406.xiti.com",
"logc407.xiti.com",
"www.google-analytics.com",
"www.googletagmanager.com",
"79423.analytics.edgekey.net",
"ma1249-r.analytics.edgesuite.net",
"ma140-r.analytics.edgesuite.net",
"de.sitestat.com",
"tracksrv.zdf.de");
hinzufuegen("Sollen nicht zwingend notwendige Content Delivery Networks erlaubt werden?",
"maxcdn.bootstrapcdn.com", // für 1-2-3.tv verwendet, aber im Grunde überflüssig
"cdn-gl.imrworldwide.com");
hinzufuegen("Soll ARD-alpha über das Internet empfangen werden dürfen?",
"brdashdvbt2-i.akamaihd.net");
hinzufuegen("Soll 1-2-3.tv über das Internet empfangen werden dürfen?",
"connect.media-broadcast.com", // die Navigation für freenet connect-Sender
"freenettvcon07-i.akamaihd.net"); // das eigentliche Hosting der Videodateien
hinzufuegen("Sollen die HbbTV-Features für den Fernsehsender Das Erste erlaubt werden?",
"itv.ard.de",
"itv2.ard.de",
"hbbtv.daserste.de",
"www.daserste.de",
"ctv-videos.daserste.de");
hinzufuegen("Sollen die HbbTV-Features für den Fernsehsender ZDF erlaubt werden?",
"hbbtv.zdf.de",
"www.zdf.de",
"epg-image.zdf.de",
"tvdl.zdf.de");
hinzufuegen("Sollen die HbbTV-Features für den Fernsehsender rbb Berlin erlaubt werden?",
"hbbtv.rbb-online.de",
"hbbtv.ardmediathek.de",
"rbbmediapmdp-a.akamaihd.net",
"pd.irt.de");
beenden("Die Whitelist wurde erfolgreich generiert. Das Programm wird jetzt beendet", writer, scanner);
}
/**
* Beendet die Ausfuehrung des Programms mit einer passenden Ausgabe.
* @param ausgabe Text, der dem Nutzer zum Abschluss der Programmausfuehrung mitgeteilt werden soll
* @param writer Objekt, das vorhin in eine Datei geschrieben hat und hier geschlossen wird
* @param scanner Objekt, das vorhin Nutzereingaben erkannt hat und in einer Hilfsmethode geschlossen wird
*/
private void beenden(String ausgabe, FileWriter writer, Scanner scanner) {
try {
writer.close();
} catch (IOException e) {
beenden("Es ist ein Problem beim Schreiben der Datei aufgetreten. Das Programm wird jetzt beendet", scanner);
return;
}
beenden(ausgabe, scanner);
}
/**
* Hilfsmethode fuer das Beenden des Programms, die aufgerufen wird, wenn kein FileWriter vorhanden ist, den man schliessen koennte, oder ein Problem mit diesem aufgetreten ist.
* @param ausgabe Text, der dem Nutzer zum Abschluss der Programmausfuehrung mitgeteilt wird
* @param scanner Objekt, das vorhin Nutzereingaben erkannt hat und hier geschlossen wird
*/
private void beenden(String ausgabe, Scanner scanner) {
System.out.println(ausgabe);
scanner.close();
System.exit(-1);
}
}
Gastzugang aktivieren
separierung, dann funzt aber medienstreaming nicht mehr Intranet-Kommunikation verbieten
Netzwerkanwendungen sperren
ftp; zeigen, wie das geht in fritzbox & dass ports angepasst werden müssen
Fazit
Einzelnachweise
<references />