Im Beitrag Vier agile Werkzeuge für mehr Sicherheit – Assets priorisieren mit Bull’s Eye Diagram haben wir gesehen, wie wir die schützenswerten Assets unseres Produkts finden und priorisieren. Im zweiten Teil Vier agile Werkzeuge für mehr Sicherheit – Anti-Personas ging es um die Angreifer*innen und wie wir relevante Archetypen identifizieren und beschreiben.
Jetzt werden wir uns konkrete Angriffe auf unser System ansehen. Dabei nutzen wir Attack Trees, um Angriffe auf einzelne Assets strukturiert durchzuspielen.
Attack Tree
Ein Attack Tree ist eine strukturierte Darstellung von Angriffen auf ein Asset. Die ersten Beschreibungen stammen von dem bekannten Sicherheitsforscher Bruce Schneier. Attack Trees lassen sich gut visuell darstellen.
Die Wurzel des Baumes ist der Angriff, den wir auf das ausgewählte Asset durchführen wollen. In diesem Beispiel wollen wir die Nutzerdaten stehlen. Die Äste sind dann Bedienungen, die erfüllt sein müssen, damit der Angriff gelingt. Sind alle Knoten eines Astes erfüllt, ist der Angriff erfolgreich. Umgekehrt bedeutet das auch, dass ein Angriff abgewehrt werden kann, wenn die Bedingungen der Knoten nicht erfüllbar sind.
Hier zwei Beispiele:
- Es könnten die Nutzerdaten gestohlen werden indem Zugriff auf Backups der Daten erlangt wird. Wie könnte so ein Zugriff aussehen? Eine Möglichkeit wäre, dass die Backups ungeschützt im Internet erreichbar sind. Solche Konfigurationsfehler kommen vor. Der Angriff könnte verhindert werden, wenn sichergestellt ist, dass Backups nicht erreichbar sind.
- Es könnten die Nutzerdaten gestohlen werden indem Zugriff auf die Datenbank besteht. Zugriff auf die Datenbank könnte über eine SQL Injection erlangt werden. Somit könnte dieser Angriff verhindert werden, wenn Inputs validiert und sichere Prepared Statements eingesetzte würden.
Erstellung in Workshops
System und Technologien festlegen
Attack Trees lassen sich gut in Workshops mit dem Entwicklungsteam und Sicherheitsexpert*innen erarbeiten. Vorher sollten allerdings die wichtigen Assets zusammen mit den Stakeholdern und dem Team festgelegt worden sein. Dadurch kann sich der Workshop auf die wichtigsten Assets konzentrieren.
Außerdem spielt die geplante oder bereits implementierte Architektur und Technologien eine wichtige Rolle. Wenn keine SQL Datenbank zum Einsatz kommt, kann ich natürlich auch keine SQL Injections durchführen.
Ziel festlegen
Wir beginnen mit dem Attack Tree für das wichtigste Asset. Wegen der hohen Strafen durch die DSGVO und dem gefährlichem Vertrauensverlust der Nutzer*innen bei Datenverlust sind bei unserem Beispiel der Fahrradapp die Nutzerdaten ausgewählt worden. Nachdem wir ein Asset ausgewählt haben bauen wir uns einen Baum für ein Angriffsziel mit diesem Asset. Hierbei kann uns STRIDE helfen, ein Angriffsziel zu formulieren. Im Beispiel wollen wir die Daten stehlen (Information Disclosure). Dies ermöglicht uns andere Angriffswege als wir sie z.B. bei der Manipulation der Daten (Tampering) hätten. Die Backups sind für den Zugriff auf die Daten relevant aber kaum zur Manipulation geeignet.
Daher kann es für manche Assets Sinn machen, mehrere Angriffsbäume mit unterschiedlichen Knoten zu erstellen.
Knoten suchen
Nachdem die Wurzel des Baumes festgelegt ist, können in einem Brainstorming erste Knoten gesucht werden. Die direkten Knoten an dem Ziel sind noch grob strukturiert. Die konkreten Angriffspfade formen sich dann nach und nach als Äste aus.
Im Beispiel haben wir Zugriff auf die Datenbank als einen der direkten Knoten an dem Ziel Nutzerdaten stehlen. Von dort aus verzweigt sich der Angriff und wir können entweder aktive Angriffe fahren oder auf einen Konfigurationsfehler setzten.
Wenn man an einer Stelle nicht weiterkommt, kann man sich wieder an den Kategegorien aus STRIDE orientieren. Kann ich mich als Admin ausgeben (Spoofing), kann ich vielleicht mit meinen Nutzerrechten, auf die Daten anderer Zugreifen (Elevation of Privelege)? Mit solchen Fragen kann das Team nach und nach den Baum wachsen lassen.
Auch die Anti-Personas können helfen, weitere Knoten zu identifizieren. Wenn ich an einer Stelle im Baum hängen bleibe und keine Idee habe, was ich noch tun könnte, kann ich mich der Reihe nach in die Anti-Personas versetzten. Wenn ich auf die Datenbank zugreifen möchte und ich bin Skriptkiddie Simon, welche Techniken kenne ich dann. Welche Tools setze ich ein. Was wenn ich Hackerin H3x wäre und raffiniertere Angriffe kenne? Was würde ich anders machen als Simon. An dieser Stelle können auch kleine Markierungen an den Knoten angebracht werden, so dass ersichtlich ist, welche Angriffswege von welcher Anti-Persona gewählt würden. Das hilft später dabei, zu priorisieren, welche Gegenmaßnahmen wirklich ergriffen werden und festzulegen, wann sicher sicher genug ist.
Testbarkeit
In der agilen Softwareentwicklung müssen wir verstärkt auf automatisierte Tests setzen, um innerhalb der Sprints die Qualitätssicherung und auch die Sicherheitsprüfungen durchführen zu können.
Bei den Attack Trees können die Blätter des Baumes als Testfälle oder zumindest als Vorlage für solche genutzt werden.
Nehmen wir das Beispiel mit dem Zugriff auf die Datenbank, indem die Zugangsdaten erlangt werden. Die Standardzugangsdaten meiner Datenbank kann ich einfach in einen Test einbauen und automatisch als Integrationstest mitlaufen lassen. Auch ein Brute-Force-Angrif kann automatisch gegen die Systeme laufen.
Ein Wald voller Bäume
Wir haben nicht nur ein Ziel für unser Asset sondern evtl. mehrere und es gibt mehrere Assets, die wir schützen müssen. Daher wird die Anzahl der Attack Trees recht schnell anwachsen.
Um den Überblick zu behalten bietet es sich daher an, die Bäume digital zu erfassen und mit Querverweisen zu arbeiten. Dies kann mit Mindmappingtools wie Miro erolgen oder mit spezialisierten Tools wie dem Attack Tree Analysis Tool AT-AT.
Nachdem die Attack Trees zusammengetragen wurden, muss meistens eine Priorisierung erfolgen. Wenn bei der Erstellung der Bäume bereits Markierungen für die Anti-Personas angebracht wurden, wird dieser Schritt etwas einfacher. Denn wir können sofort sehen, ob ein Angriff von fast jedem durchgeführt werden könnte oder nur von Spezialist*innen.
Ausblick
Mit den Attack Trees haben wir ein Werkzeug, mit dem eine Vielzahl von konkreten Angriffen gegen ein System strukturiert erarbeitet und visualisiert werden kann.
Neben dem konkreten Vorgehen der Angreifer*innen können wir auch automatisierte Testfälle ableiten.
Wie wir die Anti-Personas und die Attack Trees zu Abuser Stories für agile Teams zusammenbringen, werden wir uns im letzten Teil der Reihe ansehen.
Bis bald,
seism0saurus