Java vs. Sandbox

JavaEngel

Mitglied
Hallo liebe Java-Entwikler,

Also erstmal möchte ich euch sagen das Ihr euch für die schönste Sprache entschieden habt ^^

Meine Frage:
Kann ich mit Java erkennen ob mein Programm in einer Sandbox läuft?


Danke ;-)
 
Mhm, ich würd einfach irgendeinen Zugriff machen, den du nur darfst wenn du außerhalb der eigentlichen Sandbox bist. Bekommst du eine AccessControllException weißt du Bescheid.

Vielleicht gibts ja noch schönere Möglichkeiten, für sowas ist dann meist Thomas verantwortlich ;)

Chriz
 
Mhm, ich würd einfach irgendeinen Zugriff machen, den du nur darfst wenn du außerhalb der eigentlichen Sandbox bist. Bekommst du eine AccessControllException weißt du Bescheid.

Vielleicht gibts ja noch schönere Möglichkeiten, für sowas ist dann meist Thomas verantwortlich ;)

Chriz


Die Idee währe richtig gut, wenn sie nicht einen gewaltigen Denkfehler beinhalten würde. Ich bedanke mich erstmal für deine Meinung, ich schätze es sehr und freue mich über jeden Beitrag aus der Community.

Die Funktionsweise einer Sandbox ist unglaublich simpel und kaum offen für Lücken.

Es gibt zwei globale Rechte die das OS dem Benutzer zur Verfügung stellt. Die Lese und die Schreib -Rechte.

Bei einer Sandbox gibt es weiterhin beide Rechte Arten, allerdings führt die eine nicht zum gewünschten Ziel wie vom OS vorgesehen!


Bitte den nachfolgenden Text lesen und die Abbildung genauer betrachten.


sandbox.bmp.png


Obere Zeichnung:
Links sind die Applikationen abgebildet. Rechts der Datenträger.
Die zwei Pfeile dazwischen symbolisieren die Lese- & Schreib-Rechte. Wie man sieht führen beide auf dem direkten Wege und von A nach B und zurück.

untere Zeichnung:
Links sind die Applikationen abgebildet. Rechts der Datenträger. In der Mitte sieht man die Sandbox. Diese erkennt die Befehle vom OS und greift direkt auf die API des installieren Betriebssystems zu. Wenn nun der Befehl kommt das eine Datei gelesen werden soll wird dieser Befehl einfach weitergereicht. Im übergebenen Parameter ist ja schließlich der richtige Pfad mitgegeben. Sollte aber nun eine Methode aufgerufen werden, die gerne einige 0en und 1en auf die Platte schreiben möchte (es gibt keinen unterschied zwischen dem direkten schreiben einer Datei oder einem Eintrag in die Registriere), wird dies sofort von der Sandbox registriert. Nun wird der übergebene Pfad einfach durch einen anderen ersetzt. Dieser wird streng genommen gar nicht ersetzt sondern am Anfang um einen kleinen Eintrag erweitert.


Aus dem Pfad. C:Programme\Windows\System32\Trojaner.exe

wird C:Sandbox\[Computername]\Programme\Windows\System32\Trojaner.exe

Alles was sich unter C:Sandbox befindet wird ebenfalls umgelenkt. Somit kommt nichts aus dem Verzeichnis raus.


Dein Denkfehler ist klar ersichtlich (zumindest wenn man mit der Funktionsweise vertraut ist) Egal welche Datei ich lese, ich werde immer an die echte Datei rankommen. Ein Virus der sich in der Sandbox befindet kann uneingeschränkt eine Verbindung zu einem Server aufnehmen und meine Dateien versenden! Meine originalen Daten!
 
Mhm, irgendwie versteh ich dich nicht.
Ich habe Testweise mal ein Applet geschrieben, welches versucht, eine Datei zu erzeugen (new File("c:\\").createNewFile()).

Anschließend bekam ich o.a. Fehlermeldung. Als ich das Applet signiert hatte, bekam ich diese Meldung nicht mehr.

Das hier habe ich auch aus der Doku raus kopiert...

This exception is thrown by the AccessController to indicate that a requested access (to a critical system resource such as the file system or the network) is denied.

The reason to deny access can vary. For example, the requested permission might be of an incorrect type, contain an invalid value, or request access that is not allowed according to the security policy. Such information should be given whenever possible at the time the exception is thrown.


Java:
		try{
			FilePermission perm = new FilePermission("/temp/testFile", "read");
			AccessController.checkPermission(perm);
		}catch(AccessControlException e){
			System.out.println("Sandbox?");
		}
 
Zuletzt bearbeitet:
Das ist normal, Applets können keine Daten schreiben, zumindest nicht auf dem Client.

Das hat zwar auch was mit dem Sandkasten Prinzip zu tun allerdings muss Java noch weitere Sicherheitsregeln einhalten.
 
Zuletzt bearbeitet:
Hallo,

sowas wie eine Sandbox (eine eingeschränkte Umgebung) gibts IMHO nicht nur bei Applets. Du kannst auch eine normale
Standalone Applikation oder eine Server Anwendung in einer solchen geschützten Umgebung ablaufen lassen, in dem
ein entsprechender SecurityManager (System.setSecurityManager()) verwendet wird. In der Java SE Standard Lib sind
an den entsprechenden Stelen (Beispielsweise Festplatten, Netzwerkzugriff, ClassLoading) entsprechende Routinen hinterlegt
die vor einer solchen Aktion (manchmal auch indirekt via java.security.AccessController.doPrivileged(...))
immer den entsprechenden SecurityManager um Erlaubnis bitten.

Beispielsweise:
java.io.File.createNewFile():
Java:
public boolean createNewFile() throws IOException {
    SecurityManager security = System.getSecurityManager();
    if (security != null) security.checkWrite(path);
    return fs.createFileExclusively(path);
    }
etc.

Wenn System.getSecurityManager() nicht null zurück gibt kannst du davon ausgehen, dass du in einer potentiell
eingeschränkten Umgebung läufst.

Beim initialisieren der Java Laufzeitumgebung werden verschiedene .policy Files ausgewertet in denen die "Rechte" deklarativ beschrieben sind, auf diese Information greift der SecurityManager dann zurück.
In Applets wird beispielsweise der sun.applet.AppletSecurity verwendet.

Gruß Tom
 
oooooooooohhhhhhhhhhhhhhhhhhhhhhhhhh :suspekt:

Ich hab vergessen was zu erwähnen, deswegen konnte der User gerade meine sehr gute Beschreibung auch nicht verstehen. Ich meine eine echte Sandbox wie Sandboxie oder VMWare oder so. Aber in reinem Java wird das nicht gehen, ich sollte zu den C-lern gehen oder zu den Bat-lern ^^
 
Hallo,

na ja, da hab ich aber schon bessere "Erklärungen" gelesen.

Java:
Also erstmal möchte ich euch sagen das Ihr euch für die schönste Sprache entschieden habt
Das ist relativ ;-)

Im speziellen fall von VMWare gibts IMHO schon Möglichkeiten festzustellen, ob man in einer solchen Umgebung läuft oder nicht. Beispielsweise mit dem VMWare SDK:
http://www.vmware.com/support/developer/vc-sdk/

Gruß Tom
 
Zurück