Benutzer:Anitagraser/Baustelle/Softwaretests
Ein Softwaretest ist ein Test während der Softwareentwicklung, um die Funktionalität einer Software an den Anforderungen und ihre Qualität zu messen, und Softwarefehler zu ermitteln. Es gibt:
- White-Box-Tests,
- Black-Box-Tests und
- Gray-Box-Tests
White-Box-Analyse
Die White-Box-Analyse erfordert die Analyse und das Verstehen von Source-Code. Manchmal ist nur Binärcode vorhanden, aber wenn dieser dekompiliert und der resultierende Source-Code analysiert wird, kann auch dieses Vorgehen als White-Box-Analyse verstanden werden. White-Box-Tests eignen sich typischerweise gut zum Finden von Programmier- und Implementierungsfehlern der Software. In einigen Fällen entsprechen die Vorgänge dem Pattern-Matching und können sogar mithilfe eines statischen Analysetools automatisiert werden, beispielsweise um Sicherheitslücken in Software zu finden. Ein Nachteil dieser Art des White-Box-Tests ist, dass er auch Falschmeldungen („false positives“) liefern kann. Trotzdem ist es für manche Softwaretypen ein guter Ansatz statische Analysemethoden auf den Source-Code anzuwenden. Es gibt zwei Typen von White-Box-Analysetools: solche, die den Source-Code benötigen und andere, die automatisch den gegebenen Binärcode dekompilieren und analysieren.
Black-Box-Analyse
Bei der Black-Box-Analyse wird ein laufendes Programm mit unterschiedlichen Eingabewerten gefüttert und sein Verhalten analysiert. Diese Art der Analyse erfordert nur die laufende Software und erfordert keinerlei Source-Code-Analyse. Bei der Untersuchung der Sicherheit wird die Software mit unerwarteten Eingabewerten gefüttert und so versucht es zum Versagen zu bringen. Wenn das Programm während eines bestimmten Tests abstürzt, könnte ein Sicherheitsproblem entdeckt worden sein.
Black-Box-Tests sind sogar möglich, wenn kein Binärcode verfügbar ist. Daher kann das Programm auch remote über ein Netzwerk getestet werden. Die Einzige Voraussetzung ist, dass das Programm auf einem Rechner läuft, der Input akzeptiert. Das ist auch der Grund, warum richtige Angreifer oft auf Black-Box-Techniken zurückgreifen.
Black-Box-Tests sind noch so effektiv wie White-Box-Tests um Wissen über den Code und dessen Verhalten zu erwerben. Aber Black-Box-Tests sind wesentlich einfacher zu erstellen und erfordern meist weniger Expertenwissen als White-Box-Tests. Während des Black-Box-Tests versucht der Analyst so viele unterschiedliche Pfade wie möglich zu verfolgen und beobachtet das System von außen. Black-Box-Test können niemals alle möglichen Eingabewerte erschöpfend untersuchen. Andererseits entsprechen Black-Box-Test eher einer tatsächlichen Attacke auf die Software im Produktionsumfeld als es White-Box-Test möglich ist.
Da Black-Box-Tests auf laufenden Systemen durchgeführt werden, eignen sie sich gut um Denial-of-Service-Probleme zu untersuchen. Da Black-Box-Tests eine Anwendung in ihrer Runtime-Umgebung untersuchen, können sie dazu genutzt werden um festzustellen um ein vorhandenes Problemgebiet in der Produktionsumgebung problematisch ist.
Einige Probleme, die von White-Box-Tests aufgedeckt werden, sind möglicherweise in der Realität nicht ausnutzbar. Eine Firewall kann beispielsweise Attacken blockieren.
Gray-Box-Analyse
Die Gray-Box-Analyse kombiniert Methoden der White- und Black-Box-Tests. Gray-Box-Ansätze erfordern meist die Kombination mehrerer Tools. Ein gutes Beispiel für simple Gray-Box-Analysen ist es ein Zielprogramm in einem Debugger laufen zu lassen und gezielt mit bestimmten Eingabewerten zu füttern. Auf diese Weise wird das Programm ausgeführt während der Debugger benutzt wird um mögliches fehlerhaftes Verhalten zu entdecken.
Zusammenfassung
Alle Testmethoden können mögliche Softwarefehler und entsprechende Angriffsmöglichkeiten und -wege aufzeigen. White-Box-Analysen können direkt mehr Bugs identifizieren, aber die Gefahr eines entsprechenden Angriffs ist schwer bestimmbar. Black-Box-Analysen identifizieren reale Probleme, die tatsächlich für Attacken ausnützbar sind. Gray-Box-Analysen kombinieren beide Methoden. Black-Box-Tests können Programme sogar über Netzwerke hinweg untersuchen. White-Box-Tests benötigen Source-Code oder Binärcode um Analysen durchführen zu können. In einem typischen Anwendungsfall wird eine White-Box-Analyse benutzt um potentielle Lücken zu identifizieren und diese werden dann mit Black-Box-Methoden attackiert.