Stoppt die Vorratsdatenspeicherung! Jetzt klicken && handeln!Willst du auch bei der Aktion teilnehmen? Hier findest du alle relevanten Infos und Materialien:
english version
»webknocking«
der etwas andere weg
15.02.2008

Webknocking ist eine Wortschöpfung, die, wie könnte es anders sein, von portknocking abgeleitet ist. (Den Download gibt es weiter unten.)

Hintergrund:
2003 laß ich zum ersten mal etwas über portknocking(10.05.2006). Nachdem ich mich etwas eingehender damit auseinandergesetzt hatte waren mir ein paar Dinge aufgefallen, die mich störten:
  1. Durch sniffen kann die Klopfsequence ausgespäht werden
  2. Zum Absenden der Sequence wird ein spezieller Client benötigt
  3. Es muss ein weiterer Dienst auf dem betreffenden Rechner laufen, der eine permanente Systemlast erzeugt
  4. ... und dem man vertrauen muss.
Ich habe mich zum damaligen Zeitpunkt daher entschlossen, das ganze nicht einzusetzen.
Da mich das Konzept aber nie so richtig losgelassen hat, kam mir ca. ein Jahr später eine Idee, wie sich zunächst die letzten drei Probleme aus der Welt schaffen lassen.

Grundidee:
Der Grundgedanke bei webknocking besteht darin, statt Ports Webseiten zu verwenden. Dabei wird davon ausgegangen, dass auf dem betreffenden Server ein Webserver (Apache) läuft.
Mit der Webbrowser der Wahl wird eine zuvor definierte Sequenz von Webseiten (Webknockingsequenz) vom betreffenden Server abgerufen. Der Webserver ist so konfiguriert, dass jeder Zugriff protokolliert wird (Standardeinstellung bei Apache). Die letzte Seite jeder Sequenz ist fix. Ihr Aufruf startet eine Analyse des Webserverlogfiles. Wird die Knockingsequenz gefunden, so wird ein Skript ausgeführt, dass beispielsweise den Port 22 für den Knocker öffnet.

Problem Sniffen:
Im einleitenden Teil habe ich bereits das Problem des Ausspähens der Sequence durch Sniffen des Netzverkehrs angesprochen. Davor schützt natürlich auch webknocking nicht. Diesem Angriff kann man mit einer dynamischen Knockingsequenz entgegenwirken.
Dabei gibt es zwei mögliche Ansätze:
  1. Die gesamte Sequenz ist dynamisch und wird in regelmäßigen Abständen (sinnvollerweise nach jedem Aufruf) komplett geändert (im Falle von webknocking bestenfalls auch die letzte, auslösende Seite).
  2. Die Sequenz besteht aus einem statischen und einem dynamischen Anteil.
Eine völlig dynamische Sequenz biete dabei den optimalen Schutz, da ein Sniffer keinerlei Schema erkennen kann. Dieser Ansatz hat aber den großen Nachteil, dass der Nutzer immer genau wissen muss, welche Sequenz gerade aktiv ist.
Eine teilweise statische Sequenz lässt sich leichter einprägen. Allerdings kann die Sequenz durch den statischen Anteil bei einem Angriff erkannt werden, sodass der Angreifer zumindest von ihrer Existenz erfährt.
Der dynamische Anteil kann beispielsweise durch ein Frage-Anwort-Spiel realisiert werden. Dabei sendet der Webserver nach Erkennen der Sequenz eine Frage, auf die er mit dem nächsten Aufruf die passende Antwort erwartet. Frage und Antwort können algorithmisch (z. B.: "Was ergibt 6 mal 7?") oder durch einen individuellen Sinnzusammenhang (z. B.: "Wo wurdest du geboren?") miteinander verbunden sein.


Implementierung:
Aktuell existiert eine Implementierung auf Basis von php, die den zweiten Ansatz umsetzt. Nach Absenden der Knockingsequenz innerhalb einer festgelegten Zeit wird das Skript webknocking.php aufgerufen. Das Skript durchsucht das Apache-Logfile nach dem Auftreten der Sequenz innerhalb der entsprechenden Zeitperiode. Wurde die Sequenz erkannt, wird je nach Configuration entweder sofort ein Shellscript (wk-s_open.sh) zum Öffnen des Ports 22 für den Knocker ausgeführt, oder eine Frage ausgeliefert. Die Frage wird ggf. durch den Aufruf "webknocking.php?value=<antwort>" an den Server übermittelt. Auch die Zeit vom Ausliefern der Frage bis zum Erwarten der Antwort durch den Server kann festgelegt werden. Falls gewünscht führt das webknocking-Skript beim erneuten Aufruf ein anderes Shellskript (wk-s_close.sh), z. B.: zum Schließen des Ports 22, aus.
Alle Einstellungen werden durch Editieren der Datei wk-config.php vorgenommen.

Installation:
Webknocking ist schnell installiert. Nach dem Entpacken des Archievs werden alle Dateien in ein gemeinsames Verzeichniss in einem Webpfad copiert, das Skript install.sh ausgeführt und die Configuration vorgenommen. Alle in wk-config.php zu setzenden Parameter sind durch Kommentare entsprechend erläutert. Ggf. sind noch die beiden Shellskripte (wk-s_close.sh und wk-s_open.sh) anzupassen.

Pläne
Da ich gerade an meiner Diplomarbeit schreibe bleibt momentan wenig Zeit für die Weiterentwicklung. Ab und zu rappelt es mich aber ;) ...
Folgendes ist geplant: Für Anregungen und Vorschläge bin ich dankbar!

[update] Ich habe die Entwicklung an dieser Implementierung mangels Zeit und Interesse abgebrochen.


Lizenz: Webknocking steht unter GPL.

Download: webknocking_v1.0.2.tar.gz

Voraussetzungen:
History:

Vielen Dank an Christine Schmidt für die Korrektur der englischen Übersetzung dieser Webseite.
Die erste Version dieser Webseite ist hier zu finden.