Sichere Programmierungspraktiken, die Sie kennen sollten
Exploits und Hackerangriffe mit sicherem Quellcode verhindern
In unserer vernetzten Welt, in der alles von Software abhängt, hat das Thema Anwendungssicherheit in der Entwicklung oberste Priorität. Die gute Nachricht lautet, dass viele Exploits und Angriffsflächen mit einem sicheren, gut durchdachten Quellcode beseitigt werden können.
Der Quellcode beinhaltet eine Reihe von Anweisungen, die das Verhalten und die Funktionen von Anwendungen bestimmen. Man könnte ihn daher auch als DNA der Anwendung bezeichnen. Dieser Quellcode wird in Anweisungen übersetzt, die dann von einem Computer ausgelesen und ausgeführt werden.
Was ist eine sichere Programmierung?
Eine sichere Programmierung beinhaltet Code in einer höheren Programmiersprache, der festen Grundsätzen folgt. Ziel ist es dabei, etwaige Schwachstellen zu beseitigen, die die Daten- und Systemsicherheit gefährden könnten.
Eine sichere Programmierung umfasst aber noch mehr als das bloße Schreiben, Kompilieren und Freigeben von Quelltext in einer Anwendung. Denn auch auf eine sichere Entwicklungsumgebung kommt es an. Diese sollte eine zuverlässige, sichere IT-Infrastruktur, sichere Hard- und Software und sichere Dienste und Anbieter beinhalten.
Wieso ist sicheres Programmieren so wichtig?
Immer mehr Finanzgeschäfte werden über das Internet abgewickelt. Sicherheitsprobleme haben ihren Ursprung häufig in den tieferliegenden Software-Ebenen und können gravierende Konsequenzen für Unternehmen und Menschen haben. Ein unsicherer Quelltext kann in kritischen Branchen wie dem Finanz- oder Gesundheitswesen oder dem Energie- und Verkehrssektor enorme Finanz- und Sachschäden verursachen. Zudem kann er Marktmanipulation und Diebstahl und sogar Personenschäden bis hin zu Todesfällen nach sich ziehen.
Die Gefahr ist real: Medienberichte der vergangenen Jahre belegen, wie unsicher ein Großteil unserer Software tatsächlich ist. Selbst in großen Unternehmen mit ausreichend Ressourcen und Wissen kommt es immer wieder zu Datenlecks. Und für Unternehmen, die Software für Privat- oder Firmenkunden anbieten, ist das Kundenvertrauen ein hohes Gut, dessen Verlust sich unmittelbar auf den Unternehmensgewinn auswirkt. Vor diesem Hintergrund sollten sichere Programmierungspraktiken für Unternehmen also oberste Priorität haben.
Grundlagen der sicheren Programmierung
Bei den Themen Programmiersicherheit und Sicherheit im Allgemeinen sollten Sie getreu dem Motto Keep It Simple, Stupid(KISS) alles möglichst einfach halten. Übermäßig komplizierte Abläufe können zu uneinheitlichen Ergebnissen führen oder werden schlicht ignoriert. Niemand muss jedoch das Rad neu erfinden. Vielmehr sollten Sie sich auf Best Practices für sichere Programmierung verlassen. Die OWASP Foundation hat dazu einige hilfreiche Materialien im Repertoire. Die OWASP Top 10 enthalten beispielsweise die häufigsten Sicherheitsrisiken und eignen sich damit gut als Ansatzpunkt.
Die Zugangssteuerung umfasst Authentifizierung und Autorisierung und ist einer der wichtigsten Bausteine für den Schutz Ihres Systems.
Eine robuste Verschlüsselung ist ein weiterer wichtiger Faktor der Systemsicherheit. Es gibt diverse frei verfügbare Bibliotheken, an denen Sie sich bei der Verschlüsselung orientieren können. Damit entfällt bereits ein Großteil des Programmieraufwands. Allerdings sollten Sie darauf achten, wirklich ausschließlich Standardalgorithmen und -bibliotheken zu verwenden. Zudem muss zur Wahrung der FIPS-Compliance sichergestellt werden, dass nur validierte Bibliotheken herangezogen werden.
Die Geheimnisverwaltung ist eine weitere wichtige Sicherheitsmaßnahme. Ob nun eines der zahlreichen verfügbaren Tools für die Geheimnisverwaltung verwendet wird oder nicht – Sie sollten stets darauf achten, dass Geheimnisse niemals hartcodiert und Passwörter und Zugangsschlüssel nicht in Quellcode-Repositories hochgeladen werden.
Die beschriebenen Maßnahmen erhöhen den Schutz Ihres Systems und bilden quasi eine erste Verteidigungslinie. Doch auch der Quellcode selbst muss sicher sein.
Tipps für sicheres Programmieren:
Code minimieren und verschleiern: Wer seinen Quellcode vor unbefugtem Zugriff schützt, kann potenzielle Hacker abwehren. In JavaScript erfolgt dies oft per Code-Minimierung. Dabei werden Leerzeichen und Zeilenumbrüche aus dem Quellcode entfernt. Denn kleinere Quellcode-Dateien erhöhen einerseits die Leistungsfähigkeit, sind andererseits aber auch schwerer auszulesen. Eine weitere, noch wirksamere Technik ist die Code-Verschleierung. Dabei wird unmittelbar lesbarer Quellcode in schwer verständlichen Text umgewandelt.
Abkürzungen vermeiden: Es mag durchaus attraktiv erscheinen, Code schneller in der Produktionsumgebung zu übernehmen. Doch daraus ergeben sich auch ernstzunehmende Sicherheitsprobleme. So kommt es besonders oft zu Hackerangriffen, wenn hartcodierte Anmeldedaten und Sicherheits-Token in Kommentaren genannt werden. Solche Daten sollten immer erst bereinigt werden, bevor Sie die jeweilige Anwendung freigeben. Doch je mehr die Codebasis wächst und je höher der Druck auf die Programmierer wird, desto größer ist auch die Gefahr von Sicherheitslücken.
Automatische Scans und Code-Reviews: Bei Cross-Site-Scripting (XSS), SQL-Injektion und anderen Angriffsformen versuchen Hacker, Exploits im Quelltext auszunutzen. Sowohl XSS als auch SQL-Injektion-Angriffe gehen auf Schwachstellen im Code und die mangelhafte Unterscheidung zwischen Daten und Befehlen zurück. Im Falle von XSS wird dabei Schadcode in Ihrer Domain ausgeführt. Bei einer SQL-Injektion wird dagegen versucht, Daten aus internen Speichern abzugreifen oder zu manipulieren. Eine Kombination aus Prüfungen der Codesicherheit und automatischen Quelltextscans kann dazu beitragen, derartige Angriffe zu unterbinden.
Komponenten mit bekannten Schwachstellen vermeiden: Open-Source-Komponenten und quelloffene Bibliotheken sparen in der Softwareentwicklung Zeit und Aufwand. Sie sind aber auch ein Einfallstor für Hacker und eine beliebte Angriffsfläche für Exploits. Wer also auf Komponenten mit bekannten Schwachstellen verzichtet und in der Entwicklung stets darauf achtet, keine neuen Schwachstellen einzuführen, macht seinen Quellcode damit sicherer.
Prüfen und protokollieren: Wer für ein hinreichendes Monitoring und Logging sorgt, erkennt potenzielle Schwachstellen, wenn der Quellcode in einer Produktionsumgebung eingesetzt wird.
Snyk ist eines der besten kostenlosen Tools für die Prüfung und Überwachung der Code-Sicherheit. Mit dem Open-Source-Schwachstellen-Scanner und unserem Code finden und beheben Sie Schwachstellen in Ihrem Quelltext besonders entwicklerfreundlich.
Auto-Erkennung und -Fixing von Schwachstellen
Snyk bietet Security-Fixes als Pull-Request mit einem Klick und Korrekturempfehlungen für Ihren Code, Abhängigkeiten, Container und Cloud-Infrastrukturen.
Blick aus der Vogelperspektive
Sind die Grundlagen erst einmal gelegt, können Sie weitere Maßnahmen ergreifen, um den Quelltext sicherer zu machen. Ein mehrstufiges Sicherheitskonzept bildet dabei den ersten Schritt. Die Einhaltung von Best Practices und ein sicherer Code sind nur ein Bestandteil davon.
EineSicherheitskultur im Unternehmen bildet eine weitere wichtige Facette. Dazu zählen unter anderem Fortbildungen für Entwicklungs- und IT-Abteilungen, Organisationsmanagement sowie interne und externe Akteure. Zudem empfiehlt es sich, aktiv Angriffsszenarien zu entwerfen, deren Risiko zu bewerten und entsprechende Gegenmaßnahmen zu planen. Dafür gibt es zahlreiche Hilfsmittel wie OWASP und Have I Been Pwned.
Ein sicherer Softwareentwicklungs-Lebenszyklus (Secure Software Development Life Cycle, SSDLC) ist ein weiterer wichtiger Schritt hin zu sicheren Programmierungspraktiken und einer höheren Code-Qualität in der Softwareentwicklung. Dies beinhaltet die Entwicklung und Pflege der Anwendungen in sämtlichen Phasen – von der anfänglichen Anforderungsanalyse über Entwicklung und Erprobung bis hin zu Bereitstellung und Instandhaltung. Bereits bei der ersten Analyse sollten alle Beteiligten die Anforderungen genau prüfen und mögliche Sicherheitsrisiken insbesondere mit Blick auf den Quellcode ansprechen.
Die Verwendung automatischer Tools kann im Rahmen des SSDLC und anderer sicherer Programmierungsvorhaben viel Zeit und Geld sparen. SAST ist dafür nur ein Beispiel und lässt sich schon zu Beginn der Entwicklung implementieren.
Herkömmliche Tools für das Static Application Security Testing (SAST) sind meist langsam und ungenau und liefern zu viele falsch positive Ergebnisse, die ihre Zuverlässigkeit beeinträchtigen. Snyk Code ist im Gegensatz dazu ganz auf Effizienz und Praxisnähe ausgelegt. Die semantische Echtzeit-Quellcodeanalyse macht während des Programmierens praxistaugliche Vorschläge und sorgt damit für eine schnellere und hochwertigere Software-Entwicklung.
Bewährte Leitlinien für sichere Programmierung
Je wichtiger Software in unserem Alltag wird, desto mehr Bedeutung kommt auch der Sicherheit und Unversehrtheit des zugrunde liegenden Quellcodes zu. Viele der in diesem Artikel beschriebenen Verfahren für sichere Programmierung sind nichts Neues und erfahrenen Entwicklern bestens vertraut. Wer es sich nicht zu kompliziert macht und bewährten Branchen- und sicheren Programmierungsstandards folgt, verringert seine Angriffsfläche bereits deutlich und schließt die meisten Einfallstore für Hacker. Und das erhöht die Software-Sicherheit enorm.
Beginnen Sie mit Capture the Flag
Lernen Sie, wie Sie Capture the Flag-Herausforderungen lösen, indem Sie sich unseren virtuellen 101-Workshop auf Abruf ansehen.
Antworten auf häufige Fragen zur sicheren Programmierung
Was sind sichere Programmierungspraktiken?
Bei der sicheren Programmierung wird die Software so geschrieben, dass mögliche Schwachstellen von vornherein geschlossen werden. Das Konzept beinhaltet außerdem, sowohl im eigenen Quelltext als auch in externen Bibliotheken für Sicherheit zu sorgen.
Was sind OWASP-Programmierstandards?
Die OWASP-Programmierstandards stammen von der Open Source Foundation for Application Security. Sie enthalten einerseits Grundsätze der Software-Sicherheit und andererseits Anforderungen an die sichere Programmierung.
Was ist ein sicherer Code-Review?
Bei einem sicheren Code-Review werden mögliche Schwachstellen im Quellcode identifiziert und beseitigt. Dies kann manuell, automatisch oder mit einer Mischung aus manuellen und automatischen Verfahren erfolgen.
Mit Snyk können Sie Ihren Quellcode kontinuierlich auf Schwachstellen scannen und überprüfen. Außerdem sollten Sie unseren kostenlosen Code Checker testen.