Erkennen und Vermeiden aktueller Sicherheitsrisiken für Webanwendungen

Die schnell voranschreitende Digitalisierung der Arbeitswelt ist eine der aufregendsten und herausforderndsten Aufgaben für deutsche Unternehmen und Behörden. Noch vor zwanzig Jahren wäre eine weitreichende Umstellung auf remote oder hybride Arbeitsplätze, wie sie im Zuge der Corona-Pandemie bundesweit erfolgte, nicht denkbar gewesen. Die damit zusammenhängenden wirtschaftlichen und vor allem gesundheitlichen Folgen für die Bevölkerung kaum vorstellbar.
Doch die rapide fortschreitende Modernisierung des Berufsalltags bringt nicht nur Vorteile mit sich, sondern fordert von uns auch, dass wir uns in Bezug auf Sicherheitsrisiken ständig weiterbilden und anpassen. Das organisierte Verbrechen oder von Staaten aufgebaute und in deren Interesse handelnde Cyberkriminelle entwickeln in erschreckendem Tempo neuartige Schadsoftware und Angriffsvarianten und nutzen jede Schwachstelle gnadenlos aus. Systemrelevante Unternehmen und Dienstleister stehen hier immer wieder im Fokus der Kriminellen.
Ein aktuelles Beispiel zeigt dabei, wie weitreichend und losgelöst von der digitalen Welt die Folgen eines solchen Angriffs sein können. Im Spätsommer 2020 wurde ein Universitätsklinikum in Nordrhein-Westfalen durch eine Sicherheitslücke in einer dort verwendeten Software Opfer von Cyberkriminellen. Diese verschafften sich Zugriff auf die sensiblen Daten des Klinikums und verschlüsselten Großteile des Systems, was zur Folge hatte, dass das Krankenhaus für 13 Tage die lebenswichtige Notaufnahme nicht aufrechterhalten konnte und sich die bereits durch die Pandemie angespannte Versorgungslage von behandlungsbedürftigen Menschen weiter verschlimmerte.
Doch nicht nur Kriminelle entwickeln fortlaufend neue Tools und Anleitungen. Auch im Bereich Cybersicherheit wächst die Menge an verfügbaren Handlungsempfehlungen, Schulungen und Sicherheitssoftware stetig an, um der Bedrohung standzuhalten bzw. entgegenzuwirken. Ein wichtiger Mitstreiter in diesem Feld ist das "OWASP" (The Open Web Application Security Project), eine weltweit vernetzte, offene Gemeinschaft von Entwicklern, Experten und Interessierten, welche sich auf die Fahnen geschrieben haben, Organisationen die Möglichkeit zu geben, vertrauenswürdige Anwendungen und APIs zu entwickeln, zu kaufen und zu betreiben.
In diesem Artikel werfen wir einen genaueren Blick auf die verbreitetsten Sicherheitsrisiken für Webanwendungen und orientieren uns hierbei an der vom OWASP alle vier Jahre veröffentlichten "Liste der aktuellsten Sicherheitsrisiken für Webanwendungen", welche ich hier auf sechs konkrete Punkte zusammengefasst habe.
Dieser Artikel soll Euch einen Überblick über aktuelle Angriffsvektoren verschaffen und bereits erste Vermeidungsstrategien an die Hand geben, um diese zu verhindern. Außerdem erhaltet ihr Quellen für weitere Informationen und Best-Practice-Empfehlungen zu den aufgeführten Risiken.
Platz 6: Server-Side Request Forgery
Ende 2021 kam so gut wie kein Entwickler an dem Thema Log4J vorbei. Viele Anwendungen nutzten das praktische Logging-Tool und waren dadurch für die damals entdeckte Schwachstelle anfällig, durch die ein Server-Side-Request Forgery-Angriff (SSRF) möglich war. Von SSRF spricht man, wenn eine Web-Anwendung eine Remote-Ressource heranzieht, ohne die vom Benutzer angegebene URL zu validieren. Hierdurch kann ein Angreifer die Anwendung zwingen, eigens erstellte Anfragen an unbekannte Quellen zu senden und auszuführen. Standardmäßig verläuft der Angriff wie in der Abb. 2 dargestellt.
Durch die steigende Anzahl von Cloudservices und immer komplexere Softwarearchitekturen ist das Verhindern solcher Schwachstellen sehr schwierig geworden. Außerdem bieten moderne Webanwendungen eine Vielzahl von benutzerfreundlichen Features, welche allerdings als offenes Einfallstor für SSRF-Angriffe genutzt werden können, wodurch sich die Menge an Sicherheitsvorfällen drastisch erhöht hat.
Um Angriffe zu vermeiden, bzw. um eventuelle Schäden zu minimieren, eignen sich z. B. folgende Maßnahmen:
- Den Zugriff von Remote-Ressourcen auf separate Netzwerke segmentieren, um Auswirkungen eines erfolgreichen Angriffs zu verringern.
- Standardmäßig nicht notwendigen Intranet-Datenverkehr mit Hilfe von Firewalls blockieren.
- Nutzereingaben validieren, z. B. mit Hilfe von Whitelists.
Platz 5: Fehler beim Logging und Monitoring
Fehlerhaftes Logging und Monitoring ist eine schwer zu testende und nur indirekt für Cyberangriffe verantwortliche Sicherheitslücke. Hierbei geht es in erster Linie darum, Risiken frühzeitig zu erkennen und weitere Handlungsschritte festzulegen. Zu fehlerhaftem Logging und Monitoring gehören unter anderem folgende Fälle:
- Logins und Abfragen sensibler Daten werden nicht geloggt.
- Warnungen und Fehlermeldungen erzeugen keine bzw. keine ausreichende Log-Nachricht (s. Abb. 3).
- Die Logs werden nicht auf auffälliges Verhalten geprüft.
- Logs werden nur lokal gespeichert.
- Es gibt keine Handlungsanweisungen, wie bei einem Alarm vorzugehen ist.
- Scans und Penetrationstests erzeugen keinen Alarm.
- Die Anwendung ist nicht in der Lage, Angriffe in Echtzeit zu erkennen, bzw. einen Alarm auszulösen.
Zur Verbesserung des Loggings und Monitorings eignen sich beispielsweise folgende Punkte:
- Sicherstellen, dass genügend Informationen geloggt und die Logs lange genug gespeichert werden, um Rückschlüsse auf Angriffe und Schwachstellen zu ziehen.
- Das Logformat an verwendete Log-Management-Tools anpassen.
- Die Berechtigungen zum Löschen oder Ändern von Logs verschärfen, um das Verwischen von Spuren zu erschweren.
- Log Data richtig kodieren, um Injection-Angriffen vorzubeugen.
- Erstellung einer Handlungsanweisung im Falle eines Vorfalls.
Platz 4: Fehlerhafte Software- und Datenintegrität
Grob gesagt wird bei dieser Schwachstelle eine Entwicklungsinfrastruktur ausgenutzt, welche Integritätsverletzungen nicht erschwert. Dies wäre zum Beispiel bei der Nutzung eines Autoupdaters der Fall, wenn dieser keine ausreichende Integritätsverifikation nutzt. Hierdurch können Angreifer Schadcode uploaden, der dann automatisch verteilt wird. Der gravierendste Vorfall dieser Art fand im Frühjahr 2020 statt, als das Netzwerkmanagement-Tool "Orion" des texanischen Softwareherstellers "Solarwinds" Opfer eines Hackerangriffs wurde. Dabei wurde über ein Update Schadcode an über 18.000 Computer verteilt. Der dadurch entstandene Schaden war immens, da unter anderem viele Behörden der Vereinigten Staaten Kunde von Solarwinds waren.
Um die Software- und Datenintegrität zu verbessern, eignen sich folgende Schritte:
- Digitale Signaturen verwenden, um die Quelle von Software zu verifizieren.
- Reviewprozesse einführen, um Codeänderungen zu prüfen.
- Supply-Chain-Überwachungstools einsetzen.
Platz 3: Identifikation und Authentifizierungsschwachstellen
Hierunter fallen mehrere Fehlkonfigurationen, welche die Authentifikation schwächen. Die häufigsten Schwachstellen in dieser Kategorie sind:
- Schwache Passwörter (z. B. 1234),
- geleakte Passwörter,
- fehlende Sicherheitsmaßnahmen zur Verhinderung von Brute-Force-Angriffen,
- keine Nutzung von Multifaktorauthentifizierung,
- Standardpasswörter (Admin),
- Keine Vorgabe für Passwortstärke und
- Fehlende Beschränkung für die Anzahl von Fehlversuchen bei der Anmeldung.
Die meistgenutzten Passwörter in Deutschland in 2020 sind 123456, 123456789, 12345678, password, 1234567, 123123, 1234567890, 111111, abc123 und 00000[1].
Platz 2: Verwundbare und veraltete Komponenten
In großen IT-Projekten verliert man leicht den Überblick über die Versionen aller verwendeten Abhängigkeiten. Dies führt häufig dazu, dass Sicherheitsupdates übersehen werden und bereits bekannte Schwachstellen weiterhin im Programm vorhanden sind. Angreifer können Systeme auf die verwendeten Komponenten scannen oder auf gut Glück testen, ob ein Angriffsziel für bereits bekannte Schwachstellen anfällig ist.
Dies kann wie folgt verhindert werden:
- Unbenutzte Features, Dokumente und Abhängigkeiten entfernen.
- Die verwendeten Komponenten und deren Version inventarisieren und regelmäßig auf Updates und Schwachstellen prüfen.
- Die Quellen von Komponenten auf Qualität und Vertrauenswürdigkeit prüfen.
- Nicht mehr gewartete Komponenten entfernen.
Platz 1: Unsicheres Design
Mit unsicherem Design wird eine Vielzahl von Sicherheitsrisiken beschrieben, die in der Regel auf ungenügende Vorüberlegungen, fehlende Kontrolle bei der Entwicklung oder nicht bedachte Risiken bei der Nutzung zurückzuführen sind.
Arten von unsicherem Design wäre zum Beispiel ein Onlineshop, in welchem ohne vorherige Registrierung Produkte bestellt werden können, ohne zu überprüfen, ob die Lieferadresse bzw. die Zahlungsart valide ist. Auch das Fehlen von Bestelllimits bei Onlineshops kann als unsicheres Design angesehen werden. So wurde der Markt von Grafikkarten von einigen wenigen Personen komplett leergekauft, um diese dann zu überteuerten Preisen wieder weiterzuverkaufen. Eine Limitierung der Bestellmenge hätte dies verhindern können.
Aber auch nicht entfernte Standardseiten und Standarduser, welche von Frameworks bei der Initialisierung erstellt werden, oder fehlende Überprüfung von Eingaben, welche zu Injections führen können, sind Beispiele von unsicherem Design. Der typische Ablauf einer SQL Injection ist in der Abb. 3 dargestellt [2].
Zur Vorbeugung von Fehlern bei der Designerstellung einer Software ist es notwendig, sich Gedanken darüber zu machen, wie Angreifer Schwachstellen ausnutzen könnten. Dies ist ein sehr kontraintuitiver Prozess und bedarf daher oft eines Blickes von außen auf das komplette System, sowie Erfahrung mit ähnlichen oder in der Vergangenheit vorgefallenen Ereignissen. Außerdem sind eine ständige Anpassung und Kontrolle notwendig.
Möglichkeiten zur Verhinderung sind:
- das Nutzen von sicheren und bewährten Design Patterns [3],
- die Verwendung von Eingabevalidierung und Plausibilitätsprüfungen,
- Ressourcenlimits für Anwendungen festlegen, um Schäden nach einem erfolgreichen Angriff einzuschränken,
- Anwendungsebenen zu separieren, so können Angreifer nicht das komplette System infiltrieren, wenn sie sich Zugang zu einer Anwendung verschafft haben,
- Whitelists (oder falls nicht möglich Backlists) für Nutzereingaben zu verwenden und
- Sicherheitsaspekte bereits bei der Erarbeitung von User Stories zu berücksichtigen.
Fazit
Sicherheitsrisiken können in allen Ebenen des Softwareentwicklungsprozesses entstehen. Ein Großteil der Schwachstellen kann durch durchdachte und gelebte Reviewprozesse verhindert oder abgeschwächt werden.
Doch nicht nur die Anzahl von Angriffsmustern und Schadsoftware, sondern auch die Menge an verfügbaren Tools und Hilfsmitteln zur Stärkung der IT-Sicherheit einer Webanwendung, hat in den vergangenen Jahren stark zugenommen. Das Wichtigste zur Bekämpfung und Verhinderung ist und bleibt nach wie vor Schulung und Kommunikation. Risiken, die nicht bekannt sind, können nicht verhindert werden. Daher hoffe ich, dass Euch dieser Artikel einen Überblick über die häufigsten Schwachstellen und Möglichkeiten zur Vermeidung verschaffen konnte und ihr Tipps und Ideen für die nächsten Projekte mitnehmen konntet.