310 likes | 450 Views
Laufzeitumgebungen – Das Beispiel der Java Virtual Machine. Benjamin Leenen Im Rahmen des Seminars zur Übersetzung von künstlichen Sprachen. Agenda. Virtuelle Maschinen als Laufzeitumgebung Die Java Virtual Machine Sicherheit Die Squawk Java Virtual Machine Fazit und Ausblick.
E N D
Laufzeitumgebungen –Das Beispiel der Java Virtual Machine Benjamin Leenen Im Rahmen des Seminars zur Übersetzung von künstlichen Sprachen
Agenda • Virtuelle Maschinen als Laufzeitumgebung • Die Java Virtual Machine • Sicherheit • Die Squawk Java Virtual Machine • Fazit und Ausblick
Virtuelle Maschinen als Laufzeitumgebung • Rechnerarchitektur als Software • Compiler plattformunabhängiger Zwischencode (Bytecode) • Ausführung durch plattformabhängige Virtuelle Maschine (VM): • Interpreter • Übersetzung beim Laden • Just-In-Time Compiler Quelle: Aho u. a., 2000
Agenda • Virtuelle Maschinen als Laufzeitumgebung • Die Java Virtual Machine • Die Programmiersprache Java • Das class-Dateiformat • Speicherbereiche • Verifizierung von class-Dateien • Ausführung der JVM • Sicherheit • Die Squawk Virtual Machine • Fazit und Ausblick
Die Java Virtual MachineDie Programmiersprache Java • Ziel • schnelle und einfach Beherrschbarkeit • Portabilität • Sicherheit • Konzept: • objektorientiert • hoher Abstraktionsgrad • primitive - und Referenzdatentypen • streng getypt • Bezeichner in Unicode • ljava Compiler class • Gängige Java Virtual Machine (JVM): Java HotSpot VM
Agenda • Virtuelle Maschinen als Laufzeitumgebung • Die Java Virtual Machine • Die Programmiersprache Java • Das class-Dateiformat • Speicherbereiche • Verifizierung von class-Dateien • Ausführung der JVM • Sicherheit • Die Squawk Virtual Machine • Fazit und Ausblick
Die Java Virtual MachineDas class-Dateiformat (1/2) ClassFile { u4 magic; u2 minor_version; u2 major_version; 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 attributes_count; attribute_info attributes[attributes_count]; } ClassFile { u4 magic; u2 minor_version; u2 major_version; u2 constant_pool_count; cp_infoconstant_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_infofields[fields_count]; u2 methods_count; method_infomethods[methods_count]; u2 attributes_count; attribute_infoattributes[attributes_count]; }
Die Java Virtual MachineDas class-Dateiformat (2/2) • access_flags Regelung des Zugriffs • fields[] Klassen- und Objektvariablen • methods[] Auszuführender Code in: code[] • constant_pool[] • Verweise auf Klassen, Felder und Methoden • symbolische Verweise in restl. class-Datei
Agenda • Virtuelle Maschinen als Laufzeitumgebung • Die Java Virtual Machine • Die Programmiersprache Java • Das class-Dateiformat • Speicherbereiche • Verifizierung von class-Dateien • Ausführung der JVM • Sicherheit • Die Squawk Virtual Machine • Fazit und Ausblick
Die Java Virtual MachineSpeicherbereiche • JVM-abhängig • Heap • Methodenbereich • Thread-abhängig • PC (Program Counter) Register • Native Methoden Stacks • Java Virtual Machine Stack – umfasst Frames: • Variablenarray • Operandenstack • Verweis auf Konstantenpool
Agenda • Virtuelle Maschinen als Laufzeitumgebung • Die Java Virtual Machine • Die Programmiersprache Java • Das class-Dateiformat • Speicherbereiche • Verifizierung von class-Dateien • Ausführung der JVM • Sicherheit • Die Squawk Virtual Machine • Fazit und Ausblick
Die Java Virtual MachineVerifizierung von class-Dateien (1/2) • Überprüfung auf statische und strukturelle Bedingungen • statisch: Wohlgeformtheit • strukturell: gegenseitige Beziehung von Instruktionen • Bytecode Verifier: • Aufsplitten von code[] in einzelne Bytes • Analyse einzelner Instruktionen • Data-Flow Analyzer • „changed“-Bit für jede Instruktion • gehe zu Instruktion mit Bit auf 1 • Auswirkungen auf Operandenstack und Variablenarray • Bestimmung aller Folgeinstruktionen • Zusammenführung von bisherigem und aktuellem Operandenstack und Variablenarray
Agenda • Virtuelle Maschinen als Laufzeitumgebung • Die Java Virtual Machine • Die Programmiersprache Java • Das class-Dateiformat • Speicherbereiche • Verifizierung von class-Dateien • Ausführung der JVM • Sicherheit • Die Squawk Virtual Machine • Fazit und Ausblick
Die Java Virtual MachineAusführung der JVM (1/2) • Erstmalige Ausführung einer Klasse: Laden, Binden und Initialisieren notwendig • Laden • Auslösung durch andere Klasse • Durchführung: Klassenlader • Bootstrap-Klassenlader: Teil der JVM • nutzerdefinierte Klassenlader: von extern zu laden Quelle: Venners, 2000
Die Java Virtual MachineAusführung der JVM (2/2) • Binden • Verifizierung • Vorbereitung: • Speicherzuweisung für Klassenvariablen • Initialisierung der Speicherbereiche • Auflösung der symbolischen Verweise • Initialisieren: Zuweisung der vorgesehenen Werte zu Klassenvariablen Quelle: Venners, 2000
Agenda • Virtuelle Maschinen als Laufzeitumgebung • Die Java Virtual Machine • Sicherheit • Die Squawk Java Virtual Machine • Fazit und Ausblick
Sicherheit • Hauptkomponenten der Sicherheitsarchitektur: • Bytecode-Verifier • Klassenlader • Sicherheitsmanager • anfängliches Sicherheitsmodell: Sandbox-Modell • vertrauenswürdig: Systemdomäne • ansonsten: Sandbox
SicherheitAktuelles Sicherheitsmodell • Generelle Strategie: Policy-Datei • Rechtevergabe abhängig von Herkunftsort und Signatur • Rechte: Lese-/Schreibzugriff, Verbindungsherstellung • Schutzdomänen • Rechtevergabe an alle Klassen einer Domäne • Zugriff auf Systemressourcen: Systemdomäne • Zugriffskontrolle • Access Controller im Sicherheitsmanager • Zugriffsüberprüfung anhand Policy-Datei • weitere Möglichkeit: Guarded Object
SicherheitSicherheitsrisiken • nachträgliches Verändern von class-Dateien • Hinzufügen von Instruktionen in code[] • Veränderung der Zugriffsrechte in access_flags • Probleme der Policy-Datei: • keine Überprüfung der angegebenen Herkunftsadresse • Policy-Datei einfach veränderbar • Datenbank mit Signaturen vom Nutzer zu pflegen • Zugriffskontrolle nur beim ersten Zugriff
Agenda • Motivation: Flexible Ausführung höherer Programmiersprachen • Virtuelle Maschinen als Laufzeitumgebung • Die Java Virtual Machine • Sicherheit • Die Squawk Java Virtual Machine • Fazit und Ausblick
Die Squawk Java Virtual Machine • für kleine, portable Geräte konzipiert • geringer Ressourcenanspruch • größtenteils in Java geschrieben • lauffähig ohne Betriebssystem – z. B. auf dem SPOT (Sun Small Programmable Object Technology) • verteilte Architektur: • Desktoprechner: Suite Creator • geräteseitige VM
Die Squawk Java Virtual MachineSuite Creator • Konvertierung von class- in suite-Dateien • lsuite-Datei: • 38% der Größe von class-Dateien • kann Klassenstrukturen umfassen • hierarchisch strukturierbar • Serialisierung vor Übertragung • Bytecode-Verifier • Signierung von suite-Dateien Quelle: Simon u. a., 2006
Die Squawk Java Virtual MachineGeräteseitige VM • Betriebssystemfunktionen • Thread Scheduler • Behandlung von Interrupts • Anwendungen als Objekte (Isolates) • Isolierung einzelner Anwendungen • gemeinsame Nutzung von VM-Ressourcen • entferntes Debugging • Serialisierung jedes Zustands möglich • Speicherung • direkt Übertragung an andere Squawk VM Quelle: Simon u. a., 2006
Agenda • Motivation: Flexible Ausführung höherer Programmiersprachen • Virtuelle Maschinen als Laufzeitumgebung • Die Java Virtual Machine • Sicherheit • Die Squawk Java Virtual Machine • Fazit und Ausblick
Fazit und Ausblick • Zielerreichung von Java: • Portabilität durch Kombination von Bytecode und VM • Sicherheit • ausgereifte Mechanismen zur Verifizierung und Zugriffskontrolle • nach wie vor Verbesserungsbedarf • stetiger Entwicklungsprozess • Verbesserung der Sicherheit • Entwicklungen im Bereich kleiner, portabler Geräten • Steigerung der Performance
BackupDie verteilte Architektur der Squawk VM Quelle: Simon u. a., 2006
Backup Sicherheitsarchitektur Quelle: Eckert, 2008
Backup Sicherheit: Policy-Datei grant codeBase "https://www.rman.com/users/bob", signedBy "Duke" { permission java.io.FilePermission "read, write","/bob/temp/*"; permission java.io.FilePermission "read","/joe/temp/"; permission java.net.SocketPermision "connect","*.rman.com"; }; grant {permission java.net.SocketPermission "localhost:1024-","listen";}; Quelle: in Anlehnung an Eckert, 2008
BackupAnwendungsbeispiele für SPOT • Alltag: • SPOT am Herd • SPOT am Auto Warnung, wenn Auto wegfährt und Herdplatten noch heiß sind • Industrielles Umfeld: • Sicherung von wertvollen Gütern • z. B. gegenseitige Containerüberwachung Alarm, wenn Container geöffnet und noch auf dem Transportweg
Backup Code-Beispiel Isolate Isolate isolate = new Isolate ("com.sun.spots.SelfHibernator", url()); isolate.start(); send (isolate, outStream); ... Quelle: Simon u. a., 2006