SlideShare ist ein Scribd-Unternehmen logo
Hacker Contest Praktikum



                       Quellcodeanalyse

Betreuer: Dr. Martin Mink
Bearbeiter: Amir Neziri     & Zoran Zaric
Wintersemester 2010/11
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
Inhalt

 Fehlerarten

 Methoden

 Code Obfuscation & Deobfuscation

 Analysetools:Auswhalkriterien

 Statische vs. Dynamische Analyse




         14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric   3
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
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
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
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
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
Formatstring - Beispiel




 Daten werden ohne Längenprüfung eingelesen




        14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric   9
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
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
Speicherlecks - Beispiel




..eine Weile wird es ohne Probleme laufen…

       14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric   12
Methoden


 Dynamische Analyse

 Formale Analyse

 Statische Analyse




         14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric   13
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
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
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
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
Valgrind - Demo Memcheck




 valgrind --tool=memcheck --leak-check=yes example5




        14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric   18
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
Valgrind – Demo Uninitialized
Variables




 valgrind --tool=memcheck --leak-check=yes --track-
  origins=yes ./example7

        14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric   20
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
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
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
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
Demo Pyfleks




     14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric   25
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
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
Demo - Findbugs




     14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric   28
(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
(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
(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
(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
Demo Code Deobfuscation




     14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric   33
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
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
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
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
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
Fragen??




     14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric   39
14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric   40
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
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
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

Weitere ähnliche Inhalte

Andere mochten auch

Teaser: Soziale Gesichtserkennung
Teaser: Soziale GesichtserkennungTeaser: Soziale Gesichtserkennung
Teaser: Soziale Gesichtserkennung
erträ glich
 
Proyecto final - Nuevas Tecnologías de la Comunicación
Proyecto final - Nuevas Tecnologías de la ComunicaciónProyecto final - Nuevas Tecnologías de la Comunicación
Proyecto final - Nuevas Tecnologías de la Comunicación
Luis Barrueto
 
PORTAFOLIO DALE SONIDO PRODUCCIONES
PORTAFOLIO DALE SONIDO PRODUCCIONESPORTAFOLIO DALE SONIDO PRODUCCIONES
PORTAFOLIO DALE SONIDO PRODUCCIONES
Anibal Hernandez
 
Importance of efficiency for the future of the newspaper
Importance of efficiency for the future of the newspaperImportance of efficiency for the future of the newspaper
Importance of efficiency for the future of the newspaper
WAN-IFRA
 
IBMs Visuelle Reise2010
IBMs Visuelle Reise2010IBMs Visuelle Reise2010
IBMs Visuelle Reise2010Friedel Jonker
 
Acheter au meilleur prix Batterie outil électroportatif dewalt
Acheter au meilleur prix Batterie outil électroportatif dewaltAcheter au meilleur prix Batterie outil électroportatif dewalt
Acheter au meilleur prix Batterie outil électroportatif dewalt
shuming
 
Candela 02
Candela 02Candela 02
Candela 02
David Aloi
 
PresentacióN @ Sant Cugat
PresentacióN @ Sant CugatPresentacióN @ Sant Cugat
PresentacióN @ Sant Cugat
vsancho
 
Waimea Brand Catalogue2010
Waimea Brand Catalogue2010Waimea Brand Catalogue2010
Waimea Brand Catalogue2010
Wine Central Limited
 
Lighting Magazine - Candela 05
Lighting Magazine - Candela 05Lighting Magazine - Candela 05
Lighting Magazine - Candela 05
David Aloi
 
Oficiohoriz2008 2012
Oficiohoriz2008 2012Oficiohoriz2008 2012
Oficiohoriz2008 2012
luzzitha
 
Funktionsweise Energiesparlampe
Funktionsweise EnergiesparlampeFunktionsweise Energiesparlampe
Funktionsweise EnergiesparlampeAkkuShop.de
 

Andere mochten auch (12)

Teaser: Soziale Gesichtserkennung
Teaser: Soziale GesichtserkennungTeaser: Soziale Gesichtserkennung
Teaser: Soziale Gesichtserkennung
 
Proyecto final - Nuevas Tecnologías de la Comunicación
Proyecto final - Nuevas Tecnologías de la ComunicaciónProyecto final - Nuevas Tecnologías de la Comunicación
Proyecto final - Nuevas Tecnologías de la Comunicación
 
PORTAFOLIO DALE SONIDO PRODUCCIONES
PORTAFOLIO DALE SONIDO PRODUCCIONESPORTAFOLIO DALE SONIDO PRODUCCIONES
PORTAFOLIO DALE SONIDO PRODUCCIONES
 
Importance of efficiency for the future of the newspaper
Importance of efficiency for the future of the newspaperImportance of efficiency for the future of the newspaper
Importance of efficiency for the future of the newspaper
 
IBMs Visuelle Reise2010
IBMs Visuelle Reise2010IBMs Visuelle Reise2010
IBMs Visuelle Reise2010
 
Acheter au meilleur prix Batterie outil électroportatif dewalt
Acheter au meilleur prix Batterie outil électroportatif dewaltAcheter au meilleur prix Batterie outil électroportatif dewalt
Acheter au meilleur prix Batterie outil électroportatif dewalt
 
Candela 02
Candela 02Candela 02
Candela 02
 
PresentacióN @ Sant Cugat
PresentacióN @ Sant CugatPresentacióN @ Sant Cugat
PresentacióN @ Sant Cugat
 
Waimea Brand Catalogue2010
Waimea Brand Catalogue2010Waimea Brand Catalogue2010
Waimea Brand Catalogue2010
 
Lighting Magazine - Candela 05
Lighting Magazine - Candela 05Lighting Magazine - Candela 05
Lighting Magazine - Candela 05
 
Oficiohoriz2008 2012
Oficiohoriz2008 2012Oficiohoriz2008 2012
Oficiohoriz2008 2012
 
Funktionsweise Energiesparlampe
Funktionsweise EnergiesparlampeFunktionsweise Energiesparlampe
Funktionsweise Energiesparlampe
 

Ähnlich wie Quellcode Analyse

DOM-based XSS
DOM-based XSSDOM-based XSS
DOM-based XSS
Krassen Deltchev
 
Statische Analyse von Java-Code in der Praxis
Statische Analyse von Java-Code in der PraxisStatische Analyse von Java-Code in der Praxis
Statische Analyse von Java-Code in der Praxis
Roland Ewald
 
Django - The Web framework for perfectionists with deadlines
Django - The Web framework for perfectionists with deadlinesDjango - The Web framework for perfectionists with deadlines
Django - The Web framework for perfectionists with deadlines
Markus Zapke-Gründemann
 
DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?
DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?
DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?
Marc Müller
 
#SpeakRoslyn - Die Microsoft .NET Compiler Plattform
#SpeakRoslyn - Die Microsoft .NET Compiler Plattform#SpeakRoslyn - Die Microsoft .NET Compiler Plattform
#SpeakRoslyn - Die Microsoft .NET Compiler Plattform
Robin Sedlaczek
 
Offensive Security – Das Metasploit Framework
Offensive Security – Das Metasploit FrameworkOffensive Security – Das Metasploit Framework
Offensive Security – Das Metasploit Framework
QAware GmbH
 
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Gregor Biswanger
 
Der Tod der Testpyramide? – Frontend-Testing mit Playwright
Der Tod der Testpyramide? – Frontend-Testing mit PlaywrightDer Tod der Testpyramide? – Frontend-Testing mit Playwright
Der Tod der Testpyramide? – Frontend-Testing mit Playwright
QAware GmbH
 
Chaos Kata Fitnesstraining für DevOps Teams
Chaos Kata Fitnesstraining für DevOps TeamsChaos Kata Fitnesstraining für DevOps Teams
Chaos Kata Fitnesstraining für DevOps Teams
Ramon Anger
 
Best Practices für TDD in JavaScript
Best Practices für TDD in JavaScriptBest Practices für TDD in JavaScript
Best Practices für TDD in JavaScript
Sebastian Springer
 
Node.js Security
Node.js SecurityNode.js Security
Node.js Security
Sebastian Springer
 
Der ultimative PHP Framework Vergleich 2023 Edition
Der ultimative PHP Framework Vergleich 2023 EditionDer ultimative PHP Framework Vergleich 2023 Edition
Der ultimative PHP Framework Vergleich 2023 Edition
Ralf Eggert
 
DACHNUG50 CNX2 Troubleshooting hcl connections.pdf
DACHNUG50 CNX2 Troubleshooting hcl connections.pdfDACHNUG50 CNX2 Troubleshooting hcl connections.pdf
DACHNUG50 CNX2 Troubleshooting hcl connections.pdf
DNUG e.V.
 
Feedback-Loops in der ABAP Softwareentwicklung
Feedback-Loops in der ABAP SoftwareentwicklungFeedback-Loops in der ABAP Softwareentwicklung
Feedback-Loops in der ABAP Softwareentwicklung
Pascal_Erni
 
Akademische Integrität bei Laborprotokollen - Plagiate proaktiv vermeiden und...
Akademische Integrität bei Laborprotokollen - Plagiate proaktiv vermeiden und...Akademische Integrität bei Laborprotokollen - Plagiate proaktiv vermeiden und...
Akademische Integrität bei Laborprotokollen - Plagiate proaktiv vermeiden und...
Mathias Magdowski
 
Continuous Lifecycle 2013: Testgetriebenes Arbeiten im Betrieb
Continuous Lifecycle 2013: Testgetriebenes Arbeiten im BetriebContinuous Lifecycle 2013: Testgetriebenes Arbeiten im Betrieb
Continuous Lifecycle 2013: Testgetriebenes Arbeiten im Betrieb
Andreas Schmidt
 
Java und Python - Das Beste aus beiden Welten nutzen
Java und Python - Das Beste aus beiden Welten nutzenJava und Python - Das Beste aus beiden Welten nutzen
Java und Python - Das Beste aus beiden Welten nutzen
Andreas Schreiber
 
Android Apps mit Xamarin entwickeln
Android Apps mit Xamarin entwickelnAndroid Apps mit Xamarin entwickeln
Android Apps mit Xamarin entwickeln
André Krämer
 
Tech-Talk: Python vs. Ruby
Tech-Talk: Python vs. RubyTech-Talk: Python vs. Ruby
Tech-Talk: Python vs. Ruby
schlauch
 
A Day in the Life of a Bug --- sinnvoll zu Open Source Projekten beitragen
A Day in the Life of a Bug --- sinnvoll zu Open Source Projekten beitragenA Day in the Life of a Bug --- sinnvoll zu Open Source Projekten beitragen
A Day in the Life of a Bug --- sinnvoll zu Open Source Projekten beitragen
Roland Ewald
 

Ähnlich wie Quellcode Analyse (20)

DOM-based XSS
DOM-based XSSDOM-based XSS
DOM-based XSS
 
Statische Analyse von Java-Code in der Praxis
Statische Analyse von Java-Code in der PraxisStatische Analyse von Java-Code in der Praxis
Statische Analyse von Java-Code in der Praxis
 
Django - The Web framework for perfectionists with deadlines
Django - The Web framework for perfectionists with deadlinesDjango - The Web framework for perfectionists with deadlines
Django - The Web framework for perfectionists with deadlines
 
DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?
DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?
DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?
 
#SpeakRoslyn - Die Microsoft .NET Compiler Plattform
#SpeakRoslyn - Die Microsoft .NET Compiler Plattform#SpeakRoslyn - Die Microsoft .NET Compiler Plattform
#SpeakRoslyn - Die Microsoft .NET Compiler Plattform
 
Offensive Security – Das Metasploit Framework
Offensive Security – Das Metasploit FrameworkOffensive Security – Das Metasploit Framework
Offensive Security – Das Metasploit Framework
 
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
 
Der Tod der Testpyramide? – Frontend-Testing mit Playwright
Der Tod der Testpyramide? – Frontend-Testing mit PlaywrightDer Tod der Testpyramide? – Frontend-Testing mit Playwright
Der Tod der Testpyramide? – Frontend-Testing mit Playwright
 
Chaos Kata Fitnesstraining für DevOps Teams
Chaos Kata Fitnesstraining für DevOps TeamsChaos Kata Fitnesstraining für DevOps Teams
Chaos Kata Fitnesstraining für DevOps Teams
 
Best Practices für TDD in JavaScript
Best Practices für TDD in JavaScriptBest Practices für TDD in JavaScript
Best Practices für TDD in JavaScript
 
Node.js Security
Node.js SecurityNode.js Security
Node.js Security
 
Der ultimative PHP Framework Vergleich 2023 Edition
Der ultimative PHP Framework Vergleich 2023 EditionDer ultimative PHP Framework Vergleich 2023 Edition
Der ultimative PHP Framework Vergleich 2023 Edition
 
DACHNUG50 CNX2 Troubleshooting hcl connections.pdf
DACHNUG50 CNX2 Troubleshooting hcl connections.pdfDACHNUG50 CNX2 Troubleshooting hcl connections.pdf
DACHNUG50 CNX2 Troubleshooting hcl connections.pdf
 
Feedback-Loops in der ABAP Softwareentwicklung
Feedback-Loops in der ABAP SoftwareentwicklungFeedback-Loops in der ABAP Softwareentwicklung
Feedback-Loops in der ABAP Softwareentwicklung
 
Akademische Integrität bei Laborprotokollen - Plagiate proaktiv vermeiden und...
Akademische Integrität bei Laborprotokollen - Plagiate proaktiv vermeiden und...Akademische Integrität bei Laborprotokollen - Plagiate proaktiv vermeiden und...
Akademische Integrität bei Laborprotokollen - Plagiate proaktiv vermeiden und...
 
Continuous Lifecycle 2013: Testgetriebenes Arbeiten im Betrieb
Continuous Lifecycle 2013: Testgetriebenes Arbeiten im BetriebContinuous Lifecycle 2013: Testgetriebenes Arbeiten im Betrieb
Continuous Lifecycle 2013: Testgetriebenes Arbeiten im Betrieb
 
Java und Python - Das Beste aus beiden Welten nutzen
Java und Python - Das Beste aus beiden Welten nutzenJava und Python - Das Beste aus beiden Welten nutzen
Java und Python - Das Beste aus beiden Welten nutzen
 
Android Apps mit Xamarin entwickeln
Android Apps mit Xamarin entwickelnAndroid Apps mit Xamarin entwickeln
Android Apps mit Xamarin entwickeln
 
Tech-Talk: Python vs. Ruby
Tech-Talk: Python vs. RubyTech-Talk: Python vs. Ruby
Tech-Talk: Python vs. Ruby
 
A Day in the Life of a Bug --- sinnvoll zu Open Source Projekten beitragen
A Day in the Life of a Bug --- sinnvoll zu Open Source Projekten beitragenA Day in the Life of a Bug --- sinnvoll zu Open Source Projekten beitragen
A Day in the Life of a Bug --- sinnvoll zu Open Source Projekten beitragen
 

Mehr von Amir Neziri

Secure Mobile Cloud Service for personal data with web frontend based on HTML5
Secure Mobile Cloud Service for personal data with web frontend based on HTML5Secure Mobile Cloud Service for personal data with web frontend based on HTML5
Secure Mobile Cloud Service for personal data with web frontend based on HTML5Amir Neziri
 
Security of Web Servers and Web Applications
Security of Web Servers and Web ApplicationsSecurity of Web Servers and Web Applications
Security of Web Servers and Web Applications
Amir Neziri
 
Privacy and identity management for everyone
Privacy and identity management for everyonePrivacy and identity management for everyone
Privacy and identity management for everyone
Amir Neziri
 
Sichere Handy-Ortung zur Unterstützung des Katastrophenmanagements auf Basis ...
Sichere Handy-Ortung zur Unterstützung des Katastrophenmanagements auf Basis ...Sichere Handy-Ortung zur Unterstützung des Katastrophenmanagements auf Basis ...
Sichere Handy-Ortung zur Unterstützung des Katastrophenmanagements auf Basis ...Amir Neziri
 
Software(runtime) attacks
Software(runtime) attacksSoftware(runtime) attacks
Software(runtime) attacks
Amir Neziri
 
Electronic credentials
Electronic credentialsElectronic credentials
Electronic credentials
Amir Neziri
 
Introduction to cryptography
Introduction to cryptographyIntroduction to cryptography
Introduction to cryptography
Amir Neziri
 

Mehr von Amir Neziri (7)

Secure Mobile Cloud Service for personal data with web frontend based on HTML5
Secure Mobile Cloud Service for personal data with web frontend based on HTML5Secure Mobile Cloud Service for personal data with web frontend based on HTML5
Secure Mobile Cloud Service for personal data with web frontend based on HTML5
 
Security of Web Servers and Web Applications
Security of Web Servers and Web ApplicationsSecurity of Web Servers and Web Applications
Security of Web Servers and Web Applications
 
Privacy and identity management for everyone
Privacy and identity management for everyonePrivacy and identity management for everyone
Privacy and identity management for everyone
 
Sichere Handy-Ortung zur Unterstützung des Katastrophenmanagements auf Basis ...
Sichere Handy-Ortung zur Unterstützung des Katastrophenmanagements auf Basis ...Sichere Handy-Ortung zur Unterstützung des Katastrophenmanagements auf Basis ...
Sichere Handy-Ortung zur Unterstützung des Katastrophenmanagements auf Basis ...
 
Software(runtime) attacks
Software(runtime) attacksSoftware(runtime) attacks
Software(runtime) attacks
 
Electronic credentials
Electronic credentialsElectronic credentials
Electronic credentials
 
Introduction to cryptography
Introduction to cryptographyIntroduction to cryptography
Introduction to cryptography
 

Quellcode Analyse

  • 1. Hacker Contest Praktikum Quellcodeanalyse Betreuer: Dr. Martin Mink Bearbeiter: Amir Neziri & Zoran Zaric Wintersemester 2010/11
  • 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. 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. 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. 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
  • 13. Methoden  Dynamische Analyse  Formale Analyse  Statische Analyse 14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 13
  • 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. 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. 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. 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. Valgrind - Demo Memcheck  valgrind --tool=memcheck --leak-check=yes example5 14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 18
  • 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. Valgrind – Demo Uninitialized Variables  valgrind --tool=memcheck --leak-check=yes --track- origins=yes ./example7 14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 20
  • 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
  • 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. Demo Pyfleks 14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 25
  • 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. 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. Demo - Findbugs 14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 28
  • 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
  • 33. Demo Code Deobfuscation 14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 33
  • 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
  • 39. Fragen?? 14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 39
  • 40. 14.12.2010 | Hacker Contest Praktikum - Quellcodeanalyse | Amir Neziri & Zoran Zaric 40
  • 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. 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. 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