Vorschlag für eine Prozessinnovation

Hauke Laging, Peter-Vischer-Straße 29, 12157 Berlin, Tel.: 030/32603660, mobil: 0172/7630883, E-Mail: hauke@laging.de, WWW: http://www.hauke-laging.de/

Signaturen für kritische WWW-Elemente

Version 1.1/2.5, 16.09.2008

Inhalt

Zusammenfassung — Übersicht

Durch die kryptografische Sicherung sicherheitstechnisch kritischer Webseiteninhalte soll die nach SSL/TLS verbleibende (praxisrelevante!) Lücke gestopft werden.

Ausgangslage – das Problem — Übersicht

Technisch unbedarfte Internetnutzer bekommen immer wieder gesagt, dass ein Virenscanner allein kein Allheilmittel sei und man deshalb gewisse Grundregeln beherzigen müsse. Eine davon lautet, sich von unseriösen Webseiten fernzuhalten. Leider ist man auch auf seriösen Webseiten nicht vor Angriffen sicher.

Der beste Weg, eine Browsersicherheitslücke auszunutzen, was wegen der Unidirektionalität der Webbrowser nur passiv möglich ist, ist die Kompromittierung vieler Webseiten, (auch) "seriöser" Webseiten. Man knackt den Webserver und schummelt dann (in der Webseitendarstellung unauffälligen) Code in die ausgelieferten Seiten, der den Browser auf die eigentlichen gefährlichen Inhalte (auf dem geknackten oder einem anderen Webserver) lenkt.

Dies ist ein strukturelles Problem, denn man wird nie davon ausgehen können, dass

Der Nutzer einer Webseite sollte auch dann noch die Möglichkeit haben, sich zu "verteidigen", wenn der Webserver bereits gegen den Angreifer verloren hat. Dafür muss der Browser/Nutzer sich solcher Elemente bedienen, die ein Angreifer unter normalen Umständen (wobei das Vorhandensein ausnutzbarer Softwarefehler in diesem Sinn als "normal" gilt) nicht unter seine Kontrolle bringen kann.

Der texliche Inhalt der Seiten (Quelltext und dargestellter Text) ist für einen Browser vergleichsweise harmlos; damit Softwarefehler auszunutzen, sollte vergleichsweise schwierig sein (d.h., solche Lücken sind selten). Die kritischen Elemente sind:

  1. Code: Javascript (vor allem indirekt durch den Aufbau von Verbindungen zu anderen Rechnern), ActiveX

  2. Links im allgemeinen (also offensichtliche, "versteckte" (=vom Browser ohne Zutun des Users aufgerufene) wie bei Frames und eingebundenen Dateien (Bilder, Applets, sonstige Objekte (v.a. Flash usw.)) und "unauffällige" wie bei Formularen)

  3. eingebundene Objekte: Bilder, Dateien mit Daten für Plug-ins (v.a. Flash, Videos)

Problembewusstsein

Dass das Internet grundsätzlich und vor allem "diffus" gefährlich ist, ist den meisten Leuten bekannt und zumindest auf Nachfrage auch klar.

Ziel — Übersicht

Das Problem, dass einem über einen geknackten Webserver gefährliche Inhalte untergeschoben werden können (auch über eine SSL-/TLS-geschützte Verbindung), kann man dadurch lösen, dass man diese kritischen Elemente signiert, und zwar nicht in der Sphäre des Webservers (dann hätte man das SSL-Problem nur verschoben), sondern in der Sphäre des Webdesigners.

Nebenziele, positive Nebeneffekte, weitere Betroffene

Bei Verwendung von PGP für dieses System besteht die Chance, die Anwender auch bei E-Mails dafür zu interessieren.

technische Umsetzung — Übersicht

Realisierung

Ein Browser-Add-on könnte dann an genormter Stelle eine Datei suchen, in der sich die Objekte der genannten Kategorien befinden. URLs/URIs würde man dort direkt aufführen (entweder alle oder über reguläre Ausdrücke – die natürlich das neue Sicherheitsproblem dummer Webmaster mit sich brächten), Code (vielleicht mit Ausnahme sehr kleiner Sequenzen (onlick="foo();"); auch für Codesequenzen sind reguläre Ausdrücke denkbar) und Dateien (Bilder, Flash, Videos, Musik usw., aber auch importierten Javascript-Code) würde man als Hashwert hinterlegen. Diese Textdatei wäre dann digital signiert (PGP).

Beim Rendern einer Webseite prüfte das Add-on dann alle Elemente der fraglichen Kategorien (natürlich bevor sie zur "Ausfürung" kommen) dahin gehend, ob es für sie einen Eintrag in der Datei gibt (deren Authenzität natürlich als erstes überprüft würde). Wenn nicht, würde der Anwender gewarnt (wie heute schon üblich bei SSL-Seiten, die auch nicht-SSL-geschütze Elemente enthalten) und könnte entscheiden, wie mit diesen Elementen verfahren werden soll.

