Session-IDs im FRITZ!Box Webinterface



Ähnliche Dokumente
Anmeldung am FRITZ!Box Webinterface

ITT WEB-Service DEMO. Kurzbedienungsanleitung

Anleitung: Einrichtung der Fritz!Box 7272 mit VoIP Telefonanschluss

Zugriff auf Daten der Wago über eine Webseite

Xylem WebService Demo Kurzbedienungsanleitung

Anlegen eines DLRG Accounts

Verwendung des Terminalservers der MUG

OP-LOG

Leichte-Sprache-Bilder

Professionelle Seminare im Bereich MS-Office

Datenbank-Verschlüsselung mit DbDefence und Webanwendungen.

Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.

Fotostammtisch-Schaumburg

Übersicht... 2 Dateiupload... 3 Administratorfunktionen... 4

Adminer: Installationsanleitung

HSR git und subversion HowTo

Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten

How to install freesshd

Einbindung des Web Map Service für Gemeinden Anleitung

Erstellung botoptimierter Partnerlinks

TREND SEARCH VISUALISIERUNG. von Ricardo Gantschew btk Berlin Dozent / Till Nagel

Verwendung des IDS Backup Systems unter Windows 2000

Ordner Berechtigung vergeben Zugriffsrechte unter Windows einrichten

Inhalt: Ihre persönliche Sedcard... 1 Login... 1 Passwort vergessen... 2 Profildaten bearbeiten... 3

Firmware-Update, CAPI Update

Live Update (Auto Update)

FAQ Verwendung. 1. Wie kann ich eine Verbindung zu meinem virtuellen SeeZam-Tresor herstellen?

Stundenpläne In Kürze können die Dozenten auch ihre Stundenpläne über ihren individuellen Dozentenbereich

Mail-Account Unimail mit der Einstellungen für Outlook Express 5.0

BusinessMail X.400 Webinterface Gruppenadministrator V2.6

Zugriff auf OWA Auf OWA kann über folgende URLs zugegriffen werden:

Updatehinweise für die Version forma 5.5.5

Benutzerverwaltung Business- & Company-Paket

DB2 Kurzeinführung (Windows)

Legen Sie nun dieses Verzeichnis mit dem Namen "joomla" hier an: C:xampphtdocs.

Einrichtung des WS_FTP95 LE

macs Support Ticket System

Arbeiten mit dem neuen WU Fileshare unter Windows 7

ELV Elektronik AG Leer Tel.:+49-(0)491/ Fax:+49-(0)491/7016 Seite 1 von 10

Um ein solches Dokument zu erzeugen, muss eine Serienbriefvorlage in Word erstellt werden, das auf die von BüroWARE erstellte Datei zugreift.

PHP - Projekt Personalverwaltung. Erstellt von James Schüpbach

Computeria Solothurn

Schumacher, Chris Druckdatum :11:00

Leitfaden zur Nutzung von binder CryptShare

Konfiguration von Igel ThinClients fu r den Zugriff via Netscaler Gateway auf eine Storefront/ XenDesktop 7 Umgebung

Draft Kurzanleitung Travelmanagement Stand

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Step by Step VPN unter Windows Server von Christian Bartl

Installation von Druckern auf dem ZOVAS-Notebook. 1. Der Drucker ist direkt mit dem Notebook verbunden

e-books aus der EBL-Datenbank

BSV Software Support Mobile Portal (SMP) Stand

S TAND N OVEMBE R 2012 HANDBUCH DUDLE.ELK-WUE.DE T E R M I N A B S P R A C H E N I N D E R L A N D E S K I R C H E

Webalizer HOWTO. Stand:

Anleitung OpenCms 8 Webformular Auswertung

Matrix42. Use Case - Sicherung und Rücksicherung persönlicher Einstellungen über Personal Backup. Version September

Benutzerverwaltung mit Zugriffsrechteverwaltung (optional)

Online-Zugang zum EOM. Anleitung

Für die Einrichtung mit jedem beliebigen Client gelten grundsätzlich folgende Daten:

4D Server v12 64-bit Version BETA VERSION

S Sparkasse Hohenlohekreis. Leitfaden zu Secure

proles-login. Inhalt [Dokument: L / v1.0 vom ]

telpho10 Update 2.1.6

