© saicle/Shutterstock.com
Ein SDL für PHP-Anwendungen

Sicherheit in sieben Schritten


Im PHP Magazin 1.2012 sahen Sie am Beispiel eines Gästebuchs, wie eine Anwendung so entwickelt wird, dass erst gar keine Schwachstellen entstehen. Aus diesem praktischen Beispiel leiten wir nun einige formale Regeln ab.

Von Microsofts Security Development Lifecycle [1] haben die meisten von Ihnen sicher zumindest schon einmal gehört. Wer sich näher damit befassen möchte, wird zunächst von seinem Umfang abgeschreckt: sieben Phasen, von denen fünf jeweils drei Schritte umfassen, und das alles „nur“, damit ein Programm sicherer wird? Muss das denn sein? Nun, erst einmal enthält der SDL viele Schritte, die im Rahmen einer „unsicheren“ Entwicklung sowieso gemacht werden. Es kommen lediglich jeweils ein paar zusätzliche Probleme hinzu, die berücksichtigt werden müssen. Und dann ist der SDL sehr erfolgreich: Windows Vista war das erste vollständig nach dem SDL entwickelte Betriebssystem von Microsoft, und im ersten Jahr nach seiner Veröffentlichung wurden 45 Prozent weniger Schwachstellen gefunden als in Windows XPs erstem „Lebensjahr“ [2], [3]. Der Aufwand lohnt sich also.

Das Beispielskript

Die im PHP Magazin 1.2012 für diese Ausgabe angekündigte sichere Beispielimplementierung des Gästebuchs fehlt. Sie finden sie zusammen mit der unsicheren Variante auf der Heft-CD der kommenden Ausgabe.

Microsofts SDL im Schnelldurchlauf

Werfen wir einen kleinen Blick auf den SDL. Er wurde zwar mit Blick auf Desktopanwendungen und Betriebssysteme entworfen, aber es spricht ja nichts dagegen, ihn an die eigenen Bedürfnisse und Webanwendungen anzupassen. Grundlage des SDL sind vier Best Practices:

  • Secure by Design (Sicherheit als Entwurfsziel): Schon beim Entwurf des Programms wird seine Sicherheit berücksichtigt, z. B. indem mögliche Angriffe ermittelt und möglichst verhindert, zumindest aber erschwert werden.

  • Secure by Default (Sichere Default-Konfiguration): Egal, wie sicher ein Programm auch entworfen und implementiert wird, es wird immer Schwachstellen enthalten. Daher müssen die Standardeinstellungen so gewählt werden, dass ein Angriff möglichst erschwert wird und seine Folgen gemindert werden.

  • Secure by Deployment (Sichere Default-Installation): Das fertige Programm wird so ausgeliefert, dass es möglichst sicher installiert und konfiguriert wird.

  • Communications (Reden Sie über Schwachstellen!): Es bleibt nicht aus, dass im fertigen Programm Schwachstellen entdeckt werden. Wenn das passiert, müssen die Benutzer darüber informiert und Work­arounds und Patches entwickelt und verteilt werden.

Der SDL ist keine Garantie für ein schwachstellenfreies Programm, wie Sie schon am oft verwendeten Wort „möglichst“ und am Beispiel von Windows Vista sehen. Das soll er auch gar nicht sein, er soll nur dafür sorgen, dass das Programm bei der Auslieferung keine bekannten und damit vermeidbaren Schwachstellen oder -punkte enthält. Im Fall von Webanwendungen wäre zum Beispiel XSS so eine Schwachstelle: Jeder sollte sie kennen. Sie lässt sich einfach verhindern. Trotzdem tritt sie immer wieder auf. Im Folgenden wollen wir sehen, welche der im Kasten „Microsofts DSL“ genannten Punkte sich für Webanwendungen verwenden lassen. Los geht es mit der Voraussetzung sicherer Entwicklung: Sie müssen wissen, welche Angriffe es überhaupt gibt. Denn nur Angriffe, die Sie kennen, können Sie abwehren.

Schritt 1: Angriffe und Schwachstellen kennen

Microsoft verdonnert sein technisches Personal zu Sicherheitstrainings. Sie können sich selbst aussuchen, wie Sie sich informieren möchten. Wichtig ist, dass Sie ein Grundwissen über mögliche Schwachstellen und Angriffe erwerben. Dieses Grundwissen besitzen Sie zum größten Teil bereits, wenn Sie die bisherigen Folgen des Security-Workshops verfolgt haben. Auch online finden Sie die entsprechenden Informationen, zum Beispiel in vielen Folgen von „About Security“. Eine Übersicht der relevanten Artikel finden Sie auf der Heft-CD des PHP Magazins 1.2012. Aber damit ist es nicht getan. Nachdem Sie sich einmal ein Grundwissen erworben haben, müssen Sie sich danach auf dem Laufenden halten. Denn es werden immer wieder neue Angriffe oder Schwachstellen entdeckt, denen Ihre Anwendungen schutzlos ausgeliefert sind, solange Sie keine Schutzmaßnahmen implementieren. Ein gutes Beispiel ist in diesem Zusammenhang das Clickjacking [8]: Das wurde 2008 entdeckt, und keine Webanwendung enthielt Schutzmaßnahmen gegen den neuen Angriff (wenn man mal davon absieht, dass Framebuster, die in manchen Anwendungen aus anderen Gründen vorhanden waren, anfangs Schutz boten). Erst nach Bekanntwerden des Angriffs konnten Gegenmaßnahmen entwickelt und implementiert werden.

Microsofts SDL

Microsoft hat den SDL seit seiner ersten Veröffentlichung ständig weiterentwickelt. Aktuell ist ein „vereinfachter“ SDL [4], der aus sieben Phasen besteht:

  • Training: Alle Mitarbeiter mit technischen Aufgaben wie Entwickler, Tester und Programmmanager müssen bei Microsoft mindestens einmal im Jahr einen Kurs besuchen, in dem sie über sichere Entwicklung informiert werden.

  • Requirements: Alle Sicherheits- und Datenschutzanforderungen an das Programm werden schon vor seinem Entwurf spezifiziert, sodass sie schon beim Entwurf berücksichtigt werden können.

  • Design: In der Entwurfsphase wird zusätzlich zum normalen Entwurf die Sicherheitsarchitektur des Programms definiert (und dokumentiert).

  • Implementation: Während der Implementierung wird darauf geachtet, dass die entworfene Sicherheitsarchitektur korrekt umgesetzt wird.

  • Verification: Nach der Implementierung muss sie überprüft werden: Werden alle aufgestellten Sicherheits- und Datenschutzanforder...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang