Software Security Testing Process

Identifiziert werden Sicherheitslücken und insbesondere die bislang nicht-erkannten, kritischen Zero-Day-Vulnerabilities nach unserem Software Security Testing Process mit den drei Methoden: ‚Security by Design: Threat Modeling’, Quellcode-Analyse: ‚Static Source Code Analysis‘ und ‘Binärcode-Prüfung: Dynamic Analysis: Fuzzing’. Zugrunde liegt die ISO 27034 sowie der Security Development Lifecycle (SDL), die beide sicherheitsbezogene Testing-Prozesse integrieren.

Threat Modeling

Die Software-Architektur wird zunächst in einem Datenfluss-Diagramm (DFD) abstrahiert modelliert. Dabei werden einzelne Prozesse mit ihren Datenflüssen, Datenspeichern und externen Entitäten ermittelt. Um die Komplexität eines DFD möglichst gering zu halten, kann die Software-Architektur hierarchisch modelliert werden. Damit kann die Architektur bis auf kleinste Prozess-Schritte, wie Lesen aus der Datenbank, heruntergebrochen werden. Eine Zerlegung eines Prozesses in weitere Subprozesse sollte immer dann vorgenommen werden, wenn dadurch weitere sicherheitsrelevante Prozesse erkennbar werden.

Auf jedes Element des DFD wirken unterschiedliche Bedrohungen (Threats), die nach dem STRIDE-System kategorisiert werden. Jeder identifizierte Threat zielt auf eine oder mehrere bestimmte schützenswerte Ressourcen (Assets, z.B. Logins, Passwörter, Log-Files,…). Die Schwierigkeit besteht darin, alle Threats zu identifizieren und für diese Threats Sicherheitsmaßnahmen zu erarbeiten und zu dokumentieren.

Static Source Code Analysis

Mit dieser statischen Prüfmethode wird der Quellcode auf Sicherheitslücken und Fehler hin geprüft. Die Prüfung erfolgt semi-automatisch (möglichst) begleitend zur Software-Entwicklung während der Implementierung noch bevor dynamische Modultests durchgeführt werden.

Penetration Testing

Penetration Testing als Teil des Software Security Testing Process ist eine dynamische Testmethode mit dem Ziel (grundsätzlich schon bekannte) Sicherheitslücken zu identifizieren und damit das aktuelle Sicherheitsniveau eines Systems zu ermitteln. Im Rahmen von Penetration Testing werden nach einer initialen Phase der Informationsbeschaffung (Information Gathering) aktive Eindringversuche in das Zielsystem durchgeführt. Penetration Testing umfasst sowohl voll-automatisches Scannen auf Sicherheitslücken, als auch manuelles Angreifen.

Dynamic Analysis: Fuzzing

Erfahrungsgemäß erfolgreiche Angriffsdaten werden in über-hoher Anzahl in das zu untersuchende Zielprogramm (ausführbarer Code wie Binärcode) eingegeben, mit dem Ziel anomale Zustände des Zielprogramms zu erreichen. Das anomale Zielprogramm-Verhalten wird untersucht und ggf. auf eine Sicherheitslücke zurückgeführt.

Zielgruppe

  • Leiter Softwareentwicklung
  • Software Architekten/Designer
  • Software Entwickler
  • Software Tester

Lernziele

Im Rahmen des Security Testing Prozesses werden bereits erkannte Sicherheitslücken und insbesondere bislang nicht erkannte Sicherheitslücken mit Hilfe der Methoden Threat Modeling, Static Source Code Analysis, Penetration Testing und Fuzzing identifiziert und auch behoben.

Inhalt

  • Live Präsentation / Live Hacking
  • Information Gathering (z.B. mit Maltego und Google)
  • Threat Modeling mit Microsoft’s Threat Modeling Tool 2014
  • Vulnerability Scanning (z.B. mit Nessus, Burb Suite)
  • Penetration Testing und Fuzzing mit dem Metasploit Framework
  • Exploiting Web Application Firewall am Beispiel Modsecurity
  • Web Application Penetration Testing
  • Static Source Code Analysis: C/C++, C#, Java, JavaScript
  • Passwort-Cracking mit Cain & Abel
  • MithM-attacks und Präventionsmaßnahmen
  • HTTP-Fuzzing mit Metasploit
  • FTP-Fuzzing (z.B. mit Peach)
  • Fuzzer-Entwicklung, Exploit-Entwicklung

Abschlussempfehlungen, Diskussion