Marc Ruef
Book: Source Code Analysis (German only)
Deutsch English
"Recommended Article: What to do if your Facebook profile has been hacked (thesecuritypub.com) http://bit.ly/dbEEAx" - @mruef via Twitter, vor 3 Stunden


Die Sicherheit von Computersystemen ist massgeblich von der korrekten und gewünschten Funktionsweise der jeweiligen Computerprogramme abhängig. Eine Software wird dabei in Form eines Quelltexts durch den jeweiligen Programmierer geschrieben, um danach mittels Kompilierung oder Interpretation auf einem Rechner ausgeführt zu werden. Durch das systematische Analysieren des Quelltexts der jeweiligen Programme sollen Schwachstellen und Sicherheitslücken frühzeitig ausgemacht und adressiert werden können.

Mein Buch mit dem simplen Arbeitstitel "Source Code Analysis" (SCA) will diese klassische Disziplin der Informatik in pragmatischer Weise diskutieren. Dabei sollen auf die ansonsten in akademischer Literatur üblichen mathematischen Beweisführung weitestgehend verzichtet werden, um technisch effiziente und wirtschaftlich rechtfertigbare Lösungsansätze erarbeiten zu können. Hierbei soll weitestgehend die grundlegende Nachvollziehbarkeit und Transparenz der akademischen Ansätze beibehalten oder wenigstens kalkuliert eingebüsst werden.

Es richtet sich damit an Leute, die grundlegendes oder fortgeschrittenes Wissen zur Programmierung haben, sich aber noch nie damit auseinandergesetzt haben, wie Code in systematischer Weise auf Sicherheitslücken hin untersucht werden kann. Die Systematik soll dabei absichtlich nicht dem Level entsprechen, welches im Informatik-Studium auf Papier beübt wird. Die Wirtschaftlichkeit der Ansätze ist genauso wichtig, denn schlussendlich soll das Ganze nicht nur ein Gedankenspiel sondern ein konkreter Lösungsansatz sein.

Ich möchte dabei nicht so theoretisch und akademisch sein wie "Principles of Program Analysis" von Nielson und Hankin, nicht so ungeordnet und historisch wie "Advanced Programming Language Design" von Finkel, nicht so entwicklungsbezogen wie "Building Secure Software" von Viega und nicht so unsystematisch und oberflächlich wie "Exploiting Software: How to Break Code" von Hoglund und McGraw. Am ehesten wird es wohl in die Richtung von "Code Reading" von Spinellis sowie "Why Programs Fail: A Guide to Systematic Debugging" von Zeller gehen, wenn auch ich den Schwerpunkt viel mehr auf Security legen und mehr die (aussagelogische) Beweisbarkeit von "Principles of Program Analysis" einbringen möchte.

Das Buch befindet sich in einem sehr frühen Stadium. Details zum Inhalt sind, abgesehen von den auf dieser Seite genannten Informationen, nicht weiter bekannt. Als Erscheinungsdatum ist das Jahr 2013 vorgesehen. Ein Verlag, der das Buch auflegen wird, ist ebenfalls noch nicht bestimmt. Weitere Details zur Arbeit und dem Verlauf dieser werden in Zukunft hier zusammengefasst werden.

1. Einführung
1.1 Über dieses Buch
1.1.1 Für wen wurde dieses Buch geschrieben
1.1.2 Aufbau und Struktur
1.2 Einführung in die Programmierung
1.2.1 Was ist ein Programm
1.2.2 Software-Entwicklung
1.2.3 Software-Betreuung
1.3 Modellierung von Software
1.3.1 Ausdruck
1.3.2 Token
1.3.3 Label

2. Kontrollfluss
2.1 Operatoren
2.1.1 Relationale Ausdrücke
2.1.2 Arithmetische Ausdrücke
2.1.3 Boolsche Ausdrücke
2.2 Entscheidungen
2.2.1 if
2.2.2 elseif
2.2.3 else
2.2.4 switch und case
2.3 Schleifen
2.3.1 for
2.3.2 while und do-while
2.3.3 until
2.3.4 foreach
2.4 Sprunganweisungen
2.4.1 Labels und goto
2.4.2 break und exit

3. Datenfluss
3.1 Variablen
3.1.1 Datentypen
3.1.2 Deklarationen
3.1.3 Initialisierungen
3.1.4 Gültigkeitsbereiche
3.1.5 Lebensdauer
3.1.6 Konstanten
3.2 Eingaben
3.2.1 Argumente und Parameter
3.2.2 Interaktive Eingaben
3.2.3 GUI-Interaktion
3.2.3 Daten externer Quellen
3.3 Ausgaben
3.3.1 Bildschirmausgabe
3.3.2 Dateien schreiben
3.3.3 Datenbanken schreiben

4. Funktionen
4.1 Prozedurale Programmierung
4.1.1 Prozeduren
4.1.2 Funktionen
4.2 Parameterübergabe
4.2.1 Value
4.2.2 Reference
4.2.3 Copy-Restore
4.2.4 Name
4.2.5 Need
4.2.6 Globale Variable
4.2.7 Alternative Zwischenspeicher
4.3 Resultatverhalten
4.3.1 Prozeduren ohne Rückgaben
4.3.2 Rückgabewert
4.3.3 Alternative Zwischenspeicher
4.4 Built-In-Funktionen
4.4.1 String-Verarbeitung
4.4.2 Mathematische Operationen
4.4.3 Eingaben und Ausgaben
4.4.4 Dateien
4.4.5 Datenbanken
4.4.6 Netzwerk
4.5 Multi-Threading
4.5.1 Block Multi-Threading
4.5.2 Interleaved Multi-Threading
4.5.3 Simultanes Multi-Threading

5. Sprachbedingte Eigenarten
5.1 ANSI C
5.1.1 Pufferüberlauf
5.1.2 Format String
5.1.3 Inline Programmierung
5.3 PHP
5.3.1 Fehlermeldungen
5.3.2 Typprüfung
5.3.2 Safe Mode
5.3.3 Magic Quotes
5.2 Java
5.2.1 Objekte und Methoden
5.2.2 Klassen
5.2.3 Assertion