Analysewerkzeuge

Moderne statische Codeanalyse für das Internet der Dinge

Seite: 3/3

Firmen zum Thema

Analyse riskanter Informationsflüsse

Um zu verfolgen, wie Informationen von der Angriffsfläche zu den sensiblen Punkten im Programm gelangen, arbeiten moderne Tools mit der Taint-Analyse. Taint-Quellen und -Senken lassen sich visualisieren, und die am Informationsfluss beteiligten Programmelemente können der normalen Codedarstellung überlagert werden. Das hilft den Entwicklern, die Risiken ihres Codes besser zu verstehen und daran anknüpfend zu entscheiden, mit welchen Codeänderungen sich die Schwachstellen beseitigen lassen.

Bild 2: Diese ‚Tainted Buffer Access‘-Warnung zeigt unterstrichen die Auswirkungen
Bild 2: Diese ‚Tainted Buffer Access‘-Warnung zeigt unterstrichen die Auswirkungen
(Bild: Grammatech)

Das Beispiel in Bild 2 zeigt mit der roten Unterstreichung in Zeile 467, dass der Wert der Variable msg verfälscht ist. Die Unterstreichung in der vorigen Zeile verdeutlicht, dass die Verfälschung über den Parameter epd_line in den Prozess SolvePosition gelangt. Der Fläche rechts ist zu entnehmen, dass sie durch den Aufruf von strcpy in Zeile 77 von epd.c entstanden ist.

Das Bild 3 zeigt alternativ den Taint-Verlauf als Baumdiagramm.

Den maximalen Nutzen ausschöpfen

Moderne statische Analysetools sind ausgefeilte und komplexe Softwaresysteme, die sich auf vielerlei Weise konfigurieren und einsetzen lassen. Es bedarf sorgfältiger Planung, um ihren Nutzen zu maximieren. Hier einige Empfehlungen:

Optimierung der Konfiguration: Die meisten modernen Tools können auf Dutzende unterschiedlicher Defekte prüfen, und die Arbeitsweise der einzelnen Checks lässt sich mit zahlreichen Parametern kontrollieren. Es lohnt sich, die Grundkonfiguration zu modifizieren. Am besten wendet man das Tool dazu auf bereits vertrautem Code an. Unter Umständen treten dabei Warnungs-Gattungen auf, die irrelevant sind und daher deaktiviert werden können.

Bild 3: Die Baumdarstellung des Programms zeigt die Module als Hierarchie gemäß der physischen Anordnung des Codes in Dateien und Ordnern. Während die Module mit den meisten Taint-Quellen rot markiert sind, kennzeichnet die blaue Umrandung Module mit Taint-Senken.
Bild 3: Die Baumdarstellung des Programms zeigt die Module als Hierarchie gemäß der physischen Anordnung des Codes in Dateien und Ordnern. Während die Module mit den meisten Taint-Quellen rot markiert sind, kennzeichnet die blaue Umrandung Module mit Taint-Senken.
(Bild: Grammatech)

Ebenso sind Falsch-Positivmeldungen möglich. Hierbei sind Kompromisse erlaubt: Zum Beispiel kann man die Fähigkeit des Tools zum Aufdecken bestimmter Defektklassen verbessern, indem man ihm mehr Zeit einräumt oder die Genauigkeit reduziert. Grundsätzlich ist Augenmaß gefragt: Obwohl Falsch-Positivmeldungen lästig sind, sollte man sie – auch in größerer Zahl – tolerieren, wenn das Tool dadurch mehr echte Defekte findet.

Rollout-Planung: Wird die statische Analyse erstmals an einem Programm vorgenommen, lässt sich die Vielzahl der Warnungen unter Umständen nicht sofort bewältigen. Es ist möglich, diese als Baseline-Warnungen zu markieren, die später bearbeitet und aus der Default-Ansicht ausgeblendet werden, um sicherzustellen, dass neuer Code keine neuen Warnungen generiert.

Nutzung des Continuous-Integration-Konzepts (CI): Defekte lassen sich umso leichter beseitigen, je früher sie entdeckt werden. Die fortschrittliche statische Analyse ist also dann am wertvollsten, wenn sie sowohl von den einzelnen Entwicklern als auch im Rahmen eines CI-Systems genutzt wird.

Integration mit anderen Tools: Es ist sinnvoll, fortschrittliche statische Analysetools mit anderen Entwicklungswerkzeugen wie etwa Bug-Trackern zu integrieren.

Individualisierung: Die meisten Codebasen weisen bereichsspezifische Besonderheiten auf, die es zu beachten gilt. Während moderne statische Analysetools auf das Finden allgemeiner Defekte spezialisiert sind, lassen sie sich durch individuelle Checks für diese bereichsspezifischen Regeln erweitern. Die ausgefeiltesten Tools bieten ein API, das den Endanwendern den Zugang zu den internen Repräsentationen gestattet.

* Paul Anderson ist Vice President für Engineering beim Codeanalyse-Spezialisten Grammatech. Er lebt und arbeitet in Ithaca im US-Bundesstaat New York.

Artikelfiles und Artikellinks

(ID:44230359)