Software Security
The Trinity of Trouble
- Connectivity: Immer mehr verbundene Geräte
- Software wird als Service publiziert, die nie dafür gedacht war
- Extensibility: Viele software wird modular
- Durch Plugins erweiterbar, z.B. Browser
- Complexity: Moderne Software ist komplex
- z.B. Betriebssysteme, Runtimes
- Anzahl Fehler steigt etwa quadratisch zu Anzahl Codezeilen
Defects = Bugs + Flaws
- Bug: Implementations-Fehler, der sich relativ leicht beheben lässt
- Flaw: Design-Fehler in der Software, nur schwer zu finden / zu fixen
- In der Praxis sind solche Defects 50/50 geteilt in Bugs und Flaws
Best Practices
- Penetration ist nicht die effizienteste Massnahme, da die Fehler erst spät in der Entwicklung gefunden werden und so die Kosten enorm steigen
- Statische Code Analyse
- z.B. mit Coverity (für Github projekte kostenlos)
Architectural Risk Analysis
- Architektur auf einer Seite zusammen fassen ("Flipchart")
Attack Resistance Analysis
- Ansatz mit Checklisten
- Gut für bekannte Schwachstellen und Angriffe
- Schlecht für neue Attacken / 0-days
Ambiguity Analysis
- Von dritter Seite wird die Software und Architektur studiert
- Gut, um Widersprüche und Fehler im Design zu finden
Weakness Analysis
- Verwendete Libraries und Frameworks analysieren
Microsoft Security Development Lifecycle
- SDL - Simplified Version lesen!
- Best Practises des SDL kennen
-
Threat Modeling = Risk Analysis
-
Fuzzing: Zufällige Input-Daten für Testfälle, dafür sehr viele verschiedene Inputs