In this article
Code-Sicherheitsprüfungen: ein Überblick
In der modernen Softwareentwicklung ist die Code-Sicherheitsanalyse ein entscheidender Bestandteil des Grundsatzes „Vorbeugen ist besser als heilen“. Code-Sicherheitsprüfungen verbessern die Codequalität und sind daher eine bewährte DevSecOps-Praxis für jedes Unternehmen.
Was ist ein Code-Sicherheitsaudit?
Ein Code-Sicherheitsaudit (auch Software-Sicherheitsaudit oder Software-Code-Audit genannt) ist die Analyse des Quellcodes oder die Untersuchung eines Programms zur Laufzeit, um Sicherheitslücken, nicht konforme Lizenzen und andere Programmierprobleme aufzudecken. Der wichtigste Vorteil eines Code-Sicherheitsaudits besteht darin, Probleme vor der Veröffentlichung der Software zu erkennen, sodass keine Nutzerinnen und Nutzer davon betroffen sind. Es ist ein wichtiger Bestandteil von DevSecOps und sicheren Programmierpraktiken und wird in der Regel eingesetzt, um Risiken im Bereich Cybersicherheit sowie rechtliche und Compliance-Risiken zu prüfen.
Die Einrichtung eines Tools für Code-Sicherheitsprüfungen liegt im Allgemeinen in der Verantwortung der DevOps- und – sofern vorhanden – DevSecOps-Teams. Da bei der statischen Codeanalyse außerdem der Quellcode direkt gescannt wird, sollte mindestens ein Entwickler eingebunden sein, um mögliche Sicherheitslücken einzuschätzen.
Arten von Code-Sicherheitsprüfungen
Die beiden häufigsten Arten von Prüfungen sind die statische und die dynamische Codeanalyse.
Bei der statischen Codeanalyse, auch bekannt als statische Codeanalyse oder einfach als Scan bezeichnet, werden Quelldateien auf Sicherheitslücken untersucht. Anders ausgedrückt: Es handelt sich um eine automatisierte Codeprüfung, die sich auf verschiedene Aspekte konzentrieren kann, etwa Codierungsstandards, Codeformatierung oder Sicherheitslücken im Code.
Die in der Branche am weitesten verbreitete Art der Code-Sicherheitsprüfung ist die statische Analyse mit Fokus auf Sicherheitslücken im Code. Darauf konzentriert sich dieser Artikel. Erfahren Sie hier mehr über die verschiedenen Arten von Sicherheitsprüfungen.
Warum sind Codeprüfungen wichtig?
Wenn Sie auf Code-Sicherheitsanalysen verzichten, setzen Sie sich Risiken aus. Das Scannen von Code auf Sicherheitslücken gilt allgemein als wichtigste Funktion der statischen Analyse, da es langfristig dazu beiträgt, Cyberangriffe auf Ihre bereitgestellte Software zu verhindern. Mit einer zuverlässigen Pipeline, die Ihren Quellcode scannt, lassen sich Sicherheitslücken erkennen. So können Sie sofort Maßnahmen ergreifen und das Zeitfenster für einen Angriff verkürzen.
Auch rechtliche Fragen und Compliance-Risiken müssen berücksichtigt werden, wie weiter unten erläutert.
Im Open-Source-Bereich gelten statische Codeanalysen, einschließlich statischer Codeanalysen für Open Source und Open-Source-Prüfungen, ebenfalls als Best Practice.
Was bei Code-Sicherheitsprüfungen zu beachten ist
Code-Sicherheitsprüfungen sollten auf die jeweilige Codebasis zugeschnitten sein. Mehrere häufige Sicherheitslücken bieten jedoch einen guten Ausgangspunkt:
Eingabevalidierung/SQL-Injection
Bibliotheken von Drittanbietern
Fest codierte Zugangsdaten
Schwache Kryptografie
SSL-/TLS-Version
Speicherüberlauf
Compliance
Lizenzierung
Projektspezifische Prüfungen
Sehen wir uns die einzelnen Punkte genauer an:
1. Eingabevalidierung/SQL-Injection
SQL-Injection zählt zu den häufigsten Cyberangriffsmethoden. Dabei wird eine SQL-Abfrage genutzt, um Ihre Anwendung zur Ausführung einer schädlichen SQL-Transaktion zu verleiten. Häufig wird SQL-Code in Eingabefelder auf einer Webseite eingeschleust. So können Angreifer beispielsweise unbefugten Zugriff auf Daten erhalten oder Daten löschen. Die statische Codeanalyse hilft, solche Angriffe zu verhindern, indem sie Stellen erkennt, an denen SQL eingeschleust werden könnte.
2. Bibliotheken von Drittanbietern
Bibliotheken von Drittanbietern sind ein wichtiger Bestandteil der modernen Softwareentwicklung. Entwickler können Code wiederverwenden, der von anderen erstellt und getestet wurde. Das steigert die Effizienz des Teams und schafft mehr Freiraum, sich auf zentrale Geschäftsziele zu konzentrieren.
Der Nachteil von Bibliotheken Drittanbieter ist, dass sie anfällig für Sicherheitslücken sind. Diese Risiken lassen sich jedoch mindern, indem Sie den Quellcode analysieren und alle Bibliotheken täglich prüfen.
3. Fest codierte Zugangsdaten
Im Allgemeinen dürfen API-Schlüssel und Passwörter nicht fest im Quellcode hinterlegt sein. Beim lokalen Testen einer neuen Funktion oder Integration vergessen Entwickler jedoch manchmal, fest codierte Zugangsdaten zu entfernen.
Falls ein fest codierter Wert bei der Codeprüfung unentdeckt bleibt – etwa in einem sehr umfangreichen Merge- oder Pull-Request –, sollte ein Tool zur statischen Codeanalyse ihn finden und Sie darauf hinweisen.
4. Schwache Kryptografie
Einige Kryptografiealgorithmen sind nicht sicher und sollten in sicheren Anwendungen verboten sein, auch wenn sie bei älteren Anwendungen weit verbreitet sind. Ein Beispiel ist der MD5-Hash-Algorithmus, den Sie vermeiden sollten. Je nach Anwendung kann stattdessen das sicherere Verfahren SHA-256 verwendet werden.
5. SSL-/TLS-Version
Die SSL-/TLS-Verschlüsselung, deren neueste Version TLS 1.3 ist, ist eine unverzichtbare Methode der Internetsicherheit. Wenn Ihre Codebasis beispielsweise einen HTTP-Server mit einer veralteten TLS-/SSL-Version betreibt – oder, noch schlimmer, älterer Code einen Webserver in einem nicht privaten Netzwerk ohne TLS/SSL ausführt –, kann die statische Codeanalyse dies erkennen und Sie warnen.
6. Speicherüberlauf
Ein Speicherüberlauf tritt auf, wenn ein Speicherpuffer seine festgelegte Grenze überschreitet. Dadurch kann der nächste Speicherbereich überschrieben werden. Das Problem tritt häufiger in Sprachen wie C und C++ auf, mit denen sich der Speicher einfacher manipulieren lässt.
Mit einer geeigneten sicheren Codeanalyse lassen sich Speicherüberläufe oft im Quellcode erkennen und gefährliches Laufzeitverhalten verhindern. Für Entwickler eingebetteter, industrieller und hochperformanter Systeme ist das unverzichtbar.
7. Compliance
In einigen Branchen ist die Einhaltung von Standards wie ISO vorgeschrieben. ISO 270001 und ISO 26262 legen beispielsweise konkrete Anforderungen für die Softwarezertifizierung fest. Die statische Codeanalyse kann auch dabei helfen, die Einhaltung anderer Standards zu überprüfen, etwa SOC für die Verwaltung von Kundendaten und PCI für Anwendungen im Zahlungsverkehr. Mit statischer Codeanalyse können Sie prüfen, ob Ihr aktueller Code den Anforderungen entspricht, und sicherstellen, dass auch neu hinzugefügter Code konform ist.
8. Lizenzierung
Die meisten modernen Softwareprojekte nutzen externe Softwarebibliotheken. Die Wiederverwendbarkeit von Code ist ein großer Vorteil für Softwareentwickler. Für die meisten externen Bibliotheken (zum Beispiel Module oder Frameworks) gelten Lizenzbedingungen wie MIT, GPL, BSD und weitere.
Einige Lizenzen sind auch für die kommerzielle Nutzung kostenlos, während für andere Gebühren anfallen. Durch das Analysieren Ihrer Abhängigkeiten kann die statische Codeanalyse überprüfen, ob Sie die Lizenzbedingungen Ihrer externen Bibliotheken einhalten. Dadurch sinkt das Risiko rechtlicher Schritte gegen Ihr Unternehmen.
9. Sonstiges
Code-Sicherheitsprüfungen können zahlreiche weitere Aspekte überprüfen, darunter die Einhaltung von Codierungsstandards und die Codeformatierung. Ein Tool für Sicherheitsprüfungen kann Teile der Codeprüfung automatisieren – eine bewährte Praxis für sichere Codeprüfungen. Am wichtigsten ist, dass Ihre Code-Sicherheitsprüfung nach den Arten von Sicherheitslücken sucht, die Ihr Unternehmen am stärksten gefährden und am ehesten auftreten können.
Wenn Sie beispielsweise an einer Codebasis für ein eingebettetes System in C arbeiten, die keine Datenbankverbindung hat, ist SQL-Injection weniger bedenklich. Die Prüfung auf Speicherüberläufe ist hingegen entscheidend.
Welche Tools eignen sich für Code-Sicherheitsprüfungen?
Für Code-Sicherheitsprüfungen stehen verschiedene Testtools zur Verfügung, darunter:
Statische Anwendungssicherheitstests (SAST): Analysieren den Quellcode, um Probleme zu finden.
Dynamische Anwendungssicherheitstests (DAST): Führen Ihre Anwendung aus und bewerten Ihre Anwendungssicherheit mit Methoden wie Penetrationstests für Anwendungen.
Software Composition Analysis (SCA): Sucht nach Sicherheitslücken in direkten und indirekten Open-Source-Abhängigkeiten.
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.
Automatisierte Scans und Berichte
Es empfiehlt sich, Code-Scans in Ihre CI/CD-Pipelines zu integrieren, etwa in GitHub Actions, GitLab oder Jenkins. Automatische Scans lassen sich mit den meisten modernen CI/CD-Tools durchführen und sind wesentlich effizienter als manuelle Prüfungen. Sie sparen Zeit und Aufwand, werden nur bei Bedarf ausgeführt und vermeiden Probleme durch menschliche Fehler.
Je nach Situation ist es wirksam, bei jedem Pull- oder Merge-Request einen Scan auszuführen, um Sicherheitslücken in Ihrer Codebasis zu verhindern. Empfehlenswert ist auch ein Cronjob, der die Analyse alle 24 Stunden durchführt, da ständig neue Sicherheitslücken in die externe Datenbank aufgenommen werden.
Je schneller Ihr Team über ein Problem in der Codebasis informiert wird, desto schneller kann es dieses beheben und weitere Bedrohungen abwehren. Damit Sie schnell auf Sicherheitslücken im Quellcode reagieren können, sollten Sie Benachrichtigungen für erkannte Probleme einrichten. Ein Benachrichtigungsmechanismus lässt sich einfach in Ihre CI/CD integrieren. Eine Benachrichtigung kann beispielsweise eine E-Mail sein, die Sie darüber informiert, dass Ihre Pipeline zur statischen Analyse fehlgeschlagen ist.
Ein Tool für Code-Sicherheitsprüfungen auswählen
Bei der Auswahl eines Tools für statische Analysen oder einer Sicherheitsprüfungssoftware sollten Sie einige Kriterien berücksichtigen:
Programmiersprache: Wählen Sie ein Tool, das die in Ihrer Codebasis verwendete Programmiersprache unterstützt. Einige Tools zur statischen Analyse unterstützen mehrere Programmiersprachen, sodass Sie ein einziges Tool für all Ihre Codebasen einsetzen können.
Kernfunktionen: Entscheidend bei der Wahl des richtigen Tools ist, dass es die Risiken abdeckt, die für Ihr Unternehmen und Ihre Codebasis relevant sind. Je nach Branche und Anforderungen benötigen Sie möglicherweise kein Tool zur Prüfung der ISO-Konformität. Auch ein Speicherüberlauf ist für Ihre Umgebung oder Programmiersprache eventuell nicht relevant.
CI/CD-Integration: Die meisten Tools lassen sich problemlos in CI/CD integrieren. Das ist wichtig, um den Scanprozess zu automatisieren.
IDE-Integration: Mit integrierten IDE-Tools können Sie Scans direkt in der Entwicklungsumgebung mit einem Klick ausführen. Sie können die Scans sogar so konfigurieren, dass sie vor einem Commit starten.
Erste Schritte mit Code-Sicherheitsprüfungen
Die Quellcodeanalyse ist ein wichtiger Bestandteil sicherer Programmierpraktiken und sollte zusammen mit Cybersecurity-Audits fester Bestandteil jedes Cyberrisikomanagementprogramms sein.
Snyk Code unterstützt zahlreiche moderne Programmiersprachen wie JavaScript und Go und findet Sicherheitslücken direkt in Ihrem Code. Snyk Open Source analysiert Projektabhängigkeiten und erkennt Sicherheitslücken automatisch.
Seien Sie auf den nächsten Log4j-Fall vorbereitet. Schützen Sie Ihre Codebasis und wehren Sie Bedrohungen mit den entwicklerorientierten Tools von Snyk ab. Registrieren Sie sich kostenlos oder buchen Sie eine Demo. Testen Sie unseren kostenlosen Online-Code-Checker, um zu sehen, wie die Snyk-Code-Engine Ihren Code auf Sicherheits- und Qualitätsprobleme analysiert.