Handbuch ECDL 2003 Basic Modul 5: Datenbank Access starten und neue Datenbank anlegen

Installation Benutzerzertifikat

Zugriff auf die Modul-EEPROMs

Motivation. Inhalt. URI-Schemata (1) URI-Schemata (2)

I Serverkalender in Thunderbird einrichten

.htaccess HOWTO. zum Schutz von Dateien und Verzeichnissen mittels Passwortabfrage

Sicherer Datenaustausch mit Sticky Password 8

mysql - Clients MySQL - Abfragen eine serverbasierenden Datenbank

Los geht s. aber Anhand meines Beispiels!

Benutzeranleitung Kontoverwaltung

Edulu-Mail im Mail-Client einrichten (MS Outlook, Apple Mail, iphone)

Tevalo Handbuch v 1.1 vom

Installationsanleitung encoline FTTH-Anschluss FRITZ!Box Fon WLAN 7360

Nach der Installation der Multi-User-Version von CUBUS können Sie mit dem Administrator- Tool Benutzergruppen und Benutzer einrichten.

Kurzanleitung GigaMove

Fachhochschule Fulda. Bedienungsanleitung für QISPOS (Prüfungsanmeldung, Notenspiegel und Bescheinigungen)

Strategie & Kommunikation. Trainingsunterlagen TYPO3 Version 4.3: News Stand

Grafstat Checkliste Internetbefragung

Hinweise zur Datensicherung für die - Prüfmittelverwaltung - Inhalt

Anmeldung eines Tiptel IP-Telefons an einer FritzBox

ClouDesktop 7.0. Support und Unterstützung. Installation der Clientsoftware und Nutzung über Webinterface

ecall Anleitung Outlook Mobile Service (OMS)

Pakete dienen dazu, die Software eines Projektes in größere inhaltlich zusammengehörige Bereiche mit eigenem Namen einzuteilen (siehe Java API).

Die Leuchtdiode Power / DSL beginnt nach einigen Sekunden zu blinken und signalisiert damit die Betriebsbereitschaft der FRITZ!Box.

Drupal Kurzanleitung. Wie ändere ich den Inhalt meiner Seite?

FTP-Server einrichten mit automatischem Datenupload für

Wie richten Sie Ihr Web Paket bei Netpage24 ein

Anleitung: Einrichtung der Fritz!Box 7272 mit VoIP Telefonanschluss

Sessions mit PHP. Annabell Langs Sessions in PHP - Annabell Langs 1

Mail-Weiterleitung unter WebAccess

26. November EFS Übung. Ziele. Zwei Administrator Benutzer erstellen (adm_bill, adm_peter) 2. Mit adm_bill eine Text Datei verschlüsseln

Anleitung für den Zugriff auf Mitgliederdateien der AG-KiM

Drägerware.ZMS/FLORIX Hessen

SJ OFFICE - Update 3.0

Umstellung einer bestehenden T-Online Mailadresse auf eine kostenlose T-Online Fre -Adresse


Transkript:

