Sichere Web-Apps

Zehn Tipps für den Code Review

15.02.2013
Von Dr. Bruce Sams
Schlüsselfertige Tools für Code Reviews gibt es nicht. Wer sichere Anwendungen entwickeln will, sollte zehn Best Practices beachten.
Der Bedarf an mehr Sicherheit in Web-Applikationen und rechtliche Vorgaben zum Beispiel für kreditkartenverarbeitende Software haben dazu geführt, dass immer mehr Unternehmen Code-Review-Prozesse in ihrer Anwendungsentwicklung etabliert haben.
Der Bedarf an mehr Sicherheit in Web-Applikationen und rechtliche Vorgaben zum Beispiel für kreditkartenverarbeitende Software haben dazu geführt, dass immer mehr Unternehmen Code-Review-Prozesse in ihrer Anwendungsentwicklung etabliert haben.
Foto: alphaspirit - Fotolia.com

Zahlreiche erfolgreiche Angriffe gegen Schwachstellen in Anwendungen haben gezeigt, dass die meisten IT-Sicherheitslücken in der Anwendungsentwicklung verwurzelt sind. Durch unachtsame Programmierung, schlechtes Design oder schlichtes Unwissen werden jedes Jahr unzählige Zeilen gefährlicher Programmtexte geschrieben, die dann zu Sicherheitsproblemen führen. Die Schlussfolgerung ist klar: Wenn ein Unternehmen sichere Software haben will, muss es zuerst die Sicherheit des Codes garantieren. Die beste Möglichkeit hierfür ist ein Code Review.

Dies ist besonders relevant für Web-Anwendungen, bei denen rechtliche Vorgaben eine Rolle spielen: Code Reviews sind jetzt vom Standard PCI-DSS, der für den sicheren Umgang mit Kreditkarten sorgen soll, verpflichtend vorgesehen. Abschnitt 6.6 dieses Standards legt fest, dass kreditkartenverarbeitende Software entweder durch einen Code Review oder durch die Installation einer Web-Application-Firewall gesichert werden muss.

Daher wundert es nicht, dass die Nachfrage nach Code Reviews, entsprechender Expertenberatung und zugehörigen Tools steigt. Angesichts der allgemeinen Notwendigkeit sicherer Anwendungen und konkreter rechtlicher Vorgaben gehören Code Reviews mittlerweile zur Anwendungsentwicklung vieler Unternehmen.

Tool-Unterstützung im Trend

In seiner einfachsten Form liefert ein Review eine Liste der im Code erkannten Probleme, die zur Qualitäts- und Sicherheitsverbesserung des Codes verwendet werden kann. Die Untersuchung des Codes kann verschiedene Ziele haben, so zum Beispiel die Einhaltung des Programmdesigns oder die Erkennung von Flaschenhälsen, die zu Performance-Verlusten führen. Außerdem sind Reviews eine ausgezeichnete Möglichkeit, um die Sicherheit des Codes zu überprüfen.

Reviews, die nur auf visueller Inspektion des Codes basieren, sind sehr zeitaufwendig - auch die erfahrensten Reviewer können nur ungefähr 100 Codezeilen pro Stunde analysieren, so dass schon für die Überprüfung einer mittelgroßen Anwendung mit 20.000 Zeilen rund 200 Stunden benötigt werden, und das ohne Dokumentation, Korrektur etc. Daher geht der Trend stark zu Tool-gestützten, formalisierten Reviews, die sich wiederholt auf große Codemengen anwenden lassen.

Die besten automatischen Review-Tools erkennen häufige Programmierprobleme wie Endlosschleifen, Null-Pointer-Exceptions, fehlende Methoden oder den ungenügenden Gebrauch von Thread-Synchronisierung sehr gut. Auch bei Architekturproblemen sind sie relativ zuverlässig. Die Aufdeckung von Sicherheitsproblemen stellt jedoch eine schwierige und komplexe Aufgabe dar. Die aktuelle Generation der Code-Review-Tools kann Sicherheitsschwachstellen wie Cross Site Scripting oder SQL-Injection erkennen, zwei der häufigsten und gefährlichsten Schwachstellen in Web-Anwendungen. Sicherheitsprobleme, die auf Umgehung der Business-Logik beruhen, entdecken die Tools aber meist nicht.

Die meisten Werkzeuge sind in Entwicklungsumgebungen integrierbar, verfügen über Ticketing- und Bug-Tracking-Systeme, können mit zentralen Code Repositories verbunden werden und erstellen Management-Reports mit farbigen Grafiken. Um einen Nutzen aus den Ergebnissen zu ziehen, müssen diese aber von einem kompetenten Experten interpretiert und verstanden werden (Motto: "A Fool with a Tool is still a Fool!"). Die Folgerung ist, dass ein professioneller Review automatische und manuelle Analyse kombiniert. Der menschliche Beitrag wird gebraucht, da sogar die besten Tools manchmal unsinnige oder falsche Ergebnisse liefern. Nur ein Experte kann die Spreu vom Weizen trennen.