Nach meinem Blog ist jetzt meine Homepage dran und hat eine Rundumerneuerung bekommen. Sie ist nun auch viel schlichter geworden und soll schnell und unkompliziert einen Überblick über meine Fotografie und meinen Aktivitäten im Netz geben. Feedback ist willkommen und ich bin gespannt ob die Seite gefällt.

Screenshot www.aditu.de

Lange ist es her, dass ich etwas an meinem Blog verändert habe. Nun habe ich mich entschlossen meinen Blog von einem selbst entwickelten System auf Wordpress umzustellen. Wenn auch das Backend ordentlich und ausbaufähig war, fehlt mir die Zeit den Blog zu erweitern und mit nützlichen Funktionen anzureichern. Hier macht es einen Wordpress und die große Auswahl an Plugins sehr einfach. Ich bin mir auch noch nicht sicher, was ich von dem Backend von Wordpress halten soll. Doch die Vorteile überwiegen: gut testeter Code, komfortables Backend, leicht anzupassen, viele Plugins usw.

Natürlich bin ich mir im Design treu geblieben und habe den Grünton, der meine Webauftritte nun schon seit 10 Jahren begleitet übernommen. Es soll auch wieder schön schlicht sein und durch Einfachheit und Übersichtlichkeit bestechen. Natürlich darf auch ein stylischer Twitter Vogel (siehe ganz unten) nicht fehlen ;)

Wenn jemand eine Fehlfunktion findet oder mit etwas Probleme hat, dann bin ich über Feedback sehr dankbar. Gerade wenn man etwas neu einführt hackt es immer mal wieder an Details.

Eine große Sache bei der Entwicklung von Webapplikationen ist das Thema Sicherheit. Verfolgt man verschiedene Nachrichtendienste zum Thema Sicherheit, dann stellt man sehr schnell fest, dass zahlreiche Applikationen immer wieder kritische Sicherheitslücken aufweisen. Besonders wenn es sich um OpenSource Software handelt stellt das ein Problem dar, da ein Angreifer den Programmcode einer möglichen Opferapplikation kennt.

Ein Blick in die Literatur offenbart einige grundlegende Bedrohungen, die immer wieder anzutreffen sind:

  • SQL Injection: fremde SQL Statements werden in die Opferapplikation eingeschleußt und von dieser ausgeführt
  • Command Injection: Einschleusen (Injizieren) bösartiger Befehle zur Kompromittierung der Funktionsschicht
  • Cross-Site Scripting: Einschleusen (Injizieren) von bösartigen Programmcode
  • Directory Traversal: Technik um an nicht öffentliche, aber zugängliche Daten zu kommen
  • Header Injection: Manipulation von dynamisch generierten Header
  • Session Hijacking: Technik zur Übernahme einer fremden Session
  • Session Fixation: Technik zur Session-Manipulation um Session des Angreifers zu privilegieren
  • Cookie Poisoning: Manipulation von Cookies

Eine sehr schöne Übersicht mit möglichen Gegenmaßnahmen zeigt hier das Buch “Pro PHP Security” von Chris Snyder und Michael Southwell auf (apress Verlag, ISBN: 1-59059-508-4).

PHPIDS

PHPIDS Logo

Vor einiger Zeit bin ich auf PHPIDS gestoßen, einem Intrusion Detection System für PHP. Dabei handelt es sich um ein Skript, das mittels regulären Ausdrücken und einem generischen Ansatz (Zentrifuge-Ansatz) die übergebenen Parameter (GET, POST, COOKIE, REQUEST) überprüft und mögliche Angriffe erkennt.

Ein erkannter Angriff wird mit einem “Impact” Wert gekennzeichnet, der angibt, wie schwerwiegend der Angriff ist. Ein Impactwert von 2-5 ist unbedenklich, wobei ein Impact 15 schon sehr hoch ist und eine Reaktion erfordert. Ein sehr hoher Wert (25-50) macht eine Reaktion unbedingt erforderlich. Dabei kommt PHPIDS auch mit exotischen Zeichensätze (UTF-7), JavaScript Unicode, dezimal und hexcode usw. zurecht und erkennt alle gängigen Angriffsmuster wie SQL Injection, Cross-Site Scripting Attacken oder Directory Traversal Zugriffe.

PHPIDS steht unter LGPL und kann unter http://php-ids.org frei heruntergeladen werden.

Arbeitsweise

