250 likes | 366 Views
JAVA Security. Jdk1.0. sandBox. Ilo sistema di sicurezza JAVA si basa sulla struttura della seandBox. In base a tale politica tutte le applicazioni eseguite in locale so sicure per default, mentre gli applet sono tutte insicure (ad esempio non hanno accesso al filesystem). Jdk 1.1. Jdk1.1.
E N D
sandBox Ilo sistema di sicurezza JAVA si basa sulla struttura della seandBox. In base a tale politica tutte le applicazioni eseguite in locale so sicure per default, mentre gli applet sono tutte insicure (ad esempio non hanno accesso al filesystem).
Jdk1.1 La jdk1.1 estende la sandBox della jdk1.0 e permette di definire sicure alcuni applet. Fornisce infatti un metodo per apporre sull’applet un a firma digitale in base alla quale riconoscere se concedere l’accesso alle risorse del sistema.
Jdk1.1 e jdk1.2 • Il jdk1.1 viola però il principio del minimo privilegio: • tutti gli applet che possiedono tale firma e provengono da tale host (anche il browser deve essere configurato in modo da ritenere sicuri gli applet provenienti da un certo URL) sono considerati sicuri Il jdk1.2 permette di assegnare ad applet, firmati da diverse persone, ma provenienti dallo stesso URL, diversi gradi di accesso alle risorse.
Fine-grained access control. • Questa caratteristica esisteva dall’inizio ma richiedeva al programmatore di specializzare delle classi (SecurityManager ed il ClassLoader classes). • Il browser HotJava 1.0 è un’applicazione che permette all’utente del browser di slezionare un piccolo numero di levelli di sicurezza. • Questo tipo di programmazione e estremamente complicato e richiede esperienza nel campo della sicurezza.
Easily extensible access control structure. • Per gestire nuovi tipi di permessi occorreva con jdk1.1 estendere il security manager • Con jdk1.2 e sufficiente creare nuovi Permessi che vengono gestiti automaticamente dal sistema • Non occorre creare nuovi metodi per il security manager
Extension of security checks to all Java programs • Non c’è più il presupposto che tutto il codice con codebase locale è trusted • Il codice locale (packages non di sistema istallati sul filesystem locale) viene gestito come qualunque apllet. • È possibile costruire politiche che ddanno al codice remoto gli stessi privilegi di quello locale • Gli stessi principi applicati alle applet firmate possono essere applciati alle applicazioni
Execution Threads • Un thread in esecuzione invoca più classi appartenenti a domini diversi • Un dominio con un più limitato ser di permessi non può acquisirne altri chiamando o essendo chiamato da domini con maggiori privilegi
Execution Threads • L’insieme di permessi concessi ad un thread è considerato l’intersezione dei permessi di tutti I domeni di protezione attraversati dal thread • Chiamando un metodo doPrivilieged() e possibile abilitare una parte di codice temporaneamente ad accedere a più di quelle direttamente concesse all’applicazione chiamante.
Easily configurable security policy. Esisteva nelle prime versioni ma non era utilizzabile in maniera così semplice È preferibile scrivere file di policies che codice
La norma di sicurezza Mentre nelle versioni precedenti di jdk1.0 solo il programmatore poteva implementare un SecurityManager personalizzato, con jdk1.2 è possibile stabilire una norma di sicurezza compilando un apposito fille nella cartella: jdk1.2\lib\security\java.policy
Altri possibili metodi • Creando o modificando il file java.policy nella directory dell’utente • Sostituendo il valore della proprietà di sistema policy.java con il nome di un altro file contenente la nuova norma • Per aggiungere una norma di sicurezza all’esecuzione di un programma: • java –Djava.security.policy=“test.policy” Test • java –Djava.security.policy==“test.policy” Test
Sintassi della norma di sicurezza Grant [SignedBy “Piero,Luisa”] [, CodeBase “URL”]{ voci permesso }; Piero e Luisa sono i firmatari, mentre l’URL è l’indirizzo da cui deve provenire l’applet da sottomettere alla norma. Es: http://www.trusted.com file:/local/applets
Voci di permesso permission nome_classe_Permesso [“nome_destinatario”] [, “action_list”] [, SignedBy “nomi_firmatari”]; ES: permission java.io.FilePermission ”.”,“read,write,delete,execute”; permission java.lang.RuntimePermission “queueJob”
Gestione del Permesso Policy: grant codeBase "http://java.sun.com/" { permission com.abc.TVPermission "channel-5", "watch"; } Codice: com.abc.TVPermission tvperm = new com.abc.TVPermission("channel-5", "watch"); AccessController.checkPermission(tvperm);
KeyStore E un database che consente di gestire coppie di chiavi pubblica/privata per l’autenticazione e certificati digitali. Creare un keyStore: keytool –genkey –alias “Me” –keysore “MyStore” Quindi viene richiesta una password e le seguenti informazioni:
Firmare un applet • Si compili il file ReadFileApplet • Si crei un file ReadFileApplet.jar con il comando: • jar cf ReadFileAplet.jar ReadFile*.class • Si elimino ReadFileApplet.class e ReadFileApplet$ButtonHandler.class • Si esegua: • jarsigner –keystore Mystore –storepass Mypassword –keypass MyPassword ReadFileApplet.jar Me
Esempio • Applet ReadFileApplet • File html