Software kann nicht fehlerfrei erstellt werden – aber mit den beiden Tool-gestützten Verfahren Fuzzing (Dynamic Analysis) in der Verification Phase und Threat Modeling schon in der Design Phase werden bisher nicht veröffentlichte Sicherheitslücken kostengünstig identifiziert.
In diesen Entwicklungsstadien ist ein weitaus geringerer Aufwand zur Fehlerbehebung (Patch) erforderlich, als wenn die Software schon an Kunden ausgeliefert ist (Release- Phase) und erst dann korrigiert wird (Bild 2). Tatsächlich steigt der Patchaufwand nach Untersuchungen – u.a. des National Institute of Standards and Technology (NIST) – von der Designphase zur Release-Phase exponentiell bis auf das 100-fache.
Eigene Untersuchungen zeigen, dass der Aufwand zur Identifizierung von Sicherheitslücken mit Threat Modeling und Fuzzing sehr kostengünstig durchgeführt werden kann – selbst dann noch, wenn die Software schon auf dem Markt ist.
Diese Verfahren lassen sich für viele Anwendungsbereiche einsetzen wie: Individualsoftware, Standardsoftware wie ERP, CRMund auch unternehmensspezifische Ergänzungen, Betriebssysteme, Webbrowser, Webapplikationen, Netzwerk- Protokolle, Embedded Systems etc.
In Tests werden meist auch nur die spezifizierten Funktionalitäten überprüft; manuelle Überprüfungen sind angesichts des meist großen Code-Umfangs gar nicht praktikabel.
Software wird unter Einsatz von Methoden hergestellt, die Sicherheitslücken nicht vollständig vermeiden können – menschliche Fehler können nicht ausgeschlossen werden. Selbst wenn Programmierrichtlinien vorhanden sind, werden sie nicht (vollständig) eingehalten und nicht (vollständig) kontrolliert.
ThreatModeling
Beim Threat Modeling wird wie folgt vorgegangen:
- Analyse der Dokumentation – insbesondere des Sicherheitsdesigns, der Programmablaufpläne und Datenflussdiagramme
- Entwicklung von Fehler- und Angriffsbäumen (attack trees)
- Beschreibung und Priorisierung erkannter sicherheitsrelevanter Designfehler.
Dieses heuristische Verfahren unterstützt die methodische Entwicklung eines vertrauenswürdigen Systementwurfs oder einer Architektur in der Design Phase. Gleichermaßen lassen sich bereits bestehende Systementwürfe und Architekturen auf Sicherheitslücken untersuchen.
Mit den Verfahren Threat Modeling und Fuzzing können die meisten der SANS TOP 25 Sicherheitslücken erkannt werden, die beispielsweise die folgenden Angriffe ermöglichen:
- Verletzung der Zugriffsregeln
- Formatstring-Angriffe
- SQL-Injections
- Buffer Overflows.
1. Static Analysis
In der Implementierungsphase wird der Quellcode hinsichtlich Konformitätmit den Programmierrichtlinien analysiert (Parsing) ohne ihn auszuführen.
„Häufig werden auchin bereits an Kundenausgelieferte Standardsoftwareeine ganzeReihe kritischer(bisher unveröffentlichter)Sicherheitslückenidentifiziert. Das kannman vermeiden.“Prof. Dr. Hartmut PohlHochschule Bonn-Rhein-SiegCEO softScheck
2. Fuzzing
Zum Fuzzing wird kein Quellcode benötigt (reiner Blackbox-Test): Die Software wird während der Ausführung untersucht; hierzu kann sie in einer virtuellen Maschine oder auf einem anderen Testsystem ausgeführt werden.
Dabei werden die Eingabeschnittstellen (Attack Surface) einer Zielanwendung mit nicht spezifizierten (willkürlichen und auch zielgerichteten) Eingaben angegriffen, die ein Fehlverhalten (Anomalie) der Software provozieren. EinMonitor überwacht die Zielanwendung und meldet die erkannten Anomalien wie etwa Programmabstürze, hohe CPU- oder Speicher-Auslastung etc.
Die Qualität von Fuzzern hängt von der Menge und der Qualität der generierten Eingabedaten ab. Überprüft wird noch die Reproduzierbarkeit, Ausnutzbarkeit (aus dem Internet) und die Folgen der Ausnutzung der Sicherheitslücken.
Smart-Fuzzer testen programmgesteuert selbständig ein Zielprogramm – oftmals ohne weitere Vorbereitung oder Begleitung durch den Anwender. Ein wichtiges Bewertungskriteriumfür Fuzzer ist die Testabdeckung (code coverage). Häufig ermöglichen nur smart Fuzzer das Eindringen in das Zielprogramm.
Dumb-Fuzzer können den Aufbau des Zielprogramms nicht erkennen und generieren daher nur ungesteuerte Eingabedaten. Wegen dieser fehlenden Programmsteuerung setzen sie eine erhebliche Erfahrung beimAnwender voraus. Fuzzing Frameworks bieten dieMöglichkeit, Fuzzer für eine spezielle Zielanwendung zu entwickeln.
Häufig werden auch in bereits an Kunden ausgelieferte Standardsoftware eine ganze Reihe kritischer (bisher unveröffentlichter) hoch-kritischer Sicherheitslücken identifiziert, die aus dem Internet ausnutzbar waren. Dies obwohl beim jeweiligen Hersteller ein umfangreiches Richtlinienwerk auch hinsichtlich der Programmierung ‘sicherer’ Software existiert.
3. Ergebnisse des Verfahrenseinsatzes
Mit Fuzzing und Threat Modeling stehen damit zwei kostengünstige Tool-gestützte Verfahren zur Identifizierung sicherheitsrelevanter Softwarefehler zur Verfügung: Systematische Suche und auch erfolgreiche (!) Identifizierung der wesentlichen Sicherheitslücken.
- Und zwar in jeder Software: Individualsoftware, Standardsoftware wie ERP, CRM und auch unternehmensspezifische Ergänzungen, Betriebssysteme etc.
- Black-Box Testing.
Die beiden erläuterten Verfahren Threat Modeling und Fuzzing steigern kostengünstig das Sicherheitsniveau der Software und ermöglichen einen höheren Return on (Security) Investment, die Markteinführungszeiten werden reduziert und die Reputation des Softwareherstellers – durch sicherere Software – gesteigert.
Wesentliche Ergebnisse dürften allerdings nur durch den Einsatz jeweils mehrerer der insgesamt mehr als 300 Tools der beiden Verfahren ThreatModeling und Fuzzing erreicht werden. Eine entwickelte Taxonomie unterstützt die bedarfsgerechte Auswahl geeigneter Tools.
PROF. DR. HARTMUT POHL