Sicherheitslücke Poodle Unterschied zwischen Design- und Code-Fehlern

Sicherheitslücke Poodle
Unterschied zwischen
Design- und Code-Fehlern

Fast ausnahmslos werden Anbieter bei Berichten über neue Sicherheitslücken gefragt, ob ein statisches Analysewerkzeug den Fehler gefunden haben könnte. Weil das statische Analysetool CodeSonar Codefehler und Sicherheitslücken aufspürt, ist das eine völlig logische Frage. Aber: Poodle gehört nicht zu den Sicherheitslücken, die von einem statischen Analysewerkzeug gefunden werden können, auch nicht von CodeSonar. Denn der Fehler liegt im Design und nicht in der Implementierung. Üblicherweise besteht ein klarer Unterschied zwischen Fehlern im Design und Fehlern im Code.

Betriebsbereite statische Analysewerkzeuge finden Codefehler zuverlässig, aber bei Designfehlern sind sie nicht sonderlich hilfreich, sofern durch die Sicherheitslücke kein Fehler ausgelöst wird. Beispielsweise ist es sehr unwahrscheinlich, dass ein Designfehler einen Buffer Overflow auslöst, trotzdem kann es sein, dass durch falsche Spezifikation ein Fehler wie eine Race Condition in einer Implementierung auftritt. In einem solchen Fall hilft ein statisches Analysetool, um ihn zu finden. Wichtig in diesem Zusammenhang ist: Spezifikationen und Designs lassen sich mit automatischen Werkzeugen nur schwer analysieren, denn die Mehrzahl von ihnen ist in informellen natürlichen Sprachen geschrieben und enthält immer Auslassungen, Inkonsistenzen und Mehrdeutigkeiten. Einige davon werden durch den Implementierungsprozess einer Spezifikation berichtigt, andere Fehler bleiben unentdeckt. Erst mit einer Implementierung erhält man einen konkreten Anhaltspunkt für die Analyse, und kann dann Fragen zu den Code-Eigenschaften stellen, die gleichzeitig Fragen zur Spezifikation darstellen. Ein statisches Analysewerkzeug kann Fragen zur Reihenfolge der möglichen Übergänge beantworten.

Die Anforderung

Folgende Anforderung wird angenommen: Ein Objekt, das in Status A startet, darf ohne Durchlaufen von Status B nicht in Status C wechseln, und das Design soll dies verhindern. Man könnte ein statisches Prüfprogramm schreiben, das die Pfade durch das Programm kontrolliert, um zu ermitteln, ob der Code das Erreichen des verbotenen Zustands ermöglicht. Natürlich kann der Fehler in der Implementierung des Designs liegen. Es wäre aber auch möglich, dass das Design selbst einen versteckten Fehler enthält. Ähnlich verhält es sich, wenn ein Design den Informationsfluss zwischen den Teilen eines Systems verhindern soll. Hier kann ein statisches Prüfprogramm mithilfe von Fehleranalysen aufzeigen, wie diese Anforderung verletzt wird. Einige statische Werkzeuge ermöglichen all dies. Mit CodeSonar können beispielsweise eigene Prüfprogramme für benutzerdefinierte Eigenschaften geschrieben werden. Zur Erleichterung lassen sich prozessübergreifende, pfadsensible Algorithmen zur Programmuntersuchung für das gesamte Programm nutzen. Das macht auch das Schreiben von sehr komplexen Anfragen relativ einfach. Der Poodle Bug ist ein ausgezeichnetes Beispiel dafür, warum die Entwicklung und Übernahme von formalen Methoden für die Industrie so bedeutend ist. GrammaTech findet es wichtig, dass sich die Industrie in diese Richtung bewegt. Das Unternemen führt zahlreiche von der NASA, der National Science Foundation und der U.S. Navy finanzierte Forschungsprojekte durch und arbeitet an den geeigneten Werkzeugen für die Entwicklung der Spezifikationen und der Verwaltung von deren Beziehungen zum Code.

GrammaTech Inc.
www.grammatech.com

Das könnte Sie auch Interessieren

Bild: Nerd Force1 UG / Open Skunkforce e.V.
Bild: Nerd Force1 UG / Open Skunkforce e.V.
Call for Papers und Ticketverkauf der emBO++ 2023 gestartet

Call for Papers und Ticketverkauf der emBO++ 2023 gestartet

Die EmBO++ findet in diesem Jahr, nach zwei Jahren rein digitaler Veranstaltung, vom 23. bis zum 25. März wieder in Bochum statt. Die Themenvielfalt der zweitägigen Konferenz erstreckt sich von Physik und klassischer Elektrotechnik über Systemdesign von Platinen für eingebettete Systeme, Programmmierbibliotheken, Entwicklungstoolchains bis hin zu speziellen Features von Programmiersprachen und deren Standardisierung.