Session-IDs im FRITZ!Box Webinterface Session-IDs und geändertes Login-Verfahren im FRITZ!Box Webinterface Ab der FRITZ!Box Firmware-Version xx.04.74 wurde der vorhandene Kennwortschutz verbessert sowie ein weiteres Sicherheitsmerkmal für den Zugriff auf die Konfigurationsoberfläche der FRITZ!Box eingeführt, die Session-IDs. Die Verwendung von Session-IDs bietet einen wirksamen Schutz vor sogenannten Cross-Site Request Forgery-Angriffen, bei denen ein Angreifer unberechtigt Daten in einer Webanwendung verändert. Das folgende Dokument beschäftigt sich mit der Verwendung von Session-IDs und richtet sich an Entwickler, die Tools für die FRITZ!Box programmieren. Schutz vor Missbrauch Neben der reinen Verwendung von Session-IDs läuft ein aktiver Schutz gegen mögliche Angriffsversuche. Versucht eine Anwendung ohne oder mit einer ungültigen Session-ID auf die FRITZ!Box zuzugreifen, werden alle aktiven Sitzungen aus Sicherheitsgründen beendet. Ein Zugriff auf die FRITZ!Box ist somit erst nach erneuter Anmeldung möglich. Greift ein im Hintergrund laufendes Programm wie z. B. ein Anrufmonitor ohne gültige Session- ID, permanent auf die FRITZ!Box zu, beendet dieser Zugriff eine aktive Sitzung. In der Praxis äußert sich das darin, dass die FRITZ!Box regelmäßig ein erneutes Login fordert. Alle Programme, die auf das FRITZ!Box Webinterface zugreifen, sollten daher Session-IDs unterstützen, da sie sonst nicht nur keinen Zugriff mehr erhalten, sondern wie oben beschrieben auch den normalen Zugriff auf die FRITZ!Box Oberfläche über den Browser beeinträchtigen können. Session ID-Verfahren Verwendung der Session-ID Die Session-ID ist eine 64-Bit-Zahl, die durch 16 Hexziffern dargestellt wird. Sie wird beim Login vergeben und muss für die Dauer der Sitzung mitgeführt werden. Dabei sollte ein Programm zu jeder FRITZ!Box jeweils nur eine Session-ID verwenden, da die Anzahl der Sessions zu einer FRITZ!Box beschränkt ist. Die Session-ID hat nach Vergabe eine Gültigkeit von 10 Minuten. Die Gültigkeitsdauer verlängert sich automatisch bei aktivem Zugriff auf die FRITZ!Box. Die Session-ID 0 (0000000000000000) ist immer ungültig. Die Verwendung der Session-IDs ist ein neues Feature ist, das per Firmware-Update installiert und weiter entwickelt wurde. Abhängig von der Firmware werden Session-IDs also gar nicht oder mit unterschiedliche Verfahren genutzt. Es sollten daher alle Varianten implementiert werden und parallel laufen. Vergabe der Session-ID Für die Vergabe der Session-ID wurde eine neue Einstiegsseite eingeführt. ab Firmware-Version xx.04.74: login_sid.xml ab FRITZ!OS 5.50: login_sid.lua Auf dieser Seite kann über den Wert <iswriteaccess> das Loginverfahren abgefragt werden. Beträgt der Wert 0, muss ein Login mit Kennwort erfolgen. Der dabei angewandte neue Login- Mechanismus wird weiter unten beschrieben. Beträgt der Wert 1, ist kein Login erforderlich und es wird bei der Anfrage mit <SID> gleich eine gültige Session-ID mitgeteilt. Sollte die Seite nicht aufgerufen werden können, handelt es sich um eine Firmware die keine Session-IDs unterstützt.. AVM GmbH 17.12.2012 Seite 1 von 6 avm.de

Übergabe der Session-ID Die Übergabe der Session-ID erfolgt im Parameter sid (per GET oder POST). Beispiel HTML-Formular: <form action= /cgi-bin/webcm > <input type= hidden name= sid value= 0000000000000001 > Beispiel für direkten Link: <A HREF= /cgi-bin/webcm?getpage=../html/seite.html& sid=0000000000000001</a> Zugriff ohne Session-ID Grundsätzlich können alle dynamisch generierten Seiten nur mit einer gültigen Session-ID aufgerufen werden. Auch das Lesen oder Schreiben von Web-Variablen erfordert eine Session- ID. Folgende Inhalte können ohne gültige Session-ID aufgerufen werden: Einstiegsseiten (z. B. Login-Seite) Statische Inhalte (z. B. Grafiken) Beenden einer Sitzung Eine Sitzung kann durch Löschen der Session-ID jederzeit auch vor Ablauf des Timeouts von 10 Minuten beendet werden. Dies geschieht durch POST der Werte sid=<session-id> und security:command/logout=<dummy>, wobei der Wert für <dummy> irrelevant ist. Verändertes Login-Verfahren Verwendet eine FRITZ!Box Session-IDs, erfolgt das Login nicht direkt über das Kennwort, sondern über einen Response-Wert, der aus dem Klartextkennwort und einer Challenge ermittelt wird. Der Login-Vorgang sieht wie folgt aus: <form action=../cgi-bin/webcm/ > <input type= password name= login:command/response value= response > </form> Im Vergleich dazu der Login-Vorgang, wenn die FRITZ!Box noch keine Session-IDs unterstützt: <form action=../cgi-bin/webcm/ > <input type= password name= login:command/password value= geheim > </form> Ermittlung des Response-Wertes Beim neuen Login-Verfahren wird also das Klartextpasswort login:command/password=<klartextpassword> ersetzt durch login:command/response=<response> Der Response-Wert wird wie folgt gebildet: <response> = <challenge>-<md5> Der Wert <challenge> kann aus der Datei login_sid.xml bzw. login_sid.lua ausgelesen werden und <md5> ist der MD5 (32 Hexzeichen mit Kleinbuchstaben) von <challenge>-<klartextpassword>. AVM GmbH 17.12.2012 Seite 2 von 6 avm.de

