Quellcode Analyse

1.779 Aufrufe

Veröffentlicht am

Veröffentlicht in: Technologie, Business
0 Kommentare
1 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

Keine Downloads
Aufrufe
Aufrufe insgesamt
1.779
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
4
Aktionen
Geteilt
0
Downloads
8
Kommentare
0
Gefällt mir
1
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

Quellcode Analyse

  1. 1. Hacker Contest Praktikum QuellcodeanalyseBetreuer: Dr. Martin MinkBearbeiter: Amir Neziri & Zoran ZaricWintersemester 2010/11
  2. 2. Einleitung - Motivation Unterstützung für Programmierer Codeduplikate vermeiden Analyse von sicherheits- und zeitkritischer Elemente Frühzeitige Fehlererkennung (Kostengründe) Analyse von Quellcode (White-Box-Testing) 14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 2
  3. 3. Inhalt Fehlerarten Methoden Code Obfuscation & Deobfuscation Analysetools:Auswhalkriterien Statische vs. Dynamische Analyse 14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 3
  4. 4. Fehlerarten Buffer overflows Integer-overflows Formatstring-Angriffe Speicherlecks Input Validation SQL-Injectinos Exceptions Race Conditions 14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 4
  5. 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. 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. 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. 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. 9. Formatstring - Beispiel Daten werden ohne Längenprüfung eingelesen 14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 9
  10. 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. 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. 12. Speicherlecks - Beispiel..eine Weile wird es ohne Probleme laufen… 14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 12
  13. 13. Methoden Dynamische Analyse Formale Analyse Statische Analyse 14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 13
  14. 14. Methoden – Dynamische Analyse Dynamische Verfahren setzen die Ausführbarkeit der Software voraus Sturkuturorientiert  White-Box-Test  Darstellungsformen: Kontrollgraph, Strukturdiagram Funktionsorientiert  Tests gegen die Spezifikation  Definition von Testdaten/ Testergebnissen Diverses  Regressionstests, Leistungs- und Stresstestwerkzeuge 14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 14
  15. 15. Dynamische Analysetools Open Source  Valgrind  Daikon  Avalanche (basiert auf Valgrind) Kommerzielle Tools  Coverity  Insure++ 14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 15
  16. 16. Dynamische Analysetool -Valgrind Framework zur Erstellung von dynamischen Analysetools Verfügbare Tools  Speichermanagement  Profiling  Debugging Opensource-Projekt, GPL http://www.valgrind.org/ Verfügbarkeit: X86/Linux, AMD64/Linux, ARM/Linux, PPC32/Linux, PPC64/Linux, X86/Darwin and AMD64/Darwin (Mac OS X 10.5 and 10.6) 14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 16
  17. 17. Dynamische Analysetool -Valgrind Erkennt viele Speicherschwachstellen, die in C/C++ Code gemacht werden Programm läuft im Prinzip in einer virtuellen Maschine Aufruf  Normaler Aufruf: myprog arg1 arg2  valgrind --leak-check=yes myprog arg1 arg2  valgrind --tool=memcheck program_name 14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 17
  18. 18. Valgrind - Demo Memcheck valgrind --tool=memcheck --leak-check=yes example5 14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 18
  19. 19. Valgrind - Demo Invalid Points valgrind --tool=memcheck --leak-check=yes --track- origins=yes ./example6 14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 19
  20. 20. Valgrind – Demo UninitializedVariables valgrind --tool=memcheck --leak-check=yes --track- origins=yes ./example7 14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 20
  21. 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. 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. 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
  24. 24. Statische Analysetools Java  Jlint  JavaScript: Jslint (Online oder mit Node.js) PHP  php –l Ruby  ruby -c Splint: Erkennen von C-Sicherheitslücken Python  Pyflakes 14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 24
  25. 25. Demo Pyfleks 14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 25
  26. 26. Statische Analyse – Code Smells Code Smells sind Anzeichen für unsauberen Code. z.B.:  Duplicate Code  Dead Code  Conditional Complexity  Long Lines 14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 26
  27. 27. Statische Analyse – Code Smells Tools  Java  Findbugs  Konkatenierung von Strigs in Schleifen  => Schlägt StringBuilder vor  PHP  PHP_CodeSniffer  Python  pyflakes 14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 27
  28. 28. Demo - Findbugs 14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 28
  29. 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. 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. 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. 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
  33. 33. Demo Code Deobfuscation 14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 33
  34. 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. 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. 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. 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. 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
  39. 39. Fragen?? 14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 39
  40. 40. 14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 40
  41. 41. Literatur http://www.owasp.org/index.php/Source_Code_Analysis_Tools http://www.owasp.org/index.php/Integer_overflow http://pi1.informatik.uni- mannheim.de/filepool/teaching/sicherheit- 2006/ITS_20061121.pdf http://www.pst.informatik.uni- muenchen.de/lehre/WS0405/mse/folien/D2-BlackWhite6p.pdf http://www.scribd.com/doc/28258786/Werkzeuge-Zur-Code- Analyse-Presentation Hacking: Die Kunst des Exploits, Jon Erickson, ISBN-978-1- 59327-144-2 http://www.cigital.com/papers/download/bsi5-static.pdf 14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 41
  42. 42. Literatur http://www2.swc.toshiba.co.jp/en/tech/design.htm http://pi1.informatik.uni- mannheim.de/filepool/teaching/sicherheit- 2006/ITS_20061121.pdf http://securitytube.net/Format-String-Vulnerabilities-Primer- %28Part-1-The-Basics%29-video.aspx http://openbook.galileocomputing.de/c_von_a_bis_z/027_c_sic heres_programmieren_002.htm http://www.elektronikpraxis.vogel.de/themen/embeddedsoftwar eengineering/testinstallation/articles/66899/ http://www.owasp.org/index.php/Source_Code_Analysis_Tools http://gcn.com/Articles/2009/02/09/Static-vs-dynamic-code- analysis.aspx 14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 42
  43. 43. Literatur http://valgrind.org/ http://cs.ecs.baylor.edu/~donahoo/tools/valgrind/ http://www.securitytube.net/Profiling-Programs-for-Security- Holes-with-Valgrind-video.aspx http://www.cprogramming.com/debugging/valgrind.html http://www.mit.edu/~6.170/tools/daikon.html#output http://groups.csail.mit.edu/pag/daikon/ http://pypi.python.org/pypi/pyflakes http://findbugs.sourceforge.net/ http://www.suse.de/~thomas/papers/SecProg/Sicherheitsreleva nte%20Programmierfehler.pdf 14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 43

×