Bundesamt für Sicherheit in der Informationstechnik

M 2.487 Entwicklung und Erweiterung von Anwendungen

Verantwortlich für Initiierung: Fachverantwortliche, Verantwortliche der einzelnen Anwendungen

Verantwortlich für Umsetzung: Entwickler, Beschaffer, Leiter Entwicklung, Tester

Für die effiziente Entwicklung von Anwendungen (auch Webanwendungen) sollten Regeln festgelegt und eingehalten werden. Das Ziel dabei ist, sowohl Konzeptions- als auch Programmierfehler bereits in der frühen Phase des Entwicklungs- und Erweiterungsprozesses zu vermeiden oder zumindest frühzeitig zu erkennen.

Die folgenden Punkte sollten daher bei der Entwicklung und Erweiterung von Anwendungen beachtet werden.

Entwicklung nach einem Vorgehensmodell

Es sollte nach einem geeigneten Vorgehensmodell ( bzw. V-Modell XT, Wasserfallmodell, Spiralmodell) entwickelt werden. Dabei hat eine Anwendung vor der Inbetriebnahme alle Entwicklungsphasen des Vorgehensmodells zu durchlaufen.

Das verwendete Vorgehensmodell sollte mindestens die folgenden oder vergleichbare Phasen abdecken.

Anforderungsanalyse

Unternehmenssicherheitsrichtlinien und unternehmensspezifische Vorgaben sollten bei der Erhebung der Anforderungen an die Anwendung berücksichtigt und den Entwicklungsteams zur Verfügung gestellt werden (z. B. Erfüllung von Industrie-Standards wie PCI DSS oder Vorgaben zur Barrierefreiheit). Hierzu zählen z. B. auch Vorgaben und Anforderungen an die Verwendung kryptographischer Algorithmen und sicherer Programmierrichtlinien (siehe auch Abschnitt Umsetzung von Programmierrichtlinien).

In dieser Phase sollten alle von der Anwendung zu verarbeitenden Daten identifiziert und nach dem Schutzbedarf klassifiziert werden. Es müssen adäquate Schutzmechanismen der Anwendung festgelegt werden, welche die Daten gemäß ihrem Schutzbedarf schützen.

Konzeption und Design

Bei der Konzeption sollten die Architektur und der Aufbau der Anwendung festgelegt und dokumentiert werden. Hierbei sollte die Auswahl von Entwicklungstechniken (z. B. Programmiersprachen, Frameworks) miteinbezogen werden. Auch das Wissen und der Erfahrungsschatz der Entwickler sollten aus Kosten- und Sicherheitsgründen berücksichtigt werden.

Die Architektur sollte vorsehen, dass Komponenten (z. B. zur Autorisierung, Authentisierung) vorzugsweise in Modulen umgesetzt werden, die wiederverwendet werden können. Durch die zentrale Verfügbarkeit und Nutzung von Modulen können Redundanzen vermieden und die Pflege erleichtert werden.

Bei Client-/Server-Architekturen (z. B. Webanwendung) sollten die zentralen Sicherheitsmechanismen nach Möglichkeit mindestens serverseitig umgesetzt werden.

Es sollte darauf geachtet werden, dass Sicherheitsanforderungen vollständig durch Sicherheitsmechanismen erfüllt und zur Erstellung von Testfällen festgehalten werden.

Getroffene Entscheidungen sollten dokumentiert werden, sodass später eine effiziente Weiterentwicklung der Anwendung durch ausreichende Dokumentation gewährleistet ist.

Entwicklung

Bei der Umsetzung der Anwendung sollten Programmierrichtlinien (siehe auch Abschnitt Umsetzung von Programmierrichtlinien) für die sichere Entwicklung der Komponenten eingehalten werden.

Es sollte darauf geachtet werden, dass die Dokumentation während der Entwicklungstätigkeit fortgeführt wird (z. B. durch Kommentare im Quelltext und Werkzeuge zur Generierung der Dokumentation). Somit ist der Quelltext zu einem späteren Zeitpunkt auch für Dritte nachvollziehbar.

