Fortgeschrittene Aspekte von Software Security VU SS 2005

Slides:



Advertisements
Ähnliche Präsentationen
C Sharp (C#) Martin Saternus Senior Student Partner
Advertisements

der Universität Oldenburg
der Universität Oldenburg
Strategie (Strategy / Policy) Ein objektbasiertes Verhaltensmuster Stephan Munkelt, Stefan Salzmann - 03IN.
DVG Dateien Dateien. DVG Dateien 2 Die Klasse File Die Klasse File stellt die Verbindung zwischen dem Filesystem des Rechners und dem.
Kritische Betrachtung
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
DI Christian Donner cd (at) donners.com
Kapselung , toString , equals , Java API
Progwerkstatt JAVA Klasse, Objekte, Konstruktoren, Methoden
Imperative Programmierung -Entwicklungswerkzeuge
Objektorientierte Programmierung
Spec# Proseminar Assertions im SS 2007 Uni Paderborn Andreas Martens Betreuer: Dipl. Inform. Björn Metzler.
Java 2 Enterprise Edition (J2EE)
Ausnahmen HS Merseburg (FH) WS 06/07.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
Java: Grundlagen der Sprache
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
FH-Hof Fehlerbehandlung Richard Göbel. FH-Hof Konzept Fehler können mit dem Operator throw einer übergeordneten Funktion signalisiert werden. Parameter.
Benötigte Applets Startseite: in HTML-Format Applet auf der Startseite Das Applet, das auf der Startseite geladen wird, wird die vier Buttons und die eine.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 5 Polymorphismus Sommersemester 2003 Lars Bernard.
Das JavaCard-Betriebssystem
Java-AG Ausnahmebehandlung Gerhard Gröger.
Programmieren mit JAVA
Programmieren mit JAVA
Vererbung Spezialisierung von Klassen in JAVA möglich durch
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
Zusammenfassung Vorwoche
PKJ 2005/1 Stefan Dissmann Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Methoden sind mit einem Namen versehene Programmabschnitte besitzen Rückgabetyp, Namen, Parameterliste.
Packages Vortrag : Cornelia Hardt 23. November 1999.
DVG Kommentare1 Kommentare. DVG Kommentare 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht.
DVG Einführung in Java1 Einführung in JAVA.
DVG Klassen und Objekte
EDV Parallelprogrammierung1 Parallelprogrammierung mit JAVA.
DVG Kommentare 1 Kommentare. 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht bis zum Ende der Zeile.
JDBC EDV JDBC.
Java in 9 Folien Besser: Online-Buch Go to Java 2.
© 2005 Pohlig - Taulien Datenströme GK Informatik 1 Datenströme.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Seminar Softwaretechnik Dipl.-Inform. Susanne Jucknath-John
Learning By Doing TCP/IP Netzwerke mit TCP/IP Das Internet verwendet weitgehend das rund 30-jährige TCP/IP-Protokoll (TCP: Transmission Control Protocol,
Seminar aus Softwareentwicklung: Inside Java and .NET
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
HORIZONT 1 XINFO ® Das IT - Informationssystem Java Scanner HORIZONT Software für Rechenzentren Garmischer Str. 8 D München Tel ++49(0)89 / 540.
EPROG Tutorium Einheit 4 Klassen und Objekte. Wiederholung Schleifen do... while while for break/continue Strings String char Methoden für Strings Arrays.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
HORIZONT 1 XINFO ® Das IT - Informationssystem PL/1 Scanner HORIZONT Software für Rechenzentren Garmischer Str. 8 D München Tel ++49(0)89 / 540.
Learning By Doing WebStart Buch S.765 Verfahren, Java-Applikationen über das Internet an die Benützer zu verteilen. Die Java-Applikation wird auf dem.
Objektorientierte Programmierung
ac.at1 EPROG Tutorium #1 Philipp Effenberger Einführung in Java Schlüsselworte Datentypen.
EPROG Tutorium #4 Philipp Effenberger
EPROG Tutorium #6 Philipp Effenberger
EPROG Tutorium #3 Philipp Effenberger
Neuerungen in Java 5/6/7. Stefan Bühler für InfoPoint Überblick Java 5 neue Sprachfeatures Erweiterungen Klassenbibliothek Java 6 Erweiterungen.
Learning By Doing Ausnahmebehandlung Exceptions (Ausnahmebehandlung) Typische Fehlverhalten zur Laufzeit: s. Buch S. 287ff -Verwendung von null-Objekten.
CuP - Java Achte Vorlesung Entspricht ungefähr Kapitel 4.1 des Skriptums Montag, 28. Oktober 2002.
Informatik I : Software höhere Programmiersprachen Java Klassen: hat Methoden (Funktionen) und Daten (Variablen) es kann mehrere Klassen geben nur eine.
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
Ausnahmen Vorlesung besteht aus zwei Teilen Programmierung (4 SWS)
Java-Kurs Übung Besprechung der Hausaufgabe
Java Programme nur ein bisschen objektorientiert.
JAVA - Einführung. © Übersicht Hintergrund und Geschichte Wie sieht ein JAVA Programm aus ? Was ist ein JAVA Programm ? Wie schreibt/übersetzt.
Implementieren von Klassen
 Präsentation transkript:

Fortgeschrittene Aspekte von Software Security 188.313 VU SS 2005 Inhalt Java als Beispiel für eine sichere Sprache

Java als sichere Sprache Inhalt: Sicherheit durch Sprachkonstrukte Sicherheit in der Laufzeitumgebung Das Sandboxkonzept Fortgeschrittene Sicherheitsaspekte APIs zur Entwicklung sicherer Software Hier grundsätzliches zu P-Sprachen und deren Sicherheit Institut für Softwaretechnik und Interaktive Systeme

Grundsätzliches Java ist: Architektur und Plattformneutral Typisiert und ohne Präprozessor-Semantik Vollständig Objektorientiert (Außer prim. Types) In Java wird/werden: Casts zur Compile und/oder Laufzeit geprüft Pointerarithmetik nicht unterstützt Fehler restriktiv abgefangen Nicht benötigte Objekte durch GC gelöscht Bytecode, nicht Maschinencode -> in VM Jedes Objekt besitzt einen Typen Keine Präprozessor Semantik -> nicht möglich durch #define private public gesamten Zugriffsschutz außer Kraft zu setzen (C++) Auch für primäre Typen Wrapper Klassen zur Verfügung stehen Keine Pointerarithmetik -> nicht möglich Zeiger zu „verbiegen“ um zb Zugriff auf private Variablen zu habe Keine Pointerarithmetik -> Falsch gesetzte Zeiger nicht das gesamte System destabilisieren Sehr restriktive Vorgabe catch-declare-Erfordernis Sicherheitslücke der Speicherüberlaufe durch GC gelöst -> keine Referenzen mehr auf das Objekt -> unnötig –> gelöscht Institut für Softwaretechnik und Interaktive Systeme

Vierstufiges Sicherheitskonzept durch API Sicherheit Der Sprache Sicherheit der VM Erste Ebene, innerhalb der Programmiersprache selbst (wie in anderen Programmiersprachen) Zweite Ebene: Angebot unterschiedlichen Bibliotheken zur Implementierung krypt. Fkt. Rasche und einfache Entwicklung In der VM wird das Programm vor und während der Ausführung überwacht -> nicht möglich Klassen zu verwenden die zb nicht der java Spezifikation entsprechen Durch Aktivierung von entsprechenden Komponenten eine sehr feingranulare Rechtevergabe möglich Laufzeitsicherheit Institut für Softwaretechnik und Interaktive Systeme

Sicherheit durch Sprachkonstrukte (1) Verfügt über fund. Möglichkeiten der Objektorientierung wie Encapsulation & Information Hiding durch Specifier und Packages Private Zugriff nur innerhalb der def. Klasse Protected Zugriff nur durch Klasse selbst, Klassen des gleichen Packages und abgeleitete Klassen innerhalb des gleichen Packages Public Jeder hat Zugriff Default Klasse selbst sowie Klassen im gl. Package fundamentale Möglichkeiten der OO werden angeboten durch Specifier und Packages wie Kapselung Verstecken von Info. Bsp. Zugriffsspezifier Institut für Softwaretechnik und Interaktive Systeme

Sicherheit durch Sprachkonstrukte (2) Final Konstanten durch final-Deklaration Unterbindung von Unterklassenbildung durch Anwendung von final auf Klassenebene wie z.B. in java.lang.String Final auf Methodenebene verhindern das Überschreiben von Methoden in abgeleiteten Klassen Keyword FINAL -> verschiedene Maßnahmen zum Schutz von Information Ebene der Datentypen: Konstanten Klassenebene: keine Unterklassenbildung Methodenebene: kein Überschreiben der Methode durch Unterklassen Institut für Softwaretechnik und Interaktive Systeme

Architektur der Laufzeitumgebung Integraler Bestandteil von java ist VM Dient Programmen als Ablaufumgebung Ist Kern der Infrastruktur eines in java geschriebenen Programms Institut für Softwaretechnik und Interaktive Systeme

Der Classloader Institut für Softwaretechnik und Interaktive Systeme Aufgabe: Laden des Bytecodes in die VM Besitzt viel Meta Information über Klasse als andere Komponenten Zb bekannt von welcher Quelle eine Klasse geladen wurde Weiß als einziger ob Klasse lokal oder von einem Server kommt Weiß als einziger ob Klasse eine digitale Signatur besitzt Classloader kann nicht umgangen werden Graphik: Ladevorgang durch den Classloader (Anwendung lädt Klasse dynamisch) Institut für Softwaretechnik und Interaktive Systeme

Der Bytecodeverifier (1) Muss explizit mit java –verify aktiviert werden Überprüft Format der *.class Datei Final-Statements Mehrfachvererbung Casts Initalisierungen Andere undefinierte Zustände Bestandteil der VM Ist nicht als Klasse existent -> nicht mit OO Techniken bearbeitbar Institut für Softwaretechnik und Interaktive Systeme

Der Bytecodeverifier (2) Beispiel: Public class ECKarte{ public short PIN = 1234; } Public class Testprogramm{ ECKarte karte = new ECKarte(); System.out.println(karte.PIN); Wird hier in ECKarte PIN auf private geändert und dann nur ECKarte übersetzt hat man vollen Zugriff auf PIN. Lösung: Verifier oder Build-Agent „unrealistische“ -> da Build Agents Fehler bemerken Institut für Softwaretechnik und Interaktive Systeme

Das Sandboxkonzept (1) Java Programm darf nur mit den Ressourcen die explizit erlaubt wurden Bei lokalen Programmen muss Security Manager explizit aufgerufen werden, fremder Code läuft immer in einer Sandbox. Kann jedoch durch Signierung lokale Rechte erlangen Granulär konfigurierbar durch Policy Dateien „Sandbox“ = Synonym für Sicherheitskonzept in java Immer vorhanden wenn SecurityManager installiert ist = Mutter von Kind (Programm) das Spielzeuge in die Sandkiste gibt Institut für Softwaretechnik und Interaktive Systeme

Das Sandboxkonzept (2) Institut für Softwaretechnik und Interaktive Systeme

Security Manager (1) Kern-API in java.lang im Singleton Pattern Kontrolliert Zugriff auf Ressourcen (Datei, Verbindung zu anderem PC,…) Expliziter Aufruf nötig Java –Djava.security.manager Programm System.setSecurityManager(new SecurityManager()); Durch digitale Signatur Möglichkeit erweiteter Rechte Anwendung mit SecurityManager besitzt keine Rechte mehr ab dem Zeitpunkt der Installation Institut für Softwaretechnik und Interaktive Systeme

Security Manager (2) z.B. wird werden beim Lesen einer Datei zuerst die Leserechte durch die Klasse FileInputStream geprüft Dabei wird zuerst das Vorhandensein eines Security Managers geprüft und anschließend über security.checkRead(file) die Zugriffsrechte geprüft Institut für Softwaretechnik und Interaktive Systeme

Der AccessController Erledigt seit Java 2 die echte Rechteüberprüfung hinter dem SecurityManager SecurityManager wurde aus Gründen der Rückwertskompatibilität nicht entfernt Baut auf folgenden Konzepten auf Code Source – Von wo kommt der Code? Permissions – Kapselung von Rechten Policy – Zusammenfassung von Permissions für bestimmte Teile des Codes Protection Domains – Zusammenfassung von Code Source und deren Rechte Vergabe der Rechte über textbasierte Konfigurationsdateien. -> Vorteil: bei Veränderung der Rechte keine Erneute Kompilierung oder Veränderung am Programm selbst AccessController ist immer installiert wenn SecurityManager installiert ist, kann aber auch ohne verwendet werden Code Source: Klasse von Server XY hat folgende Rechte Permissions: Kapselt Rechte bestimmter Aktionen Institut für Softwaretechnik und Interaktive Systeme

Rechtevergabe Rechte müssen explizit vergeben werden Systemweit im policy.file unter /jre/lib/security oder als Property beim Applicationsstart mit java.security.policy=Dateiname Entweder händisch oder über Policytool (bin Verz. der SDK Installation) z.B voller Dateissystemzugriff: grant codeBase “file:${/}c:${/}${/}testapp${/}*“ { permission java.io.FilePermission “c:${/}test.txt“,“read, write, delete, execute“;}; KAPITEL AUS Institut für Softwaretechnik und Interaktive Systeme

Serialisierung von Objekten (1) Ganzes Objekt wird ser. auch private Variablen usw. Diverse Angriffsszenarien Möglichkeit zum Schutz: Schlüsselwort transient: Beim Deser. wird mit Standardbelegungen initialisiert. Transiente Variablen können dann z.B. über krypt. Funktionen behandelt werden. (Methoden readObject, writeObject) defaultWriteObject und defaultReadObject lesen/schreiben nur jene Daten aus dem Strom, welche nicht statisch/transient sind. !Konkrete Sicherheitsaspekte in java! Ser. = Objektrepräsenatation in eine Reihe von Bytes geschrieben -> auf Festplatte abgelegt oder über Netzwerk zu anderem Rechner (RMI) Programmierer selbst bestimmt ob ein Objekt serialisierbar ist oder nicht, Ser. Ist vererbbar -> Gedanken machen welches Objekt ser. werden sol Angriff: Zugriff auf Bytedarstellung Veränderung der Bytedarstellung -> bei Deserialisierung falsche Werte oder zerstört Institut für Softwaretechnik und Interaktive Systeme

Serialisierung von Objekten (2) serialPersistentFields bieten die Möglichkeit anzugeben welche Daten ser. werden dürfen. Keine Implementierung von readObject und writeObject Methoden nötig z.B. bei 2 Strings User/Passwort Private static final ObjectStreamField[] serialPersistentFields = { new ObjectStreamField(user, String.class) }; Institut für Softwaretechnik und Interaktive Systeme

Exceptionhandling Catch-or-Specify-Requirement Fehler: leichtere Exceptions und schwere Errors (führen immer zum Abbruch) Besonders Wichtig: finally Dieser Code wird auf jeden Fall ausgeführt, d.h. auch bei einer Exception Aufräumarbeiten (z.B.: To many open Cursors, DB-Verbindung) Besonders wichtig bei Kryptografie usw. z.B. um temporäre Passwörter zu löschen Institut für Softwaretechnik und Interaktive Systeme

Signaturen Sichert z.B. Applets, Jar-Archive, JNLP Wahrung der Integrität (Code kann trotzdem „böse“ sein) Kann für Rechtevergabe eingesetzt werden vgl. Sandbox JAR Dateien durch jarsigner signieren (bin Verzeichnis der SDK Inst.) Digitale Signaturen mit keytool erstellen (bin Verzeichnis der SDK Inst.) z.B. keytool –genkey – keystore TestStore –validity 365 –alias gego Institut für Softwaretechnik und Interaktive Systeme

Erstellung eines Schlüssels(DSA) C:\JBuilder9\jdk1.4\jre\bin>keytool -genkey -keystore TestStore -validity 365 -a lias gego Geben Sie das Keystore-Passwort ein: geheim Wie lautet Ihr Vor- und Nachname? [Unknown]: Gernot Goluch Wie lautet der Name Ihrer organisatorischen Einheit? [Unknown]: IFS Wie lautet der Name Ihrer Organisation? [Unknown]: TU Wie lautet der Name Ihrer Stadt oder Gemeinde? [Unknown]: Wien Wie lautet der Name Ihres Bundeslandes oder Ihrer Provinz? Wie lautet der Landescode (zwei Buchstaben) f³r diese Einheit? [Unknown]: AT Ist CN=Gernot Goluch, OU=IFS, O=TU, L=Wien, ST=Wien, C=AT richtig? [Nein]: j Geben Sie das Passwort für <gego> ein. (EINGABETASTE, wenn Passwort dasselbe wie für Keystore): Institut für Softwaretechnik und Interaktive Systeme

Versiegelung von Jar Archiven Legt fest, dass alle Klassen aus einem Package aus derselben JAR-Datei geladen werden müssen Z.B: Vermeidung von Versionskollisionen und bösartigem eingeschleustem Code Angabe der Versiegelung in Manifest Datei z.B.: Name: at/tu/ifs/kryptoapp/ Sealed: true Institut für Softwaretechnik und Interaktive Systeme

Java Native Interface Verlust jeglicher Kontrolle durch Security Manager und Laufzeitumgebung Voller Zugriff des C oder C++ Codes auf Übergabeparameter Immutable Objekte wie z.B. final dekl. Klassen Zugriffsspezifierer bei Variablen wie z.B. private JNI mit Bedacht einsetzen! Institut für Softwaretechnik und Interaktive Systeme

APIs zur Entwicklung sicherer Software Seit Java 1.4 im Standardumfang: Java Cryptography Architecture (JCA) Java Cryptography Extension (JCE) Java Authentication and Authorisation Services (JAAS) Java Sercure Socket Extension (JSSE) Institut für Softwaretechnik und Interaktive Systeme

Java Cryptography Architecture Offener Ansatz Legt zwar Schnittstellen fest, jedoch sind krypt. Basisbausteine leicht austauschbar -> Cryptographic Service Provider(CSP) können Funkt. erweitern Applikation Core API Java Cryptography Extensions Service Provider Interface Sun CSP1 CSP2 Institut für Softwaretechnik und Interaktive Systeme

Bsp. CSP – RSA - encrypt import javax.crypto.*; public class RSA{ private Cipher cip; public String encrypt(String plaintext, PublicKey pk)throws Exception{ byte[] plaintextBytes = plaintext.getBytes(); try { cip.init(Cipher.ENCRYPT_MODE, pk); //the encryption byte[] chiffreBytes = cip.doFinal(plaintextBytes); //convert byte array to String BASE64Encoder encoder = new BASE64Encoder(); String chiffre = encoder.encodeBuffer(chiffreBytes); } catch (Exception e) { throw new Exception("Error encrypting String: " + e); return chiffre; CSP von www.bouncycastle.org zur Verwendung von RSA

Bsp. CSP – RSA - decrypt public String decrypt(String chiffre, PrivateKey privkey)throws Exception{ try { //converts String to byte array byte[] chiffreBytesB64 = chiffre.getBytes(); BASE64Decoder decoder = new BASE64Decoder(); byte[] chiffreBytes = decoder.decodeBuffer(new String(chiffreBytesB64)); //initialize Cipher cip.init(Cipher.DECRYPT_MODE, privkey); //the decryption byte[] plaintextBytes = cip.doFinal(chiffreBytes); //convert byte array to String String plaintext = new String(plaintextBytes); catch (Exception e) { throw new Exception("Error decrypting String: " + e); } return plaintext ; CSP von www.bouncycastle.org zur Verwendung von RSA

KeyGenerator Aufruf Bsp.: buildSecretKey(“DESede“, 1024) public SecretKey buildSecretKey(String algorithm, int algospec){ try{ KeyGenerator kg = KeyGenerator.getInstance(algorithm); kg.init(algospec); return kg.generateKey(); }catch(NoSuchAlgorithmException nosuchalgoex){ System.out.println("Error building secretkey: "+nosuchalgoex); return null; } Aufruf Bsp.: buildSecretKey(“DESede“, 1024) Erzeugt DES Key

KeyPairGenerator public KeyPair buildKeyPair(String algorithm, int algospec){ try{ KeyPairGenerator kpg = KeyPairGenerator.getInstance(algorithm); kpg.initialize(algospec); return kpg.generateKeyPair(); }catch(NoSuchAlgorithmException nosuchalgoex){ System.out.println("Error building secretkey: "+nosuchalgoex); return null; }

Anwendungsbsp. – 3DES https://sourceforge.net/projects/crypty/

Anwendungsbsp. - RSA https://sourceforge.net/projects/crypty/

Java Cryptography Extension Seit Version 1.4, nachdem USA Export Beschränkungen gelockert haben, fester Bestandteil des JDK. Erweiterung der JCA um Sammlung von APIs zur Implementierung versch. Verschlüsselungsalg. und Schlüsseltypen. Unterstützt Robuste Authentifizierungs-Mechanismen Institut für Softwaretechnik und Interaktive Systeme

Java Authentication and Authorization API, welche als Framework, den Programmierer bei der feingranularen Zugriffskontrolle über Benutzer und Gruppen. Offene Schnittstelle, Loginsystem ist unabhängig von der Methode zur Authentifikation. Dadurch können über das Plugable Authentication Module(PAM) verschiedene Technologien wie z.B. Chipkarten, Kerberos, RSA usw. verwendet werden Institut für Softwaretechnik und Interaktive Systeme

Java Secure Socket Extension API bietet SSL Verschlüsselung für beliebige Kommunikationsprotokolle wie z.B. HTTP, Telnet… Sowohl API als auch Referenzimplementierung in Java 1.4 enthalten SSL 3.0, TLS 1.0 Über SPI können Methoden wieder getauscht werden Möglichkeit durch TrustManager in PKI-Umgebungen zu integrieren. Institut für Softwaretechnik und Interaktive Systeme

Ist Java sicherer als andere Sprachen? Starke Unterstützung von Objektorientierung, sicheren Sprachkonstrukten und krypt. APIs Jedoch muss wie überall der Entwickler wissen in welchem Kontext, welche Möglichkeiten zur Verfügung stehen. Weakest-Link Theorem auch hier gültig Schwachstelle ist in Java eher der Entwickler als die Sprache an sich Institut für Softwaretechnik und Interaktive Systeme

Literaturempfehlung Entwicklung sicherer Software von Michael Englbrecht Spektrum Verlag ISBN: 3-8274-1432-6 Preis: 49.95 € http://www.addon-software.de/javasicherheit Institut für Softwaretechnik und Interaktive Systeme