Bedrohungsmodellierung für Node.js-Anwendungen
31. August 2016
0 Min. LesezeitDieser Artikel ist ein Gastbeitrag von Gergely Nemeth, CEO von RisingStack. Das Unternehmen entwickelt Trace by RisingStack, um Node.js-Anwendungen und Microservices zu überwachen und Fehler zu beheben.
Wogegen sollte ich meine Anwendung schützen? Sollte ich Cross-Site-Scripting-Angriffe abwehren? Was ist mit SQL-Injection? Sollte ich mich vor Cross-Site-Request-Forgery schützen? Die kurze Antwort lautet ja. Aber wie immer ist es nicht so einfach: Je nachdem, wer Ihr Angreifer sein könnte und worauf diese Person Zugriff erhalten kann (und wie viel das wert ist), müssen Sie Ihre Anwendung auf unterschiedliche Weise schützen. Über Sicherheit zu sprechen, ist nur sinnvoll, wenn Sie die Antworten auf „Vor wem sicher?“ und „Wie lange sicher?“ kennen.
Deshalb müssen Sie die Bedrohungen für Ihre Software modellieren. Eine der besten Methoden dafür sind Angriffsbaumdiagramme.
Was sind Angriffsbaumdiagramme?
Angriffsbaumdiagramme bieten eine formale, systematische Möglichkeit, die Sicherheit von Systemen anhand verschiedener Angriffe zu beschreiben. Dabei werden Angriffe auf ein System in einer Baumstruktur dargestellt: Das Ziel bildet den Wurzelknoten, verschiedene Wege, dieses Ziel zu erreichen, die Blattknoten. – Bruce Schneier
Beispiel für ein Angriffsbaumdiagramm
Unten sehen Sie ein vereinfachtes Angriffsbaumdiagramm für einen physischen Tresor. Das offensichtliche Ziel des Angreifers ist es, den Tresor zu öffnen. In diesem Beispiel gibt es dafür zwei Hauptwege: das Schloss knacken oder die Kombination herausfinden. Um die Kombination herauszufinden, muss der Angreifer jemanden bestechen oder ein Gespräch belauschen. Damit das Belauschen gelingt, muss er ein Gespräch mitanhören und dafür sorgen, dass die Zielperson die Kombination ausspricht.

Sobald die Ziele miteinander verknüpft sind, können wir ihnen Werte zuweisen. In diesem Beispiel sind dies möglich (M) und unmöglich (U). Denken Sie daran: Möglich und unmöglich sind diese Wege aus der Sicht des Angreifers. Verfügt der Angreifer also über erhebliche finanzielle Mittel, ist Bestechung möglich. Aus der Sicht eines Studierenden wäre sie wahrscheinlich unmöglich.
Nachdem Sie diese Werte zugewiesen haben, sehen Sie genau, gegen welche Angriffswege Sie sich schützen sollten:

Natürlich können Sie den Blättern auch andere Werte zuweisen, zum Beispiel die Angriffskosten.
Angriffsbaumdiagramme für Node.js-Anwendungen erstellen
Jetzt kennen Sie die Grundlagen von Angriffsbaumdiagrammen. Es ist an der Zeit, sie auf Ihre Node.js-Anwendungen anzuwenden!
Zunächst müssen Sie die möglichen Angriffsziele ermitteln – jedes dieser Ziele bildet dann ein eigenes Angriffsbaumdiagramm. Versuchen Sie, für jedes Ziel so viele Angriffe wie möglich zu sammeln, und wiederholen Sie diesen Vorgang, bis der gesamte Baum erstellt ist. Verschiedene Bäume können denselben Teilbaum enthalten – das ist völlig in Ordnung.
Sobald Sie mit Ihren Angriffsbaumdiagrammen zufrieden sind, können Sie sie als Grundlage für Sicherheitsentscheidungen verwenden. Jetzt können Sie feststellen, ob Ihr System für eine bestimmte Angriffsart anfällig ist, etwa für Cross-Site-Scripting oder Cross-Site-Request-Forgery.
Sie werden überrascht sein, was Sie herausfinden: Die meisten versuchen, ihr System gegen Angriffsvektoren zu schützen, die sie gar nicht abwehren müssten, während große Sicherheitslücken ungeschlossen bleiben.
Beispiel für ein Angriffsbaumdiagramm einer Node.js-Anwendung
Sehen wir uns ein Angriffsbaumdiagramm für eine Node.js-Anwendung an. Da wir bei RisingStack eine Lösung für das Node.js-Monitoring entwickeln, zeige ich ein Beispiel aus der Trace-Welt.

Das Angriffsbaumdiagramm, das ich hier erstelle, hat ein einfaches Ziel: die Authentifizierung umgehen – ähnlich wie im Beispiel mit dem physischen Tresor.

Das obige Beispiel zeigt, wie sich die Authentifizierung bei einem Trace-Konto umgehen lässt. Der erste Teilbaum zeigt den Fall eines gestohlenen Cookies. In unserem Beispiel könnte ein Cookie durch eine unsichere Abhängigkeit gestohlen werden.
Um Ihre Cookies besser zu schützen, können Sie für sie den Secure-Modus aktivieren. Dieses Attribut weist den Browser an, das Cookie nur dann zu senden, wenn die Anfrage über HTTPS übertragen wird.
Sie können außerdem die Lebensdauer eines Cookies verkürzen. Selbst wenn es gestohlen wird, kann es dann nur für eine begrenzte Zeit verwendet werden.
Der zweite Teilbaum zeigt, dass mit dem richtigen Benutzernamen und Passwort auf ein Konto zugegriffen wird. In diesem Fall müsste der Angreifer die Zugangsdaten von der betreffenden Person erhalten – darauf haben wir keinen Einfluss.
Sie können es Angreifern schwerer machen, indem Sie die Zwei-Faktor-Authentifizierung aktivieren.
Der dritte Teilbaum zeigt, dass die Zugangsdaten in den Trace by RisingStack-Datenbanken tatsächlich geändert werden. Dafür müsste ein Angreifer Zugriff auf die Datenbanken erhalten.
Selbst wenn Angreifer auf Ihre Daten zugreifen, gibt es noch eine letzte Schutzmaßnahme: Verschlüsseln Sie Ihren Datensatz!
Diese Beispiele sind längst nicht vollständig und können leicht komplexer werden. Ich hoffe aber, sie vermitteln Ihnen einen Eindruck davon, wie Sie mit der Bedrohungsmodellierung für die Sicherheit Ihres Systems beginnen können.
Starten Sie mit Capture the Flag
Erfahren Sie in unserem virtuellen On-Demand-Workshop für Einsteiger, wie Sie Capture-the-Flag-Herausforderungen lösen.