Zum Schutz vor dem Verlust bereits entwickelter und verworfener Lösungen sowie zu Dokumentationszwecken sollte die Historie der Änderungen festgehalten werden (z. B. durch ein Revisionssystem).

Tests

Testfälle sollten nicht nur die Geschäftsfunktionen, sondern ebenfalls die Sicherheitsfunktionalität berücksichtigen. Dazu zählen z. B. Sicherheitskomponenten wie Autorisierungs-, Authentisierungs- und Filterkomponenten. Nach Möglichkeit sollten Penetrationstests und (für hohen Schutzbedarf) auch Source-Code-Analysen durchgeführt werden, um die umgesetzten Sicherheitsmechanismen zu kontrollieren (M 5.150 Durchführung von Penetrationstests ).

Vor der Inbetriebnahme einer Anwendung sollte nicht nur die Funktionstüchtigkeit, sondern auch ein möglicher Missbrauch der angebotenen Funktionalität geprüft werden. Dies kann durch Penetrationstests erreicht werden. Damit ein Vier-Augen-Prinzip beim Testen umgesetzt wird, sollten die Tests nicht von den Personen durchgeführt werden, die zuvor an der Konzeption oder der Entwicklung der Anwendung beteiligt waren.

Bei den Tests ist darauf zu achten, dass diese nur mit Testdaten und nicht mit Live-Daten bzw. Kundendaten durchgeführt werden.

Bei Webanwendungen sollten die Webseiten auf Konformität zu dem verwendeten Standard (z. B. HTML -Standard) getestet werden. Dadurch können unvorgesehene Seiteneffekte aufgrund einer Fehlinterpretation seitens der Browser vermieden werden. Eine Überprüfung mit verschiedenen Browsern kann hier sehr hilfreich sein.

Bei der Planung und Durchführung der Tests sollte die Maßnahme M 2.62 Software-Abnahme- und Freigabe-Verfahren berücksichtigt werden.

Integration und Softwareverteilung (Deployment)

Vor der produktiven Inbetriebnahme sind die Anwendungen und gegebenenfalls notwendige Hintergrundsysteme sicher zu konfigurieren. Hierbei sollte die Anbindung möglicher Hintergrundsysteme (z. B. Identitätsspeicher, Datenbanken) an die Anwendung berücksichtigt werden. Vor der Inbetriebnahme der Anwendung ist ebenfalls sicherzustellen, dass der Transportkanal geschützt ist.

Sensible Daten der Anwendung sind häufig in Hintergrundsystemen hinterlegt. Daher sollte das Sicherheitsniveau der Anwendung und möglicher Hintergrundsysteme einheitlich sein. Der Zugriff auf die Hintergrundsysteme sollte Benutzern lediglich über die definierten Schnittstellen der Anwendung möglich sein.

Darüber hinaus sollte sichergestellt werden, dass die Daten bei der Verteilung der Anwendung nicht durch Dritte manipuliert werden können.

Wartung

Es muss ein Prozess zur Pflege der Anwendung definiert werden, der auch die regelmäßige Prüfung der Sicherheit der Anwendung auf Schwachstellen bzw. verfügbare Patches berücksichtigt.

Wird die Anwendung angepasst oder erweitert, muss darauf geachtet werden, dass die Wirksamkeit der Sicherheitsmechanismen nicht beeinträchtigt wird. Zusätzlich sollte durch Tests in einer gesonderten Testumgebung die Wirksamkeit der Sicherheitsmechanismen erneut überprüft werden.

Umsetzung von Programmierrichtlinien

Eine Programmierrichtlinie hilft, einen einheitlichen Programmierstil zu definieren und ein einheitliches Sicherheitsniveau zu etablieren (z. B. durch die Verwendung von Sicherheitsbibliotheken). Die Qualität und Verständlichkeit des Quelltexts kann hierdurch verbessert und nachvollziehbarer werden. In der Folge können Fehler und Schwachstellen einfacher gefunden und eine spätere Erweiterung der Anwendung kosteneffektiv umgesetzt werden.