Der MD5-Hash wird über die Bytefolge der UTF-16LE-Codierung dieses Strings gebildet (ohne BOM und ohne abschließende 0-Bytes). Aus Kompatibilitätsgründen muss für jedes Zeichen, dessen Unicode Codepoint > 255 ist, die Codierung des "."-Zeichens benutzt werden (0x2e 0x00 in UTF-16LE). Dies betrifft also alle Zeichen, die nicht in ISO-8859-1 dargestellt werden können, z. B. das Euro-Zeichen. Abschließend ein Beispiel mit deutschem Umlaut: Die Challenge <challenge> = "1234567z" kombiniert mit dem Kennwort <klartextpassword> = "äbc" ergibt den Wert <response> = "1234567z-9e224a41eeefa284df7bb0f26c2913e2" Besonderheiten ab FRITZ!OS 5.50 Mit FRITZ!OS 5.50 wurden Benutzerrollen eingeführt. Eine Anmeldung erfolgt daher nicht nur mit einem Kennwort, sondern mit einer Kombination aus Benutzername und Kennwort. Das Luaskript login_sid.lua verhält sich im Wesentlichen wie die alte Einstiegsseite login_sid.xml, bietet aber erweiterte Möglichkeiten. Der Abruf erfolgt über die URL "fritz.box/login_sid.lua", die Parameterübergabe kann per GET oder per POST erfolgen. Je nach Parameter können über das Skript folgende Aktionen ausgeführt werden: 1) Prüfen, ob eine Anmeldung erforderlich ist und falls nicht, gleich eine gültige Session-ID erhalten Parameter: keine 2) Eine Anmeldung durchführen Parameter: "username" (Name des Benutzers oder leer), "response" (eine aus Passwort und Challenge erzeugte Response) 3) Prüfung, ob eine bestimmte Session-ID gültig ist Parameter: "sid" (die zu prüfende Session-ID) 4) Abmelden, d.h. eine Session-ID ungültig machen Parameter: "logout" (Wert beliebig), "sid" (eine gültige Session-ID) Die Antwort-Xml-Datei hat im Prinzip immer folgendes Format: <SessionInfo> <SID>ff88e4d39354992f</SID> <Challenge>ab7190d6</Challenge> <BlockTime>128</BlockTime> <Rights> <Name>BoxAdmin</Name> <Access>2</Access> <Name>Phone</Name> </Access>2</Access> <Name>NAS></Name> <Access>2</Access> </Rights> </SessionInfo> Die Anzahl und Reihenfolge der Werte im Bereich <Rights> ist variabel. Es werden nur die Rechte geliefert, die man hat. Bedeutung der Werte: <SID>: Besteht dieser Wert nur aus Nullen, dann hat man keinerlei Rechte, ansonsten enthält er eine gültige Session-ID für den weiteren Zugriff auf die FRITZ!Box. Welche Zugriffsrechte man im einzelnen hat, steht im Bereich <Rights>.. AVM GmbH 17.12.2012 Seite 3 von 6 avm.de

