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