Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Sicherheitslücken durch Programmierfehler

Ähnliche Präsentationen


Präsentation zum Thema: "Sicherheitslücken durch Programmierfehler"—  Präsentation transkript:

1 Sicherheitslücken durch Programmierfehler
- Buffer Overflow -

2 Pufferüberläufe (englisch buffer overflow) gehören zu den häufigsten Sicherheitslücken in aktueller Software, die sich u. a. über das Internet ausnutzen lassen können

3 Funktionsweise: Im Wesentlichen werden bei einem Pufferüberlauf (aufgrund von Fehlern im Programm) zu große Datenmengen in einen dafür zu kleinen reservierten Speicherbereich – den Puffer – geschrieben, wodurch nach dem Ziel-Speicherbereich liegende Speicherstellen überschrieben werden

4 Ein Pufferüberlauf kann u.a. zu folgenden Problemen führen:
zum Absturz des betreffenden Programms zur Verfälschung von Daten zur Beschädigung von Datenstrukturen der Laufzeit-umgebung des Programms Durch Letzteres kann die Rücksprungadresse eines Unterprogramms mit beliebigen Daten überschrieben werden, wodurch ein Angreifer durch Übermittlung von beliebigem Maschinencode beliebige Befehle mit den Privilegien des für den Pufferüberlauf anfälligen Prozesses ausführen kann

5 Dieser Code hat in der Regel das Ziel, dem Angreifer einen komfortableren Zugang zum System zu ver-schaffen, damit dieser das System dann für seine Zwecke verwenden kann Pufferüberläufe in verbreiteter Server- und Clientsoftware werden auch von Internetwürmern ausgenutzt

6 Übertragung/Quelle: Neben Nachlässigkeiten bei der Programmierung werden Pufferüberläufe vor allem durch auf der Von-Neumann-Architektur basierende Computersysteme ermöglicht, nach der Daten und Programm im gleichen Speicher liegen Die Von-Neumann-Architektur (VNA) ist ein Referenz-modell für Computer, wonach ein gemeinsamer Speicher sowohl Computerprogrammbefehle als auch Daten hält Durch diese Hardwarenähe sind sie auch nur unter assemblierten oder kompilierten Programmiersprachen ein Problem

7 Übertragung/Quelle: Interpretierte Sprachen sind, abgesehen von Fehlern im Interpreter, in der Regel nicht anfällig, da die Speicher-bereiche für Daten immer unter vollständiger Kontrolle des Interpreters sind Die jedoch wesentlichste Ursache für Pufferüberläufe ist die Verwendung von Programmiersprachen, die nicht die Möglichkeit bieten, Grenzen von Speicherbereichen automatisch zu überwachen, um eine Bereichsüber-schreitung von Speicherbereichen zu verhindern

8 Übertragung/Quelle: Dazu gehört besonders die Sprache C, die das Haupt-gewicht auf Performance (und ursprünglich Einfachheit des Compilers) legt Die häufig verwendete Programmiersprache C++ bietet nur eingeschränkte Möglichkeiten zur automatischen Überprüfung von Feldgrenzen Die Wahl einer Programmiersprache bedeutet meist auch die Verwendung der entsprechenden Standard-bibliotheken Im Fall von C und C++ enthält die Standardbibliothek eine Anzahl von gefährlichen Funktionen, die zum Teil keine sichere Verwendung zulassen und zu denen meist keine Alternativen bestehen

9 Gegenmaßnahmen/Prävention:
Mit dem Protected Mode, der beim eingeführt wurde, lässt sich durch die Segmentierung des linearen Speichers der Programm-, Daten- und Stapelspeicher physikalisch voneinander trennen Der Zugriffsschutz erfolgt über die Speicherver-waltungseinheit der CPU Das Betriebssystem muss nur sicherstellen, dass gleichzeitig nicht mehr Speicher zur Verfügung gestellt wird, als der lineare Adressraum groß ist

