Software Testen

Warum?

Grundsätzlich

Rasante Zunahme von Systemen und Abläufen, die durch Software kontrolliert werden, Fehler können gravierende Folgen haben. Sicherstellen dass Programme wie vorgesehen funktionieren und das Ausmerzen von Bugs ist der wichtigste Aspekt beim Erstellen von Production-Use Programmen.

Eine interessante Auflistung von zum Teil kuriosen zum Teil aber auch fatalen Fehlen in Software findet sich z.B. in Collection of Software Bugs

Man kann mit Tests zwar nie nachweisen, dass ein Programm keine Fehler hat, aber zumindest das Auftreten von Fehlern stark reduzieren....


Apple goto-fail bug

Aktuelles (2014) Beispiel für sicherheitsrelevanten Bug in Apple IOS 7 (C-Programmcode).


// ...
hashOut.data = hashes + SSL_MD5_DIGEST_LEN;
hashOut.length = SSL_SHA1_DIGEST_LEN;
if ((err = SSLFreeBuffer(&hashCtx)) != 0)
    goto fail;
if ((err = ReadyHash(&SSLHashSHA1, &hashCtx)) != 0)
    goto fail;
if ((err = SSLHashSHA1.update(&hashCtx, &clientRandom)) != 0)
    goto fail;
if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0)
    goto fail;
if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)
    goto fail;
    goto fail; 
if ((err = SSLHashSHA1.final(&hashCtx, &hashOut)) != 0)
    goto fail;

err = sslRawVerify(...);
//...

Entscheidender Check ( sslRawVerify()) wird u.U. nicht ausgeführt, ermöglicht Angriffe auf verschlüsselte (TLS/SSL) Verbindungen.




Subsections

GDuckeck 2019-08-01