Hacker knackt Java für Handys

Sicherheitsarchitektur der J2ME

Im Zentrum der Sicherheitsmechanismen von Java steht der "Bytecode-Verifier". Er überprüft den von Java-Quellen erzeugten Code und stellt Folgendes sicher:

  • Der Bytecode enthält keine illegalen Instruktionen.

  • Er adressiert Objekte nur auf erlaubte Weise.

  • Er greift nicht auf unerlaubte Speicherbereiche zu (keine Stack Over- oder Underflows, Pointer).

  • Er honoriert die Zugriffsprivilegien.

  • Er wird nicht in einer unerwünschten Reihenfolge ausgeführt.

Das Verifizieren des Bytecodes ist in einem Java-Umfeld die zentrale Instanz, um das angepeilte Sicherheitsniveau zu erreichen. J2ME stellt in diesem Zusammenhang einen Sonderfall dar. In "normalen" Laufzeitumgebungen überprüft die Java Virtual Machine (JVM) den Code erst beim Laden. Um allerdings Speicherplatz und Laufzeit auf den mobilen Geräten einzusparen, wird der Bytecode nach dem Kompilieren auf dem Entwicklungssystem "pre-verifiziert". Dies geschieht vor dem Erstellen der JAR-Datei.

Das Resultat weist danach zusätzliche so genannte "Stack-Map-Attribute" auf. Diese "Stack Maps" stellen eine Art Fingerabdruck der Applikation dar und definieren verschiedene Werte für jede Instruktion:

  • die Anzahl der Register,

  • den Systemstatus nach der Abarbeitung (durch Simulation),

  • die Größe des genutzten Stacks

  • oder den Typ des verbundenen Datenobjekts.

Die Überprüfung erfolgt dann zur Laufzeit. Dieses zweiphasige Sicherheitsinstrumentarium aus Pre-Verifier und Stack Map Check zur Laufzeit stellt laut Gowdiak das lohnende Angriffsziel dar. Gelingt die Manipulation dieser Maps, lässt sich die Überwachung ausschalten.