zurück zur Übersicht

Statische Codeanalyse schmerzlos automatisieren

Anwendungssicherheit gewährleisten durch statische CodeanalyseStatische Codeanalyse, auch statischer Scan genannt, durchforstet Quellcode, Byte-Code oder kompilierten Binärcode mit Hilfe eines Scanners nach Sicherheitsproblemen. Danach können die Ergebnisse bewertet werden. Die Anzahl an potenziell für Angriffe nutzbaren Vulnerabilities kann durch so einen Scan gezielt deutlich reduziert werden. Laut Gartner befinden sich 90% der Schwachstellen auf der Applikationsebene und rund 70% der Attacken finden genau hier statt.

Eine wichtige Voraussetzung für die Durchführung eines solchen Scans ist, dass der Quellcode ohne Fehler kompilierbar oder interpretierbar ist, um möglichst genaue Ergebnisse zu gewährleisten. Bei Binärcode ist dies sogar zwingend erforderlich.

Oft wird kritisiert, dass eine statische Codeanalyse sehr aufwändig sei. Das ist so nicht (mehr) ganz korrekt. Heute lässt sich die Analyse gut in den Build-Prozess integrieren und vor allem automatisieren, so dass gefundene Schwachstellen noch vor dem Release gefixt werden können.

Volle Flexibilität durch verschiedene Integrationsoptionen
Es existieren verschiedene Möglichkeiten, statische Codeanalyse in die bestehende Toolchain des Build-Prozesses zu integrieren. Entwickler haben drei Möglichkeiten einen Scan zu initiieren:

  • On-Demand-Scan
    Der Entwickler startet den Scan direkt von seiner IDE (Integrated Development Environment), z.B. Eclipse. Alternativ kann ein Scan auch per Command-Line gestartet werden. Hierbei ist keine Continuous Integration in den eigentlichen Build-Prozess angedacht.
  • Build-Initiated-Scan
    Wurde der Build-Prozess erfolgreich abgeschlossen, wird der Scan im Anschluss automatisch auf dem Build-Server ausgeführt, auf dem sich der aktuelle Quellcode befindet. Diese Form der Integration eignet sich besonders für Build-Server wie Jenkins oder Microsoft Team Foundation Server (TFS), weil dafür auch Plugins existieren.
  • Scan-Initiated-Build
    Hier erfolgt die Integration in umgekehrter Weise. Der Scan-Prozess veranlasst den Build und kann so nachvollziehen, welche Dateien für ein Projekt relevant sind. So können Build-Tools wie ant, maven, make oder cmake einfach integriert werden.

Um die Optionen „Build-Initiated-Scan“ und „Scan-Initiated-Build“ greifbarer zu machen habe ich nachfolgend zwei konkrete Beispiele für Sie.


 

Beispiel 1: Java, Jenkins Build Server, Maven, HPE Fortify Scanner

Auf dem Jenkins Build-Server wird bereits Maven genutzt, um das Projekt zu bauen (mvn clean compile). Ist das erfolgreich, so werden noch drei weitere Schritte (clean, translate, scan) durchlaufen, um den Scan zu starten. Diese sind jeweils als Fortify-Maven-Plugin verfügbar.

Folgende Kommandos sind notwendig:

mvn clean compile
mvn com.fortify.ps.maven.plugin:sca-maven-plugin:clean
mvn com.fortify.ps.maven.plugin:sca-maven-plugin:translate
mvn com.fortify.ps.maven.plugin:sca-maven-plugin:scan

Die Konfiguration der Maven Goals, mit denen letztlich die Automatisierung erfolgt, ist in nachfolgendem Screenshot dargestellt.

Abbildung 1: Scan initiiert durch Maven Goal
Abbildung 1: Scan initiiert durch Maven Goal


 

Beispiel 2: C++/C, cmake, make, HPE Fortify Scanner

Auf einem Linux-basierten Build-System sind cmake/make und die benötigten Compiler g++, gcc, sowie HP Fortify als Code-Scanner installiert. Unabhängig davon, ob make, gmake oder cmake verwendet wird, muss der Wert der Parameter CC und CXX angepasst werde. Die Initiierung des Builds erfolgt unmittelbar vor dem Scan.

sourceanalyzer –b <project_ID> clean
CC=“sourceanalyzer -b project_ID gcc“ CXX=“sourceanalyzer -b sample_project g++“ cmake ..
make
sourceanalyzer –b project_ID scan

Besteht ein Projekt aus mehreren Programmiersprachen, muss gegebenenfalls der Build-Prozess mehrmals aufgerufen werden. Dies hat aber keinen Einfluss auf den Scan. Er wird immer nur einmal ausgeführt.


 

Fazit: statische Codeanalyse lohnt sich

Dieser Artikel soll deutlich machen, wie einfach die Integration von Code-Scannern und gängigen Build-Werkzeugen realisierbar ist. Moderne Code-Scanner bieten außerdem die Möglichkeit, weitere Tools über APIs anzubinden. Die permanente Bedrohungslage zwingt immer mehr Unternehmen, sich freiwillig oder unfreiwillig Compliance-Richtlinien und Sicherheitsaudits zu unterwerfen. Dabei spielt die Sicherheit der verwendeten Software eine immer größere Rolle. Die logische Folge sind erheblich höhere Anforderungen an die Entwicklung. Ein Vorsprung in diesem Bereich ist ein nicht zu unterschätzender Vorteil.

Wenn Sie selbst überprüfen möchten, ob es möglich ist, statische Codeanalyse in Ihren Software-Entwicklungs-Prozess zu integrieren, dann sprechen Sie uns an. Wir gehen mit Ihnen gemeinsam auf den Weg zur sicheren Anwendungsentwicklung. Mehr Informationen zum Thema Code-Analyse finden Sie hier.


 

Bild: ©iT-CUBE SYSTEMS AG 2016

Schreibe einen Kommentar