Security

Sicher programmieren - aber wie?

5. Mai 2014, 15:38 Uhr | Von Mark Pitchfo
Diesen Artikel anhören

Fortsetzung des Artikels von Teil 2

Metriken decken Risken auf

Statische Software-Analyse-Tools untersuchen den zu analysierenden Code, ohne ihn tatsächlich auszuführen. Besonders geeignet sind diese Tools zum Aufdecken von Verstößen gegen die Codierungsstandards. Darüber hinaus können sie eine Reihe von Metriken (Maßzahlen) ausgeben, an denen sich die Qualität des in der Entwicklung befindlichen Codes beurteilen und verbessern lässt. Eine solche Metrik ist die Angabe der zyklomatischen Komplexität, mit der sich unnötig komplexe, schwierig zu testende Software identifizieren lässt.

Der Einsatz statischer Analyse-Tools bei der Herstellung sicherer Software zielt in erster Linie darauf ab, potenzielle Angreifbarkeiten im Code aufzudecken. Fehler, die sich mit statischen Analyse-Tools identifizieren lassen, sind beispielsweise

  • Verwendung unsicherer Funktionen
  • Array-Überläufe
  • Array-Unterläufe
  • unkorrekte Verwendung vorzeichenbehafteter und vorzeichenloser Datentypen

Da sicherer Code prinzipbedingt auch immer qualitativ hochwertiger Code ist, können statische Analyse-Tools ebenfalls genutzt werden, um die Qualität des entwickelten Codes zu steigern. Ziel ist es hierbei, dafür zu sorgen, dass sich die in der Entwicklung befindliche Software einfach verifizieren lässt. Schließlich kann die typische Validierungs- und Verifikationsphase eines Projekts bis zu 60 % des Gesamtaufwands ausmachen, während auf das Codieren selbst meist nur 10 % entfallen. Wenn es gelingt, mit geringfügig mehr Codierungsaufwand Defekte zu eliminieren, lässt sich der Verifikationsaufwand gravierend verringern. Genau hier aber kann die statische Analyse eine echte Hilfe sein.

Wenn man sicherstellt, dass der Code niemals einen bestimmten maximalen Komplexitätswert überschreitet, leistet man einen Beitrag dazu, die Prüfbarkeit des Codes zu gewährleisten. Abgesehen davon decken statische Analyse-Tools noch weitere Probleme auf, die sich auf die Prüfbarkeit auswirken, wie zum Beispiel nicht erreichbare oder nicht ausführbare Codesequenzen oder eine übermäßig große Anzahl an Schleifen.

Anpassung von Tools an den Prozess

Tools, die die statische Analyse oder die Durchsetzung von Codierungsstandards wie secureC und CWE oder den CERT C Secure Coding Guidelines automatisieren, stellen sicher, dass in kürzerer Zeit ein höherer Prozentsatz der Fehler identifiziert wird. Darüber hinaus lässt sich der Kosten- und Arbeitsaufwand zum Erreichen eines bestimmten Evaluation Assurance Level (EAL) deutlich verringern, wenn mit dem Einsatz statischer Analyse-Tools dokumentiert wird, dass die Sicherheitsanforderungen für den angestrebten EAL-Wert erfüllt sind.

Vervollständigt wird diese Stringenz durch weitere Tools für folgende Aufgaben:

  • Rückverfolgbarkeit der Anforderungen – ein gutes Requirements Traceability Tool ist von unschätzbarem Wert, wenn die Sicherheit in den Prozess eingebunden werden soll.
  • Unit-Tests – mit Unit- oder Modultests lässt sich am effektivsten und kostengünstigsten dafür sorgen, dass der entwickelte Code den Sicherheitsanforderungen entspricht.
  • Dynamische Analysen – Diese Analysen werden durchgeführt, während der Code verarbeitet wird. Sie liefern damit wertvolle, über die Durchführung von Testfällen hinausgehende Einblicke in den zu analysierenden Code. Die Analyse der strukturellen Überdeckung gewährleistet z.B., dass die Verifikations-Testfälle den zu entwickelnden Code komplett ausführen.

Diese verschiedenen Funktionen lassen sich selbstverständlich auch aus Lösungen verschiedener Anbieter zusammenfügen. Einige Unternehmen, darunter auch LDRA, bieten jedoch integrierte Tool-Pakete an, die mit allen zuvor beschriebenen Lösungen aufwarten und die Einbindung des Sicherheitsaspekts in den Prozess dadurch einfacher machen.

Ähnlichkeit mit Qualitätssicherung

Es überrascht nicht, dass die Prozesse, mit denen sich Software sicher machen lässt, Ähnlichkeit mit den anspruchsvollen Prozessen haben, die erforderlich sind, um der Software ein hohes Qualitätsniveau zu verleihen. Durch die Einbeziehung von Sicherheitsüberlegungen in den Prozess schon in der Anforderungsphase lässt sich am besten dafür sorgen, dass der entwickelte Code sicher ist (Bild 2). Während qualitativ hochwertiger Code nicht zwangsläufig sicher sein muss, ist sicherer Code stets auch von hoher Qualität.

Gestützt auf das Wissen und die Erfahrung, die in secureC, den CERT-C Secure Coding Guidelines und im CWE-Lexikon vereint sind, tragen statische Analyse-Tools dazu bei, die Einbindung des Sicherheitsaspekts in die Software-Entwicklung zu einer praktikablen und kosteneffektiven Zielvorgabe zu machen. In Verbindung mit den Produktivitäts- und Genauigkeitsgewinnen durch rückverfolgbare Anforderungen, Unit-Tests und die dynamische Analyse werden ausnutzbare Software-Schwachstellen zwangsläufig beseitigt.

 

Der Autor

passend zum Thema

Mark Pitchford 
hat mehr als 25 Jahre Erfahrung in Software-Entwicklung für technische Anwendungen. Er hat an vielen führenden industriellen und kommerziellen Projekten in Entwicklung und Management gearbeitet, sowohl in Großbritannien als auch international, einschließlich über längere Zeit in Kanada und Australien. Seit 2001 ist er auf Software-Tests spezialisiert und arbeitet innerhalb von Europa und darüber hinaus als ein Branchenanwendungsingenieur für LDRA Ltd.

  1. Sicher programmieren - aber wie?
  2. Erstellen von sicherem Code mit Hilfe statischer Analyse
  3. Metriken decken Risken auf

Lesen Sie mehr zum Thema


Das könnte Sie auch interessieren

Jetzt kostenfreie Newsletter bestellen!

Weitere Artikel zu LDRA Inc.

Weitere Artikel zu Cyber-Security

Weitere Artikel zu Industrie-Computer / Embedded PC