Wenn sich eine Katastrophe ereignet, deren Ursache in der Software liegt, dann beginnt die Spurensuche: Woran hat‘s gelegen? Nun kann man den Code entweder händisch untersuchen oder Hilfsmittel zu Rate ziehen, deren Anwendung übrigens auch sinnvoll ist, schon bevor etwas passiert.
Unter dem Begriff Forensik versteht man traditionell die Anwendung wissenschaftlicher Methoden mit dem Ziel, Anhaltspunkte für kriminelle Aktivitäten zu finden. Dehnt man diesen Begriff auf Software aus, so geht es um sämtliche Zwecke von Software-Untersuchungstechniken. In vielen Fällen handelt es sich nicht um kriminalistische Nachforschungen, sondern um zivilrechtliche Fragen (z.B. Sicherheitsprobleme), kommerzielle Aspekte (Produktausfälle) oder die Untersuchung von Sicherheitsverletzungen. Die Analyse von Software-Pannen ist in vielen Branchen wichtig. Auch wenn die benötigten Ergebnisse nichts mit Verbrechen zu tun haben, gibt es durchaus Parallelen zum Sammeln von Beweisen im Zuge einer kriminalistischen Untersuchung von Software. Ein ausgezeichnetes Beispiel ist die Untersuchung eines Software-Fehlers, der zu einem Unfall geführt hat, als dessen Folge Menschen verletzt oder getötet wurden oder Sachschaden entstanden ist. Ermittler würden hier ähnliche Verfahren anwenden, auch wenn weder kriminelle Aktivitäten noch Fahrlässigkeit vermutet werden. Die Ermittlungen dürften die Analyse des Quell- und Binärcodes (Bild 1) zum Detektieren der Fehler sowie eine Untersuchung der Ursachen dieser Fehler erfordern, ergänzt durch eine Analyse der Auswirkungen dieser Fehler auf die entstehenden Ausfälle. Bei der Software-Forensik geht es um Techniken, Tools und die geforderten Resultate und nicht unbedingt um die Intention, die hinter der Untersuchung steht. Ziel ist in allen Fällen das Sammeln von Beweisen.
Fasst man die Bedeutung des Begriffs „Software-Forensik“ weiter, schließt sie jegliche Aktivitäten ein, die die Analyse von Quell- und Binärcode für die Ermittlung, für die Post-Mortem-Analyse oder für präventive Maßnahmen erfordern. Die Liste der Anwendungsfälle für Software-Forensik umfasst unter anderem Folgendes:
Schadcode: Der Nachweis von Schadcode und die Ermittlung seines Urhebers ist ein häufiges Szenario in der Software-Forensik. Solcher Code wird häufig zwar mit Absicht, aber mit verborgener Zielsetzung geschrieben. Die Erkennung mit Hilfe manueller Methoden kann sich – besonders im Voraus – schwierig gestalten. Mittels manueller Inspektionen und regelmäßiger Software-Tests gelingt es deshalb oft nicht, Schadcode aufzudecken.
Sicherheitsrelevante Vorfälle: Software-Fehler in sicherheitskritischen Systemen haben potenziell gravierende Auswirkungen in Bezug auf Personen- und Sachschäden. Deshalb sind Hersteller verpflichtet, die Ursachen solcher Probleme einzukreisen und zu untersuchen. Entsprechende Ermittlungen können beispielsweise angestoßen werden, um Zivilklagen zu verhandeln sowie um künftige Vorfälle zu untersuchen und zu verhindern. Zum Beispiel nutzte die FDA CodeSonar zur Untersuchung der Qualität der Steuerungs-Software verschiedener Infusionspumpen, während CodeSonar vom NHTSB eingesetzt wurde, um Probleme mit dem ungewollten Beschleunigen von Toyota-Fahrzeugen zu untersuchen.
Sicherheits-Schwachstellen: Oft sind gravierende Sicherheitslücken Anlass für die Ermittlung der Problemursache. Bei diesen Schwachstellen kann es sich entweder um absichtlich geschriebenen Schadcode oder um zufällige Software-Fehler handeln. Ursachenermittlung und -beseitigung sind bei Sicherheitslücken entscheidend. Der Security Incident Guide des NIST enthält Einzelheiten über entsprechende Ermittlungs- und Dokumentationstechniken.
Software-Fehler-Analyse: In einem allgemeineren Sinn kann jeder Software-Fehler zum Gegenstand einer Ermittlung werden. Zum Beispiel kann ein Überwachungsgerät ungenaue Ergebnisse geliefert haben, als deren Folge dem Kunden eine zu hohe Rechnung geschickt wurde (z.B. im Fall eines intelligenten Stromzählers). Die Techniken zur Erkennung und Ursachenermittlung bleiben hier die gleichen.