Systemaufruf-Visualisierung

Stefan hat mir heute einen Link zum Thema “Why Windows is less secure than Linux” geschickt, auf dem zwei Graphen zu sehen sind. Auf diesen werden die Systemaufrufe des Apache Webservers (httpd) und des Microsoft Internet Information Servers (IIS) visualisiert und verglichen. Fazit ist, dass der IIS unsicherer sei, weil er mehr Systemaufrufe ausführe.

Ehrlich gesagt halte ich von dieser Schlußfolgerung nicht sehr viel, da eine hohe Anzahl an Systemaufrufen nicht zwangsweise zu einer unsicheren Software führt. Auch kompakte Programme können scheunengroße Lücken aufweisen, während hochkomplexe Anwendungen auch extrem sicher sein können. Man darf also auch die Sicherheit von Programmen nicht alleine nach deren “Aussehen” beurteilen.

Was ich aber interessant fand, waren die Graphen. Die Aussagekraft hält sich zwar ziemlich in Grenzen, aber trotzdem schauen die cool aus. :-)

Wer sowas nachmachen will, hier ist eine 2-Minuten-Anleitung für sowas.

Benötigt werden strace, GraphViz und Perl.

Als Testobjekt dient die Ausgabe von einem einfachen “ls -l” Befehl. Diese erhalten wir mit dem Befehl

strace -q -v -o trace.txt ls -l

Da schneiden wir nun die Namen der Systemaufrufe heraus:

cut -d ‘(’ -f 1 trace.txt

Wenn wir das durch folgendes winziges Perl-Script pipen, erhalten wir daraus eine schicke .dot-Datei für GraphViz:

#!/usr/bin/perl -w

my $lastline = ‘’;
my %LINKS;

print “digraph G {\n”
.” size=\”6.0\”\n”
.” node [ fontname=verdana, fontsize=10 ];\n”;

while (my $line=<>) {
chomp($line);
if ($lastline ne ‘’ && $lastline ne $line) {
my $link = “$lastline -> $line”;
if (!defined($LINKS{$link})) {
$LINKS{$link} = 1;
print “\t$link\n”;
}
}
$lastline = $line;
}
print “}\n”;

Sorry, die Einrückungen gehen bei Wordpress leider verloren. Als kleines Feature werden doppelte Kanten übrigens herausgefiltert.

Das Perl-Script beispielsweise als “grapher.pl” speichern, und dann so aufrufen:

cut -d ‘(’ -f 1 trace.txt | grapher.pl > trace.dot

Mit “dot” erzeugen wir dann noch eine PNG-Datei aus dem Output:

dot -T png -o trace.png trace.dot

Und fertig ist der Systemaufruf-Graph. :-)

strace-GraphViz

Bei einer etwas komplexeren Anwendung (unserer neuen Admin-Oberfläche - mit integriertem Webserver :-) ) sieht der Output dann übrigens so aus:

out4.jpg

Schaut den anderen Graphen (von der eingangs erwähnten Website) ziemlich ähnlich.

2 Bemerkungen zu “Systemaufruf-Visualisierung”

  1. Stefan F.

    Die These des Blogeintrags war, dass Windows (IIS) potential unsicherer ist, weil es mehr potentielle Schwachstellen gibt, die man in der Qualitätssicherung abklopfen muss.

  2. Klaus Keppler

    Der Autor schreibt: “The more system calls, the greater potential for vulnerability, the more effort needed to create secure applications.”

    Und genau das stimmt meiner Meinung nach nicht. Ein Systemcall an sich ist kein potenzielles Sicherheitsrisiko. Es mag zwar ein Zusammenhang zwischen der Anzahl an System Calls und der Komplexität einer Software bestehen, und komplexere Software mag auch mehr Sicherheitslücken enthalten (reine Stochastik). Aber aus der Anzahl der Systemcalls auf Sicherheitslücken zu schließen ist Schwachsinn.

Einen Kommentar schreiben