Javas Sicherheitsarchitektur

Die Kolumne "Under The Hood" dieses Monats ist die erste einer vierteiligen Reihe über das Sicherheitsmodell von Java. Die vier Artikel konzentrieren sich auf die Sicherheitsinfrastruktur, die in die Java Virtual Machine (JVM) und die Bibliothek java.lang integriert ist. Dieser erste Artikel gibt einen Überblick über das Sicherheitsmodell und beschreibt die Sicherheitsfunktionen der JVM.

Warum Sicherheit?

Das Sicherheitsmodell von Java ist eines der wichtigsten Architekturmerkmale der Sprache, das es zu einer geeigneten Technologie für Netzwerkumgebungen macht. Sicherheit ist wichtig, da Netzwerke einen potenziellen Angriffsweg für jeden an sie angeschlossenen Computer bieten. Dieses Problem tritt besonders in einer Umgebung auf, in der Software über das Netzwerk heruntergeladen und lokal ausgeführt wird, wie dies beispielsweise bei Java-Applets der Fall ist. Da die Klassendateien für ein Applet automatisch heruntergeladen werden, wenn ein Benutzer die enthaltene Webseite in einem Browser aufruft, ist es wahrscheinlich, dass ein Benutzer auf Applets aus nicht vertrauenswürdigen Quellen stößt. Ohne Sicherheit wäre dies eine bequeme Möglichkeit, Viren zu verbreiten. Die Sicherheitsmechanismen von Java tragen daher dazu bei, Java für Netzwerke geeignet zu machen, da sie das erforderliche Vertrauen in die Sicherheit von Netzwerk-Mobilcode schaffen.

Das Sicherheitsmodell von Java konzentriert sich auf den Schutz der Benutzer vor feindlichen Programmen, die von nicht vertrauenswürdigen Quellen in einem Netzwerk heruntergeladen wurden. Um dieses Ziel zu erreichen, bietet Java eine anpassbare "Sandbox", in der Java-Programme ausgeführt werden. Ein Java-Programm darf nur in seiner Sandbox abgespielt werden. Es kann alles innerhalb der Grenzen seines Sandkastens tun, aber es kann keine Maßnahmen außerhalb dieser Grenzen ergreifen. Die Sandbox für nicht vertrauenswürdige Java-Applets verbietet beispielsweise viele Aktivitäten, darunter:

  • Lesen oder Schreiben auf die lokale Festplatte
  • Herstellen einer Netzwerkverbindung zu einem beliebigen Host mit Ausnahme des Hosts, von dem das Applet stammt
  • Neuen Prozess erstellen
  • Laden einer neuen dynamischen Bibliothek und direktes Aufrufen einer nativen Methode

Das Sicherheitsmodell von Java verhindert, dass heruntergeladener Code bestimmte Aktionen ausführen kann, und schützt den Benutzer vor der Bedrohung durch feindlichen Code.

Die Sandbox definiert

Traditionell musste man der Software vertrauen, bevor man sie ausführte. Sie haben Sicherheit erreicht, indem Sie darauf geachtet haben, nur Software aus vertrauenswürdigen Quellen zu verwenden, und regelmäßig nach Viren gesucht haben, um sicherzustellen, dass die Dinge sicher sind. Sobald eine Software Zugriff auf Ihr System hatte, hatte sie die volle Kontrolle. Wenn es böswillig war, konnte es Ihrem System großen Schaden zufügen, da die Laufzeitumgebung Ihres Computers keine Einschränkungen für die Software aufwies. Im traditionellen Sicherheitsschema haben Sie also versucht, zu verhindern, dass bösartiger Code überhaupt Zugriff auf Ihren Computer erhält.

Das Sandbox-Sicherheitsmodell erleichtert die Arbeit mit Software, die aus Quellen stammt, denen Sie nicht vollständig vertrauen. Anstatt die Sicherheit zu gewährleisten, indem Sie verhindern müssen, dass Code, dem Sie nicht vertrauen, jemals auf Ihren Computer gelangt, können Sie mit dem Sandbox-Modell Code aus einer beliebigen Quelle begrüßen. Während der Ausführung verhindert die Sandbox, dass Code aus nicht vertrauenswürdigen Quellen Aktionen ausführt, die möglicherweise Ihr System beschädigen könnten. Der Vorteil ist, dass Sie nicht herausfinden müssen, welchem ​​Code Sie vertrauen können und welchen nicht, und dass Sie nicht nach Viren suchen müssen. Die Sandbox selbst verhindert, dass Viren oder anderer schädlicher Code, den Sie in Ihren Computer einladen, Schaden anrichten.

Der Sandkasten ist allgegenwärtig

Wenn Sie skeptisch sind, müssen Sie davon überzeugt sein, dass eine Sandbox keine Lecks aufweist, bevor Sie darauf vertrauen, dass sie Sie schützt. Um sicherzustellen, dass die Sandbox keine Lecks aufweist, umfasst das Sicherheitsmodell von Java alle Aspekte seiner Architektur. Wenn es Bereiche in Javas Architektur gäbe, in denen die Sicherheit schwach ist, könnte ein böswilliger Programmierer (ein "Cracker") diese Bereiche möglicherweise ausnutzen, um die Sandbox zu "umgehen". Um die Sandbox zu verstehen, müssen Sie sich verschiedene Teile der Java-Architektur ansehen und verstehen, wie sie zusammenarbeiten.

Die grundlegenden Komponenten, die für die Sandbox von Java verantwortlich sind, sind:

  • In die virtuelle Java-Maschine (und die Sprache) integrierte Sicherheitsfunktionen
  • Die Klassenladearchitektur
  • Der Klassendateiverifizierer
  • Der Sicherheitsmanager und die Java-API