Sicherheitsmaßnahmen nach links schieben
Betrachtet man die Kette von links nach rechts in folgender Reihenfolge: Design, Entwicklung (DEV), Integrations-Test (SIT), Installation, Abnahmetest (UAT) und Produktion (PRD), dann findet man in typischen Umgebungen ganz rechts die höchsten Sicherheitsanforderungen. Hier sind Webserver gehärtet, Datenbanken lassen keine Entwickler zu, SYS und SYSADMIN sind gelockt, Funktionen und Netzwerke sind getrennt. Die Abnahmeumgebung arbeitet z.T. mit Produktionsdaten während die Testumgebung nur mit synthetischen Daten arbeitet. Entwickler können ganz links selbständig Benutzer anlegen bzw. Rechte vergeben und haben häufig Root-Zugriff. Diese Rechte hat der Entwickler (und seine Software) in Produktion natürlich nicht mehr.
DevOps verlangt nun das die Entwicklungsumgebung und Produktionsumgebungen näher zusammen rücken bzw. Code automatisiert „durchgeschoben“ werden kann. Daher müssen Sicherheitsanforderungen möglichst früh getestet werden. Testscripte müssen für jede Sicherheitsanwendung bzw. -funktion erstellt, abgenommen und automatisiert durchgeführt werden. Außerdem sollten Datenbanken möglichst früh bereits produktionsnahe Sicherheitsstandards aufzeigen. Sie sollten bereits eine ordentliche Rechtetrennung sowie Datenverschlüsselung erzwingen, sodass Entwickler direkt auf die Betriebsumgebung hinarbeiten können.
Trenne Sicherheitsfunktionen und Sicherheitskonfiguration vom restlichen Code auf jeder Plattform
Heutige Entwicklungsumgebungen oder Frameworks erlauben eine Trennung von systemabhängigen Properties und umgebungsabhängige Properties. Das ist allerdings nicht hinreichend! Schwieriger wird es eine weitere Trennung für sicherheitsrelevante Funktionen und Sicherheitskonfigurationen einzuführen. Einerseits muss die Integrität von einzelnen Benutzern und Ihren Funktionen sichergestellt werden. Andererseits ist ebenso die Vertraulichkeit der Informationen die einzelne Benutzer verarbeiten sicher zu stellen.
Je nach Software-Anwendung müssen sicherheitsrelevanten Bereiche zunächst identifiziert werden. Bei zum Beispiel einem Webmail-Service muss das Session-Management im Authentifikations-Schema dafür sorgen dass tatäschlich nur die zugelassenen Funktionen (wie z.B. Benutzer anlegen oder authentifizieren) aufgerufen werden können. Zur Wahrung der Vertraulichkeit muss hier beispielsweise sichergestellt werden dass ein Dispatcher im Application-Server für eine strikte Isolation von laufenden Anwendungen sorgt.
Wenn diese Trennung bereits auf der Testumgebung eingeführt wird, dann lassen sich unterschiedliche Secrets für verschiedene Plattformen leichter einrichten und insbesondere durch verschiedene Administratoren verwalten (separation of duties, need-to-know principle, least privilege).