Statische Quellcode Analyse

Identifizierung bisher nicht erkannter Sicherheitslücken in Standard- und Individualsoftware

Ab der Implementierungsphase wird die Konformität des Quellcodes der Zielsoftware mit formalen Methoden auf Einhaltung syntaktischer Programmierkonventionen der Programmiersprache, sowie auf Einhaltung der Programmierrichtlinien überprüft. Dieses Verfahren ist vergleichbar mit einem Parser, der eine lexikalische, syntaktische und semantische Analyse des Programmcodes durchführt.

Aufgrund lexikalischer Regeln der verwendeten Programmiersprache und den semantischen Zugehörigkeiten benötigen die einzelnen Fehler im Allgemeinen einen manuellen Audit, um false positives auszuschließen und entsprechende Behebungsstrategien zu entwerfen. Die Qualität und Quantität des Analyse-Resultats hängt somit maßgeblich von der Auswahl geeigneter Tools und dem manuellen Audit ab.

Verfahren

Static Code Analysis (Code Review, statische Source Code Analyse) wird Tool-gestützt automatisiert bzw. semi-automatisiert durchgeführt. Die Befunde der Tools werden gesammelt und „manuell“ ausgewertet. Analysiert wird der Quellcode (Whitebox) der Zielsoftware. Der systematische Ablauf der Static Code Analysis ist in der Abbildung grafisch dargestellt.

static source code process
static source code process

In den modernen Static Code Analysis Tools, die wir einsetzten, wird neben der statischen Analyse meist auch noch der Bau- und Link-Vorgang zum Erstellen der ausführbaren Datei mit betrachtet. Dadurch können weitere sonst nicht erkennbare Fehler mit berücksichtigt werden.

Im Bereich Static Code Analysis werden drei Tool-Klassen unterschieden:

  • Style Checking Tools verifizieren den Source-Code bezüglich der Einhaltung syntaktischer Programmier-Richtlinien. Diese einfachen Tools finden meist keine Fehler, die einen Software-Defekt hervorrufen.
  • Semantic Analysis Tools fügen zusätzlich semantische Informationen zum Syntaxbaum des Compilers hinzu. Diese werden mithilfe verschiedener Regeln auf statisch feststellbare Fehler verifiziert. Typische Fehler sind Datentyp-Probleme, nicht initialisierte Variablen und ungenutzte Methoden.
  • Deep Flow Static Analysis ist die effektivste Toolklasse: Die semantische Analyse wird um eine „control-flow graph“-Generierung und eine Data Flow Analyse ergänzt. Somit ist es möglich, komplexe Fehler, die etwa auf Race Conditions, Deadlocks oder falsche Pointerverwaltung basieren, zu identifizieren.

Wollen Sie sicher gehen, dass Ihre Software vor Angriffen geschützt ist, dann kontaktieren Sie uns!