<Challenge>: Enthält eine Challenge, mit der man über das Challenge- Response Verfahren eine Anmeldung durchführen kann. <BlockTime>: Die Zeit in Sekunden, in der kein weiterer Anmeldeversuch zugelassen wird. <Rights>: Die einzelnen Rechte, die man mit der Session-ID hat. Mögliche Werte für die Rechte: 1 für nur lesenden und 2 für Lese- und Schreibzugriff. Beispiel-Code für den Bezug einer Session-ID Firmware-Version xx.04.74 Verwendung von login_sid.xml using System.Xml.Linq; using System.Security.Cryptography; public void Test () { string kennwort = "xxxxxxxx"; // SessionID ermitteln string challenge = GetChallenge(); string response = GetResponse(challenge, kennwort); string sid = GetSid(challenge, response); // Übersichtsseite der FRITZ!Box einlesen string seite = SeiteEinlesen(@"http://fritz.box/home/home.lua", sid); MessageBox.Show(seite); public string SeiteEinlesen (string url, string sid) { Uri uri = new Uri(url + "?sid=" + sid); HttpWebRequest request = WebRequest.Create(uri) as HttpWebRequest; HttpWebResponse response = request.getresponse() as HttpWebResponse; StreamReader reader = new StreamReader(response.GetResponseStream()); string str = reader.readtoend(); return str; public string GetChallenge () { XDocument doc = XDocument.Load(@"http://fritz.box/cgibin/webcm?getpage=../html/login_sid.xml"); XElement info = doc.firstnode as XElement; return info.element("challenge").value; public string GetResponse (string challenge, string kennwort) { return GetMD5Hash(challenge + "-" + kennwort); public string GetSid (string challenge, string response) { HttpWebRequest request = WebRequest.Create(@"http://fritz.box/cgibin/webcm") as HttpWebRequest; request.method = "POST"; request.contenttype = "application/x-www-form-urlencoded"; string parameter = String.Format(@"login:command/response={0- {1&getpage=../html/login_sid.xml", challenge, response); byte[] bytes = Encoding.ASCII.GetBytes(parameter); request.contentlength = bytes.length; Stream stream = request.getrequeststream(); stream.write(bytes, 0, bytes.length); stream.close();. AVM GmbH 17.12.2012 Seite 4 von 6 avm.de

HttpWebResponse wr = request.getresponse() as HttpWebResponse; StreamReader reader = new StreamReader(wr.GetResponseStream()); string str = reader.readtoend(); XDocument doc = XDocument.Parse(str); XElement info = doc.firstnode as XElement; return info.element("sid").value; public string GetMD5Hash (string input) { MD5 md5hasher = MD5.Create(); byte[] data = d5hasher.computehash(encoding.unicode.getbytes(input)); StringBuilder sb = new StringBuilder(); for (int i = 0; i < data.length; i++) { sb.append(data[ i ].ToString("x2")); return sb.tostring(); Beispiel-Code für den Bezug einer Session-ID ab FRITZ!OS 5.50 Verwendung von login_sid.lua using System.Net; using System.Security.Cryptography; using System.Xml.Linq; public void Test () { string benutzername = "xxxxxxxx"; string kennwort = "xxxxxxxx"; // SessionID ermitteln string sid = GetSessionId(benutzername, kennwort); string seite = SeiteEinlesen(@"http://fritz.box/home/home.lua", sid); MessageBox.Show(seite); public string SeiteEinlesen (string url, string sid) { Uri uri = new Uri(url + "?sid=" + sid); HttpWebRequest request = WebRequest.Create(uri) as HttpWebRequest; HttpWebResponse response = request.getresponse() as HttpWebResponse; StreamReader reader = new StreamReader(response.GetResponseStream()); string str = reader.readtoend(); return str; public string GetSessionId (string benutzername, string kennwort) { XDocument doc = XDocument.Load(@"http://fritz.box/login_sid.lua"); string sid = GetValue(doc, "SID"); if (sid == "0000000000000000") { string challenge = GetValue(doc, "Challenge"); string uri = @"http://fritz.box/login_sid.lua?username=" + benutzername + @"&response=" + GetResponse(challenge, kennwort); doc = XDocument.Load(uri); sid = GetValue(doc, "SID"); return sid; public string GetResponse (string challenge, string kennwort) { return challenge + "-" + GetMD5Hash(challenge + "-" + kennwort);. AVM GmbH 17.12.2012 Seite 5 von 6 avm.de

public string GetMD5Hash (string input) { MD5 md5hasher = MD5.Create(); byte[] data = md5hasher.computehash(encoding.unicode.getbytes(input)); StringBuilder sb = new StringBuilder(); for (int i = 0; i < data.length; i++) { sb.append(data[i].tostring("x2")); return sb.tostring(); public string GetValue (XDocument doc, string name) { XElement info = doc.firstnode as XElement; return info.element(name).value;. AVM GmbH 17.12.2012 Seite 6 von 6 avm.de