Skip to main content

15 Best Practices für starke Anwendungssicherheit

Artikel von:
Daniel Berman

Daniel Berman

wordpress-sync/Introducing-open-source-security-runtime-monitoring-

8. Oktober 2020

0 Min. Lesezeit

Dass Anwendungen ein essenzielles Element in unserem Alltag bilden, ist nichts mehr wirklich Neues. Im vergangen Jahrzehnt aber ist ihre Zahl geradezu explodiert: Von Web- bis Mobile-Apps sind Millionen von ihnen im Einsatz, ganz gleich, ob im privaten oder geschäftlichen Kontext. Nicht weniger beispiellos ist die Entwicklung rund um das Internet of Things (IoT), in deren Zuge immer mehr manuelle Aufgaben automatisiert werden.

All dies ist sicher positiv zu bewerten, hat jedoch auch eine Kehrseite. Denn gerade sicherheitsbezogene Problematiken erfahren in diesem Zuge enormen Auftrieb. Entwickler wie Unternehmen sind sich nämlich allzu oft gar nicht darüber im Klaren, dass ihre Anwendungen anfällig sind. Entsprechend häufig gelangt daher Code mit Schwachstellen in Produktionsumgebungen.

Mehr Apps, verschärfte Sicherheitslage

Zu den wichtigsten Einflussfaktoren und Herausforderungen im Kontext der Sicherheit von Anwendungen gehören aktuell:

  • Apps von Hobby-Entwicklern: Angesichts einer quasi unendlichen Zahl an Use Cases für Mobile-Apps versuchen sich immer mehr Hobby-Entwickler an ihrer Programmierung. Andererseits fehlt es aber auch an professionellen Fachkräften, dies umso mehr an solchen mit dem nötigen Know-how, um potenziell auftretende Sicherheitsprobleme adäquat zu beheben.

  • Ineffizienter Einsatz von Tools: Häufig nutzen Entwickler die ihnen zur Verfügung stehenden Testing-Tools nicht effektiv genug. Zudem sehen sie entsprechende Tools häufig eher als Bremse für den Dev-Prozess an.

  • Web-Apps als Angriffsvektor: Immer häufiger gehen Datenpannen auf webbasierte Angriffe zurück, dies häufig über APIs innerhalb von Anwendungen. Zudem ist es Unternehmen allzu oft gar nicht klar, dass ihre Lösung entsprechende Web-Schnittstellen nutzen.

  • Rückstand bei DevSecOps-Umsetzung: Viele Unternehmen sind noch nicht auf dem Stand aktueller Best-Practice-Methodiken, wenn es um Dev-Prozesse für starke Anwendungssicherheit geht. Nur wenige haben den Schritt hin zu DevSecOps und den damit verbundenen Shift Left vollzogen, durch den sie Sicherheitsprobleme effizienter angehen und nach ihrem Auftreten rasch beheben könnten.

  • Open-Source-Schwachstellen: Open-Source-Software und -Bibliotheken geraten zunehmend zum Risikofaktor. Denn Schätzungen zufolge kommen sie in nicht weniger als 96 % der kommerziellen Anwendungen zum Einsatz – mit potenziellen Schwachstellen, die auf diesem Wege also auch in Unternehmensumgebungen Einzug halten.

All diese Fallstricke lassen sich jedoch vermeiden und zugleich auch die Anwendungssicherheit insgesamt stärken. Die nachfolgende Checkliste hilft ihnen dabei, die dazu nötigen Maßnahmen zu implementieren.

Dabei wichtig zu beachten: Alle hier genannten Best Practices sind auch für die Sicherheit von Web-Anwendungen relevant. Denn in der Software-Entwicklung gelten stets die gleichen Prinzipien – ganz gleich, ob für Web-, Mobile- oder Desktop-Plattformen.

15 Best Practices für starke Anwendungssicherheit

  1. Umsetzung einer DevSecOps-Methodik

  2. Lifecycle-Management gemäß Secure SDLC

  3. Beseitigung von Open-Source-Schwachstellen

  4. Automatisierung

  5. Klarheit über sämtliche Komponenten

  6. Evaluierung Ihrer Risikoexposition

  7. Security-Training für Dev-Teams

  8. Adäquates Container-Management

  9. Datenzugriff reduziert auf das nötige Minimum

  10. Regelmäßige Updates und Patches

  11. Logging für fundierte Daten

  12. Verschlüsselung sämtlicher Daten

  13. Penetrationstests

  14. Stets genaue Input-Validierung

  15. Nachhaltige Fixes

1. Umsetzung einer DevSecOps-Methodik

In punkto Sicherheitslücken ist proaktives Handeln gefragt. Genau dieser Prämisse trägt das Konzept von DevSecOps Rechnung: Durch den Shift Left von Security-Aufgaben wird Schwachstellen nicht nur bereits in der Entwicklung vorgebeugt. Potenziell auftretende Probleme werden damit auch an allen Punkten der Software-Lieferkette agil adressiert – über das gesamte SDLC hinweg, vom Konzept bis zum Deployment.

