Sicherheit und Zugriffsschutz


... [ Seminar WWW und JAVA] ... [ Thema Java Virtual Machine ] ... [ Multithreading ] ...

Übersicht: Sicherheit und Zugriffsschutz


Sicherheitskonzept von Java


Bytecode Verifier

Die Überprüfung des Bytecode erfolgt in 4 Schritten.
  1. Schritt: Überprüft die eigentliche Struktur des Class Files. Die ersten vier Byte müssen die richtige Magicnumber enthalten, alle Attribute müssen die richtige Länge haben und das File darf nicht abgeschnitten oder zu lang sein.
    
    ClassFile {
    	u4 magic;					0xCAFEBABE
    	u2 minor_version				3
    	u2 major_version				45
    	u2 constant_pool_count;
    	cp_info constant_pool [constant_pool_count-1];
    	u2 access_flags;
    	u2 this_class;
    	u2 super_class;
    	u2 interfaces_count;
    	u2 interfaces[interfaces_count];
    	u2 fields_count;
    	field_info fields[fields_count];
    	u2 methods_count;
    	method_info methods[methods_count];
    	u2 attribute_count;
    	attribute_info attributes[attributes_count];
    }
    
    

  2. Schritt: Dieser Schritt erfolgt nach dem Linken und überprüft alles, was überprüft werden kann, ohne den Code direkt zu betrachten.

  3. Schritt: Dieser Abschnitt stellt den eigentlichen Bytecode Verifier dar.

    Erst wird sichergestellt, daß


    Danach wird eine Datenfluß-Analyse des Codes der Klasse durchgeführt. Hierzu durchläuft der Bytecode-Verifier den Code und betrachtet für jede Instruktion die Auswirkungen auf den Operanden-Stack und die lokalen Variablen um sicherzustellen, daß für jede Instruktion:

  4. Schritt: Diese Überprüfungen geschehen erst beim Ausführen des Codes. Wenn das erste mal eine Instruktion ausgeführt wird, die auf einen bestimmten Typ referenziert, wird
    Das erste Mal, wenn eine Methode aufgerufen oder auf ein Feld zugegriffen wird, werden folgende Aktionen ausgeführt:


Zugriffsschutz

Applets die über das Netz geladen werden, haben keinerlei Zugriff auf das lokale Filesystem des Client.
Sie dürfen keine Netzwerkverbindungen aufbauen, außer zu dem Ursprungshost.
Übers Netz geladenen Applets ist es nicht möglich Programme auf dem Client auszuführen, Libraries zu laden oder native Calls zu definieren.
Eine Ausnahme bildet Sun’s Appletviewer, der auf bestimmte in einer "access control list" freigegebenen Dateien zugreifen darf.
Applets haben durch Aufruf von System.getProperty(key) Zugriff auf bestimmte System Umgebungsvariablen:
       Variable              Bedeutung
       java.version          Java Versionsnummer
       java.vendor           Java herstellerspez. String
       java.vendor.url       Java Hersteller URL
       java.class.version    Java class version number
       os.name               Betriebssystem Name
       os.arch               Betriebssystem Architecture
       file.separator        File Separator (z.B., "/")
       path.separator        Path Separator (z.B., ":")
       line.separator        Line Separator (z.B., crlf)
Folgende Umgebungsvariablen können von Applets nicht gelesen werden:
       java.home             Java Installation Verzeichnis
       java.class.path       Java Klassenpfad
       user.name             Account Name des Anwenders
       user.home             Homedirectory des Anwenders
       user.dir              aktuelles Arbeitsverzeichnis des Anwenders


Historie der Sicherheitslücken

Illegal type cast Angriff (2. Juni 1996)
Es wurde ein Weg gefunden, die Zuweisung von Objekten und ihre Zusammenarbeit zu manipulieren, um das Java Typsystem zu unterlaufen.

Erneuter ClassLoader Angriff (18. Mai 1996)
Es wurde erneut ein Weg gefunden die Restriktionen zu umgehen, um einen eigenen ClassLoader zu erstellen. Dadurch konnten Klassen definiert und ausgeführt werden, die normalerweise nicht ausgeführt worden wären.

Feindliche Applets (April 1996)
Im Web tauchten Seiten mit feindlichen Applets auf, die böswillig Resourcen auf dem Client blockieren.

URL name resolution Angriff (April 1996)
In einer speziellen Firewall-geschützten Netzwerkkonfiguration ist es möglich, daß ein von einem Client innerhalb der Firewall geladenes Applet fähig ist, eine Verbindung zu einem Host außerhalb der Firewall aufzubauen.

Fehler in der Implementierung des Bytecode Verifiers (März 1996)

Fehler in der Implementierung des ClassLoaders (März 1996)
Ein Fehler in der Implementierung des ClassLoaders machte es möglich illegalen Bytecode zu laden, der dann dazu benutzt werden konnte eine Klasse zu laden, die durch einen absoluten Pfad referenziert wurde.

DNS Angriff (Februar 1996)
Angriff auf das Applet Sicherheitsmodell, der darauf basiert, wie der Applet Securitymanager DNS (Domain Name Server) benutzt um Namen IP-Adressen zuzuordnen.


... [ Seminar WWW und JAVA ] ... [ Thema Java Virtual Machine ] ... [ Sicherheit und Zugriffsschutz ] ... [ Multithreading ] ...