Prüfstand für Testwerkzeuge: Codeanalyse im Praxiseinsatz

Seite 4: MathWorks Polyspace Bug Finder Desktop

Inhaltsverzeichnis

Wie Parasofts Tool ist auch der Polyspace Bug Finder Desktop ausschließlich auf C/C++ ausgelegt und läuft auf Linux, macOS und Windows. Jedes Tool hat seine Eigenheiten und bei MathWorks ist es das Aufsplitten in viele einzelne Produkte.

Daher existieren zwei sich ergänzende Produkte: der Bug Finder und der Code Prover. Ersterer sucht nach diversen Problemen im Code, Letzterer dagegen versucht durch eine Verifizierung des Datenfluss alle Probleme zu identifizieren die die Robustheit eines Programms in Mitleidenschaft ziehen könnte – darunter Buffer Overflows. Der Grund dafür ist die unterschiedliche Art und Weise wie die Programme unter der Haube arbeiten.

Die Frage, ob Nutzer von Bug Finder überhaupt Code Prover benötigen lässt sich nach den für diesen Artikel vorgenommen Tests klar mit "Ja" beantworten. Der Bug Finder fand im Gegensatz zum Code Prover keinen einzigen Buffer Overflow. Dabei zählen generische Meldungen wie "hier wird strcpy benutzt" nicht als Erkennen, da sich die gefährlichen Funktionen auch fehlerfrei verwenden lassen.

Für Anwender ist die Fehlersuche dadurch jedoch aufwendiger, da sie die beiden Tools unabhängig anwenden müssen. Beide Desktop-Produkte enthalten ein Eclipse-Plug-in.

Bug Finder und Code Prover haben jeweils weitere individuelle Produkte: die Access- und die Server-Komponenten. Der Server ist jeweils ein abgespeckter Bug Finder/Code Prover, der eigenständig beispielsweise innerhalb eines Jenkins oder Jira laufen soll. Das Access-Produkt ist im Wesentlichen ein Webserver, der es ermöglicht, die Ergebnisse der Tools ohne eine separate Lizenz für den Desktop interaktiv zu betrachten und zu analysieren.

Eine weitere Eigenheit dieser Werkzeuge ist, dass einige Prüfoptionen standardmäßig deaktiviert sind, während bei den meisten Produkten äußerst viel aktiviert ist. Leider gehören zu den fehlenden Defaults Sicherheitsprüfungen, Kryptografietests und Taint Data Checker. Dadurch müssen Tester noch genauer auf die Konfiguration achten als beim Wettbewerb.

In den für den Artikel durchgeführten Tests kamen in der Summe ihrer Testläufe der Bug Finder und der Code Prover gemeinsam auf die beste Quote bei der Fehlersuche, hängten allerdings in keinem Bereich alle Mitbewerber ab.

Der Polyspace Code Prover fand als einziger folgenden Buffer Overflow:

int main(int argc, char *argv[]) {
  char buf[16] = "";
  char *in = argv[1], *out = buf;

  if (argc > 1) {
    // Kein L�ngencheck - das ist eigentlich 
    // ein strcpy(out, in):
    while (*in != 0) 
      *out++ = *in++;
    *out = 0;
  }
  (void)printf("%s\n", buf);
  
  return 0;
}

Der Start des Bug Finder geschieht nach dem Einrichten einer Prüfkonfiguration im Desktop-Tool folgendermaßen:

$ polyspace-configure -allow-build-error \\
  -allow-overwrite -prog "NAME_DES_PROJEKTES" \\
  -output-options-file myOptionsFile.txt make

$ polyspace-bug-finder -options-file \\
  myOptionsFile.txt -compiler gnu7.x \\ 
  -checkers-selection-file \\
  ~/polyspace_checks.xml \\ 
  -report-output-format HTML \\ 
  -report-template \\ 
  $POLYSPACE/toolbox/polyspace/psrptgen/templates/\\ 
  bug_finder/CodingStandards.rpt

Der Polyspace Desktop auf Linux sieht etwas altbacken aus, erfüllt aber seinen Zweck (Abb. 2).