Sichere Anwendungsentwicklung: Wie Low-Code nicht zu Low-Security wird
Low-Code soll die Produkteinführungszeit in der Softwareentwicklung verkürzen sowie Business und IT näher zusammenbringen. Doch wie lassen sich gleichzeitig die entsprechenden Sicherheitsstandards einhalten?
Die Ziele von Low-Code sind, die Softwareentwicklung zugänglicher zu machen, die Dauer von der Idee bis zur Produktivsetzung zu verkürzen und die Kosten für die Digitalisierung von Geschäftsprozessen deutlich zu senken. Laut Gartner werden in naher Zukunft 70 Prozent aller neuen Applikationen mit Low-Code entwickelt.
Dafür werden je nach Zielanwendung unterschiedliche Plattformen eingesetzt, wie beispielsweise Mendix, Simplifier, Microsoft Power Platform, Appian, Service Now, Microsoft Dynamics oder Salesforce. Mit zunehmender Verbreitung von Low-Code-Applikationen wird aber auch der Fokus auf die Sicherheit immer relevanter. In diesem Artikel zeigen wir anhand eigener Analysen der Applikationssicherheit, was bei Low-Code gegenüber der Individualentwicklung in zwei der meistverwendeten Low-Code-Plattformen besonders zu beachten ist:
- Spezifische Schulungen in Bezug auf die Applikationssicherheit sind bei Low-Code noch wichtiger als bei klassischer Softwareentwicklung, weil ein breiterer Teil der Mitarbeitenden an der Softwareentwicklung partizipiert (Citizen Developer).
- Die Abstraktion von Low-Code hilft, Geschäftsprozesse schneller abzubilden. Sicherheit ist jedoch durch die Verwendung von Low-Code nicht automatisch gewährleistet. Deswegen müssen bewährte Sicherheitsprinzipien auch bei Low-Code-Applikationen angewendet werden.
- Fremdcode sollte auch bei Low-Code-Applikationen umfangreichen Sicherheitsprüfungen unterzogen werden.
- Für die Applikationssicherheit ist die Anwendung eines wohldefinierten Security Development Lifecycles auch bei Low-Code zentral.
- Herausforderungen hinsichtlich der Sicherheitsarchitektur bleiben auch bei Low-Code-Applikationen bestehen. Eine frühe Auseinandersetzung mit der Thematik empfiehlt sich daher genauso in Low-Code-Projekten.
Verglichen mit herkömmlicher Individualentwicklung lässt sich also feststellen, dass es viele Überschneidungen bei den Empfehlungen gibt. Besonderes Augenmerk muss jedoch auf die Sensibilisierung und Ausbildung von Citizen Developern gelegt werden. Im Folgenden betrachten wir die zuvor genannten Punkte etwas ausführlicher.
Die Ausbildung von Citizen Developers ist entscheidend
Die Entwicklerinnen und Entwickler von Low-Code-Applikationen müssen nicht zwingend über einen großen technischen Hintergrund oder mehrjährige Erfahrung in der Softwareentwicklung verfügen. Vielmehr steht bei Low-Code eine effiziente Abbildung der Geschäftsprozesse im Fokus. Da auch bei Softwareentwicklern mit langjähriger Erfahrung Lücken im Wissen rund um die Sicherheit anzutreffen sind, ist bei Low-Code-Entwicklerinnen und -Entwicklern tendenziell mit einem größeren Defizit zu rechnen. Insbesondere wenn – wie bei Low-Code-Projekten üblich – weniger zeitliche Ressourcen eingeplant werden. Baut man beispielsweise eine Geschäftsanwendung, so reicht es nicht, Input-Validierungen nur im Frontend vorzunehmen. Für die Sicherheit sind Validierungen im Backend besonders relevant. Eine führende Low-Code-Plattform bietet
beispielsweise die Möglichkeit, typenbasierte Validierungen im Frontend und Backend durchzuführen.
Diese muss man jedoch explizit aktivieren, konfigurieren und testen. Werden Inhalte nicht korrekt validiert, riskiert man die Verarbeitung von schädlichem Input. Das kann zu unerwarteten Verhalten der Geschäftsanwendung führen und nicht selten Datenschutzverletzungen und Erpressung durch Cyberkriminelle nach sich ziehen.
Daher ist es entscheidend, dass auch Low-Code-Entwicklerinnen und -Entwickler über das Basiswissen zur Sicherheit von Anwendungen verfügen. Auf dem Markt bieten verschiedene Firmen dazu passende Workshops an, die sich speziell an Entwicklerinnen und Entwickler mit Erfahrung in der Webentwicklung richten.
Hoher Abstraktionsgrad
Low-Code bietet einen hohen Abstraktionsgrad, um Geschäftsprozesse schneller in Software abbilden zu können. Große Teile der Logik modelliert
man mittels der zur Verfügung gestellten Bausteine. Das führt häufig zum Irrglauben, dass die Bausteine nach Belieben eingefügt und miteinander verknüpft werden können, während die Sicherheit der Applikation standardmäßig gewährleistet ist. Dabei können diese Bausteine aber immer noch individuell konfiguriert werden. Die Menge an Optionen ist hier je nach Plattform beträchtlich.
Wie zuvor erwähnt, gibt es bei manchen Low-Code-Plattformen im Bereich der Frontend- und Backend-Validierung die Möglichkeit, Datentypen zu validieren. Angenommen wir verwenden zwei Bausteine, die Daten empfangen, validieren, verarbeiten und einen bestimmten Output weitergeben sollen. Damit Input und Output eines Services validiert werden, muss der Anwender dies aber in einigen Plattformen explizit aktivieren und konfigurieren.
Folglich müssen die Konfiguration der Bausteine sowie deren Verknüpfungen zwingend auf die Sicherheit im jeweiligen Anwendungskontext überprüft werden, um die Angriffsfläche zu reduzieren. Positiv hervorzuheben ist, wie im oben genannten Beispiel, dass Plattformen dies unterstützen.
Überprüfung von Fremdcode
Oft können Benutzer über die jeweiligen Marktplätze der Low-Code-Plattformen neue Werkzeuge und Bausteine per Knopfdruck hinzufügen. Der Inhalt eines Bausteins muss jedoch nicht immer aus vertrauenswürdigen Quellen stammen. Bei vielen Plattformen ist es möglich, selbst entwickelte Bausteine auf dem Marktplatz zu publizieren und der Öffentlichkeit zur Verfügung zu stellen. Die Sicherheitsprüfungen der Plattformbetreiber sind nicht immer transparent. Grundsteine für die heute sehr populären „Supply Chain Attacks“, wobei Angreifer Schadcode in verwendete Komponenten einschleusen oder solche anbieten, sind damit gelegt.
Für manche Low-Code-Plattformen existieren Portale mit unzähligen, vordefinierten Bausteinen beziehungsweise Modulen, die man für die Entwicklung der eigenen Geschäftsanwendung verwenden kann. So gibt es beispielsweise Module, welche es Benutzern erlauben, ein vereinfachtes Login mittels eines Links durchzuführen, ohne Authentifizierungsfaktoren wie ein Passwort vorzuweisen. Solche Funktionen haben sehr hohe Anforderungen an die Sicherheit und sollten vor der Verwendung genau betrachtet und sorgfältig eingebaut werden.
Neben der Überprüfung, ob die Einbettung keine Sicherheitslücken aufweist, empfiehlt es sich, den Quellcode – soweit möglich – zu überprüfen. Dies kann sowohl manuell als auch durch automatisierte statische und dynamische Analysen erfolgen. Ergänzend können die Entwicklerinnen und Entwickler auch Abhängigkeiten auf Schwachstellen überprüfen, worauf wir im nächsten Abschnitt näher eingehen.
Security Development Lifecycle
Die Entwicklung basierend auf einem wohldefinierten Security Development Lifecycle ist für Low-Code-Applikationen genauso wichtig wie für herkömmlich entwickelte Applikationen. Angefangen beim Threat-Modelling und den abgeleiteten Sicherheitsanforderungen ist auch der Entwurf einer sicheren Architektur notwendig. Ein Blick auf die publizierten Schwachstellen zeigt, dass bestimmte Bausteine gravierende Sicherheitslücken aufweisen.
So wurde beispielsweise im Baustein „Passwort vergessen“ einer früheren Version einer führenden Low-Code-Plattform eine Schwachstelle entdeckt. Diese erlaubte es Angreifern, die Konten anderer Anwender zu übernehmen. Die Schwachstelle wurde in einer neuen Version behoben und betroffene Versionen wurden vom Portal entfernt. Den Entwicklern wurde zu einem Update geraten.
Nicht nur die Bausteine, sondern auch die Plattformen selbst können Schwachstellen enthalten und müssen dementsprechend regelmäßig aktualisiert werden. Wir haben eine Million Webseiten nach Merkmalen einer führenden Low-Code-Plattform gescannt und mit Informationen von publicwww.com erweitert. Von den 95 identifizierten und verfügbaren Webseiten dieser Plattform verwendeten 60 Prozent eine Version mit bekannten Schwachstellen, weil die Betreiber die Plattform nicht auf die neuste Version aktualisiert hatten.
Ähnlich wie bei Apps auf einem Smartphone oder bei Libraries und Frameworks in klassischer Individualentwicklung ist die Aktualisierung der eingesetzten Bausteine enorm wichtig für die Sicherheit der Applikation. Hier ist positiv hervorzuheben, dass die Dokumentationen einiger Low-Code-Plattformen auf „Best Practices“ im Zusammenhang mit der Sicherheit eingehen. Das Befolgen dieser bewährten Methoden ist ein guter Anfang zu einem schlussendlich sichereren Produkt.
Sicherheitsarchitektur ist entscheidend
Die Anforderungen an eine sichere Anwendungsarchitektur sind auch für Low-Code-Applikationen relevant. So sind Aspekte wie Authentifizierung, Autorisierung, sichere Handhabung von Daten oder das Protokollieren von Ereignissen ebenfalls zu berücksichtigen.
Mehrere Anbieter setzen auf eine rollenbasierte Zugriffskontrolle. Bei einer betrachteten Plattform müssen die Entwicklerinnen und Entwickler die Rollen für die Zugriffsberechtigungen für die Bausteine selbst definieren. Diese Rollen können für die Berechtigungen innerhalb der Bausteine verwendet werden. Die Zuordnung einer falschen Benutzerrolle oder eine fehlerhafte Definition führt zu ungewolltem Zugriff auf Funktionen und Daten.
Daher sollten auch bei Low-Code-Projekten erfahrene Software-Architekten und Entwickler sowie Sicherheitsexperten mit einbezogen werden, besonders intensiv in den frühen Phasen des Vorhabens, um beispielsweise Authentifizierungs-und Autorisierungskonzepte zu erarbeiten und bei der Umsetzung zu unterstützen.
Ein „Center of Excellence” für Low-Code
Bei Low-Code-Softwareentwicklung ist Security genauso wichtig wie bei herkömmlicher Individualentwicklung. Das Risiko bezüglich Sicherheitslücken verschärft sich jedoch zusätzlich, weil mithilfe einer Low-Code-Plattform Applikationen besonders einfach und schnell erstellt werden können. Deshalb ist es entscheidend, dass solche Risiken frühzeitig adressiert werden – insbesondere auch auf organisatorischer Ebene. Wenn mehr Mitarbeitende an der Softwareentwicklung partizipieren, sind Sicherheitslücken wahrscheinlicher. Grund dafür ist der tendenziell geringere Kenntnisstand von Citizen Developers in Bezug auf Security-Best-Practices. Der Aufbau eines Kompetenzzentrums (Center of Excellence, CoE) für Low-Code im Unternehmen kann dabei helfen, diese Risiken zu adressieren.
Das CoE trägt als zentrale Einheit die Verantwortung für die Low-Code-Plattformen. Dazu gehört auch die Befähigung der Entwicklerinnen und Entwickler sowie Citizen Developers in Sachen Softwareentwicklung und Security. Das CoE ist die zentrale Anlaufstelle, übernimmt die Überwachung der gebauten Applikationen sowie den Betrieb der Plattform und informiert Entwicklerinnen und Entwickler über neue Versionen mit Sicherheitsupdates. Darüber hinaus stellt es sicher, dass alle Applikationen den definierten Standards entsprechen.
Weiter kann ein CoE beispielsweise durch gezielte Risikoanalysen Applikationen proaktiv prüfen und das bereits vor einer Applikationsentwicklung von den (Citizen) Developers einfordern Durch externe Penetrationstests kann ein CoE besonders exponierte Applikationen einer detaillierteren Untersuchung unterziehen und gegebenenfalls weitere Schritte planen. Zudem kann das CoE über regelmäßige Informationsveranstaltungen und Community Building sicherstellen, dass die (Citizen) Developers, was die Sicherheit der Low-Code-Plattformen betrifft, auf dem neusten Stand bleiben.
Martin Scheck ist Lead Security Consultant und Team Lead bei Zühlke (www.zuehlke.com).