5. Fehlerarten – Integer Overflow
Integer overflow (Ganzzahlüberlauf) tritt auf bei einer
arithmetischen Operation.
Bei einer Bestimmung von Offset
Bei einer Speicher-Allokation (Größe)
Kopierung, Konkatenation, Gleichheit...
Folgen
Verfügbarkeit: durch Endlosschleifen
Integrität: durch Datenmanipulation
Zugriffskontrolle: Code kann ausgeführt werden
14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 5
6. Fehlerarten – Integer Overflow
Plattformen
Sprachen: C, C++, Fortran, Assembler
Betriebssysteme: alle
Vermeiden von Integer Overflows
Aufpassen beim Programmieren
Jede Art von Indexkalkulation
Jede Art von Berechnung einer Puffergröße
C/C++ Programmierer sollten besonders aufpassen
14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 6
7. Integer Overflow - Beispiel
Codestück aus OpenSSH 3.3
nresp=1073741824 und sizeof(char*) hat den Wert 4
Ergebnis vom nresp*sizeof(char*) läuft über und Arg für
xmalloc() ist 0
14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 7
8. Fehlerarten – Formatstring
Angreifer kann das System zum Absturz bringen oder auch
Code ausführen
Daten werden als String-Argumente übergeben in einer Funktion wie
sprintf(), FormatMessageW(), syslog() oder printf().
Folgen
Vertraulichkeit: ermöglicht die Offenlegung von Informationen
Zugriffskontrolle: Code kann ausgeführt werden
Plattformen
Sprachen: C, C++, Assembler
Betriebssysteme: alle
14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 8
9. Formatstring - Beispiel
Daten werden ohne Längenprüfung eingelesen
14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 9
10. Formatstring – Beispiel(1)
Korrektur: Bei *scanf() kann im FormatString bei den
FormatTags eine Größenbegrenzung eingestellt werden. Für
Strings geht das mit %<Größe>s.
14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 10
11. Fehlerarten – Speicherlecks
Speicherlecks (Memory leaks) enstehen , wenn ein Programm
dynamisch Speicher alloziert (malloc(), realloc(), ...)
Alloziert Speicherressourcen werden nicht mehr an das System
zurückgegeben (z.B.: mittels free())
Es steht nicht unendlich viel Speicher vom Heap dafür zur Verfügung
Frage:Was ist aber mit Programmen, die
dauerhaft im Einsatz sein müssen?
14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 11
12. Speicherlecks - Beispiel
..eine Weile wird es ohne Probleme laufen…
14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 12
21. Methoden – Formale Analyse
Formale Analyse ist hilfsreich für den Nachweis der Richtigkeit
von Systemen wie z.B. kryptographische Protokolle
Allgemein: Überprüfung der Konsistenz zwischen
Spezifikation und Realisierung mittels mathematischer
Mittel
Anwendungsbereiche: Sicherheitsanalyse,
Zuverlässigkeitsanalyse, Verfügbarkeitsanalyse, Risikoanalyse
Oft Programmiersprachen-unabhängig
Modell checking
14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 21
22. Methoden – Statische Analyse
Statische Code Analyse ist ein statisches Software-
Testverfahren
Zu testende Software muss nicht ausgeführt werden
White-Box-Tests
Dem Quellcode wird einer Reihe formaler Prüfungen unterzogen
Ziel: Fehler finden und keine Veränderung/Verbesserung im
Quellcode
Quellecodeanalyse durch Tools oder manuell (Zeitaufwändig)
14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 22
23. Methoden – Statische Analyse
Lint
Heutige Programmierung oft Trial & Error
Vor einigen Jahren noch unmöglich, da Rechenzeit zu teuer
Lint: Check auf syntaktische Korrektheit
14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 23
29. (Deo|O)bfuscation
Um die Funktion von Code schwer verständlich zu machen wird
er künstlich unleserlich gemacht
In der Regel zum verstecken / erschweren von reversen von
Malware
krude Variablen- und Funktionsnamen
Ausnutzung von wenig bekannte Sprachfeatures
Methoden der Obfuscation
Äquivalente Formeln und konstante Transformationen
Umordnung von Anweisungen
Varbiablensubstitution
14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 29
30. (Deo|O)bfuscation
Methoden der Obfuscation
Bedingte Anweisungen und Sprünge
Aufruf von Subroutinen
Einfügen von Leercode
Verschlüsselung
Mischen von Funktionen
Spalten von Variablen
14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 30
31. (Deo|O)bfuscation
Beispiel JavaScript Obfuscation
document.body.write("Hello World!");
document['body']['write']("Hello World");
var b = 'body', w = 'write', olleh = "Hello", dlorw = "World";
document[b][w](olleh + ' ' + dlorw);
14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 31
32. (Deo|O)bfuscation
Deobfuscation durch Tools schwer
Computer können Semantik von Funktionen und Variableninhalten
nicht erkennen
Neuer Ansatz: Code deobfuscation by optimization
27C3 in Berlin im Dezember 2010
Branko Spasojevic
14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 32
34. Auswahlkriterien für Analysetools
Anforderung: Die verwendete Programmiersprache muss
untertützt werden
Arten von Schwachstellen, die erkannt werden sollen
Für Webapplikationen (siehe OWASP Top-10)
Läuft es mit Binären anstatt Quellcode Dateien?
Kann es in IDEs integriert werden???
Lizenz und Kosten für das Tool
Genauigkeit: Wie hoch ist die „False-Positive-Rate“?
14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 34
35. Statische vs. Dynamische Analyse
Statische Analyse Vorteile
Schwachstellen im Code können an der exakten Position gefunden
werden
Es ist relativ schnell falls automatisierte Software benutzt werden
Automatisierte Tools bieten Vorschläge an => reduziert Recherchen
Ermöglicht es Schwachstellen sehr früh zu finden, schon während der
Entwicklungszeit => reduziert Kosten
14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 35
36. Statische vs. Dynamische Analyse
Statische Analyse Einschränkungen
Zeitberaubend, falls es manuell durchgeführt wird
Automatisierte Tools unterstützen nicht alle Programmiersprachen
Automatisierte Tools berichten über falsche positive und falsche
negative Schwachstellen
Automatisierte Tools sind genauso gut, wie die benutzten Regel zum
scannen
Erkennung von Schwachstellen in der Laufzeitumgebung ist nicht
möglich
14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 36
37. Statische vs. Dynamische Analyse
Dynamische Analyse Vorteile
Erkennt Schwachstellen in der Lauftzeitumgebung
Erlaubt die Analyse von Programmen, für die keinen Codezugriff gibt
Erkennt die Schwachstellen, die evtl. von der statischen Analyse als
falsche negative Schwachstellen gemeldet wurden
Ermöglicht die Ergebnisse der statischen Code Analyse zu validieren
Kann gegen jedes Programm angewendet werden
14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 37
38. Statische vs. Dynamische Analyse
Dynamische Analyse Einschränkungen
Automatisierte Tools bieten ein falsches Gefühle der Sicherheit, dass
alles adressiert wurde
Automatisierte Tools berichten über falsche positive und falsche
negative Schwachstellen
Automatisierte Tools sind genauso gut, wie die benutzten Regel zum
scannen
Sehr schwierig die Schwachstelle im Code bis zum Wurzel zu
lokalisieren => es dauert länger
14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 38