Gesamt-Schlussbericht des Verbundprojektes Deutsch - CC Gmbh
Gesamt-Schlussbericht des Verbundprojektes Deutsch - CC Gmbh
Gesamt-Schlussbericht des Verbundprojektes Deutsch - CC Gmbh
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