PHPIDS besitzt eine Liste von Filterregeln. Diese definieren reguläre Ausdrücke, welche gängige Angriffmuster erkennen. Dazu wird der Angriff mit einem Tag und einem Impactwert gekennzeichnet. Greifen mehrere Filterregeln, dann werden die einzelnen Impactwerte aufkummuliert. Um neue, unbekannte Angriffe zu erkennen, wird ein Zentrifuge-Ansatz verwendet, d.h. ist ein Parameter ein String von der Mindestlänge von 40 Zeichen, dann wird dieser String durch geschickte Zeichenersetzung auf eine repräsentative, kurze Zeichenkombination reduziert. Hierbei werden:

  1. alle Wortzeichen sowie Whitespace (berücksichtigt Unicode) entfernt
  2. mehrfach vorkommende Zeichen werden gestrippt
  3. bestimmte Zeichengruppen durch festgelegte Zeichen ersetzt (Ziel: Anzahl unterschiedliche Zeichen gering halten)
  4. unerwünschte Zeichen (z.B. Backslash aus Magic-Quotes-Funktion) entfernt

Das Ergebnis ist ein String aus 4 bis 6 Zeichen. Cross Site oder Code Injection Angriffe führen dabei erstaunlicherweise immer wieder auf ein ähnliches Muster. Taucht ein solches Muster (z.B. “((+::”) auf, so schlägt PHPIDS Alarm.

Installation

Die Installation ist denkbar einfach. In der zentralen Bootstrap Datei einer Applikation werden die PHPIDS Klassen geladen, alle Parameter als Array übergeben und das Ergebnis ausgewertet. Die Reaktion kann selbst ausgestalltet werden und kann von einfachen Logging (PHPIDS bringt hier bereits eine Hilfsklasse mit) bis hin zum Sperren der IP Adresse reichen.

Einbinden und Starten von PHPIDS:

$request = array(
'REQUEST' => $_REQUEST,
'GET' => $_GET,
'POST' => $_POST,
'COOKIE' => $_COOKIE
);

require_once 'IDS/Init.php';
$init = IDS_Init::init('/IDS/Config/Config.ini.php');
$ids = new IDS_Monitor($request, $init);
$result = $ids->run();

// Angriff erkannt? Loggen und Abbruch
if (!$result->isEmpty()) {
	require_once 'IDS/Log/File.php';
	require_once 'IDS/Log/Composite.php';

	$compositeLog = new IDS_Log_Composite();
	$compositeLog->addLogger(IDS_Log_File::getInstance($init));
	$compositeLog->execute($result);

	die("ids error ".$result->getImpact());
}

Hat die eigene Applikation keine Bootstrap Datei, so kann mit Hilfe der PHP Option “auto_prepend_file” eine Datei angegeben werden, die immer vor der eigentlichen PHP Datei geparst wird. Diese kann unter Apache auch in der .htaccess gesetzt werden:

php_value auto_prepend_file phpids.php

phpids.php muss dann den oben stehenden Programmcode enthalten und PHPIDS ausführen.

Hat man beispielsweise einen Blog, wo tatsächlich HTML eingegeben und übertragen wird (z.B. in der Administrationsoberfläche beim Erstellen neuer Blogeinträge), so muss das PHPIDS hier bescheid wissen, da es sonst Alarm schlägt. Hierzu können in der Konfiguration Parameter festgelegt werden, die HTML enthalten dürfen. Ebenso schlägt PHPIDS bei der Verwendung von Google Analytics Alarm. Dieses ist zwar schon vorkonfiguriert, ich musste es aber immer nochmal für REQUEST und COOKIE konfigurieren:

exceptions[]    = REQUEST.__utmz
exceptions[]    = REQUEST.__utmc
exceptions[]    = COOKIE.__utmz
exceptions[]    = COOKIE.__utmc

Performance

Natürlich hat PHPIDS auch eine Auswirkung auf die Performance der Applikation. Hier haben die Entwickler verschiedene Szenarien getestet und es hat sich gezeigt, dass PHPIDS lediglich 0,5 % der gesamten Rechenzeit benötigt, wenn z.B. von einer CakePHP Applikation ausgegangen wird. Selbst wenn man davon ausgeht, dass die Zahlen geschönt sind, ergibt sich aus meiner Sicht hier trotzdem kein Problem. Nimmt man beispielsweise einen privaten Weblog, der auf Wordpress basiert, dann dürften sich hier die Besucherzahlen in Grenzen halten und das IDS nicht ins Gewicht fallen.

PHPIDS berücksichtigt das Performanceproblem bereits und verzichtet darauf z.B. den Zentrifuge-Ansatz auf kurze Strings anzuwenden. Zudem beschränkt es sich auf Strings: Integer Werte werden beispielsweise nicht geprüft. Wer trotzdem noch optimieren will, dem bietet PHPIDS ein Caching Mechanismus, so dass die Liste mit den Filterregeln nicht jedes mal neu geparst werden muss. Zudem liegen die Filterlisten nicht nur als XML Datei vor, sondern auch im JSON Format, welches bedeutend schneller geparst wird.

Literatur und Links

  • c’t magazin 2009 Heft 10: Alarmanlage – Angriffe auf Webanwendungen mit PHPIDS erkennen, Christian Matthies, 27.04.2009
  • PHPIDS Webseite: http://php-ids.org/

An der Stelle mal nach einiger Zeit wieder ein Beitrag, der etwas aus der Reihe tanzt und nichts mit Webentwicklung oder Fotografie zu tun hat. Vielleicht ist er aber doch für den ein oder anderen interessant.

Ich habe ja ungefähr vor einem Jahr bereits über die Abenteuerspielbuchserie Einsamer Wolf geschrieben. Für alle Fans der Spielbuchserien aus den 80er gibt es nun eine Neuauflage. Der Mantikore-Verlag hat es sich auf die Fahne geschrieben alle Bücher der Serie nach und nach zu veröffentlichen. Der erste Band kam im April 2009 und der zweite Band ist seit diesem Monat zu haben.

Ich kann die Bücher nur empfehlen, den es handelt sich hier um ein ganz besonderes Lesevergnügen. Besonders interessant sind die Bücher für alle, die auch die Originale aus den 80er gelesen haben: irgendwie ist es auch die persönliche Nostalgie, es ist wie eine Reise in die Vergangenheit. Beide Bücher enthalten neue Passagen, so wird beim ersten Band die Zerstörung der Abtei genauer beschrieben. Der zweite Band soll ein zusätzlichen Handlungsstrang enthalten. Für mich ist klar, dass ich mir alle Bücher der Serie holen werde. Besonders freue ich mich auf Band 13-32, die nie in deutscher Sprache veröffentlicht wurden.

Einsamer Wolf Band 1 Einsamer Wolf Band 2

Auch an dieser Stelle ein Hinweis: wer Poster von meinen Fotos haben will, der kann mir gerne direkt mailen: tobias.zeising@aditu.de. Einfach die gewünschten Fotos mit Größe angeben und ich gebe bescheid was es kostet.

a day without rain the sweet balance of vinyl life is gone

Alle meine Fotos findet ihr auf meiner Homepage oder in meiner deviantArt Galerie.

Manuela hat letzte Woche in ihrem Design-Blog über die MiniCards von Moo geschrieben. Da konnte ich nicht widerstehen und musste mir auch sofort ein Päckchen holen. Ich find die kleinen Karten klasse, da man wirklich 100 verschiedene Motive wählen kann und somit 100 individuelle Mini-Visitenkarten hat. Als Motiv habe ich natürlich meine Fotos gewählt und bin durchweg mit der Qualität und Verarbeitung zufrieden. Über ein bequemes Web-Frontend kann man die Bilder hochladen, Fotos von flickr importieren und den endgültigen Ausschnitt mittels drag-n-drop wählen. Alles geht also ziemlich einfach und schnell. Einziger Nachteil: wenn man Bilder direkt bei Moo hochlädt, kann man nur zwischen wenigen, vorgefertigten Avataren wählen. Daher hab ich meine Fotos erst bei flickr hochgeladen und bei Moo den flickr import gewählt, dann erscheint auch (optional) der eigene Avatar auf der Rückseite.

Lange Rede, kurzer Sinn: ich kann die Kärtchen nur empfehlen.

Moo MiniCard

Moo MiniCards

Moo MiniCards

Um in die Glückwünsche aller anderen Blogs einzustimmen, wünsche ich allen meinen Lesern und Besuchern einen guten Rutsch und ein erfolgreiches neues Jahr 2009 !!!

Ich werde auch im neuen Jahr wieder über interessantes aus dem Web berichten und hoffe Ihr seit wieder dabei. Gerne könnt ihr auch eure Themenwünsche hier kommentieren. Ich freue mich über jedes Feedback.

Feuerwerk