28.11.2012 Aufrufe

Gesamt-Schlussbericht des Verbundprojektes Deutsch - CC Gmbh

Gesamt-Schlussbericht des Verbundprojektes Deutsch - CC Gmbh

Gesamt-Schlussbericht des Verbundprojektes Deutsch - CC Gmbh

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

PH_GE_Titelseite 3.0, Master V3.0, Muster V0.1<br />

Zusammenfassender <strong>Schlussbericht</strong><br />

zum Forschungsprojekt<br />

SecFlow<br />

Automatische Ermittlung sicherheitskritischer Datenflüsse in<br />

Quellcode<br />

Dana Richter<br />

Version 1.0 / 2009-02-02<br />

SecFlow_<strong>Gesamt</strong>schlussbericht_V10.odt<br />

cc gmbh


.0 Mustervorlage V0.1<br />

Beschreibung:<br />

Vorhaben: SecFlow: Automatische Ermittlung sicherheitskritischer<br />

Datenflüsse in Quellcode<br />

Förderkennzeichen: 01 ISF 09A-D<br />

Ausführende Stellen: Fraunhofer IESE, Kaiserslautern<br />

ICT Solutions AG, Trier<br />

SHE Informationstechnologie AG, Ludwigshafen<br />

<strong>CC</strong> GmbH, Wiesbaden<br />

Konsortialführer: <strong>CC</strong> GmbH, Wiesbaden<br />

Laufzeit: 1.03.2006 – 30.11.2008<br />

Kontakt:<br />

<strong>CC</strong> GmbH<br />

Johannes Fritz<br />

Kreuzberger Ring 36<br />

65205 Wiesbaden<br />

Telefon: +49-611-942040<br />

Fax: +49-611-9420444<br />

E-mail: secflow@cc-gmbh.de<br />

Web: www.secflow.de und www.sourceforge.net/projects/secflow/<br />

© <strong>CC</strong> GmbH, Wiesbaden 2009. Alle Rechte vorbehalten.


Inhaltsverzeichnis<br />

1 Kurze Darstellung................................................................................. .......................4<br />

1.1 Aufgabenstellung .............................................................................. ...................4<br />

1.2 Voraussetzungen, unter denen das Vorhaben durchgeführt wurde......................4<br />

1.3 Planung und Ablauf <strong>des</strong> Vorhabens.................................................................. ....5<br />

1.3.1 Analyse und Konzeption.............................................................. .............5<br />

1.3.2 Entwicklung..................................................................... .........................5<br />

1.3.3 Validierung................................................................................................ 6<br />

1.3.4 Dissemination............................................................................. ..............6<br />

1.3.5 Abweichungen zur ursprünglichen Planung........................................ ......6<br />

1.3.6 Einsatz finanzieller Mittel....................................................... ...................7<br />

1.4 Wissenschaftlicher und technischer Stand, an den angeknüpft wurde.................7<br />

1.5 Zusammenarbeit mit anderen Stellen............................................. ......................8<br />

2 Eingehende Darstellung............................................................................... ...............9<br />

2.1 Erzielte Ergebnisse................................................................................. ..............9<br />

2.1.1 <strong>Gesamt</strong>ergebnis.................................................................... ...................9<br />

2.1.2 Wichtige Teilergebnisse........................................................................... .9<br />

2.2 Darstellung <strong>des</strong> voraussichtlichen Nutzens...................................................... ...19<br />

2.2.1 Nutzen für die Allgemeinheit........................................................... ........19<br />

2.2.2 Verwertbarkeit im Sinne <strong>des</strong> fortgeschriebenen Verwertungsplans .......20<br />

2.2.3 Wissenschaftliche Verwertung der Projektergebnisse............................21<br />

2.3 Fortschritt auf dem Gebiet <strong>des</strong> Vorhabens bei anderen Stellen..........................21<br />

2.4 Erfolgte und geplante Veröffentlichungen <strong>des</strong> Ergebnisses................................22<br />

3 Literaturverzeichnis........................................................................................ ...........25<br />

© <strong>CC</strong> GmbH, Wiesbaden 2009<br />

SecFlow_<strong>Gesamt</strong>schlussbericht_V10.odt<br />

Version<br />

1.0<br />

Datum<br />

2009-02-02<br />

Bearbeiter/in<br />

Dana Richter<br />

Seite<br />

3 von 27


1 Kurze Darstellung<br />

1.1 Aufgabenstellung<br />

Ziel <strong>des</strong> Vorhabens war die Entwicklung und Erprobung eines Werkzeug-Frameworks samt<br />

sprachspezifischer Module zur Sicherheitsanalyse von Programm-Quelltexten in<br />

verschiedenen Programmiersprachen. Das Werkzeug dient der Ermittlung von Daten- und<br />

Kontrollflüssen, auf denen böswillige Eingabe- und Umgebungsdaten ungeprüft sicherheitskritische<br />

Operationen <strong>des</strong> Zielprogramms beeinflussen können. Solche Datenflüsse sind ein<br />

maßgeblicher Ansatzpunkt für Angriffe auf Software. Das Prüfwerkzeug liefert <strong>des</strong>halb einen<br />

wesentlichen Sicherheitsgewinn für sicherheitskritische Software-Systeme.<br />

1.2 Voraussetzungen, unter denen das Vorhaben durchgeführt wurde<br />

Seit 2003 unterstützt das Bun<strong>des</strong>ministerium für Bildung und Forschung (BMBF) mit der<br />

Forschungsoffensive "Software Engineering 2006" Forschungsvorhaben zur Stärkung der<br />

Softwaretechnik in <strong>Deutsch</strong>land. Das Projekt SecFlow ("Security Flow") "Automatische<br />

Ermittlung sicherheitskritischer Datenflüsse in Quellcode" wurde im Rahmen der zweiten<br />

Auswahlrunde zur Forschungsoffensive 2006 in den Kreis der förderwürdigen Vorhaben<br />

aufgenommen. Innerhalb der Forschungsoffensive "Software Engineering 2006" <strong>des</strong> BMBF<br />

ist SecFlow dem Themenbereich II – Korrektheit, Sicherheit und Zuverlässigkeit von<br />

Software-Systemen (inkl. Safety) – zugeordnet.<br />

Das Vorhaben wurde im Juni 2006 rückwirkend für den Zeitraum vom 1. März 2006 bis<br />

30. Juni 2008 genehmigt. Die Projektlaufzeit war ursprünglich für eine Dauer von<br />

30 Monaten geplant. Aufgrund der rückwirkenden Genehmigung und dem damit<br />

verbundenen späteren Start <strong>des</strong> Projektes wurde eine Verlängerung von 3 Monaten<br />

beantragt und genehmigt. Es fand dabei eine kostenneutrale Umwidmung der Mittel statt.<br />

Die <strong>Gesamt</strong>laufzeit <strong>des</strong> Vorhabens betrug insgesamt 33 Monate, vom 1. März 2006 bis<br />

30. November 2008.<br />

SecFlow ist ein Verbundprojekt, an dem insgesamt vier Verbundpartner beteiligt waren:<br />

� Fraunhofer Institut für Experimentelles Software Engineering (IESE), Kaiserslautern:<br />

IESE übernahm im Projekt als Forschungspartner vornehmlich die forschungsintensiven<br />

Anteile im Entwurf <strong>des</strong> Werkzeugs einschließlich der dazu erforderlichen<br />

Referenzimplementierungen sowie die wissenschaftliche Begleitung der Validierung<br />

<strong>des</strong> Werkzeugs.<br />

� ICT Solutions AG (ICT), Trier:<br />

ICT war im Projekt als Anwendungspartner vor allem für die praktische Validierung <strong>des</strong><br />

Werkzeugs bei der Sicherheitsüberprüfung ihrer kundenspezifischen Installationen<br />

zuständig sowie für die Erarbeitung der plattformspezifischen Konzepte zur Analyse<br />

von J2EE-Software.<br />

� SHE Informationstechnologie AG (SHE), Ludwigshafen:<br />

SHE übernahm im Projekt als zweiter Anwendungspartner vor allem die praktische<br />

Validierung <strong>des</strong> Werkzeugs im Rahmen ihrer Beratungstätigkeit im Sicherheitsbereich<br />

sowie die Erarbeitung der plattformspezifischen Konzepte für C# und .NET.<br />

� <strong>CC</strong> GmbH (<strong>CC</strong>), Wiesbaden:<br />

<strong>CC</strong> übernahm im Projekt als Technologiepartner vor allem die Implementierung <strong>des</strong><br />

Werkzeugs, war aber auch für Beiträge zu seinem Entwurf verantwortlich. Außerdem<br />

leitete <strong>CC</strong> als Konsortialführer das Vorhaben.<br />

Datei<br />

SecFlow_<strong>Gesamt</strong>schlussbericht_V10.odt<br />

Version<br />

1.0<br />

Datum<br />

2009-02-02<br />

Bearbeiter/in<br />

Dana Richter<br />

Seite<br />

4 von 27


1.3 Planung und Ablauf <strong>des</strong> Vorhabens<br />

Die Planungen zum Projekt und seinem Ablauf sind im Rahmen <strong>des</strong> Projektantrages in Form<br />

der Vorhabenbeschreibung dargestellt worden. Das Vorhaben wurde inhaltlich in nachfolgende<br />

übergeordnete Arbeitspakete (Phasen) gegliedert:<br />

� Analyse und Konzeption<br />

� Entwicklung<br />

� Validierung<br />

� Verbreitung der Projektergebnisse<br />

Die Ausgestaltung der einzelnen Phasen im Projektverlauf wird in den nachfolgenden<br />

Abschnitten kurz beschrieben. Für eine detaillierte Darstellung der einzelnen Arbeiten wird<br />

auf die Zwischenberichte zum Projekt verwiesen.<br />

1.3.1 Analyse und Konzeption<br />

Dieses Arbeitspaket beinhaltete vor allem die problem- bzw. projektbezogene detaillierte<br />

Untersuchung von Themen zur Software-Sicherheit und die Ableitung von Anforderungen an<br />

das geplante Werkzeug basierend auf den Zielsetzungen <strong>des</strong> Projektes.<br />

IESE als Forschungspartner übernahm insbesondere die Erhebung und Definition von<br />

Anforderungen an eine werkzeuggestützte Datenflussanalyse. Durch <strong>CC</strong> wurden zum einen<br />

Anforderungen aus Sicht <strong>des</strong> Anwenders (z. B. hinsichtlich der Benutzerschnittstelle) zum<br />

anderen aber auch Anforderungen zu Architektur und Technologie erfasst und eine<br />

Abgrenzung <strong>des</strong> Vorhabens zu anderen, angrenzenden fachlichen Themengebieten<br />

vorgenommen. In enger Zusammenarbeit wurden von IESE und <strong>CC</strong> verschiedene<br />

Technologiealternativen recherchiert und hinsichtlich ihres Nutzens und der Einsatzfähigkeit<br />

für das Projekt bewertet. Die Technologierecherche und Potentialbewertung bildete die<br />

Basis für die Entscheidung zu einer Werkzeugarchitektur, die den Anforderungen an<br />

Sprachunabhängigkeit, Flexibilität der Analyseregeln und Modularität <strong>des</strong> Werkzeugframeworks<br />

genügt.<br />

In dieser Projektphase wurde zudem untersucht, welche sicherheitskritischen Datenquellen<br />