2. Lifecycle-Management gemäß Secure SDLC

Beim Secure Software Development Lifecycle bzw. SSDLC geht es darum, Security-Themen perspektivisch wie auch praxisbezogen in den Lifecycle der Anwendungsentwicklung einzubringen. Als Kernaspekte gelten dabei:

  • Vermittlung von Security-Know-how an die Teams in der Software-Entwicklung und -Wartung

  • Software-Entwicklung innerhalb einer sicheren Umgebung gemäß aktueller Security Best Practices

  • Auslieferung an Kunden erst nach Verifizierung der Sicherheit

Gemäß diesen Grundsätzen deckt das SSDLC sämtliche Phasen im Lifecycle einer Anwendung ab – von ihrer Konzeptionierung, Entwicklung und Marktreife bis hin zu ihrem Support-Ende.

3. Beseitigung von Open-Source-Schwachstellen

Open-Source-Tools bieten so vielfältige wie attraktive Vorteile, nicht zuletzt auch im Hinblick auf ihre Kosteneffizienz. Zugleich können sie aber auch ganz erhebliche Schwachstellen aufweisen. Unabdingbar daher: Durchgängiges Monitoring der von Ihnen genutzten Open-Source-Software auf Schwachstellen sowie regelmäßige Updates und Patches, um sie stets bestmöglich sicher zu halten.

4. Automatisierung von Security-Routineaufgaben

Nicht selten werden Entwickler von der Zahl erkannter Schwachstellen geradezu überrollt. Selbst beim besten Willen lässt sich da manuell kaum etwas ausrichten. Unabdingbar sind daher automatisierte Prozesse sämtlicher Routineaufgaben, damit sich Ihre Teams ganz auf die besonders komplexen Probleme konzentrieren können.

5. Klarheit über sämtliche Komponenten

Ohne Visibility keine Security: Erst, wenn Sie sämtliche Komponenten Ihrer Anwendungen wie auch der zugehörigen Dev-Infrastruktur genau kennen, können Sie auch an den richtigen Stellschrauben für ihre Sicherheit drehen.

6. Evaluierung Ihrer Risikoexposition

Hierbei gilt es, Ihre Anwendungen aus Perspektive eines Angreifers auszuleuchten. Entscheidend ist dabei eine lückenlose Betrachtung:

  • Bestandsaufnahme sämtlicher potenziell angreifbarer Komponenten

  • Identifikation von Bedrohungen und passenden Strategien für ihre Eingrenzung und Mitigierung

  • Ermittlung möglicher Angriffsvektoren zur Kompromittierung Ihrer Anwendung

  • Evaluierung bestehender Maßnahmen zur Erkennung und Vorbeugung von Angriffen

  • Bestimmung ggf. nötiger zusätzlicher oder alternativer Tools zur Stärkung der Sicherheit

7. Security-Training für Dev-Teams

Der Weg in die Produktionsumgebung führt bekanntlich über die Entwicklung. Entsprechend wichtig ist es also, dass Ihr Security-Team den Verantwortlichen das Know-how vermittelt, das sie für den Sicherheitskontext ihrer jeweiligen Rolle benötigen.

8. Adäquates Container-Management

Ganz generell sollten Sie Container stets anhand von digitalen Signaturen absichern, so etwa mittels Content Trust im Falle von Docker-Images. Außerdem wichtig sind automatische Scans auf Open-Source-Schwachstellen, damit Container-Sicherheit in der gesamten CI/CD-Pipeline durchgängig gewährleistet bleibt.

9. Datenzugriff reduziert auf das nötige Minimum

Eine der effektivsten Sicherheitsmaßnahmen besteht darin, nutzerseitige Zugriffsrechte so weit wie möglich einzuschränken:

  • Ermitteln Sie alle Nutzergruppen und ihre spezifischen Anforderungen für den Zugriff auf Ressourcen.

  • Richten Sie Zugriffsregeln ein.

  • Vergeben Sie Zugriffsrechte stets nur für Nutzerkonten, die diese aktuell benötigen. Andernfalls löschen Sie die jeweiligen Konten.

10. Regelmäßige Updates und Patches

Besonders effektiv adressieren Sie Sicherheitsprobleme zudem mit Updates und Patches, ersparen Sie sich damit doch den Aufwand, sich die Lösungswege selbst zu erarbeiten. Einzig wichtig ist dabei die Planung. Denn ggf. müssen Sie Ihre Architektur entsprechend der neu installierten Versionen anpassen, damit die Kompatibilität mit APIs weiterhin gewährleistet bleibt.

11. Logging für fundierte Daten