Eine sinnvolle Ergänzung dieser Technik wäre, dass das Add-on sich merkt, für welche Webseiten es schon einmal so eine Sicherungsdatei gefunden hat, denn ansonsten müsste der Angreifer sie nur löschen, um jedweden Hinweis zu unterbinden – denn natürlich werden die meisten Seiten dieses System nicht verwenden (wie heute schon SSL), was kein konkreter Grund für Misstrauen ist.

mögliche Probleme

Schutz des Signaturschlüssels

Die ganze Aktion hat natürlich nur dann überhaupt einen Sinn, wenn man davon ausgehen darf (was leider keine technische Kategorie und der sicheren Bestimmung von außen prinzipiell nicht zugänglich ist), dass der Signaturschlüssel des Betreibers des Webangebots sicher verwahrt wird.

Technische Voraussetzung ist, dass der Schlüssel auf einem anderen Rechner liegt, durch den die Inhalte auf den Webserver geschleust werden, die per Signatur freigegeben werden sollen. Das ist nicht immer leicht möglich.

Dieser Rechner sollte zudem so konfiguriert sein, dass die Gefährdung minimal wird, also etwa (auf Dienstebene) nicht von außen zugänglich sein (was schwierig ist, wenn mehrere Leute Inhalte für die Webseite bereitstellen, die nicht problemlos physisch auf den Rechner zugreifen können).

Bei einer theorielastigen Betrachtung der Sicherheit der vorgeschlagenen Maßnahme muss man fragen, wie verhindert werden soll, dass der Anbieter – unbewusst natürlich – kompromittierte Dateien signiert. In der Praxis wird er sich auf einen Virenscanner verlassen müssen, denn wenn der Angriff so subtil ist, dass nicht wenigstens der Bildbetrachter abstürzt, wird der Prüfer keinen Verdacht schöpfen und die Datei durchwinken. Trösten kann man sich allerdings damit, dass es sehr viel schwieriger ist (vor allem bei einer großen Zahl von Webservern quasi unmöglich), auf diese Weise eine kompromittierte Datei auf einen Webserver zu bekommen, als ihn zu hacken und sie selber dort zu platzieren.

dynamische Seitengenerierung (Javascript, Bilder)

Der dynamischen Generierung von Seiten sind durch diese Technik natürlich Grenzen gesetzt. Die Dynamik darf sich nicht auf signierte Elemente selber auswirken, nur auf deren Verwendung (Anordnung). Ausnahme sind reguläre Ausdrücke (für URLs und eventuell Code).

Positiv in bezug auf dynamische Inhalte ist, dass das CMS (oder, eine Nummer kleiner, der generierende Code) nichts von dieser Technik wissen muss; es können also problemlos alle bestehenden Systeme prinzipiell damit verwendet werden. Lediglich die signierte Datei muss das System unangetastet lassen. Der Webmaster muss natürlich wissen, welche URLs und Codesequenzen sein System (legitim) produzieren kann, damit er alle diese in die Signaturliste aufnehmen kann.

Man kann aber ein CMS (oder, unter Inkaufnahme des Verheizens einer Menge Rechenleistung, den Webserver – das wäre dann CMS-unabhängig, quasi als Notlösung) dahingehend an dieses System anpassen, dass es die generierten URLs und Codesequenzen (Javascript) mit der Signaturliste abgleicht und dadurch Konfigurationsfehler aufdecken und Alarm schlagen kann.

Benachrichtigung des Webmasters

Man könnte es den Nutzern einer Seite erleichtern, den Webmaster auf Fehler (also v.a. fehlende Signaturen) hinzuweisen, indem in der Signatur die Kontaktadressen dafür vermerkt werden. Das sollte man nicht nur per E-Mail, sondern auch über ein "internes Formular" des Add-ons machen können, das dieses auch gleich selber ausfüllt, so dass der Nutzer nur noch Benachrichtigen: ja/nein? anklicken muss. In dem Formular wären dann die URL der Seite, ggf. die abweichende URL des Objekts, der Hash des Objekts und – um der Versionierung der Signaturdatei Rechnung zu tragen – auch der Hash der Signaturdatei enthalten.

externe Inhalte

Manchmal bindet man externe Inhalte ein, die man nicht alle vorher prüfen kann. Das beste Beispiel sind Werbebanner. Natürlich haben weder die Webmaster noch die Werbetreibenden ein Interesse an einem System, das als Nebeneffekt die Werbung ausblendet (weil sie nicht signiert ist).

Userinhalte