und -senken in den verschiedenen Programmierframeworks (Java/J2EE/JSP bzw.<br />

C#/.NET/ASP.NET) relevant sind. Dazu brachten insbesondere die Praxispartner ICT und<br />

SHE ihre Erfahrungen ein.<br />

Weiterhin wurden sprachspezifische Validierungsmuster erhoben, d. h. typische Programmcode-Sequenzen,<br />

die unsichere Datenflüsse durch Filterung oder Transformation in sichere<br />

Datenflüsse verwandeln. Entsprechende Quellcode-Beispiele wurden von den<br />

Anwendungspartnern aus real eingesetzter Software entnommen. Darauf aufbauend wurde<br />

versucht, die gefundenen Beispiele zu verallgemeinern, um grundlegende Gesetzmäßigkeiten<br />

ableiten zu können, und eine Beschreibungssprache für Datenflüsse und<br />

Validierungen zu entwerfen (FLOW).<br />

1.3.2 Entwicklung<br />

Aufgabenschwerpunkt <strong>des</strong> Arbeitspaketes "Entwicklung" war die Umsetzung der Konzepte<br />

und Entwürfe in ein funktionsfähiges Werkzeug (Implementierung).<br />

Dabei wurden von IESE in verschiedenen Sondierungsimplementierungen Technologiealternativen<br />

erprobt und schließlich die lauffähige Referenzimplementierung <strong>des</strong> Werkzeugs<br />

für die Quellsprache Java erstellt. Diese Lösung bildete die Basis für die Realisierung <strong>des</strong><br />

Werkzeugs und wurde von <strong>CC</strong> als Implementierungspartner adaptiert und erweitert. Damit<br />

wurde u. a. die Analyse von Programmiersprachen ermöglicht, die auf der .NET-Plattform<br />

von Microsoft implementiert sind (u. a. C#, Visual Basic .NET).<br />

Einen Teil der Implementierungsaktivitäten nahmen Test und Evaluierung der erstellten<br />

Softwarekomponenten sowie Fehlerkorrekturen und erforderliche Anpassungen ein. Gemäß<br />

Datei<br />

SecFlow_<strong>Gesamt</strong>schlussbericht_V10.odt<br />

Version<br />

1.0<br />

Datum<br />

2009-02-02<br />

Bearbeiter/in<br />

Dana Richter<br />

Seite<br />

5 von 27


den iterativ erfolgenden Verbesserungen an Teilen <strong>des</strong> SecFlow-Werkzeugkerns und <strong>des</strong><br />

SecFlow-eigenen Modellierungsformates FLOW waren Veränderungen an den erstellten<br />

Komponenten notwendig.<br />

In der letzten Phase der Programmierung wurde die Benutzerdokumentation erstellt. Diese<br />

beinhaltet die grundlegenden Informationen zum Aufbau <strong>des</strong> SecFlow-Tools und seiner<br />

Bedienung und sollen dem Anwender einen ordnungsgemäßen Betrieb <strong>des</strong> Werkzeugs<br />

ermöglichen.<br />

1.3.3 Validierung<br />

Diese Phase galt der Evaluation <strong>des</strong> Werkzeugs anhand von Testfällen der<br />

Anwendungspartner. Die dabei gewonnenen Einsichten führten zur Überarbeitung von<br />

Konzept und Implementierung.<br />

Höhepunkt dieser Phase war die Erprobung <strong>des</strong> Werkzeug-Prototyps über einen Zeitraum<br />

von fünf Wochen von den Anwendungspartnern SHE und ICT unter kontrollierten, realitätsnahen<br />

Versuchsbedingungen.<br />

1.3.4 Dissemination<br />

Das SecFlow-Werkzeug wird als freie Software zur Verfügung gestellt und steht unter der<br />

GNU General Public License (GPL), Version 3 vom 29. Juni 2007. Es darf damit unter den<br />

Bedingungen der GNU GPL, wie von der Free Software Foundation veröffentlicht,<br />

weitergegeben und modifiziert werden, entweder gemäß Version 3 der Lizenz oder jeder<br />

späteren Version.<br />

Für die Bereitstellung <strong>des</strong> SecFlow-Werkzeugs und damit der zugrunde liegenden Konzepte<br />

und Technologien musste eine geeignete Plattform gefunden werden. Die Projektpartner<br />

entschieden sich bereits früh im Projekt für die Internetplattform SourceForge<br />

(www.sourceforge.net). SourceForge ist ein Webportal zur Verwaltung einer Vielzahl an<br />

Softwareprojekten. Es integriert eine große Anzahl von Open-Source-Anwendungen (z. B.<br />

GNU Mailman, CVS, SVN). <strong>CC</strong> übernahm die Registrierung und Einrichtung der<br />

SourceForge-Projektseite für SecFlow. Auf dieser Projektseite ist das SecFlow-Werkzeug in<br />

den Softwarepaketen SecFlow-Backend, SecFlow-GUI (Eclipse-Plugin) und Testfälle zum<br />

Download bereitgestellt.<br />

Die Projektergebnisse werden zudem auf der Webseite <strong>des</strong> Projektes www.secflow.de<br />

bereitgestellt.<br />

1.3.5 Abweichungen zur ursprünglichen Planung<br />

Der Projektverlauf folgte im Wesentlichen dem Projektplan. Neben Schwierigkeiten bei der<br />

Fertigstellung <strong>des</strong> CIL-Compilers ergaben sich Verzögerungen im Projekt bei der<br />

Evaluierung und Auswahl verwendbarer Testanwendungen. Weiter war die Suche nach<br />

generalisierbaren Validierungsmustern weniger ergiebig als zunächst erwartet, und die<br />

Generalisierung nicht-trivialer Muster erwies sich schwieriger als angenommen und musste<br />

daher durch verstärkte Verwendung sprachspezifischer Muster kompensiert werden. Das<br />

Feedback der Projektpartner aufgrund ihrer Evaluierung verschiedener Werkzeugprototypen<br />

führte zudem zu mehrfachen Überarbeitungen der Datenfluss-Spezifikationssprache FLOW<br />

und dadurch zu wiederholten Änderungen am Modellierungsformat für externe Funktionen<br />

(Flow-Files bzw. "Summaries").<br />

Aufgrund der rückwirkenden Genehmigung und der genannten technischen Probleme<br />

entstand eine Differenz zwischen der ursprünglichen Planung und dem realen Projektverlauf,<br />

die trotz der Bemühungen der Projektpartner nicht vollständig beseitigt werden konnte. Im<br />

April 2008 wurde daher der Antrag auf kostenneutrale Verlängerung der Projektlaufzeit um<br />

weitere drei Monate gestellt. Diesem wurde durch das BMBF/DLR stattgegeben.<br />

Datei<br />

SecFlow_<strong>Gesamt</strong>schlussbericht_V10.odt<br />

Version<br />

1.0<br />

Datum<br />

2009-02-02<br />

Bearbeiter/in<br />

Dana Richter<br />

Seite<br />

6 von 27


Entgegen der ursprünglichen Planung wird für den realen praktischen Einsatz <strong>des</strong><br />

Werkzeugs eine Weiterentwicklung der Software (z. B. hinsichtlich von Usability,<br />

Performanz, Dokumentation) notwendig werden. Diese wird jedoch keine grundlegende<br />

Änderung der zugrunde liegenden Prinzipien oder Arbeitsweisen von SecFlow beinhalten,<br />

sondern eher eine Verfeinerung und Ergänzung der bestehenden Funktionen und<br />

praxisrelevante Anpassungen darstellen. Das Projekt liefert trotzdem ein wissenschaftlich<br />

fundiertes und wirtschaftlich verwertbares Ergebnis.<br />

1.3.6 Einsatz finanzieller Mittel<br />

Das Projekt blieb seitens der Projektpartner IESE, SHE und <strong>CC</strong> im kalkulierten finanziellen<br />

Rahmen. Die Kosten für die Projektdurchführung wurden gegenüber der <strong>Gesamt</strong>vorkalkulation<br />

bei ICT leicht überschritten. Aufgrund der Wichtigkeit <strong>des</strong> Projekts und der zu<br />

erwartenden positiven wirtschaftlichen Erfolgsaussichten nach Projektende wurde von ICT<br />

jedoch entschieden, diese Kosten selbst zu tragen.<br />

Die Laufzeitverlängerung konnte von allen Partnern kosten-neutral realisiert werden.<br />

1.4 Wissenschaftlicher und technischer Stand, an den angeknüpft wurde<br />

Anknüpfungspunkt für das Vorhaben waren einschlägige Vorarbeiten auf dem Gebiet der<br />

statischen Programmanalyse sowie der Datenflussanalyse. Frühere Untersuchungen, die<br />

gezeigt hatten, welche Vorzüge statische Analysen gegenüber konkurrierenden Ansätzen<br />

aufweisen (siehe etwa [Engler&Musuvathi 2004]), hatten den Ausschlag gegeben,<br />

grundsätzlich einen statischen Analyseansatz zu wählen. Verschiedene wichtige Bausteine<br />

für eine Datenflussanalyse waren bereits aus vorangegangenen Forschungsarbeiten in den<br />

Grundzügen bekannt. So konnte zum Beispiel in Bezug auf sogenannte "Points-to"-Analysen<br />

auf vorhandene Methoden zurückgegriffen werden [Hind 2001, Whaley&Lam 2004]. Der<br />

wissenschaftliche Schwerpunkt <strong>des</strong> Projekts lag vor allem in der Integration der vielen<br />

partiellen Ansätze für statische Sicherheitsanalysen in ein <strong>Gesamt</strong>konzept.<br />

Die Projektpartner waren sich einig, dass – soweit dies möglich ist – bei der Realisierung<br />

einzelner Teilkomponenten <strong>des</strong> SecFlow-Frameworks auch auf bereits existierende<br />

Konzepte und Methoden zurückgegriffen werden sollte, um den Implementierungsaufwand<br />

in Grenzen zu halten und das Projekt auf Aspekte der Sicherheitsanalyse zu konzentrieren.<br />

Dazu wurden eine ausführliche Technologierecherche und -bewertung sowie eine<br />

entsprechende Auswahl durchgeführt. Bei der Realisierung <strong>des</strong> Werkzeugkerns wurden<br />

schließlich Teile verschiedener Open Source Software im Framework adaptiert und<br />

integriert:<br />

Um das Analysewerkzeug sprachunabhängig zu gestalten, wurden die Analysemodule von<br />

den sprachabhängigen Compiler-Modulen getrennt. Dazu wurde der Quellcode der<br />

unterstützten Programmiersprachen in ein gemeinsames Zwischenformat (Quad)<br />

umgewandelt. Für diesen Transformationsschritt wurde auf Module der frei verfügbaren<br />

Java-kompatiblen Implementierung der virtuellen Maschine "Joeq" zurückgegriffen [Whaley<br />

2005]. Sie wurde für die Zwecke <strong>des</strong> Projekts entsprechend angepasst.<br />

Zur Modellierung von Datenflüssen und Analyseregeln entschied sich das Konsortium nach<br />

Abwägung und Erprobung verschiedener Realisierungsalternativen für eine deduktive<br />

Datenbank. Die Wahl fiel schließlich auf die Datenbank-Programmiersprache "Datalog"<br />

(http://de.wikipedia.org/wiki/Datalog) und die eigens für Analysezwecke entwickelte BDDbasierte<br />

Deduktive Datenbank BDDBDDB (Binary Desicion Diagrams Based Deductive<br />

DataBase) [Whaley 2004, Whaley et al. 2005].<br />

Für die Realisierung eines Übersetzers für .NET-Bytecode in die Zwischendarstellung Quad<br />

wurde ein Bytecodeparser benötigt, der in der Lage ist, Assemblyfiles zu lesen und zu<br />

parsen. Mit MBEL (Microsoft Bytecode Engineering Library) fand sich eine Open-Source-<br />

Bibliothek, die in Java programmiert und relativ unabhängig von der Ausführungsumgebung<br />

ist [MBEL 2008].<br />

Datei<br />

SecFlow_<strong>Gesamt</strong>schlussbericht_V10.odt<br />

Version<br />

1.0<br />

Datum<br />

2009-02-02<br />

Bearbeiter/in<br />

Dana Richter<br />

Seite<br />

7 von 27


Die Benutzeroberfläche <strong>des</strong> SecFlow-Werkzeugs wurde in das quelloffene IDE-Framework<br />

"Eclipse" integriert [Eclipse 2008]. Die SecFlow-Funktionalität wird dabei mittels<br />

verschiedener Eclipse-Plugins bereitgestellt.<br />

Die Reportgenerierung in SecFlow basiert auf der Reportingengine JasperReports und<br />

iReport [Jasper 2008].<br />

1.5 Zusammenarbeit mit anderen Stellen<br />

Ein Besuch von Prof. Dr. Jens Krinke von der Fern-Universität Hagen bei Fraunhofer IESE<br />

wurde 2006 genutzt, um einen konstruktiven Erfahrungsaustausch durchzuführen. Prof. Dr.<br />

Jens Krinke ist ein ausgewiesener Experte auf dem Gebiet <strong>des</strong> Program Slicing und<br />

verwandter Techniken der statischen Programmanalyse. Gemeinsam wurden verschiedene<br />

Analyseverfahren in Bezug auf die dem SecFlow-Projekt zugrunde liegende Zielsetzung<br />

erörtert.<br />

Neben der Nutzung von Diskussionsmöglichkeiten und Umfragen in einschlägigen Internet-<br />

Foren wurde der Austausch mit anderen Wissenschaftlern insbesondere durch IESE auch<br />

während der 23. Annual Computer Security Application Conference (ACSAC’07) in Miami,<br />

Florida betrieben. Dabei wurde ein Zwischenstand der Forschungsarbeiten vorgestellt und<br />

mit internationalen Wissenschaftlern diskutiert [Mandel&Peine 2007].<br />

Initiiert durch den Projektpartner ICT wurde im Rahmen <strong>des</strong> Projektes mit dem Lehrstuhl<br />

Wirtschaftsinformatik I, Prof.-Dr. Hans Czap der Universität Trier zusammengearbeitet. In<br />

diesem Zusammenhang wurden zwei Studienprojekte durchgeführt, die eine ganzheitliche<br />

Betrachtung <strong>des</strong> Projekts vor dem Hintergrund der optimalen Unterstützung der Entwickler<br />

im gesamten Entwicklungsprozess und die Bereitstellung von Hilfestellungen und<br />

Codebeispielen für sichere Programmierung thematisierten.<br />

Datei<br />

SecFlow_<strong>Gesamt</strong>schlussbericht_V10.odt<br />

Version<br />

1.0<br />

Datum<br />

2009-02-02<br />

Bearbeiter/in<br />

Dana Richter<br />

Seite<br />

8 von 27


2 Eingehende Darstellung<br />

2.1 Erzielte Ergebnisse<br />

2.1.1 <strong>Gesamt</strong>ergebnis<br />

Im Rahmen <strong>des</strong> Projekts wurde ein konfigurierbares, programmiersprachenunabhängiges<br />

Werkzeug-Framework entworfen und implementiert, das im Quellcode unsichere Datenflüsse<br />

von ihren nicht vertrauenswürdigen Datenquellen bis zu sicherheitskritischen Datensenken<br />

verfolgt. So kann ermittelt werden, ob unerwünschte Eingaben ungeprüft in<br />

sicherheitsrelevante Systemfunktionen einfließen können. Unsichere Datenflüsse tragen in<br />

der Praxis ganz maßgeblich zu den bisher bekannt gewordenen Angriffen auf Software bei.<br />

Ein solches Werkzeug-Framework ist daher ein wichtiger Schritt zur Verbesserung der<br />

Software-Sicherheit. Alleinstellungsmerkmal <strong>des</strong> Werkzeugs ist insbesondere seine<br />

Sprachunabhängigkeit.<br />

Zentrale, programmiersprachenunabhängige Funktionalitäten wurden im sogenannten Kern<br />

<strong>des</strong> Werkzeugs verankert und programmiersprachenabhängige Funktionalität in sprachspezifische<br />

Module gelagert. Derzeit ist das Tool für die Programmiersprache Java und alle<br />

.NET-Sprachen verfügbar.<br />

Die SecFlow-Analyse basiert auf einer statischen Daten- und Kontrollflussanalyse von<br />

Quellcode. Dabei werden alle für die Analyse benötigten Codeinformationen, Zwischenergebnisse<br />

als auch die Analyseregeln selbst in ein deduktives Datenbankmodel überführt,<br />

das als Binary Decision Diagrams (BDDs) verwaltet wird. Damit konnte SecFlow als eines<br />

der ersten Werkzeuge diese Schlüsseltechnologie erfolgreich verwerten.<br />

Die verschiedenen SecFlow-Komponenten stellen ein vollständiges, funktionstüchtiges<br />

Analyseframework dar. Beschränkungen bestehen derzeit noch durch die Analysegeschwindigkeit<br />

und hinsichtlich spezieller technologischer Probleme wie z. B. der Auflösung von<br />

reflektiven Aufrufen. Zum Teil existieren dazu bereits Lösungskonzepte. Auch wenn durch<br />

die Einschränkungen eine volle Marktreife noch nicht gegeben ist, bietet SecFlow bereits<br />

heute eine Hilfestellung bei der Sicherheitsanalyse von Softwaresystemen.<br />

2.1.2 Wichtige Teilergebnisse<br />

Anforderungserhebung<br />

Als fachliche Basis für das SecFlow-Projekt wurden zu Projektbeginn die grundlegenden<br />

Anforderungen an das zukünftige Werkzeug erfasst. Hinsichtlich der Analyse und Definition<br />

von Anforderungen an das Werkzeug lassen sich grob zwei Richtungen unterscheiden. Zum<br />

einen die eher wissenschaftlich getriebene Erarbeitung notwendiger technischer Konzepte<br />

zu Analyseumfang und den benötigten Analysearten, zum anderen Anforderungen, die sich<br />

aus dem späteren praktischen Einsatz <strong>des</strong> Werkzeugs z. B. in Kundenprojekten ergeben.<br />

In der Rolle <strong>des</strong> Forschungspartners in diesem Projekt mit der Kompetenz für den State-ofthe-Art<br />

von Konzepten, Methoden und Techniken hat IESE die grundlegenden Dimensionen<br />

der Analyseschärfe bei der Programmanalyse im Hinblick auf das SecFlow-Projekt untersucht<br />

und bewertet. Im Ergebnis wurde u. a. festgehalten, dass die Analysen <strong>des</strong> zukünftigen<br />

Werkzeugs sowohl Kontextsensitivität als auch Flusssensitivität (siehe z. B. [Hind 2001])<br />

berücksichtigen sollen. Zudem wurde die sog. SSA-Eigenschaft ("static single assignment")<br />

als hilfreiche und notwendige Anforderung für die Repräsentation <strong>des</strong> Programmco<strong>des</strong><br />

herausgearbeitet. Die SSA-Eigenschaft erleichtert die Datenflussanalyse erheblich. Insbesondere<br />

sorgt sie dafür, dass viele Anweisungen innerhalb derselben Prozedur in einer für<br />

Zwecke der Datenflussanalyse eindeutigen Weise geordnet werden, so dass eine intraprozedurale<br />

Datenflussanalyse für diese Anweisungen automatisch auch flusssensitiv ist.<br />

In der Praxis sind sowohl Fluss- als auch Kontextsensitivität jedoch nur bis zu einem<br />

gewissen Grade erzielbar, da jede Sensitivitätssteigerung den Berechnungsaufwand für die<br />

Datei<br />

SecFlow_<strong>Gesamt</strong>schlussbericht_V10.odt<br />

Version<br />

1.0<br />

Datum<br />

2009-02-02<br />

Bearbeiter/in<br />

Dana Richter<br />

Seite<br />

9 von 27


Analyse steigert. Es galt also eine vernünftige Abwägung zwischen Analysegenauigkeit und<br />

Analyseaufwand zu finden. Ohne vorherige Erprobung war der bestmögliche Kompromiss<br />

nicht absehbar. Daher bestand eine kritischen Anforderungen darin, eine flexible<br />

Implementierungsstrategie zu finden, die jederzeit ein Nachjustieren der Fluss- und Kontextsensitivität<br />

ermöglicht, ohne größere Änderungen am Framework vornehmen zu müssen.<br />

Parallel zu den vorrangig wissenschaftlichen Anforderungen wurden im Projekt praxisorientierte<br />

Anforderungen ermittelt. Diese spiegeln vor allem die Anwendersicht auf das<br />

entsprechende Softwareprodukt wider und beziehen sich insbesondere auf systemtechnische<br />

Anforderungen, die gewünschte Handhabung sowie die sinnvolle und verwertbare<br />

Ausgabe der Arbeitsergebnisse <strong>des</strong> geplanten Frameworks.<br />

Nicht nur, um den Prozess der Anforderungsabstimmung zu unterstützen, sondern auch um<br />

die Kommunikation und den Ergebnisaustausch unter den Projektpartnern zu erleichtern und<br />

zu fördern, wurde bereits zu Projektbeginn vom Konsortialführer <strong>CC</strong> ein projektinterner Wiki<br />

eingerichtet. Damit war die Arbeit der verschiedenen Verbundpartner für alle Projektmitglieder<br />

transparent und nachvollziehbar.<br />

Beschreibungssprache FLOW<br />

Das Vorhaben war von Beginn an darauf ausgerichtet, eine möglichst quellsprachenunabhängige<br />

Analyseunterstützung bereitzustellen. Für die ins Auge gefassten Programmiersprachen-Frameworks<br />

wurden dazu zunächst die sicherheitsrelevanten Datenquellen und<br />

Datensenken erhoben. Die Anforderung bestand darin, für alle ermittelten Codemuster eine<br />

einheitliche Darstellungsmöglichkeit zu schaffen, die den Besonderheiten der Quellsprachen<br />

Rechnung trägt. Unter Mitwirkung und Anleitung von IESE sammelten die Anwendungspartner<br />

ICT und SHE dazu typische Codebeispiele bzw. Validierungsmuster. Aus diesen<br />

Codemustern sollten im Projekt allgemeine Merkmale für sicherheitskritische Datenquellen<br />

und Datensenken abgeleitet werden. Zudem flossen Ergebnisse hieraus in die Konzeption<br />

der Datenflussbeschreibungssprache FLOW ein.<br />

Diese SecFlow-eigene Modellierungssprache FLOW dient dazu, die für eine Analyse<br />

notwendigen Informationen über Datenflüsse von externe Funktionen zu hinterlegen, die von<br />

SecFlow nicht analysiert werden können bzw. explizit von der Analyse ausgenommen<br />

werden sollen. Diese Informationen werden in der FLOW-Sprache über sogenannte Flow-<br />

Dateien (Summary Datei) an das SecFlow-Werkzeug weitergegeben.<br />

Das Konzept wurde von IESE entwickelt. Dabei wurde zunächst ein relationales, dann ein<br />

aspektorientiertes Beschreibungsformat für Datenfluss-Spezifikationen erprobt. Beide<br />

Spezifikationsformate setzten jedoch ein hohes Maß an Abstraktionsvermögen und viel<br />

Hintergrundwissen über Datenflussanalyse beim Anwender voraus und erwiesen sich daher<br />

als nicht geeignet. Aufbauend auf diesen Erfahrungen entwickelte Fraunhofer IESE in<br />

mehreren Iterationen schließlich die spezialisierte Datenfluss-Beschreibungssprache FLOW<br />

[Mandel&Jawurek 2008]. Neben der Sprachunabhängigkeit soll mit dem Einsatz von FLOW<br />

und mit der damit verbundenen intuitiven Ausdrucksweise und den minimalen, aber genau<br />

erzeugten Informationen die Spezifikation <strong>des</strong> Datenflusses erleichtert werden. Die abstrakte<br />

Darstellung erlaubt es, bekannte Datenflüsse, -quellen und -senken auf einfache Art<br />

abzubilden.<br />

Um zukünftigen Anwendern die Erstellung solcher Spezifikationen zu erleichtern, wurde von<br />

ICT und SHE auf Basis <strong>des</strong> Konzeptes von IESE eine Dokumentation mit Beispielen<br />

erarbeitet [Kalenborn et al. 2008].<br />

Entwicklung <strong>des</strong> Analysewerkzeuges<br />

Auf Grundlage der Ergebnisse aus der Anforderungsanalyse wurde durch IESE und <strong>CC</strong> die<br />

Softwarearchitektur <strong>des</strong> SecFlow-Werkzeugs entworfen und verschiedene Technologiealternativen<br />

recherchiert und hinsichtlich ihres Nutzens und der Einsatzfähigkeit für das<br />

Projekt bewertet.<br />

Der Architekturentwurf beinhaltete den modularen Aufbau <strong>des</strong> Frameworks mit<br />

Datei<br />

SecFlow_<strong>Gesamt</strong>schlussbericht_V10.odt<br />

Version<br />

1.0<br />

Datum<br />

2009-02-02<br />

Bearbeiter/in<br />

Dana Richter<br />

Seite<br />

10 von 27


� einem sprachunabhängigen Werkzeugkern, der alle für die Analyse relevanten<br />

Methoden und Abläufe umfasst,<br />

� spezifischen Plugin-Modulen zur Anbindung verschiedener Programmiersprachen,<br />

� einer Präsentationskomponente zur zielgruppenspezifischen Darstellung der<br />

Ergebnisse und<br />

� einer Benutzeroberfläche, über welche die Benutzereingaben gesteuert und<br />

strukturiert werden können.<br />

Um den Implementierungsaufwand möglichst gering zu halten, verständigten sich die<br />

Partner darauf, soweit sinnvoll und möglich bereits existierende Konzepte und Methoden bei<br />

der Realisierung <strong>des</strong> Werkzeugs einzusetzen.<br />

Die Bewertung verschiedener Realisierungsalternativen erfolgte im Hinblick auf den Grad<br />

der Erfüllung der gesammelten Anforderungen. Themen waren dabei zum Beispiel die<br />

optimale Repräsentation <strong>des</strong> analysierten Programms (z. B. mittels Quelltext, Syntaxbaum,<br />

Kontrollflussgraph, Zwischencode), der während der Analyse gewonnenen Informationen<br />

(z. B. relational, objektorientiert, imperativ), der Analyseregeln (z. B. logisch, mengenbasiert,<br />

objektorientiert, programmatisch) sowie die Darstellung der Analyseergebnisse.<br />

In Abstimmung mit allen Pojektpartnern wurde schließlich ein Ansatz auf Basis einer kontextsensitiven<br />

Codeanalyse ausgewählt, welcher sich im Open-Source-Framework Joeq<br />

wiederfand. Eine wichtige Rolle für die Auswahl dieses Frameworks war die in Joeq<br />

verwendete viel versprechende Datalog- und BDD-Technologie. Dabei wird für die<br />

Speicherung und Auswertung der Datenflussinformationen die BDD-basierte Deduktive<br />

Datenbank "BDDBDDB" [Whaley 2004] verwendet. Zur Formulierung der logischen<br />

Analyseregeln zur Ermittlung komplexer Zusammenhänge dient die Abfragesprache<br />

"Datalog" (http://de.wikipedia.org/wiki/Datalog).<br />

Das Joeq-Framework bietet Programmiersprachenunabhängkeit durch eine Intermediate<br />

Representation (IR) basierend auf einem Quad genannten Zwischencode. Dieser stellt eine<br />

traditionelle 2-stufige Zwischensprache mit einem Kontrollflussgraphen und einer Darstellung<br />

der Befehle als Quads (3 Operatoren, 1 Operand) dar. Als prozessornahe registerbasierte<br />

Darstellung vereinfacht Quad die Datenflussanalyse, die in einer stackbasierten Darstellung<br />

durch das Stackhandling wesentlich aufwendiger wäre.<br />

Die sprachunabhängige Darstellung Quad dient für SecFlow zudem als Schnittstelle zur<br />

Anbindung der verschiedenen Programmiersprachen an das SecFlow-Analyseframework.<br />

Diese Anbindung erfolgt im jeweiligen Sprachmodul durch einen – natürlich<br />

sprachabhängigen – Compiler für die Übersetzung vom Quell- bzw. Bytecode der jeweiligen<br />

Programmiersprache nach Quad.<br />

Insgesamt resultierte eine modulare Werkzeugarchitektur gemäß Abbildung 1.<br />

Die Architektur sieht vor, dass Software verschiedener Quellsprachen analysiert werden<br />

kann. Aktuell unterstützt das Werkzeug die Programmiersprachen Java und C#, wobei<br />

jeweils der Bytecode (JBC/Java bzw. CIL/.NET-Assembly) analysiert wird. Dieser erste<br />

Schritt, der nicht zum SecFlow-Werkzeug gehört, sondern von konventionellen Compilern<br />

erledigt wird, wird unter der Bezeichnung ”Preprocessing" zusammengefasst.<br />

Die Sprachkomponente (Language Component) übersetzt den stackbasierten, sprachabhängigen<br />

Bytecode in die registerbasierte, sprachunabhängige Zwischensprache Quad.<br />

Der so entstehende Zwischencode dient als Schnittstelle zu nachfolgenden SecFlow-<br />

Komponenten. Er beinhaltet die Datenbasis für die spätere Analyse.<br />

Die Adapterkomponente (Adapter Component) übersetzt den Zwischencode in relationale<br />

Tupel. Diese Tupel bilden im Quadcode enthaltene Zusammenhänge ab.<br />

Datenfluss-Summaries sind Modelle externer Funktion, die nicht direkt analysiert werden<br />

können. Sie müssen manuell spezifiziert werden. Die Summarykomponente (Summary<br />

Component) übersetzt die Datenfluss-Summaries und macht sie damit für das Werkzeug<br />

verfügbar.<br />

Datei<br />

SecFlow_<strong>Gesamt</strong>schlussbericht_V10.odt<br />

Version<br />

1.0<br />

Datum<br />

2009-02-02<br />

Bearbeiter/in<br />

Dana Richter<br />

Seite<br />

11 von 27


Abb. 1: SecFlow: Werkzeugarchitektur<br />

Die Analysekomponente (Analysis Component) führt die eigentliche Datenflussanalyse<br />

durch und berechnet aus den zuvor generierten Tupeln und den von der Summarykomponente<br />

übersetzten Datenfluss-Summaries eine Rohform der kritischen Pfade. Das<br />

Ergebnis der Analysekomponente sind verschiedene Datenbankrelationen, welche tupelweise<br />

ausgelesen werden können.<br />

Datei<br />

SecFlow_<strong>Gesamt</strong>schlussbericht_V10.odt<br />

Version<br />

1.0<br />

Datum<br />

2009-02-02<br />

Bearbeiter/in<br />

Dana Richter<br />

Seite<br />

12 von 27


Die Filterkomponente (Filter Component) entwickelt aus den Ergebnisrelationen der<br />

Analysekomponente einen Graphen und extrahiert aus diesem Graphen einen redundanzfreien<br />

Datenflusspfad. Der Pfad wird in XML-Format ausgegeben. In der Präsentationskomponente<br />

(Presentation Component) können diese Pfade visualisiert werden.<br />

Sprachmodule: Compiler nach QUAD<br />

Java-Bytecode JBC nach Quad<br />

Für die Programmiersprache Java war das Sprachmodul, der Compiler vom Java-Bytecode<br />

JBC nach Quad, in Joeq bereits vorhanden (der sogenannte JVM2QUAD-Compiler).<br />

.NET-Bytecode CIL nach Quad<br />

Um auch Programme in anderen Programmiersprachen als Java analysieren zu können,<br />

müssen entsprechende Compiler nach Quad erstellt werden. Ein lohnen<strong>des</strong> Ziel für<br />

Sicherheitsanalysen sind die auf der .NET-Plattform von Microsoft implementierten<br />

Programmiersprachen (u. a. C#, Visual Basic .NET). Für alle diese Sprachen existieren<br />

bereits Compiler von der Quellsprache in den .NET-Bytecode "Common Intermediate<br />

Language" (genannt CIL), eine erweiterte Byteco<strong>des</strong>prache (siehe auch Abbildung 2). CIL-<br />

Bytecode dient als Zwischensprache für viele verschiedene Quellsprachen (neben den oben<br />

genannten .NET-Sprachen auch Java und PHP) und ist Bestandteil der CLR (Common<br />

Language Runtime), einer nach ECMA 335 vorliegenden Spezifikation für eine<br />

Ausführungsumgebung. CLR wurde von Microsoft als Alternative zur Java VM (JVM)<br />

vorangetrieben, es liegen dazu auch Implementierungen als Open Source vor (z. B, Mono,<br />

MS Rotor).<br />

Im Projekt wurde daher beschlossen, die Sicherheitsanalyse basierend auf dem .NET-<br />

Bytecode CIL aufzusetzen, damit konnte SecFlow gleichzeitig für eine Vielzahl von<br />

Sprachen erweitert werden. Aus dieser Tatsache entstand die Notwendigkeit für einen<br />

entsprechenden Compiler von CIL-Bytecode in den Zwischencode Quad, dem sogenannten<br />

CIL2Quad Compiler (vgl. Abbildungen 2 und 3).<br />

C#<br />

using System;<br />

using System.IO;<br />

namespace sample<br />

{<br />

class MainClass<br />

{<br />

public static void Main(string[]<br />

args)<br />

{<br />

int[] iArray = new int[2];<br />

Int32 i32 = new Int32();<br />

iArray[0] = 2;<br />

iArray[1] = i32;<br />

if(!(iArray[1]


QUAD:<br />

BB0 (ENTRY) (in: , out: BB2)<br />

BB2 (in: BB0 (ENTRY), out: BB3, BB8)<br />

1 NEWARRAY T3 Int32[], IConst: 2, LInt32;[]<br />

2 MOVE_I R1 int, IConst: 0<br />

3 NULL_CHECK T-1 , R0 String[]<br />

4 BOUNDS_CHECK R0 String[], IConst: 1, T-1 <br />

5 ALOAD_I T4 int, R0 String[], IConst: 1, T-1 <br />

6 NULL_CHECK T-1 , R0 String[]<br />

7 BOUNDS_CHECK R0 String[], IConst: 0, T-1 <br />

8 ALOAD_I T5 int, R0 String[], IConst: 0, T-1 <br />

9 IFCMP_I T4 int, T5 int, LE, BB8<br />

BB3 (in: BB2, out: BB7)<br />

10 MOVE_I R2 int, IConst: 0<br />

11 GOTO BB7<br />

BB7 (in: BB3, BB6, out: BB8, BB4)<br />

:<br />

BB1 (EXIT) (in: BB2, out: )<br />

Abb. 3: Beispiel für eine C#-Datei: Darstellung im Quadcode.<br />

In diesem Zusammenhang wurde von <strong>CC</strong> eine Anforderungs- und Machbarkeitsanalyse<br />

sowie eine Aufwandsabschätzung zur Herstellung eines solchen Compilers durchgeführt.<br />

Dazu wurde die für die Programmiersprache Java schon vorhandene Lösung, der<br />

JVM2QUAD-Compiler, analysiert und parallel verschiedene Open-Source-Projekte und<br />

verschiedene Spezifikationen untersucht, die sich mit dem Handling von CIL-Bytecode<br />

befassen. Dazu gehören unter anderem ILDump, JaCIL, IKVM, MS Rotor, MBEL und Mono.<br />

Der CIL2QUAD-Compiler wurde schließlich auf Basis <strong>des</strong> quelloffenen Bytecodeparsers<br />

MBEL (Microsoft Bytecode Engineering Library, [MBEL 2008]) entworfen und entwickelt –<br />

dies schloss Implementierung und Test ein. Die Entscheidung für MBEL ergab sich u. a.<br />

auch aus der Implementierungssprache Java, die eine einfache Integration in das SecFlow-<br />

Framework gewährleistete. Während der Entwicklung zeigte sich, dass MBEL an einigen<br />

Stellen nicht vollständig implementiert ist. Die Bibliothek wurde entsprechend ergänzt.<br />

Zusätzlich unterzog <strong>CC</strong> die Komponente einem Profiling und optimierte diese – auch im<br />

Hinblick auf die Performance – auf Basis der Ergebnisse weiter. Die Unabhängigkeit <strong>des</strong><br />

CIL2QUAD-Compilers und damit auch <strong>des</strong> SecFlow-Analyse-Backends von einer konkreten<br />

CLR-Implementierung konnte so erreicht werden.<br />

Mit Unterstützung <strong>des</strong> Projektpartner IESE wurde schließlich der CIL2QUAD-Compiler von<br />

<strong>CC</strong> in das SecFlow-Framework integriert. Kritische Codebereiche wurden besprochen und<br />

nötige Anpassungen der Schnittstelle vorgenommen.<br />

Anbindung weiterer Programmiersprachen<br />

Neben der Analyse von Java- und .NET-Programmen erscheint auch die Prüfung von<br />

Quelltexten in der Programmiersprache PHP als lohnenswerte Zielsetzung für SecFlow.<br />

Mit der Anbindung der Programmiersprache PHP wird es nicht nur möglich sein,<br />

Anwendungen, die in dieser heute als hochgradig unsicher geltenden Programmiersprache<br />

erstellt wurden bzw. werden, auf sicherheitskritische Datenflüsse zu analysieren. Es wird<br />

zudem aufgrund <strong>des</strong> hohen Verbreitungsgra<strong>des</strong> in der Entwickler Community und der zahlreichen<br />

Implementierungen zur Anhebung <strong>des</strong> allgemeinen Sicherheitsstandards von Web-<br />

Anwendungen beitragen.<br />

Im Rahmen <strong>des</strong> Projektes wurde von IESE und <strong>CC</strong> die Möglichkeit der Erweiterung <strong>des</strong><br />

SecFlow-Kerns für die Programmiersprache PHP analysiert. Im Rahmen einer Diplomarbeit<br />

bei IESE wurde eine prototypische, wenn auch nicht voll ausgereifte Unterstützung für die<br />

Programmiersprache PHP realisiert [Nicolay 2008]. Dabei konnte nachgewiesen werden,<br />

Datei<br />

SecFlow_<strong>Gesamt</strong>schlussbericht_V10.odt<br />

Version<br />

1.0<br />

Datum<br />

2009-02-02<br />

Bearbeiter/in<br />

Dana Richter<br />

Seite<br />

14 von 27


dass eine Anbindung von PHP prinzipiell möglich ist. Es bestehen derzeit jedoch noch große<br />

Beschränkungen insbesondere aufgrund der von SecFlow verfolgten statischen Analyse.<br />

Diese Grenzen zu lösen, stellt eine herausfordernde Aufgabe dar, die evtl. in einem<br />

nachfolgenden Projekt durch die Projektpartner angegangen werden soll.<br />

Benutzerschnittstelle und Präsentationskomponente<br />

Ein weiterer Aufgabenschwerpunkt im Projekt war die Entwicklung der Benutzerschnittstelle<br />

<strong>des</strong> SecFlow-Werkzeugs inklusive der zugehörigen Validierung. Neben der Gewährleistung<br />

einer einfachen Handhabung <strong>des</strong> Werkzeugs, vor allem in Hinblick auf mögliche<br />

Einstellungen durch den Anwender, entschieden sich die Projektpartner auch die<br />

Ergebnisdarstellung über die SecFlow-GUI zu realisieren. Ziel war dabei eine übersichtliche<br />

und verständliche Darstellung der Prüfergebnisse zu finden, die es Anwendern auch ohne<br />

spezifisches Wissen über sicherheitskritische Aspekte im Sourcecode nicht nur erlaubt, die<br />

Ergebnisse zu verstehen, sondern auch Unterstützung bei der Einleitung entsprechender<br />

Maßnahmen zur Verbesserung der Sicherheit bietet.<br />

Das Konsortium entschied sich nach einer Analyse und Bewertung möglicher Alternativen,<br />

die GUI-Komponenten in Eclipse als weit verbreitetes und anerkanntes Entwicklungssystem<br />

zu integrieren. Zur Erprobung der Implementierungsvarianten einzelner Teilkomponenten<br />

der GUI wurden von IESE als auch von <strong>CC</strong> verschiedene Referenzimplementierungen<br />

erarbeitet.<br />

Die letztendlich erstellte SecFlow-GUI bietet<br />

� Funktionen zur Konfiguration und Ausführung <strong>des</strong> Analysevorhabens,<br />

� Funktionen zur Bearbeitung von Summary Dateien (auch Flow Dateien genannt) zur<br />

Abbildung externer Teile <strong>des</strong> analysierten Systems,<br />

� die übersichtliche Ausgabe und verständliche Darstellung der Analyseergebnisse<br />

sowie<br />

� eine Rückreferenzierung von den Analyseergebnissen auf den dem Entwickler<br />

vorliegenden Quellcode <strong>des</strong> analysierten Systems.<br />

Dafür wurden folgende GUI-Komponenten implementiert:<br />

� Konfigurationseditor<br />

� Flow-GUI<br />

� Präsentationskomponente<br />

<strong>CC</strong> realisierte diese Benutzeroberfläche als Eclipse-Plugin. Sie wird über eine speziell für<br />

SecFlow entwickelte Eclipse Update Site bereitgestellt.<br />

Einen Überblick über die einzelnen Komponenten und ihre Zusammenhänge bietet die<br />

nachfolgende Abbildung 4.<br />

Konfigurationseditor<br />

Der Konfigurationseditor dient zur Konfiguration der Analyse, dem Management der zu<br />

analysierenden Quellen sowie der Organisation der benötigten Ressourcen. Über diese<br />

Komponente wird die Ausführung der Analysen gestartet.<br />

Flow-GUI<br />

Der Flow-Editor der Benutzerschnittstelle bietet Funktionen, um dem Anwender die<br />

Erstellung, die Bearbeitung und Pflege der Flow-Dateien (Summary Dateien) zu erleichtern.<br />

Dem Anwender stehen dabei drei Eclipse Views zur Verfügung:<br />

Die Library View zeigt die in einem Projekt verfügbaren Bibliotheksklassen (externe<br />

Funktionen) an, während die Flow View die für ein Projekt verfügbaren Summary Dateien<br />

wiedergibt. Weiterhin bietet sie Funktionen, um fehlende und unvollständige Summary<br />

Dateien (bezogen auf die Ebene der Methoden) im aktuellen Projekt zu bestimmen. Über<br />

Datei<br />

SecFlow_<strong>Gesamt</strong>schlussbericht_V10.odt<br />

Version<br />

1.0<br />

Datum<br />

2009-02-02<br />

Bearbeiter/in<br />

Dana Richter<br />

Seite<br />

15 von 27


eide Views ist es möglich, den Flow-Generator aufzurufen und so die Erzeugung neuer<br />

Summary Dateien zu starten.<br />

Abb. 4: Überblick zur Benutzerschnittstelle<br />

Die Flow Outline View zeigt eine strukturierte Übersicht über eine Flow-Datei. Die View soll<br />

den Entwickler dabei unterstützen korrekte Flow-Dateien zu erstellen. Die Auswahl eines<br />

Elements öffnet im Source-Editor die entsprechende Flow-Datei und positioniert den Cursor<br />

vor dem ausgewählten Element. Änderungen an der Flow-Datei werden beim Speichern<br />

direkt in der Outline View übernommen.<br />

Mit dem Flow-Generator ist es möglich, unter Angabe der Quelldatei automatisch Templates<br />

für Flow-Dateien zu erzeugen. Diese beinhalten ein an die Gegebenheiten der jeweiligen<br />

Bibliotheksfunktion angepasstes Grundgerüst zur Darstellung <strong>des</strong> entsprechenden<br />

Datenflussmodells. Diese Grundgerüst kann dann vom Anwender mit den entsprechenden<br />

Datenflussinformationen gefüllt werden.<br />

Präsentationskomponente<br />

Das SecFlow-Analyse-Backend liefert Informationen über sicherheitsrelevante Schwachstellen<br />

in sogenannten Pfaden. Ein Pfad beschreibt einen Weg von einer Quelle zu einer<br />

Senke. Über eine Quelle werden potentiell kritische Daten in ein Programm eingespeist.<br />

Wenn diese bis zur Senke gelangen, entsteht möglicherweise ein Schaden.<br />

Die Ergebnisse werden durch das Analyse-Backend in Form einer XML-Struktur<br />

ausgegeben. Die Präsentationskomponente hat zum einen die Aufgabe, diese Analyseergebnisse<br />

für Programmentwickler und -verantwortliche leicht verständlich darzustellen und<br />

zum anderen eine Rückreferenzierung von den Analyseergebnissen auf den dem Entwickler<br />

vorliegenden Quellcode <strong>des</strong> analysierten Systems anzubieten.<br />

Datei<br />

SecFlow_<strong>Gesamt</strong>schlussbericht_V10.odt<br />

Version<br />

1.0<br />

Datum<br />

2009-02-02<br />

Bearbeiter/in<br />

Dana Richter<br />

Seite<br />

16 von 27


Um den in der ersten Projektphase ermittelten Anforderungen gerecht zu werden, wurden<br />

durch den Implementierungspartner <strong>CC</strong> zwei spezielle Ausgabekomponenten geschaffen –<br />

die Outpath View und die Reporting-Komponente.<br />

Die Out Path View bereitet die Ausgaben <strong>des</strong> SecFlow-Analyse-Backends auf und stellt sie<br />

dem Entwickler in optisch und logisch aufbereiteter Form dar. Aus ihr kann der Anwender die<br />

ermittelten sicherheitskritischen Pfade und deren Elemente ablesen. Darüber hinaus bildet<br />

die Out Path View die Schnittstelle und Verbindung zwischen der Ausgabe <strong>des</strong> SecFlow-<br />

Analyseframeworks und dem Quelltext der analysierten Source-Datei: Die angezeigten<br />

Pfadelemente sind mit den Quelltextabschnitten verknüpft und ermöglichen es, in die<br />

betroffene Codezeile in der analysierten Source zu navigieren (siehe Abbildung 5).<br />

Abb. 5: Out Path View<br />

Die im Out Path View angezeigten Informationen beschränken sich auf die für die Anzeige<br />

im Quelltext relevanten Inhalte, wie zum Beispiel Element, Identifier oder Zeilennummer.<br />

Darüber hinaus können auch weitere Statistiken bezüglich der Ausgabe <strong>des</strong> SecFlow-<br />

Werkzeugs ermittelt werden. Aus der Out Path View heraus ist es möglich, die<br />

Reportausgabe zu starten und Reports in verschiedenen Formaten (HTML, PDF, ODT, XLS)<br />

zu erstellen. Ein Report fasst den analysierten Quelltext, die Ausgabe <strong>des</strong> SecFlow-<br />

Werkzeugs und die Beziehungen zwischen diesen beiden zu einem Dokument zusammen<br />

und ermittelt Kennzahlen über Quellen, Senken, Pfade, Schwachstellen etc. zu den<br />

analysierten Programmen.<br />

Die Reportgenerierung in SecFlow basiert auf der Reporting Engine JasperReports und<br />

iReport [Jasper 2008]. Das Tool iReport bietet eine GUI-Oberfläche zur Erstellung und<br />

Bearbeitung von JasperReports. Das Subreport-Konzept von iReport gestattet es, einzelne<br />

Komponenten eines Reports und den Report selbst in anderen Reports wiederzuverwenden.<br />

Dadurch ist es möglich, das Aussehen und die Ausgaben <strong>des</strong> Reportings ohne großen<br />

Aufwand zu ändern und zu erweitern.<br />

Die grundlegenden Informationen zum Aufbau <strong>des</strong> SecFlow-Werkzeugs und seiner<br />

Bedienung stellte <strong>CC</strong> im Benutzerhandbuch zusammen. Dieses Handbuch führt in die<br />

Grundzüge von SecFlow ein, geht auf die Funktionen seiner einzelnen Komponenten ein<br />

und leitet den Anwender – sei es ein Entwickler oder ein Betreuer eines ganzen Portfolios<br />

von Programmen – durch sein Analysevorhaben mit dem Werkzeug von der Konfiguration<br />

Datei<br />

SecFlow_<strong>Gesamt</strong>schlussbericht_V10.odt<br />

Version<br />

1.0<br />

Datum<br />

2009-02-02<br />

Bearbeiter/in<br />

Dana Richter<br />

Seite<br />

17 von 27


<strong>des</strong> Werkzeugs bis zu seinen Ausgaben. Neben Informationen, die die Arbeit mit dem<br />

SecFlow-Framework vereinfachen, bietet das Handbuch auch einige Beispiele.<br />

Bewertung von Analysegüte und Performanz<br />

Zur Absicherung der Richtigkeit der Analyseergebnisse und zur Verifizierung der<br />

Werkzeugfunktionalität <strong>des</strong> erstellten Prototyps wurde die SecuriBench Micro [SecuriBench<br />

2006] benutzt, eine von der Stanford University veröffentlichte Sammlung von kurzen<br />

Programmbeispielen mit charakteristischen Problemfällen für statische Quellcodeanalysen.<br />

Neben der Unterstützung der laufenden Regressionstests während der Weiterentwicklung<br />

<strong>des</strong> Prototyps gewährleisteten diese Testfälle eine objektive Bewertung der Fähigkeit <strong>des</strong><br />

SecFlow-Frameworks, kritische Datenflüsse zu erkennen und dabei möglichst wenige falschpositive<br />

oder falsch-negative Befunde zu ermitteln.<br />

Für die Programmiersprache Java wurden 128 an die [SecuriBench 2006] angelehnte<br />

Testfälle ausgeführt. 110 Testfälle lieferten das korrekte, vollständige Ergebnis; 12 Testfälle<br />

ergaben einen falsch-positiven Befund und 6 Testfälle einen falsch-negativen Befund. Somit<br />

wurden etwa 86 Prozent der kritischen Datenflüsse richtig identifiziert bei einer Quote von<br />

weniger als 9,4 Prozent falsch-positiven Resultaten.<br />

Eine vergleichbare, ebenfalls auf [SecuriBench 2006] basierende Testsuite wurde von den<br />

Kooperationspartnern SHE und <strong>CC</strong> auch für die Programmiersprache C# konzipiert. Auch<br />

für diese Testfälle wurde eine vergleichbare Testabdeckung und Werkzeuggüte erzielt.<br />

Damit wurde für diese Testfallsammlungen das ursprüngliche Ziel, möglichst viele<br />

Datenflussprobleme zu erkennen und dabei weniger als 50 Prozent falsch-positive Befunde<br />

zu liefern, erreicht. Ob die erzielte Genauigkeit in der Praxis auch bei sehr umfangreichen<br />

Quellprogrammen ähnlich positiv bleibt, muss sich noch erweisen.<br />

Nach derzeitigem Befund bleibt die Performanz <strong>des</strong> Werkzeugs bisher hinter den im Projekt<br />

gesetzten Erwartungen zurück. Zu einem Teil ist dies der Zeitnot geschuldet, die leider ein<br />

umfangreicheres Feintuning einzelner Komponenten bzw. Konzepte verhinderte. Die<br />

Projektpartner sind zuversichtlich, dass die Analyseregeln noch signifikantes<br />

Optimierungspotential bergen, das in Zukunft noch erschlossen werden soll. Allerdings zeigt<br />

die allgemeine Erfahrung auch, dass statische Datenflussanalyse offenbar ein inhärent<br />

schwieriges Problem darstellt. Ein Indiz dafür liefern zum Beispiel auch Erfahrungsberichte<br />

von Anwendern verschiedener freier oder kommerziell vertriebener Analysewerkzeuge: Alle<br />

bekannten Analyseansätze leiden entweder unter geringer Analyseschärfe, einer hohen<br />

Rate falsch-positiver Befunde oder unter beschränkter Analysegeschwindigkeit — meist<br />

unter allen genannten Defiziten in unterschiedlichem Maße. Daher ist auch im günstigsten<br />

Fall nicht zu erwarten, dass ein Analysewerkzeug ein rundum befriedigen<strong>des</strong><br />

Analysevermögen hat. Nach heutigem Kenntnisstand werden Datenflussanalysen immer<br />

erheblichen Beschränkungen unterliegen.<br />

Werkzeugvalidierung<br />

Neben den oben beschriebenen "kleinen" Testfällen war es notwendig, die Funktionalität und<br />

Einsatzfähigkeit <strong>des</strong> Werkzeugs unter praxisnahen Bedingungen zu erproben. Dazu wurden<br />

insbesondere von den Praxispartnern ICT und SHE verschiedene Testfälle definiert, die<br />

Verwundbarkeiten in der Realität darstellen.<br />

ICT mit seinem Know-how bezüglich J2EE-Plattformen und Internet-Anwendungen stellte<br />

dafür Teile seines Content Management System I<strong>CC</strong>ontent zur Verfügung, in dem gezielt<br />

Verwundbarkeiten in verschiedenen Klassen eingebaut wurden. Die eingebauten<br />

Schwachstellen wurden so aufgebaut, dass sie aus verschiedenen Gefahrenbereichen<br />

stammen. So wurden insbesondere Schwachstellen aus den wichtigen Bereichen Command<br />

Injection, Error-Handling und Austausch von Systemparametern in die Testklassen<br />

eingebaut. SHE als Spezialist für Anwendungen in den Programmiersprachen C# und .NET<br />

stellte eine Testanwendung in einer alternativen Sprache (.Net) mit entsprechenden<br />

Eigenschaften zur Verfügung.<br />

Datei<br />

SecFlow_<strong>Gesamt</strong>schlussbericht_V10.odt<br />

Version<br />

1.0<br />

Datum<br />

2009-02-02<br />

Bearbeiter/in<br />

Dana Richter<br />

Seite<br />

18 von 27


Weiterhin wurden im Rahmen der Evaluierung von Testanwendungen Datenflüsse<br />

spezifiziert und Junit Tests geschrieben. Dies war notwendig, um die entsprechenden<br />

Klassen über das Datenflussanalyse-Werkzeug auf sicherheitskritische Schwachstellen hin<br />

überprüfen zu können. Damit die Tests durchgeführt werden konnten, mussten für weite<br />

Teile der Testanwendungen Datenflussbeschreibungen – d. h. Summaries – erstellt werden.<br />

Mit ihrer Hilfe kann das Analysewerkzeug die Datenflüsse außerhalb seines Analysebereichs<br />

erkennen und entscheiden, ob sich dabei Schwachstellen ergeben.<br />

Im Zusammenhang mit der Erstellung von Testfällen arbeiteten ICT und SHE eng<br />

zusammen. In mehreren Teilprojekttreffen zum Thema "Test" erörterten sie gemeinsam<br />

relevante Schwachstellen und ein entsprechen<strong>des</strong> Vorgehen, um entsprechende Co<strong>des</strong>tellen<br />

in den bestehenden Anwendungen definieren zu können.<br />

In der Validierungsphase <strong>des</strong> Projektes wurde der Werkzeug-Prototyp über einen Zeitraum<br />

von fünf Wochen von den Anwendungspartnern SHE und ICT unter kontrollierten,<br />

realitätsnahen Versuchsbedingungen erprobt. Neben ausführlichen Funktionstests wurde<br />

auch die Usability, d. h. der Komfort bei der Bedienung <strong>des</strong> Werkzeugs betrachtet.<br />

Die Ergebnisse wurden protokolliert und statistisch ausgewertet. Von den Implementierungspartnern<br />

IESE und <strong>CC</strong> wurden daraufhin notwendige Fehlerkorrekturen durchgeführt und die<br />

durch die Benutzer eingebrachte Verbesserungen und Erweiterungen im Handling von<br />

SecFlow implementiert.<br />

Wissensbasis<br />

Um dem Anwender von SecFlow später auch eine inhaltliche Hilfe zu den gefundenen<br />

Schwachstellen zu bieten, wurde von ICT eine Wissensbasis angelegt. Diese beinhaltet<br />

Codebeispiele und Entwicklerhinweise, auf die bei Problemen zugegriffen werden kann. Die<br />

Fälle sind hierarchisch aufbereitet und definierten Problembereichen zugeordnet. Die<br />

Wissensbasis wurde bisher mit ca. 50 Fällen aus verschiedenen sicherheitsrelevanten<br />

Bereichen gefüllt. Über das Datenfluss-Werkzeug und über den von ICT entwickelten Source<br />

Code Scanner erhält der Anwender einfachen und direkten Zugriff auf die Fälle der<br />

Wissensbasis. Zur Umsetzung wird die Plattform www.secflow.de genutzt, die mit dem<br />

Content Management System I<strong>CC</strong>ontent betrieben wird.<br />

Musterbasierte Codeanalyse<br />

Neben dem datenflussbasierten SecFlow-Werkzeug wurde für die Sprache Java ein<br />

musterbasierter Source Code Scanner als Prototyp für Java in Form eines Eclipse-Plugins<br />

während <strong>des</strong> Projektes durch ICT erstellt. Das Tool dient der Ermittlung von möglichen<br />

Schwachstellen, die rein musterbasiert, also unabhängig vom Kontroll- und Datenfluss,<br />

erkennbar sind. Hintergrund dieser Entwicklung war der Idee, sicherheitskritische<br />

Co<strong>des</strong>tellen bereits während der Codierung aufzudecken und dem Entwickler ähnlich einer<br />

Rechtschreibprüfung anzuzeigen.<br />

2.2 Darstellung <strong>des</strong> voraussichtlichen Nutzens<br />

2.2.1 Nutzen für die Allgemeinheit<br />

Das Open Web Application Security Project (OWASP) veröffentlicht je<strong>des</strong> Jahr die Rangliste<br />

der wichtigsten Sicherheitsmängel von Web-Anwendungen. Nach wie vor belegen dabei<br />

kritische Sicherheitsmängel, die auf ungeprüften Eingabedaten basieren, die vordersten<br />

Plätze. Das SecFlow-Werkzeug zeigt solche Sicherheitsschwachstellen auf Anwendungsebene<br />

automatisch an.<br />

Das Ergebnis <strong>des</strong> SecFlow-Projektes ist ein funktionsfähiger Prototyp eines<br />

Analysewerkzeugs für Java- und .Net-Anwendungen. Es kann die Datenflüsse in<br />

Anwendungen auf reale und potentielle Sicherheitslücken überprüfen und zeichnet sich<br />

durch ein hohes Maß an Sprachunabhängigkeit aus. Ein Großteil der Sicherheitslücken<br />

beruht auf Fehlern bei der Programmierung, die auf fehlen<strong>des</strong> Wissen der Entwickler über<br />

Datei<br />

SecFlow_<strong>Gesamt</strong>schlussbericht_V10.odt<br />

Version<br />

1.0<br />

Datum<br />

2009-02-02<br />

Bearbeiter/in<br />

Dana Richter<br />

Seite<br />

19 von 27


Softwaresicherheit zurückzuführen sind. Zudem treten viele Schwachstellen wiederholt auf.<br />

Das SecFlow-Werkzeug, in dem spezielles Wissen über Softwaresicherheit verankert ist,<br />

kann die mühsame und fehleranfällige Arbeit der programminternen Kontrolle und Analyse<br />

übernehmen. Damit ist es möglich, bereits bei der Entwicklung von Software potentielle<br />

sicherheitskritische Schwachstellen <strong>des</strong> im Entstehen befindlichen Systems vorab zu<br />

identifizieren und durch entsprechende Gegenmaßnahmen zu beseitigen. Der wirtschaftliche<br />

Erfolg liegt <strong>des</strong>halb vor allem auch bei den Benutzern von Web-Anwendungen, die höhere<br />

Qualität und Sicherheit erhalten.<br />

Neben den noch bestehenden Analysegrenzen (z. B. bei der Behandlung von Reflection<br />

oder Arrays) ist vorläufig der Einsatz <strong>des</strong> SecFlow-Frameworks noch durch ein hohes Maß<br />

an manuellen Tätigkeiten, notwendiger spezieller Kenntnis der zu analysierenden<br />

Anwendung selbst sowie der von ihr verwendeten externen Systeme als auch durch die<br />

Analysegeschwindigkeit beschränkt. Ein effektiver Einsatz <strong>des</strong> Werkzeugs ist derzeit für<br />

kleine bzw. mittelgroße Anwendungen möglich.<br />

Trotzdem wird das Werkzeug einen Beitrag leisten, um die entwickelten wissenschaftlichen<br />

und technischen Konzepte weiter in der IT-Welt zu verbreiten und damit die Herstellung von<br />

sicherer Software zu fördern. Die Verfügbarmachung <strong>des</strong> Werkzeug-Frameworks als<br />

Open Source sorgt für eine weite Streuung <strong>des</strong> im Tool enthaltenen Know-hows. Es<br />

gestattet unabhängigen Dritten die Erstellung eigener umgebungsspezifischer<br />

Weiterentwicklungen, was längerfristig zur Hebung <strong>des</strong> allgemeinen Qualitätsstandards der<br />

deutschen Software-Branche auf dem so wichtigen Feld der IT-Sicherheit beiträgt.<br />

2.2.2 Verwertbarkeit im Sinne <strong>des</strong> fortgeschriebenen Verwertungsplans<br />

Unabhängig von einer kommerziellen Verwertung der konkret entwickelten SecFlow-<br />

Komponenten ist die im Projekt erworbene Kompetenz im Bereich der fortschrittlichen<br />

Datenflussanalysen bzw. im Bereich der IT-Sicherheit eine wichtige Bereicherung für das<br />

Produkt- und Dienstleistungsportfolio aller beteiligten Technologie-, Anwendungs- und<br />

Forschungspartner. Alle Partner gehen davon aus, die erworbene Kompetenz in<br />

Kundenprojekten weiter erfolgreich einsetzen zu können.<br />

Zudem planen insbesondere die Partner ICT, SHE und <strong>CC</strong> das entstandene Werkzeug<br />

weiter zu nutzen. So zielt z. B. ICT auf eine Überprüfung der gesamten Software I<strong>CC</strong>ontent<br />

durch das SecFlow-Werkzeug, um so einen Sicherheitsvorsprung gegenüber vergleichbaren<br />

Anwendungen zu erlangen. Im Rahmen <strong>des</strong> Projektes konnten bereits verschiedene Module<br />

von I<strong>CC</strong>ontent auf potentielle Schwachstellen hin untersucht werden. Bei diesen Analysen<br />

konnten erfolgreich Schwachstellen lokalisiert, eingegrenzt und behoben werden. Damit<br />

konnte das SecFlow-Werkzeug seinen direkten Nutzen im Rahmen der Software-<br />

Entwicklung bereits beweisen. Diese Arbeiten sollen möglichst im Jahr 2009 abgeschlossen<br />

werden.<br />

Trotz <strong>des</strong> zusätzlichen Aufwands für die Erweiterung und Verbesserung <strong>des</strong> Werkzeugs<br />

nach Projektende wird <strong>CC</strong> die Ergebnisse <strong>des</strong> Projektes in die Erweiterung der existierenden<br />

<strong>CC</strong>-Produktpalette einfließen lassen und damit auch den Kompetenzbereich bei Analysewerkzeugen<br />

in Bezug auf das Qualitätsmerkmal Sicherheit und dabei schwerpunktmäßig auf<br />

die Sicherheit von Quellcode ausdehnen. Angestrebt wird dabei auch eine Kopplung <strong>des</strong><br />

SecFlow-Werkzeugs bzw. seiner Ausgaben mit bereits existierenden und am Markt<br />

etablierten <strong>CC</strong>-Produkten wie z. B. mit der Software zur statischen Programmanalyse<br />

<strong>CC</strong> AUDITOR. Dies bietet nicht nur bestehenden Kunden einen zusätzlichen Nutzwert der<br />

Produkte, sondern stellt gleichzeitig einen zusätzlichen Anreiz für Interessenten zum Einsatz<br />

eines <strong>CC</strong>-Werkzeuges dar. Insbesondere im Hinblick auf die wachsende Konkurrenz im<br />

Open-Source-Bereich geht <strong>CC</strong> davon aus, dass die erfolgreiche Anbindung <strong>des</strong> SecFlow-<br />

Werkzeuges an die <strong>CC</strong>-Produkte die Erhaltung der Wettbewerbsfähigkeit und die Sicherung<br />

der Marktposition der Produkte bedeuten.<br />

Zudem plant <strong>CC</strong>, einzelne Komponenten <strong>des</strong> SecFlow-Frameworks in anderen Zusammenhängen<br />

weiter zu nutzen. So wird z. B. angestrebt unter der Verwendung von Methoden und<br />

Technologien <strong>des</strong> CIL2QUAD-Compilers, Mechanismen zu entwickeln, die die Konvertierung<br />

Datei<br />

SecFlow_<strong>Gesamt</strong>schlussbericht_V10.odt<br />

Version<br />

1.0<br />

Datum<br />

2009-02-02<br />

Bearbeiter/in<br />

Dana Richter<br />

Seite<br />

20 von 27


verschiedener Programmiersprachen unterstützen. Damit könnte <strong>CC</strong> zukünftig auch<br />

Konvertierungen von Anwendungssystemen von und nach Programmiersprachen, die in der<br />

.NET-Plattform implementiert sind, kostengünstig anbieten und damit seine Marktposition in<br />

diesem Bereich stärken.<br />

Nicht zuletzt eröffnet die geschaffene Schnittstelle zwischen .NET und Java neue<br />

Möglichkeiten: Die Verbindung von .NET mit Java-Code und die damit mögliche Integration<br />

und Auswertung der kommerziellen Microsoft.NET-Welt in die durch Open Source geprägte<br />

Java-Welt ist für eine weitere Verwertung der Ergebnisse von grossem Interesse.<br />

Aufgrund der Erfolge <strong>des</strong> SecFlow-Projekts erwägen die Konsortialpartner, das SecFlow-<br />

Framework gemeinsam im Rahmen eines Folgeprojekts systematisch zu ergänzen und<br />

weiterzuführen. Dazu fand Anfang Dezember 2008 bereits ein erstes Treffen in Kaiserslautern<br />

statt, in dem die Partner mögliche Ziele für eine Fortführung der Forschungs- und<br />

Entwicklungsarbeiten identifizierten.<br />

2.2.3 Wissenschaftliche Verwertung der Projektergebnisse<br />

Als Forschungsinstitut mit zahlreichen Projektaufträgen unterschiedlichster Themengebiete<br />

beabsichtigt IESE die SecFlow-Projektergebnisse auch in andere Forschungsvorhaben<br />

konstruktiv einzubringen. Entsprechend sollen die Konzepte und Kernkomponenten <strong>des</strong><br />

SecFlow-Frameworks im Rahmen <strong>des</strong> von der Europäischen Gemeinschaft im<br />

7. Rahmenprogramm geförderten Projekts SHIELDS (http://www.shields-project.eu)<br />

weiterverwendet werden. Das SHIELDS-Projekt hat die Zielsetzung, Entwurfs- und<br />

Entwicklungsunterstützung zu liefern, um (grundsätzlich bereits bekannte) Sicherheitsschwachstellen<br />

zu erkennen und aus der Software zu verbannen. Hier soll der SecFlow-<br />

Ansatz dazu beitragen, kritische Datenflüsse im Rahmen von Sicherheitsinspektionen<br />

einfacher und zuverlässiger zu identifizieren.<br />

Modulare, komponierbare Sicherheitsmodelle bieten eine weitere Verwertungsmöglichkeit<br />

der SecFlow-Ergebnisse. Im Projekt VIERforES, einem vom BMBF geförderten Verbundvorhaben,<br />

erforscht Fraunhofer IESE derzeit Möglichkeiten, die Sicherheit komplexer<br />

eingebetteter Systeme zu beurteilen, indem das System in seine Teilkomponenten zerlegt<br />

und diese Teilsystem zunächst unabhängig voneinander analysiert werden. Die so<br />

ermittelten Teilbefunde für je<strong>des</strong> Modul werden dann aggregiert, um so schließlich eine<br />

Bewertung <strong>des</strong> <strong>Gesamt</strong>systems abzuleiten. Beim Zusammenfügen der einzelnen<br />

Komponenten-Sicherheitsmodelle spielt die Betrachtung der komponentenübergreifenden<br />

Datenflüsse eine zentrale Rolle. Hier kann auf die in SecFlow entwickelte methodische und<br />

technische Unterstützung zurückgegriffen werden, um Sicherheitsmerkmale entlang der<br />

solcher Datenflüsse zu propagieren.<br />

Eine ähnliche Anwendungsmöglichkeit ergibt sich auch im Bereich der Serviceorientierten<br />

Architekturen (SOAs). Deren Konstruktionsprinzip besteht darin, komplexe Anwendungen<br />

aus einer Menge elementarer Dienste zu komponieren. Bei der Komposition der<br />

Basisdienste ist zu klären, wie sich deren Sicherheitseigenschaften auf das <strong>Gesamt</strong>system<br />

übertragen: Auch hier ist eine genaue Analyse der Datenflüsse unverzichtbar. Da SOA-<br />

Systeme immer größere Verbreitung finden, liefern die SecFlow-Ergebnisse einen wichtigen<br />

Beitrag zum Kompetenz-Portfolio <strong>des</strong> IESE.<br />

2.3 Fortschritt auf dem Gebiet <strong>des</strong> Vorhabens bei anderen Stellen<br />

Während der Laufzeit <strong>des</strong> Vorhabens sind keine bahnbrechend neuen wissenschaftlichen<br />

Erkenntnisse zur statischen Sicherheitsanalyse bekannt geworden, die nicht — zumin<strong>des</strong>t in<br />

ihren Grundzügen — vorher bereits bekannt gewesen wären. Eine übersichtliche Darstellung<br />

zum Stand der Kunst auf dem Gebiet der Programmanalyse bietet zum Beispiel [Binkley<br />

2007].<br />

In Bezug auf die Anwendung spezifischer statischer Analysetechniken sind richtungsweisende<br />

Arbeiten erschienen, die in SecFlow aufgegriffen wurden. So beschreibt Livshits in<br />

Datei<br />

SecFlow_<strong>Gesamt</strong>schlussbericht_V10.odt<br />

Version<br />

1.0<br />

Datum<br />

2009-02-02<br />

Bearbeiter/in<br />

Dana Richter<br />

Seite<br />

21 von 27


[Livshits 2006] zum Beispiel sogenannte Derivation Descriptors, mit deren Hilfe die<br />

Datenfluss-Effekte von Methodenzugriffen charakterisiert werden. Eine konsequente<br />

Weiterentwicklung dieser Idee ist die in SecFlow entwickelte Sprache FLOW, die solche<br />

Spezifikationsmöglichkeiten in benutzerfreundlicherem Format ermöglicht.<br />

Die Arbeiten von Lam und Whaley [Whaley&Lam 2004] hatten ebenfalls großen Einfluss auf<br />

das SecFlow-Vorhaben. Die Bedeutung <strong>des</strong> Einsatzes einer deduktiven Datenbank mit der<br />

Formulierung von Analysestrategien über Datalog-Regeln wird auch durch die Fortführung<br />

der in Joeq verwendeten Ansätze durch Whaley unterstrichen [Whaley 2007].<br />

In Weiterführung dieser Ansätze wird in [Lam et al. 2008] vorgeschlagen, die statische mit<br />

der dynamischen Analyse zu verbinden. Dies stellt einen viel versprechenden Ansatz dar.<br />

Insbesondere für eine Erweiterung <strong>des</strong> SecFlow-Werkzeugs um die Analyse von<br />

Programmiersprachen, die für die Herstellung dynamischer Webseiten und Webanwendungen<br />

verwendet werden, ist ein Ansatz erforderlich, der die statische Datenflussanalyse<br />

mit anderen dynamischen Analyseverfahren kombiniert. Soll zur Laufzeit generierter<br />

Code auf seine Vertrauenswürdigkeit geprüft werden, muss dieser zuerst mit der bereits<br />

vorhandenen statischen Analyse ausfindig gemacht werden. Anschließend wird der dabei<br />

extrahierte Codeausschnitt für die erforderlichen dynamischen Tests vorbereitet und kann<br />

dann analysiert werden.<br />

Weiterhin wird durch führende Literatur <strong>des</strong> Compilerbaus [Knuth 2008, Aho et al. 2006]<br />

bestätigt, dass mit BDD auf eine Schlüsseltechnologie der IT gesetzt wurde. Durch die<br />

Einführung leistungsstarker moderner PCs rückt ein Einsatz von BDD auch für komplexe<br />

Aufgaben auf kleinen Systemen immer näher.<br />

Hinsichtlich <strong>des</strong> Wettbewerbs zu SecFlow auf Produktebene sind seit Projektbeginn einige<br />

Werkzeuge bekannt geworden, die sich mit der Analyse von Quellcode verschiedener<br />

Programmiersprachen beschäftigen. Es sind jedoch keine grundlegenden neuen<br />

Entwicklungen darunter, die bereits Lösungen für die mit SecFlow verbundenen<br />

Zielsetzungen bieten. Der innovative Gehalt <strong>des</strong> Vorhabens hat sich damit bestätigt.<br />

Die existierenden Werkzeuge sind zumeist sprachabhängig, zielen auf andere, nicht sicherheitsbezogene<br />

Schwachstellen im Quelltext oder verwenden Methoden zur Quelltextanalyse,<br />

die sich von den im SecFlow-Projekt verfolgten Lösungen zur statischen Datenflussanalyse<br />

unterscheiden. Lediglich Fortify [Fortify 2008] bietet mit der Source Code Analysis ein<br />

Werkzeug, das die internen Datenströme überwacht und analysiert. Sollte ein Datenstrom<br />

ungefiltert zu einem sicherheitsrelevanten Objekt gehen, wird eine Warnmeldung<br />

ausgegeben. Hiermit erfüllt Fortify die Anforderungen von SecFlow und ist als einziges der<br />

betrachteten Codeanalyse-Werkzeuge mit der gewünschten Endfunktionalität von SecFlow<br />

vergleichbar. Allerdings sind keine genauen Benchmark-Resultate zu Fortify veröffentlicht.<br />

Die wenigen verfügbaren Informationen deuten jedoch darauf hin, dass die Anwendung<br />

erheblich durch falsch-positive Befunde beeinträchtigt wird. Nach heutigem Stand der<br />

Bewertung ist davon auszugehen, dass sich SecFlow durch eine höhere Analysegenauigkeit<br />

auszeichnen wird. Nicht zuletzt wird sich aber SecFlow gegenüber dem hohen Kaufpreis von<br />

Fortify behaupten können.<br />

2.4 Erfolgte und geplante Veröffentlichungen <strong>des</strong> Ergebnisses<br />

Die wissenschaftlich-technischen Ergebnisse <strong>des</strong> <strong>Verbundprojektes</strong> wurden unter der<br />

Plattform www.sourceforge.net veröffentlicht. Dazu wurde ein entsprechen<strong>des</strong> Projekt<br />

eingerichtet und das SecFlow-Werkzeug zum Download für Dritte kostenlos bereitgestellt.<br />

Wichtige Informationen zum SecFlow-Projekt als auch SecFlow-Werkzeug sind zusätzlich<br />

auf der projekteigenen Internetseite www.secflow.de zusammengestellt.<br />

Neben den periodischen Zwischenberichten zum Stand <strong>des</strong> Vorhabens an den Projektträger<br />

sind seitens der Projektpartner während <strong>des</strong> Vorhabens folgende Publikationen und<br />

Dokumentationen entstanden:<br />

Datei<br />

SecFlow_<strong>Gesamt</strong>schlussbericht_V10.odt<br />

Version<br />

1.0<br />

Datum<br />

2009-02-02<br />

Bearbeiter/in<br />

Dana Richter<br />

Seite<br />

22 von 27


[Peine et al. 2006] H. Peine, S. Mandel, D. Richter:<br />

SecFlow: Automatische Ermittlung sicherheitskritischer<br />

Datenflüsse in Quellcode. Statuskonferenz Forschungsoffensive<br />

"Software Engineering 2006", Juni 2006.<br />

[Mandel&Peine 2007] Stefan Mandel, Holger Peine:<br />

The SecFlow Source Code Security Checker: Current Problems<br />

and Solution Alternatives. 23. Annual Computer Security<br />

Application Conference (ACSAC’07), Miami, Florida, Dez. 2007.<br />

[Mandel&Jawurek 2008] Stefan Mandel und Marek Jawurek.<br />

FLOW – Eine Datenfluss-Beschreibungssprache für objektorientierte<br />

Programme. Bericht Nr. 086.08/D, Fraunhofer IESE,<br />

Kaiserslautern 2008.<br />

[Kalenborn et al. 2008] Axel Kalenborn, Gennadi Umansky<br />

SecFlow: Flow Beschreibung, Entwurf 2008<br />

[Richter, Kienast 2008] D. Richter, J. Kienast:<br />

SecFlow: Automatische Ermittlung sicherheitskritischer<br />

Datenflüsse in Quellcode: Benutzerhandbuch, Wiesbaden,<br />

November 2008.<br />

Die wissenschaftlich-technischen Grundlagen <strong>des</strong> SecFlow-Projekts lieferten die Basis für<br />

zwei Lehrveranstaltungen zum Thema "Entwurf sicherer Software", die Dr. Peine im<br />

Sommersemester 2007 sowie im Wintersemester 2007/08 an den Hochschulen in<br />

Kaiserslautern durchführte. Beide Lehrveranstaltungen wurden von den Studierenden sehr<br />

gut angenommen und erhielten in Vorlesungsumfragen überdurchschnittliche Bewertungen,<br />

wozu sicher auch die aktuellen Bezüge zu den SecFlow-Arbeiten beigetragen haben.<br />

Dank dieser Lehrveranstaltungen konnte Fraunhofer IESE das Interesse der Studenten an<br />

SecFlow wecken und so fähige studentische Mitarbeiter rekrutieren, die mit ihren Projekt-<br />

und Diplomarbeiten zum Erfolg <strong>des</strong> Projekts beigetragen haben:<br />

[Hildenbrand 2008] Timo Hildenbrand:<br />

Sicherheitsbewertung von Datenflüssen in Java-Programmen.<br />

Diplomarbeit, Fraunhofer IESE / Technische Universität Kaiserslautern,<br />

April 2008.<br />

[Nicolay 2008] Joachim Nicolay:<br />

Entwicklung eines Compilerfrontends für PHP. Diplomarbeit,<br />

Fraunhofer IESE / Technische Universität Kaiserslautern, April<br />

2008.<br />

[Storck 2008] Michael Storck:<br />

Erstellung von Codemodellen aus Bytecode. Projektarbeit, Fraunhofer<br />

IESE / Technische Universität Kaiserslautern, Juni 2008.<br />

[Wagner 2008] Andreas Wagner:<br />

Implementierung einer Werkzeugunterstützung zur Spezifikation<br />

und Visualisierung von Sicherheitsschwachstellen. Praktikumsbericht,<br />

Fraunhofer IESE / Fachhochschule Kaiserslautern, August<br />

2008.<br />

Im Rahmen der Kooperation zwischen ICT und dem Lehrstuhl Wirtschaftsinformatik I der<br />

Universität Trier wurden zwei Studienprojektarbeiten erstellt:<br />

Datei<br />

SecFlow_<strong>Gesamt</strong>schlussbericht_V10.odt<br />

Version<br />

1.0<br />

Datum<br />

2009-02-02<br />

Bearbeiter/in<br />

Dana Richter<br />

Seite<br />

23 von 27


[Beinig et al. 2006] V. Beinig, P. Gilberg, M. Hausen,.C. Knaut, A. Westphal:<br />

Studienprojekt SecFlow I: Automatische Erkennung von<br />

Sicherheitsproblemen im Programmquellcode, 2006.<br />

[Heiles et al. 2007] H. Heiles, A. Kiesow, C. Schlimbach, J. Schneider:<br />

Studienprojekt SecFlow II - Automatische Erkennung von<br />

Sicherheitsproblemen im Programmquellcode, 2007.<br />

Datei<br />

SecFlow_<strong>Gesamt</strong>schlussbericht_V10.odt<br />

Version<br />

1.0<br />

Datum<br />

2009-02-02<br />

Bearbeiter/in<br />

Dana Richter<br />

Seite<br />

24 von 27


3 Literaturverzeichnis<br />

[Aho et al. 2006] A. V. Aho, M. S. Lam, R. Sethi, J. D. Ullman:<br />

Compilers Principles, Techniques & Tools, 2nd ed., Addison<br />

Wesley, New York, 2006.<br />

[Beinig et al. 2006] V. Beinig, P. Gilberg, M. Hausen,.C. Knaut, A. Westphal:<br />

Studienprojekt SecFlow I: Automatische Erkennung von<br />

Sicherheitsproblemen im Programmquellcode, 2006.<br />

[Binkley 2007] David Binkley:<br />

Source Code Analysis: A Road Map. Proceedings IEEE Future of<br />

Software Engineering (FOSE’07), Washington DC, USA, 2007.<br />

[Engler&Musuvathi 2004] Dawson Engler, Madanlal Musuvathi:<br />

Static Analysis versus Software Model Checking for Bug Finding.<br />

Proceedings 5 th International Conference on Verification, Model<br />

Checking, and Abstract Interpretation (VMCAI 2004) Venedig,<br />

Italien, Januar 2004.<br />

[Eclipse 2008] Eclipse Foundation:<br />

http://www.eclipse.org/<br />

[Fortify 2008] Fortify Software Inc.:<br />

Fortify Source Code Analysis (SCA).<br />

http://www.fortifysoftware.com/products/sca/<br />

[Heiles et al. 2007] H. Heiles, A. Kiesow, C. Schlimbach, J. Schneider:<br />

Studienprojekt SecFlow II - Automatische Erkennung von<br />

Sicherheitsproblemen im Programmquellcode, 2007.<br />

[Hildenbrand 2008] Timo Hildenbrand:<br />

Sicherheitsbewertung von Datenflüssen in Java-Programmen.<br />

Diplomarbeit, Fraunhofer IESE / Technische Universität Kaiserslautern,<br />

April 2008.<br />

[Hind 2001] Michael Hind:<br />

Pointer Analysis: Haven’t We Solved This Problem Yet?<br />

Proceedings of the 2001 ACM SIGPLANSIGSOFT Workshop on<br />

Program Analysis for Software Tools and Engineering<br />

(PASTE’01), Snowbird, Utah, USA, Juni 2001.<br />

[Jasper 2008] Jaspersoft:<br />

Embeddable Open Source Java Reporting Library,<br />

http://jasperforge.org/plugins/project/project_home.php?group_id=<br />

102 und www.jasperforge.org<br />

[Kalenborn et al. 2008] Axel Kalenborn, Gennadi Umansky<br />

SecFlow: Flow Beschreibung, Entwurf 2008<br />

[Knuth 2008] D. E. Knuth:<br />

The Art of Computer Programming, Vol. 4, Pre-Fascicle 1b: A<br />

Draft Of Section 7.1.4 Binary Decision Diagrams, Addison Wesley,<br />

New York, 2008.<br />

[Lam et al. 2008] Monica S. Lam, Benjamin Livshits, John Whaley:<br />

Securing Web Applications with Static and Dynamic Information<br />

Flow Tracking. Proceedings of the 2008 ACM SIGPLAN<br />

Symposium on Partial Evaluation and Semantics-based Program<br />

Manipulation (PEPM'08), San Francisco, Kalifornien, USA, 2008.<br />

Datei<br />

SecFlow_<strong>Gesamt</strong>schlussbericht_V10.odt<br />

Version<br />

1.0<br />

Datum<br />

2009-02-02<br />

Bearbeiter/in<br />

Dana Richter<br />

Seite<br />

25 von 27


[Livshits 2006] Benjamin Livshits:<br />

Improving Software Security with Precise Static and Runtime<br />

Analysis. Dissertation, Stanford University, Dezember 2006.<br />

[Mandel&Jawurek 2008] Stefan Mandel, Marek Jawurek.<br />

FLOW — Eine Datenfluss-Beschreibungssprache für objektorientierte<br />

Programme. Bericht Nr. 086.08/D, Fraunhofer IESE,<br />

Kaiserslautern 2008.<br />

[Mandel&Peine 2007] Stefan Mandel, Holger Peine:<br />

The SecFlow Source Code Security Checker: Current Problems<br />

and Solution Alternatives. 23. Annual Computer Security<br />

Application Conference (ACSAC’07), Miami, Florida, Dez. 2007.<br />

[MBEL 2008] University of Arizona:<br />

MBEL: The Microsoft Bytecode Engineering Library<br />

http://www.cs.arizona.edu/projects/mbel/<br />

[Nicolay 2008] Joachim Nicolay:<br />

Entwicklung eines Compilerfrontends für PHP. Diplomarbeit,<br />

Fraunhofer IESE / Technische Universität Kaiserslautern, 2008.<br />

[Peine et al. 2006] H. Peine, S. Mandel, D. Richter:<br />

SecFlow: Automatische Ermittlung sicherheitskritischer<br />

Datenflüsse in Quellcode. Statuskonferenz Forschungsoffensive<br />

"Software Engineering 2006", Juni 2006.<br />

[Richter, Kienast 2008] D. Richter, J. Kienast:<br />

SecFlow: Automatische Ermittlung sicherheitskritischer<br />

Datenflüsse in Quellcode: Benutzerhandbuch, Wiesbaden,<br />

November 2008.<br />

[SecuriBench 2006] Benjamin Livshits:<br />

Stanford SecuriBench Micro. SUIF Group, Stanford University,<br />

2006<br />

http://suif.stanford.edu/~livshits/work/securibenchmicro/pubs.html<br />

[Storck 2008] Michael Storck:<br />

Erstellung von Codemodellen aus Bytecode. Projektarbeit, Fraunhofer<br />

IESE / Technische Universität Kaiserslautern, Juni 2008.<br />

[Wagner 2008] Andreas Wagner:<br />

Implementierung einer Werkzeugunterstützung zur Spezifikation<br />

und Visualisierung von Sicherheitsschwachstellen. Praktikumsbericht,<br />

Fraunhofer IESE / Fachhochschule Kaiserslautern, August<br />

2008.<br />

[Whaley 2004] J. Whaley:<br />

BDD-Based Deductive Database. 2004<br />

http://bddbddb.sourcefourge.net/<br />

[Whaley 2005] J. Whaley:<br />

Joeq: A Virtual Machine and Compiler Infrastructure. In Science of<br />

Computer Programming Journal, 2005.<br />

http://joeq.sourceforge.net/<br />

[Whaley 2007] John Whaley:<br />

Context-sensitive Pointer Analysis Using Binary Decision<br />

Diagrams. Dissertation, Stanford University, März 2007.<br />

Datei<br />

SecFlow_<strong>Gesamt</strong>schlussbericht_V10.odt<br />

Version<br />

1.0<br />

Datum<br />

2009-02-02<br />

Bearbeiter/in<br />

Dana Richter<br />

Seite<br />

26 von 27


[Whaley&Lam 2004] J. Whaley, M. Lam:<br />

Cloning-based context-sensitive pointer alias analysis using binary<br />

decision diagrams. Proceedings of the ACM SIGPLAN 2004<br />

Conference on Programming Language Design and<br />

Implementation (PLDI’04), Washington, DC, USA, Juni 2004.<br />

[Whaley et al. 2005] J. Whaley, D. Avots, M. Carbin, M. S. Lam:<br />

Using Datalog with Binary Decision Diagrams for Program<br />

Analysis. In Proceedings of Programming Languages and<br />

Systems: Third Asian Symposium, APLAS 2005, Tsukuba, Japan,<br />

November 2005.<br />

Datei<br />

SecFlow_<strong>Gesamt</strong>schlussbericht_V10.odt<br />

Version<br />

1.0<br />

Datum<br />

2009-02-02<br />

Bearbeiter/in<br />

Dana Richter<br />

Seite<br />

27 von 27

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!