10 Gegenmaßnahmen/Prävention:
Eine sehr nachhaltige Gegenmaßnahme besteht in der Verwendung typsicherer Programmiersprachen und -werkzeuge, wie zum Beispiel Java oder C#, bei denen die Einhaltung von zugewiesenen Speicherbereichen gegebenenfalls schon beim Übersetzen in Maschinen-sprache mit dem Compiler kontrolliert, aber spätestens zur Laufzeit mit entsprechendem Programmcode überwacht wird

11 Gegenmaßnahmen/Prävention:
Bei der Erstellung von Programmen muss also auf die Überprüfung aller Feldgrenzen geachtet werden Fast ausgeschlossen sind Pufferüberläufe beispielsweise in der Programmiersprache Java, da die Ausführung im Bytecode überwacht wird Aber auch in Java gibt es einerseits Pufferüberläufe, deren Ursache im Laufzeitsystem liegt und von denen mehrere JRE-Versionen (Java Runtime Environment) betroffen sind

12 Erkennungsmöglichkeiten:
Überprüfung des Programmcodes: Spezielle Überprüfungswerkzeuge erlauben die Analyse des Codes und entdecken mögliche Schwachstellen Unterstützung durch Compiler: Moderne Compiler, wie neue Versionen des GNU C-Compilers, erlauben die Aktivierung von Überprüfungscode-Erzeugung bei der Übersetzung Sie fügen zwischen der Rücksprungadresse und den lokalen Variablen Platz für eine Zufallszahl (auch „Canary“ genannt) ein

13 Erkennungsmöglichkeiten:
Beim Programmstart wird diese Zahl ermittelt, wobei sie jedes Mal unterschiedliche Werte annimmt Bei jedem Unterprogrammaufruf wird die Zufallszahl in den dafür vorgesehen Bereich geschrieben Der erforderliche Code wird vom Compiler automatisch generiert Vor dem Verlassen des Programms über die Rücksprungadresse fügt der Compiler einen Code ein, der die Zufallszahl auf den vorgesehenen Wert über-prüft Wurde sie geändert, ist auch der Rücksprungadresse nicht zu trauen

14 Erkennungsmöglichkeiten:
Das Programm wird mit einer entsprechenden Meldung abgebrochen Daneben kann man manche Compiler auch veranlassen, beim Unterprogrammaufruf eine Kopie der Rücksprungadresse unterhalb der lokalen Felder zu erzeugen Diese Kopie wird beim Rücksprung verwendet, die Ausnutzung von Pufferüberläufen ist dann wesentlich erschwert

15 Werkzeuge zur statischen Codeanalyse:
Axivion Bauhaus Suite: Werkzeug für Code-, Design- und Architekturanalyse. Erhältlich für die Programmiersprachen Ada, C, C++, C# und Java BugScout: Werkzeug zum Aufspüren potentieller Sicherheitsprobleme in Java, PHP, ASP und C# Webapplikationen

16 Werkzeuge zur statischen Codeanalyse:
CAST Application Intelligence Platform: Dashboard für die Messung von Codequalität und Produktivität Unterstützt mehr als 30 Programmiersprache, sowie verschiedene Datenbanken BugScout: Werkzeug zum Aufspüren potentieller Sicherheitsprobleme in Java, PHP, ASP und C# Webapplikationen

17 Werkzeuge zur statischen Codeanalyse:
ChecKing: Softwarequalitätsportal zur Darstellung der Qualität aller Phasen der Softwareentwicklung Unterstützt statische Codeanalyse von: Java, JSP, Javascript, HTML, XML, .NET (C#, ASP.NET, VB.NET, etc.), PL/SQL, embedded SQL, SAP ABAP IV, Natural/Adabas, C/C++, Cobol, JCL und PowerBuilder Visual Studio Team System: Analysiert C++ und C# Code

18 Werkzeuge zur statischen Codeanalyse:
Eine Liste der weiteren Tools finden Sie unter:


Herunterladen ppt "Sicherheitslücken durch Programmierfehler"

Ähnliche Präsentationen


Google-Anzeigen