ein spezieller, besonders schwieriger Spezialfall externer Inhalte sind Daten (also vor allem Dateien: Bilder, Videos), die von den Usern eines Webdienstes bereitgestellt werden. Die können naturgemäß nicht vom Betreiber erfasst werden. Und sie von den Usern signieren zu lassen, ist aus formalen Gründen heikel: Privatleute haben im allgemeinen nicht die Infrastruktur, um die Signaturerzeugung von ihrem Arbeitsrechner zu trennen. Ein kompromittierter Rechner bedeutet damit automatisch, dass die Integrität des Schlüssels zumindest gefährdet ist. Es sollte also in den Schlüsseln vermerkt werden, welchen "Status" der Schlüssel hat (ähnlich den Nutzungsbeschränkungen in X.509-Zertifikaten), damit der Browserbenutzer sein Add-on entsprechend konfigurieren kann (private Inhalte ignorieren, akzeptieren, davor warnen – wie auch immer). Der Webserverbetreiber könnte allerdings das Alter der Datei garantieren. Je älter eine Datei, desto besser stehen die Chancen für einen (aktuellen) Virenscanner, falls sie kompromittiert ist, und für die angegriffene Anwendung, bereits gepatcht zu sein. Der Browserbenutzer könnte also Warnungen auf neue Inhalte beschränken. Davon gibt es zwar immer noch mehr als genug, aber so haben die User wenigstens die Wahl. Man könnte von geeigneten Anbietern auch das Alter seines gesamten (öffentlichkeitsrelevanten) Bilder-/Dateibestands bestätigen lassen, so dass eine gerade hochgeladene Datei nicht alleine deswegen als neu gilt, wenn sie nachweislich schon lange unverändert existiert.

Schlüsselverifikation

Die Signatur allein ist natürlich wertlos, wenn die Authezität des Schlüssels nicht gesichert ist. Die könnte durch ein web of trust der Webseitenbetreiber geleistet werden. Jeder signiert fünf andere Betreiber ähnlicher Bedeutung und zehn kleinere. Ideal für die "erste Ebene" sind Unternehmen, die auch per Papier mit ihren Kunden kommunizieren: Zeitungen, Zeitschriften und Rechnungen können dann mit dem Hash des jeweiligen Schlüssels versehen werden. Das sollte hinreichend sicher sein.

Jeder Webseitenbetreiber sollte in der Signaturdatei für seine eigenen Seiten oder (zur Trafficreduktion) unter einer von mehreren festlegenten Adressen (innerhalb seiner Domain, also Pfad oder Subdomain) angeben, welche Keyserver seine "revocation list" füren, also die Liste seiner Signaturen für andere Schlüssel, die er zurückgezogen hat. Das Prüf-Add-on sollte solche Signaturen nicht anerkennen, zu deren Aussteller kein solcher Keyserver gefunden wird. Wenn man ein System dieser Art einfürt, dann sollte es von Anfang an Brauchbar sein und das CRL-Desaster bei SSL/X.509 nicht wiederholen.

Entwicklungskosten und -dauer, Unsicherheit des Entwicklungserfolgs

Mit kritischem Aufwand ist nur die Entwicklung der Browser-Add-ons verbunden. Die Chancen stehen also am Besten, wenn sich dafür ein Sponsor findet.

Investitionsbedarf und variable Kosten

Langfristig ist der Aufwand, den dieses System mit sich bringt, gering, weil dann nur noch neue Inhalte entsprechend qualifiziert werden müssen. Code ändert sich selten, und bei Fotos, Grafiken, Videos, Animationen usw. können die Ersteller die Signatur gleich mitliefern, sobald sie die Datei in die Welt setzen. Dieser Aufwand ist vernachlässigbar.

Erfolgsaussichten — Übersicht

Vorteile der Innovation und ihr Gewicht, Aufwand-Nutzen-Verhältnis

Der große Vorteil dieses System ist, dass es im Kern nicht zu überlisten ist. Ein Angreifer müsste entweder eine Sicherheitslücke über ungesicherte Elemente (Text, CSS) oder in dem Prüf-Add-on selber ausnutzen oder aber den jeweiligen Schlüssel kapern.

Damit bietet das System nicht nur einen statistische Schutz wie etwa die Virenscanner, der doch sehr weit von 100% entfernt ist, sondern tatsächlich Sicherheit, die diesen Namen verdient. Auch gegen zero day exploits.

Nachteile der Innovation

Das System hat den Nachteil, dass alle mitmachen müssen, damit es lückenlos greift. Den "relevanten" Teil des Web könnte man damit wohl abdecken, und bei bestimmten Webseiten erschiene es albern, technische Garantien für die Inhalte zu erwarten. Die Kriminellen müssen ja auch irgendwovon leben, und der User wird es immer schaffen, sich in den Fuß zu schießen, wenn er das unbedingt will.

Einwände — Übersicht

Naheliegende oder bereits vorgebrachte Einwände:

Erweiterungen — Übersicht

Spambekämpfung

Sollte sich so ein System auf breiter Front durchsetzen, könnte es dazu beitragen, Webseiten von Spammern zu identifizieren, weil die (bzw. deren Autoren) eben keine Signaturen von anderen bekommen. Soweit die Theorie. Aber diejenigen, die Spammer signieren, würden schnell identifiziert und isoliert.

Änderungen am Dokument — Übersicht

Wenn in Ihrem Browser Javascript aktiviert ist, können Sie die Änderungen von Version zu Version farblich markieren lassen, um sie schneller zu finden.

nichts markieren

1.0 (24.07.2008) – Veröffentlicht in news://de.comp.security.misc (Message-ID: <6erlt3F8k8pdU1@mid.uni-berlin.de>)

1.1 (16.09.2008) – Änderungen markieren / Markierung aufheben