Mit Secure Development Lifecycle versucht Microsoft seit 2004, die Anzahl von Bugs in der Software zu reduzieren. Dazu hat man intern einen Prozess zur Softwareentwicklung aufgesetzt, der in sieben Stufen den kompletten Entstehungs- und Lebenszyklus eines Softwareprodukts umfasst. Erfolgreiche Strategien werden von Microsoft veröffentlicht und wenn möglich in die Entwicklungsumgebung Visual Studio integriert.
Während es für die SDL-Prozessstufen Design und Implementation etliche Tools gibt, hatte Microsoft für die Verifikation eines fertigen Produkts wenig zu bieten. Das soll sich nun mit den beiden kostenlosen Tools BinScope und MiniFuzz ändern.
Der Microsoft BinScope Binary Analyzer überprüft Binärdateien wie DDLs oder Exe-Dateien auf Sicherheitsrisiken. Dabei legt BinScope zunächst Wert auf sichere Compileroptionen bei der Erzeugung des Binärcodes. Beispielsweise gibt es mit dem /GS-Flag eine Option, die Buffer Overflows zur Laufzeit erkennt und damit einen der häufigsten Angriffsvektoren eliminiert. Auch die Data Execution Prevention und das Safe Exception Handling müssen laut SDL-Richtlinen aktiviert sein.
BinScope: Kontrolle auch über fremden Binärcode
Neben den Flags prüft BinScope die Signatur von Komponenten und den Einsatz aktueller Compiler- und Linker-Versionen. Auch veraltete ATL-Header und kritische Konstruktionen wie Globale Function Pointer mahnt BinScope an.
Entscheidend an BinScope ist, dass sich damit nicht nur der selbst erzeugte Code überprüfen lässt. Den bei diesem hat man eh die Kontrolle über die Compileroptionen und die anderen überprüften Risiken. Vielmehr hilft BinScope, diese Risiken auch in externen Dateien zu entdecken, etwa in zugekauften Libraries, die nur als DLL-Binärdatei vorliegen. Hier gilt es dann bei entdeckten Schwachstellen, Druck auf deren Hersteller auszuüben oder auf ein besser gepflegtes Produkt zu wechseln.
MiniFuzz File Fuzzer
Ein weiteres Tool zum Überprüfen fertiger Applikationen ist der MiniFuzz File Fuzzer. Er füttert Anwendungen mit automatisch erzeugten, fehlerhaften Dateien und beobachtet dann deren Reaktion. Was sich zunächst etwas exotisch anhört, wurde 2004 zum Alptraum für Microsoft. Im Grafic Device Interface von Windows XP und 2003 gab es eine Lücke, über die ein Angreifer den vollen Systemzugriff erhielt, wenn ein Anwender eine präparierte JPG-Bilddatei öffnete (siehe auch Patch Day September 2004: Extrem kritische JPEG-Lücke).
Für das File Fuzzing legt man in ein Verzeichnis verschiedene gültige Eingabedateien ab. In einem typischen Test erzeugt MiniFuzz damit dann 100.000 unterschiedlich stark manipulierte Dateien und ruft die zu testende Anwendung damit auf. Kommt es nicht zu einer kontrollierten Fehlermeldung, sondern zum unkontrollierten Crash, weil beispielsweise die Datei zu groß ist oder ungültige Werte enthält, liegt ein potenzielles Sicherheitsproblem vor.
MiniFuzz stellt die kritische Input-Datei dann dem Entwickler zur Verfügung, der damit den Fehler in seiner Anwendung analysieren und abfangen kann.
MiniFuzz kann innerhalb von Visual Studio oder auch als Standalone-Programm genutzt werden. Allerdings benötigt MiniFuzz als Standalone mindestens Vista als Betriebssystem. Ärgerlich ist, dass dies nur im „Kleingedruckten“ auf der Website von Microsoft zu lesen ist. Unter Windows XP lässt sich MiniFuzz problemlos installieren und auch starten. Will man dann einen Test beginnen, stürzt MiniFuzz aber mit einer nicht behandelten Exception ab.
SDL Process Template
Seit Mai 2009 stellt Microsoft das SDL Process Templates für Visual Studio zur Verfügung. Allerdings war es schwierig, dieses in bestehende Projekte zu integrieren. Jetzt bietet Microsoft auch eine Schritt-für-Schritt-Anleitung, wie sich die wichtigsten Elemente des SDL Process Templates in bestehende Entwicklungen mit dem Visual Studio Team System einbinden lassen.
Minifuzz und BinScope finden sich ebenso wie das SDL Prozess Template im SDL Tools Repository zum kostenlosen Download. Dort können Entwickler auch weitere Tools herunterladen, die die Softwareerstellung in den verschiedenen Prozessstufen sicherer machen. (ala)