Defintion Testen
Testen ist das Überprüfen des aktuellen Zustands mit einem geplanten Zustand mit dem Ziel der Auffindung von Fehlern
Validierung vs. Verifikation
Validierung: Vergleich Wünsche des Kunden ↔ Anforderungen
Verifikation: Vergleich Anforderungen ↔ Applikation
Was können Software Fehler sein?
Wer sollte Tests durchführen?
Entwickler/ Tester
→ Fehlendes Wissen über Sicherheit und aktuelle Schwachstellen
→ Implikation durch detailliertes Wissen über Code → Scheitern der Tests
Sicherheitsexperte
→ Fehlendes Wissen über Domäne und Implementierungsdetails
→ Hat aber Wissen über Sicherheit und aktuelle Schwachstellen
→ Testen des Systems auf Angreifersicht (als Außenstehender)
Was sind Merkmalsräume von Software-Tests?
-> Charakterisierung von unterschiedlichen Testarten
Prüfkriterium: Inhaltliche Orientierung des Testfalls (WAS?)
Prüfebene: Repräsentiert derzeitige Phase im Lebenszyklus der Software (WANN? / Auf welcher Ebene?)
Prüfmethodik: Welche Methoden und Techniken sollen angewandt werden? (WIE?)
Funktionale vs. Nicht-funktionale Tests
Funktionale Tests: Testen der Funktionen des Systems (z.B. Login, Sicherheitsfunktionen) bzw. der Bereitstellung der richtigen Funktionalität
Spezifikation des erwarteten Outputs notwendig
Tests sind sich abgeschlossen
Funktionale Fehler können Auswirkungen auf die Sicherheit haben
Nicht-funktionale Tests: Testen der Eigenschaften eines Systems (z.B. Zuverlässigkeit, Robustheit, Sicherheit, etc.)
Keine Spezifikation nötig
Abuse Cases → Robustheit gegen Angriffe
Tests beeinflussen sich gegenseitig
Sicherheitsfehler können in jeder Funktionalität auftreten
Wann eignen sich welche Testarten?
Welche Test-Methoden gibt es?
White-Box-Tests:
Ableitung von Ein- und Ausgabewerte durch Heranziehen von Systemdetails
Vergleich der tatsächlichen mit erwarteten Ausgabe
Techniken: Statische Analyse, Code Reviews, …
Black-Box-Tests:
Ableitung von Ein- und Ausgabewerte ohne Heranziehen von Systemdetails (Informationen über die Umsetzung) -> Nur nach außen sichtbares Verhalten fließt in den Test ein
Übergabe der Eingabedaten und Betrachtung der zurückgelieferten Ausgabe
Vergleich der tatsächlichen mit spezifizierter/ erwarteter Ausgabe
Gray-Box-Tests:
Kombination von White-Box- und Black-Box-Testing
Optimierung der Tests durch Information über Systemdetails (Identifizierung von Datenvarianten) → Durchführung der Tests mit ermittelten Datenvarianten (Black-Box-Tests)
Statische Codeanalyse? Arten?
Untersuchung des Codes ohne Ausführung
Manuelle Analysemethoden: Secure Code Review → viel Aufwand
Automatisierte Analysemethoden: Compiler, automatisierter Scanner → hohe false-positive Rate
Durchführung anhand Source Code, Byte Code oder Binary mäglich
Sicherheitswissen beschreibt Regeln (Eingabequellen, fehleranfällige Funktionen, etc.)
Ansätze von Manueller statischer Codeanalyse?
Top-Down Ansatz: Wissen über Schwachstellen hoch aber über Code gering
Bottom-Up Ansatz: Wissen über Code hoch aber über Schwachstellen gering
Walkthrough: Testfälle am Papier durchführen
Inspection: Überprüfung anhand einer Checkliste/ Coding Standards
Fuzzing?
Auch Random Testing genannt:
Automatisiertes Ausführen mit zufällig generierten oder vordefinierten Werten
Fuzzer sind für unterschiedliche Eingabeformate/ Protokolle vorhanden: Dateien (Bilder, HTML, XML, etc.), Protokolle (TCP, SOAP, etc.)
Arten von Automatisierter statischer Codeanalyse?
Varianten:
Signaturbasiert: Suchen nach definierten Mustern
Kontrollfluss-Analyse: → Kontrollfluss = Ausführungsreihenfolge der einzelnen Instruktionen
Datenfluss-Analyse: Zusammenhangs Erzeuger und Verbrauch von Daten
Arten von Fuzzer?
Unterscheidung nach Input-Erstellung:
Generation Based Fuzzer: Generierung von neuen Daten
Mutation Based Fuzzer: Abwandlung bestehender Daten
Unterscheidung nach Smartness:
Random Fuzzer
Template Fuzzer
Block Fuzzer
Evolution-based Fuzzer: Lernen von Spezifika des Protokolls durch Output wiederholter Abfragen
Wie können Fuzzer automatisiert Fehler erkennen?
Veränderungen eines Systems: Prozessorleistung, Fehlereinträge in Log-Dateien
Überwachen des Prozesses durch Debugger
Fehler in der Applikation beobachten
Penetration Testing?
Fehlersuche unter realen Bedingungen (Durchführung im (fast) Betrieb)
-> Kostspielige Behebung von Sicherheitsfehlern
Phasen des Penetration Testings?
Pre-Engagement
Intelligence Gathering
Threat Modelling
Vulnerability Analysis
Exploitation
Post-Exploitation
Reporting
Was ist Ethical Hacking (White- or Gray-Hats)? Arten?
Suche nach Schwachstellen ohne diese auszunutzen
Responsible Disclosure: Hersteller Zeit für den Fix geben und nicht sofort veröffentlichen
Full Disclosure: Veröffentlichung so schnell wie möglich
Zuletzt geändertvor 2 Jahren