Programmierrichtlinien sollten nicht nur bei der Entwicklung im eigenen Haus, sondern auch beim Outsourcing der Entwicklungstätigkeit umgesetzt werden.

Zukunftssichere Entwicklung von Sicherheitsmechanismen

Wenn Sicherheitsmechanismen entworfen und entwickelt werden, sollten hierbei auch zukünftige Entwicklungen von Angriffstechniken als auch Standards (z. B. neuer HTML-Standard) berücksichtigt werden. So sollte beispielsweise eine Filterkomponente, die als schadhaft klassifizierte <script>-Tags filtert, ebenso unbekannte Tags filtern. Unbekannte Tags können gegebenenfalls zukünftig verwendet werden (z. B. mit der Einführung eines neuen HTML-Standards), um Sicherheitsmechanismen der Webanwendung zu umgehen.

Produktspezifische Sicherheitsfunktionalität

Falls eine Webanwendung ausschließlich mit einem spezifischen Browser ( u. U. nur eines Herstellers) genutzt wird, so sollte der Einsatz von produktspezifischen Sicherheitsfunktionen des Browsers berücksichtigt werden.

Outsourcing der Anwendungsentwicklung

Im Fall von Outsourcing muss sichergestellt werden, dass das beauftragte Dritt-Unternehmen die nötigen Sicherheitsanforderungen bei der Umsetzung der Anwendung erfüllt. Dies kann beispielsweise durch die Vorgabe eines Vorgehensmodells oder durch Programmierrichtlinien erreicht werden.

Wird für die Entwicklung einer Anwendung mit hohem Schutzbedarf ein Dienstleister beauftragt, sollte der Quelltext (z. B. das Projektarchiv) unter der administrativen Kontrolle des Auftraggebers stehen. Dabei sollte der Auftraggeber jederzeit auf den Quelltext der Anwendung zugreifen und Änderungen am Quelltext nachvollziehen können.

Festlegung der Entwicklungsumgebung

Die Produktiv-, Test- und Entwicklungsumgebungen sind auf getrennten Systemen zu betreiben. In den Umgebungen sollten unterschiedliche Zugangsdaten gewählt werden. Testkonten sollten hierbei, soweit möglich, keine privilegierten Rechte erhalten. Grundsätzlich dürfen erfolgreiche Angriffe auf die Entwicklungs- oder Testumgebung keine Auswirkungen auf die Produktivumgebung haben.

Prüffragen:

  • Wird die Anwendung nach einem geeigneten Vorgehensmodell entwickelt?

  • Werden alle Phasen bei der Entwicklung von Anwendungen durch das Vorgehensmodell abgedeckt und vor der Inbetriebnahme vollständig durchlaufen?

  • Werden Programmierrichtlinien für die Entwicklung von Anwendungen vorgegeben?

  • Werden bei dem Entwurf und der Entwicklung von Sicherheitsmechanismen bei Anwendungen auch zukünftige Standards und Angriffstechniken berücksichtigt?

  • Werden bei der Anwendungsentwicklung die Entwicklungs-, Test- und Produktivsysteme voneinander getrennt?

  • Werden für die Anwendung Penetrationstests durchgeführt, bei denen die Anwendungslogik geprüft wird?

  • Werden die Penetrationstests bei Anwendungen nach einem Vier-Augen-Prinzip durchgeführt?

Stand: 13. EL Stand 2013

Hinweis zur Verwendung von Cookies

Um unsere Webseite für Sie optimal zu gestalten und fortlaufend verbessern zu können, verwenden wir Cookies. Durch die weitere Nutzung der Webseite stimmen Sie der Verwendung von Cookies zu. Weitere Informationen hierzu erhalten Sie in unserer Datenschutzerklärung.

OK