Privacy@Home

From
Jump to navigation Jump to search

Motivation

Mit der zunehmenden Zahl an IoT-Geräten...

viele Features, große Gefahr für Privacy usw.

Setup

Fernseher über Ethernet angeschlossen an Fritzbox 7580, Fritzbox über Ethernet an andere Fritzbox

Erkenntnisse

diese URLs werden aufgerufen, diese Header-Daten übermittelt das passiert, wenn man die Header filtert oder Zugriffe blockiert

Internet

unterteilung nach aktivität vornehmen:

hbbtv für beispielhafte sender

mini app store

webbrowser, https zertifikat verhalten

zuordnung url->funktionalität tabellarisch festhalten

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