C O R P O R A T E
Entwicklung sicherer Software
Software enthält Fehler . Das gehört leider zu den unabänderlichen Tatsachen in der Softwareentwicklung . Das heißt jedoch noch nicht , dass wir nicht etwas dagegen tun können , dass Fehler entstehen , versuchen können , die Auswirkung von Fehlern zu begrenzen , oder daran arbeiten können , wie wir auf Fehler , die wir finden , reagieren .
Im ersten Abschnitt werfen wir einen Blick auf die Ausgangslage . Auch wenn es unmöglich ist , zu sagen , wie viele unentdeckte Fehler existieren , so gibt es doch Abschätzungen , die einen ganz guten Anhaltspunkt geben können . Im zweiten Abschnitt geben wir einen Überblick über eine Auswahl an Maßnahmen , die wir treffen , um Fehler zu vermeiden . Im dritten Abschnitt beleuchten wir den reaktiven Teil des Schwachstellenmanagements .
Ausgangslage Um zu verstehen , wie wir möglichst viele Fehler vermeiden und ideal auf die verbleibenden Fehler reagieren können , müssen wir die Art der Fehler und ihre Häufigkeit kennen und wissen , wo sie üblicherweise auftreten .
Für die Frage , wie viele Fehler sich statistisch in tausend Zeilen Code verbergen , wird gerne die Statistik aus Steve McConnells Buch „ Code Complete “ herangezogen . Wenn wir hier die Ausnahmen ausklammern , liegt die Statistik zwischen 10 und 50 Fehlern in 1000 Zeilen Code . Das bedeutet , dass wir statistisch in jeder zwanzigsten bis hundertsten Zeile , die wir schreiben , einen Fehler machen , den der Compiler nicht sofort findet . Das ist beeindruckend oft und uns sollte überraschen , dass unsere IT-Systeme selbst mit dieser Menge an Fehlern so zuverlässig funktionieren .
Es ist jedoch nicht nur die Häufigkeit der Fehler , sondern auch die Art der Fehler entscheidend . Da wir uns in diesem Artikel der Entwicklung sicherer Software widmen , setzen wir den Fokus auf zwei Fehlertypen : Bugs und Flaws . Unter Bugs verstehen wir klassische Programmierfehler . Flaws sind Fehler in den Designentscheidungen . Um Bugs zu finden , gibt es inzwischen einen großen Werkzeugkasten , der dabei hilft , den Code nach unterschiedlichsten Fehlerklassen zu durchsuchen . Darauf gehen wir im Abschnitt „ Präventive Maßnahmen “ etwas genauer ein . Flaws hingegen sind oft schwer zu finden , da hier im Design und in der Entwicklung oftmals implizite Annahmen getroffen werden , die nicht oder nicht mehr gültig sind und somit zu Schwachstellen in der Software führen , die eventuell für einen Angreifer ausnutzbar sind .
Das ist das Stichwort für die nächste präventive Maßnahme : Wir müssen dafür sorgen , dass Fehler nicht zu ausnutzbaren Fehlern werden . Denn nicht jeder Fehler ist für einen Angreifer ausnutzbar . Wenn wir die Strukturen verstehen , die wir nutzen können , um zu verhindern , dass ein Angreifer einen Fehler in der Software nutzen kann , können wir einerseits dafür sorgen , dass potenzielle Fehler in der Entwicklung nicht zu Schwachstellen in den Produkten führen und andererseits können wir besser verstehen , ob ein Bug , den wir finden , zu einer ausnutzbaren Schwachstelle führt . Wir benötigen also sowohl für die Analyse als auch für die Planung neuer Entwicklungen ein Verständnis für die Auswirkungen potenzieller Fehler .
Präventive Maßnahmen Softwarearchitektur Die Basis einer Software ist eine gründliche Anforderungsanalyse . Alle Ergebnisse der Anforderungsanalyse fließen in die Konzeption der Softwarearchitektur ein , die aus fachlicher und technischer Sicht modelliert wird . Der Entwurf entsteht in der Zusammenarbeit erfahrener Softwareentwickler und -architekten , die vom International Software Architecture Qualification Board ( iSAQB ® ) zertifiziert sind , und einem produktunabhängigen Team von Sicherheitsexperten , das das Konzept von der Architektur bis hin zur Verwendung kryptografischer Primitive auf Herz und Nieren prüft .
Coden & Testen Wenn das Produkt den Entwürfen entsprechend entwickelt wird , stützen wir uns auf eine Reihe von Technologien , um Fehler im Code möglichst früh zu identifizieren und zu beheben . Zum Standard in allen Firmen gehört hierzu inzwischen ein Versionsverwaltungssystem ( Wibu-Systems setzt hierbei auf Git ), das das
8