Software-Sicherheit – Teil 2

Bugs mit statischer und dynamischer Code-Analyse entdecken

Seite: 2/3

Anbieter zum Thema

Dynamische Tests und Code-Coverage-Tools kombinieren

Bei bestimmten Problemen stoßen rein statische Testverfahren schnell an ihre Grenzen. Speicheroperationen wie malloc() und free() können nur zur Laufzeit gezielt beobachtet und beurteilt werden.

Um illegale Lese- und Schreibzugriffe aufzuspüren, überwachen Tools wie „Valgrind“ den Speicher und protokollieren alle Fehler. So können Zugriffe auf bereits wieder freigegebene Speicherblöcke entdeckt und der Anwender über die illegalen Operationen informiert werden.

Darüber hinaus empfiehlt sich der Einsatz von Test-Cases, um die gewünschte Funktionalität des Codes zu überprüfen. Für Java-Programme ist das JUnit-Framework zum Quasi-Standard geworden.

Die Idee ist einfach, aber effektiv: Methoden werden mit präparierten Eingaben gespeist und die Ausgaben mit vorher festgelegten Erwartungswerten verglichen. Stimmen die Werte überein, gilt der Test als bestanden.

Um sicherzustellen, dass die diversen Testfälle auch möglichst viele Codezeilen erreichen, sollten zusätzlich Code-Coverage-Tools eingesetzt werden. Je mehr Code abgedeckt wurde, desto besser. Eine hundertprozentige Abdeckung ist jedoch aus Kostengründen eher selten. Und selbst wenn sie gelingt, ist ein solches Ergebnis keine Garantie für die Fehlerfreiheit des Quellcodes.

Inhalt

  • Seite 1: Lexikalische und semantische Code-Audits
  • Seite 2: Dynamische Tests und Code-Coverage-Tools kombinieren
  • Seite 3: Verdächtigen Skriptcode erkennen und entschlüsseln

(ID:2050293)