2) Verwenden sie den OWASP ASVS als Inspiration für ihre ersten Sicherheitsanforderungen
„Bitte, wie? Den Application Security Verification Standard? Aber das ist doch eine Richtlinie für Sicherheitstests, nicht für das Anforderungsmanagement!“
Gut erkannt, da haben sie vollkommen recht. Der ASVS ist jedoch trotzdem eines der besten Tools, um rasch in das Security Requirements Engineering einzusteigen. Beim ASVS handelt es sich um ein sehr umfassendes und auch gut strukturiertes Dokument, eine hervorragende Informationsquelle.
Der hier beschriebene Tipp funktioniert, weil wir uns eines kleinen Tricks bedienen, um den Prozess an unsere Bedürfnisse anzupassen. In einer perfekten Welt sollten Sicherheitsanforderungen die Quelle für Sicherheitstestfälle sein. Aber denken sie daran, dass wir gerade erst am Anfang stehen und nach vernünftigen Abkürzungen suchen. Der ASVS ist eine Sammlung gut recherchierter und etablierter Sicherheitstestfälle. Warum drehen wir den Prozess nicht einfach um und versuchen, aus den Testfällen nützliche Sicherheitsanforderungen abzuleiten?
Schauen wir uns ein konkretes Beispiel an. Der ASVS liegt derzeit in Version 4.0.1 vor. Die Sicherheitsanforderung mit der ID 3.1.1 lautet wie folgt:
Verifiziere, dass die Anwendung niemals Sitzungstoken in URL-Parametern oder Fehlermeldungen anzeigt.
Zuerst stellen wir uns die Frage, ob dieser Testfall überhaupt anwendbar ist. Entwickeln wir eine Anwendung, die URLs verwendet? Und verwendet diese Anwendung Sitzungstoken? Wenn wir annehmen, es handelt sich um eine Webanwendung mit unterschiedlichen Benutzern, dann ist die Wahrscheinlichkeit hoch, dass dieser Testfall relevant ist. Formulieren wir ihn also so um, dass er als Sicherheitsanforderung verwendet werden kann:
Die Anwendung darf keine Sitzungstoken an Stellen einbetten, bei denen das Risiko besteht, dass sie an unberechtigte Dritte preisgegeben werden (z. B. in URL-Parametern oder Fehlermeldungen).
Ich habe mir die Freiheit genommen, die Anforderung etwas allgemeiner zu formulieren, um so ein breiteres Spektrum von Fällen zu erfassen. Im einfachsten Fall kann man aber auch einfach „Verifiziere, …“ durch „Stelle sicher, …“ ersetzen. Denken sie dabei daran, dass Testfälle in der Regel etwas spezifischer als Anforderungen sind und man daher eine etwas breitere Definition suchen sollte.
Die Ursache hierfür wird klar, wenn wir uns nochmals vor Augen führen, dass wir den normalen Prozess auf den Kopf stellen. Im Normalfall würden wir mit breiter ausgelegten Sicherheitsanforderungen starten und mehrere spezifischere Testfälle davon ableiten.
Bitte vergessen sie nicht, dass wir hier von einer Abkürzung sprechen, um das Security Requirements Engineering initial in Gang zu bringen. Es werden daher viele wichtige Aspekte fehlen, die später ergänzt werden müssen, um einen angemessenen Reifegrad zu erreichen. Sie werden sehr wahrscheinlich keine anwendungsspezifischen sowie auf Richtlinien und Compliance basierende Sicherheitsanforderungen definieren. Des Weiteren werden sie kein domänenspezifisches Wissen in die Sicherheitsanforderungen einfließen lassen. Aber zumindest haben sie einmal die Zehen ins Wasser getaucht und den Ball ins Rollen gebracht.
3) Stellen sie die Verifikation aller Sicherheitsanforderungen sicher
Wie bereits erwähnt, müssen Sicherheitsanforderungen in allen Entwicklungsphasen berücksichtigt werden. Zu Beginn der Integration mag dies jedoch überwältigend erscheinen – vor allem, wenn Sie in ihrer Organisation auf Widerstand stoßen. Anstatt die Integration bei allen anderen Sicherheitsaktivitäten von Anfang an zu erzwingen, empfehle ich, mit einer Methode zur Verifikation zu starten. Sobald das Entwicklungsteam sieht, wie es dazu beitragen kann, ein solches Quality Gate zu passieren, ist es normalerweise offener für die notwendigen Veränderungen.
Ich habe dieses Phänomen viel zu oft gesehen. Klassische Anforderungen werden als strenge Vorgaben verstanden, die befolgt werden müssen. Aber nenne sie „Sicherheitsanforderungen“ und jeder beginnt sie als optional zu betrachten. Sobald dieses Verhalten Wurzeln schlägt, wird der gesamte Aufwand für die Definition guter Sicherheitsanforderungen mehr oder weniger verpuffen. Lassen sie dies nicht zu!
Stellen Sie sicher, dass mindestens ein Quality Gate etabliert wird, das die Überprüfung der Implementierung ihrer Sicherheitsanforderungen umfasst. Eine wichtige Eigenschaft einer Sicherheitsanforderung ist ihre Testbarkeit. Nutzen Sie dies zu Ihrem Vorteil! Die richtige Art und Weise, eine ordnungsgemäße Überprüfung durchzuführen, hängt von der Unternehmenskultur ab. Für manche Unternehmen mag ein formaler und verbindlicher Abnahmetest der richtige Weg sein. Für andere funktioniert es deutlich besser, regelmäßige Teambesprechungen abzuhalten, in denen der Umsetzungsgrad der Sicherheitsanforderungen gemeinsam besprochen wird. Was auch immer für ihr Unternehmen funktioniert – Ziel ist es, den Verantwortlichen klar zu vermitteln, dass Sicherheitsanforderungen denselben Stellenwert haben, den auch alle anderen Anforderungen genießen.
Später, wenn sie einen höheren Reifegrad erreichen wollen, ist dieser Prozess entsprechend zu formalisieren. Ein solcher Prozess kann zu Beginn jedoch auch ohne Formalisierung bereits eine gute Methode sein, um die Bedeutung von Sicherheit in den Köpfen des Teams zu verankern. Ich habe gesehen, dass Unternehmen im gesamten SSDLC solide Verbesserungen erzielt haben, allein indem sie regelmäßige Meetings zur Diskussion von Sicherheitsanforderungen und deren Umsetzung etabliert haben. Diese Art von organischem Wachstum ist genau das, was sie sich für ihr Vorhaben wünschen.
4) Stellen sie sicher, dass Anbieter dieselben Sicherheitsrichtlinien befolgen, denen sie selbst verpflichtet sind
Die Steuerung ihrer Lieferanten ist ein so wichtiges Thema in Bezug auf Sicherheit, dass ich ihm später in dieser Serie einen eigenen Artikel widmen werde. Dennoch muss es auch im Zusammenhang mit Security Requirements Engineering zumindest kurz gestreift werden.
Ihre Sicherheitsanforderungen definieren Mindestkriterien für die Anwendung, die Sie entwickeln. Aber was passiert, wenn Teile ihrer Anwendung von einem Lieferanten entwickelt werden? Sei es ein Framework eines Drittanbieters, ein Microservice oder eine andere Softwarekomponente, auf die sich ihre Anwendung stützt. Sollten sie nicht denselben Richtlinien folgen?
Natürlich sollten sie das! Einem Angreifer ist es egal, ob der fehlerhafte Teil ihrer Anwendung intern entwickelt wurde oder nicht. Eine Sicherheitslücke ist eine Sicherheitslücke, unabhängig davon, wer für dieses Qualitätsproblem verantwortlich ist.