Secure Programming

Werbung
Secure Programming
Benedikt Sattler
HTL-EDVO
Secure Programming
●
Gefährliche Programmierfehler
●
Sicherheit in Java
Secure Programming
●
Gefährliche Programmierfehler
●
●
●
●
Bufferoverflows
Formatstring Angriffe
SQL-Injection
Lösungen
Secure Programming
●
Bufferoverflows:
●
Gefährdete Hochsprachen: C/C++
●
Stack und Heapoverflows
●
Angriff wird durch Benutzereingaben eingeleitet
●
C/C++ hat eine Reihe unsicherer Funktionen
Secure Programming
●
Bufferoverflows:
●
Es folgen Beispiele zu Stack und
Heapoverflows.
Secure Programming
●
●
Beispiele für gefährdete Funktionen:
●
strcpy(char *dest, const char *src)
●
strcat(char *dest, const char *src)
Lösung:
●
Vermeiden gefährlicher Funktionen
●
Verwenden sicherer Funktionen
●
Absichern der Parameter
Secure Programming
●
Format String Angriffe:
●
Spezialisierte Form von Bufferoverflows
●
Durch Format Symbole (%d) wird versucht Befehle ausführen
und Speicherstellen ausgeben zu lassen.
●
Gefährdete Befehle:fprintf,sprintf,printf
●
Abhilfe: Eingabeparameter prüfen
Secure Programming
●
Formatstring Angriffe:
●
Es folgen Beispiele
Secure Programming
●
SQL-Injection
●
Structured Query Language
●
Durch geschickte Wahl der Eingabe kann SQL Code injiziert
werden.
●
Eingabefilterung verschafft Abhilfe
Secure Programming
●
SQL-Injection Beispiele:
●
Ziel: PHP-Skript, MySQL Datenbank
●
Verschiedene Eingaben in das Login Formular
●
Beispiel: beni' # Nur mit Nutzernamen einloggen
Secure Programming
●
Abhilfe gegen programmatische Schwachstellen
●
Saubere Programmiertechniken
●
“Schlampigkeitsfehler” vermeiden
●
Verwendung sicherer Funktionen
●
Filterung der Eingaben
●
Usereingaben sind die größte Gefahr
●
Offenlegung des Source Codes stellt eine Gefahr dar.
Secure Programming
●
Java Security
●
Plattformsicherheit
●
APIs zur Ünterstützung des Entwicklers
●
Stark typisierte Sprache
●
Keinen direkten Zugriff auf den Speicher
●
Sandbox (JVM)
Secure Programming
●
Java Plattform Security:
●
Bytecode Verifizierung
●
Sicheres Laden von Klassen
●
Stark typisierte Sprache
●
Keinen direkten Zugriff auf den Speicher
Secure Programming
●
Java Plattform Security:
●
Speicheradressen sind nicht vorhersagbar
●
Auch kein Speicherzugriff durch Bytecode
●
JNI ist unsicher!!!!
●
Exceptions ermöglichen die Reaktion auf Ausnahmen
Secure Programming
●
Security APIs:
●
Java Cryptographie Architecture (JCA)
●
Java Authentication and Authorization Service (JAAS)
●
Java Secure Socket Extension (JSSE)
●
Java GSS (JGSS)
●
Java SASL
●
Public Key Infrastructure
Secure Programming
●
JCA
●
Provider Klasse wählt die Implementierung aus
●
Algorithmen werden über Factorymethods erzeugt
●
Cipher Class
●
MessageDigester
Secure Programming
●
JSSA
●
Subject -> Quelle einer Anfrage, kapselt Credentials
●
Subjects werden mit Principals assoziert
●
Principals kapseln Credentials für Subjects
●
Als Credentials können alle Javaklassen fungieren
●
Login Context authentifiziert, verschiedene Anbieter möglich
Secure Programming
●
Ich danke Ihnen für Ihre Aufmerksamkeit
Herunterladen