Das A und O für einen zielsicheren Incident-Response-Plan sind Log-Daten zur Historie der Vorgänge in Ihrer Cloud-Infrastruktur. Denn darüber können Sie nicht nur die Event-Kette bis zum Incident zurückverfolgen, sondern anhand dieser Erkenntnisse womöglich auch künftigen Sicherheitsproblemen vorbeugen. Ganz ohne diese Daten würden Sie dagegen mehr oder weniger komplett im Dunkeln tappen.

12. Verschlüsselung sämtlicher Daten

Ganz gleich, ob bei der Übertragung oder Speicherung, Ihre Daten sind nur sicher, wenn sie zu jeder Zeit verschlüsselt sind. Als Standardverfahren gilt hier SSL, dies unter Verwendung eines aktuellen Zertifikats. Auch sollten Sie sensible Nutzerdaten wie IDs oder Passwörter niemals nur als Plain Text speichern, denn dadurch würden sie höchst anfällig gegenüber Man-in-the-Middle-Angriffen. Verschlüsseln Sie diese Daten daher stets anhand der stärksten verfügbaren Algorithmen.

13. Penetrationstests

Automatisierte Testverfahren decken zwar das Spektrum möglicher Sicherheitslücken recht vollständig ab. Ein gewisses Restrisiko bleibt jedoch immer. Daher empfiehlt es sich, Ihre Anwendung zusätzlich auch Penetrationstests zu unterziehen. Vonnöten ist hierfür langjährige Erfahrung, daher werden diese häufig von speziell mit Hacker-Taktiken vertrauten Experten durchgeführt. Anhand dieser versuchen sie in eine Anwendung einzubrechen, um potenzielle Angriffsvektoren aufzudecken und so dazu beizutragen, das System gegen diese abzusichern. Wichtig ist dabei, dass diese Tests von einer Person durchgeführt werden, die nicht in die Entwicklung der jeweiligen Anwendung involviert war.

14. Stets genaue Input-Validierung

Im Hinblick auf Daten-Inputs ist es absolut zentral, dass weder Syntax noch Semantik von den definierten Grenzen abweichen. Dies bedeutet, das ihre Länge und Größe ebenso validiert werden muss wie etwa auch die Anzahl der enthaltenen Ziffern oder Zeichen. Wenn auch nicht in allen Fällen anwendbar, sollten Sie die Validierung nach Möglichkeit immer anhand von Whitelists durchführen.

15. Nachhaltige Fixes

Beim Blick darauf, welche Exploits mit den in CVE-Listen erfassten Schwachstellen in Verbindung stehen, findet man einige Kandidaten mit besonderer Regelmäßigkeit. So etwa Cross-Site-Scripting (XSS), SQL-Injection oder Buffer Overflows. Untersuchen Sie bei neu bekannt gewordenen Schwachstellen daher immer ihre eigentliche Ursache. Denn wenn Sie diese direkt angehen, können Sie sich viel effektiver schützen als nur durch punktuelle Fixes.

Fazit

In Security-Fachkreisen kursieren zwar verschiedenste Ansichten und Meinungen dazu, welche Strategien und Methodiken am besten zur Absicherung von Anwendungen geeignet sind. Im Hinblick auf die hier aufgeführten Punkte besteht aber dennoch ein breiter Konsens, daher sollten sie auch als Kernaspekte einer jeden AppSec-Checkliste angesehen werden.

Über den Tellerrand hinauszublicken ist aber immer sinnvoll, können Sie so doch womöglich noch weitere Fehlerquellen und Risikoherde in Ihren Anwendungen eliminieren – und böswilligen Akteuren damit noch effektiver einen Riegel vorschieben.

FAQs zu Anwendungssicherheit

Was bedeutet Sicherheit im Anwendungskontext?

Auch Anwendungssicherheit genannt, geht es dabei im Kern darum, Schwachstellen auf Anwendungsebene aufzuspüren und zu beheben. Anhand verschiedener Methodiken wird ergänzend dazu außerdem der Security-Status einer Anwendung insgesamt gestärkt.

Welches Tooling wird für AppSec-Tests empfohlen?

Hierzu gilt zu bemerken: Es gibt nicht das eine Security-Tool oder Testverfahren, das in der Lage wäre, ausnahmslos alle potenziellen Risiken zu eliminieren. Bestmöglich lässt sich dies nur anhand einer Kombination aus Tools gewährleisten, die neben Static Application Security Testing (SAST), Interactive Application Security Testing (IAST) und Dynamic Application Security Testing (DAST) auch Verfahren für Software Composition Analysis (SCA) umfassen.

Was sind die gängigsten Verfahren im Zusammenhang mit Security-Tests für Anwendungen?

Geht es darum, den Quellcode auf Schwachstellen zu untersuchen, kommen in aller Regel Tools für Static Application Security Testing (SAST) zum Einsatz. Im Unterschied dazu werden Anwendungen beim Dynamic Application Security Testing (DAST) direkt in der Runtime auf Schwachstellen untersucht, indem aktiv Exploits gegen sie gefahren werden.

wordpress-sync/Introducing-open-source-security-runtime-monitoring-