35
Introduzione alla sicurezza in Java Tecnologie per la Sicurezza L-S AA 2006-2007 Anna Riccioni anna.riccioni@gmail .com

Introduzione alla sicurezza in Java

  • Upload
    kimi

  • View
    48

  • Download
    0

Embed Size (px)

DESCRIPTION

Tecnologie per la Sicurezza L-S AA 2006-2007. Introduzione alla sicurezza in Java. Anna Riccioni [email protected]. Sicurezza in Java. Java è una piattaforma sicura Linguaggio nato per: applicazioni multipiattaforma applicazioni da distribuire attraverso internet - PowerPoint PPT Presentation

Citation preview

Page 1: Introduzione alla sicurezza in Java

Introduzione allasicurezza in Java

Tecnologie per la Sicurezza L-SAA 2006-2007

Anna [email protected]

Page 2: Introduzione alla sicurezza in Java

Sicurezza in Java

• Java è una piattaforma sicura– Linguaggio nato per:

• applicazioni multipiattaforma• applicazioni da distribuire attraverso internet• applicazioni da eseguire su diversi dispositivi

(cellulari, ...)

– Sicurezza: obiettivo di progetto già dalle prime release

• security model iniziale• evoluzione continua nelle versioni successive

Page 3: Introduzione alla sicurezza in Java

Sicurezza e Crittografia

• Sicurezza (computer security)– applicazione di misure orientate a far sì che

determinate informazioni, nel momento in cui vengono elaborate, archiviate o comunicate siano affidabili ed accessibili alle sole entità autorizzate

• Crittografia (cryptography)– applicazione di tecniche di codifica

dell’informazione che la trasformino in un formato decifrabile solo dal destinatario designato

Page 4: Introduzione alla sicurezza in Java

Sicurezza e Crittografia

• Sicurezza (computer security)– applicazione di misure orientate a far sì che

determinate informazioni, nel momento in cui vengono elaborate, archiviate o comunicate siano affidabili ed accessibili alle sole entità autorizzate

• Crittografia (cryptography)– applicazione di tecniche di codifica

dell’informazione che la trasformino in un formato decifrabile solo dal destinatario designato

Controllo Controllo degli degli accessiaccessi

Gestione della Gestione della memoriamemoria

Controllo dei Controllo dei permessi di permessi di accesso alle accesso alle risorserisorse ……

Testo in chiaroTesto in chiaro

Testo in chiaroTesto in chiaro

Testo cifratoTesto cifrato

Testo cifratoTesto cifrato

f(pf(px1x1,p,px2x2, .., p, .., pxnxn)

g(pg(py1y1,p,py2y2, .., p, .., pymym)

Page 5: Introduzione alla sicurezza in Java

Sicurezza e Crittografia

• Sicurezza (computer security)

• Crittografia (cryptography)

può può utilizzareutilizzare

può essere può essere integrata integrata

concon

Page 6: Introduzione alla sicurezza in Java

Piattaforma Java

• SDK– piattaforma su cui eseguire applicazioni Java in

modo sicuro

• API, strumenti e servizi per la sicurezza– framework che consente ad amministratori e

programmatori di gestire applicazioni in modo sicuro e di scrivere applicazioni che si appoggiano ad algoritmi, meccanismi e protocolli per la sicurezza

Page 7: Introduzione alla sicurezza in Java

Sicurezza in Java

• Meccanismi di controllo per evitare errori causa di comportamenti imprevedibili delle applicazioni– linguaggio fortemente tipizzato– controllo degli indici negli accessi a stringhe e

array– gestione automatica della memoria (garbage

collection)

Page 8: Introduzione alla sicurezza in Java

Sicurezza in Java

• Livelli di visibilità differenziata applicabili a classi, metodi e campi– private– protected– public– package

Page 9: Introduzione alla sicurezza in Java

Sicurezza in Java

• Verifica, prima dell’esecuzione, della conformità del bytecode alle Java Language Specification– rispetto del formato e vincoli strutturali imposti

per i file .class che la JVM deve interpretare– assenza di stack underflows / overflows– nessuna violazione della memoria– nessun cast non permesso

Page 10: Introduzione alla sicurezza in Java

Sicurezza in Java

• Ulteriori meccanismi di controllo a run-time– Class Loader: gestisce il caricamento e il

linking delle classi coinvolte nell’esecuzione all’interno degli opportuni namespace

– Security Manager: valida gli accessi alle risorse di sistema mediati dalla JVM

– modello a SandBox: limita il contesto di esecuzione di codice potenzialmente dannoso

Page 11: Introduzione alla sicurezza in Java

Security Model (da Java 1.4)

JDK 1.4 Security ModelJDK 1.4 Security Model

Page 12: Introduzione alla sicurezza in Java

Security Model (da Java 1.4)

• Evoluzione rispetto al modello precedente– superamento del modello ON/OFF: sono

possibili diversi domini intermedi tra la SandBox e l’accesso completo alle risorse

– maggiore granularità a livello di insiemi di permessi

– maggiore flessibilità• differenziazione di permessi in funzione di singole

operazioni e singoli utenti• aggiornamento dinamico delle politiche di sicurezza

Page 13: Introduzione alla sicurezza in Java

Crittografia e Sicurezza in Java

• Dalla versione 1.4 di Java:– integrazione in un’unica Java 2 Security

Platform di• Java Cryptography Architecture• Java Cryptography Extension• Java Secure Socket Extension• Java Authentication and Authorization Service

– aggiunta dei package• Java Certification Path• Java Generic Security Service

Page 14: Introduzione alla sicurezza in Java

Java Cryptography Architecture

• Framework di base per la Crittografia• Provider-based Architecture

• indipendenza dall’implementazione• interoperabilità (provider e applicazioni non sono

strettamente legati)• estendibilità

ApplicationApplication JCE/JCA APIJCE/JCA API

JCE/JCA SPIJCE/JCA SPI

ProviderProviderInternal ClassesInternal Classes

invocationresponse

Abstraction LayerAbstraction Layer

Service Provider Service Provider InterfaceInterface

Provider FunctionalityProvider Functionality

Page 15: Introduzione alla sicurezza in Java

Provider-based Architecture

• Cryptographic Service Provider– uno o più package che implementano uno o più

servizi crittografici esposti dalla JCA– più provider installati, anche se di produttori

differenti, possono coesistere

• Responsabilità– un’applicazione richiede un oggetto (MessageDigest)...

– ... che implementa uno specifico servizio (hash calcolato in base all’algoritmo SHA-1)...

– ... e riceve un’implementazione fornita da uno dei provider installati (BouncyCastle)

Page 16: Introduzione alla sicurezza in Java

Provider-based Architecture

• Pattern Factory

XXFactoryFactory getInstancegetInstance

XZXZXYXY

XX

““abc...”abc...”

• Implementazione– classi astratte di tipo Engine

• dichiarano le funzionalità offerte– classi concrete contenute nel provider

• implementano le funzionalità dichiarate

Page 17: Introduzione alla sicurezza in Java

Provider-based Architecture

• Concretamente– un oggetto viene istanziato

• non più con la parola chiave new• ma grazie al metodo statico getInstance(String nome)

• Esempi– MessageDigest hash =

MessageDigest.getInstance(“SHA-1”);

– KeyGenerator kGen = KeyGenerator.getInstance(“TripleDES”);

Page 18: Introduzione alla sicurezza in Java

Provider-based Architecture

• Indipendenza dall’implementazione– più provider possono coesistere nello stesso JRE– provider diversi possono offrire funzionalità

diverse– provider diversi possono offrire implementazioni

diverse delle stesse funzionalità

• Vantaggio– scegliere autonomamente il provider più adatto alle specifiche

esigenze

Page 19: Introduzione alla sicurezza in Java

Provider-based Architecture

• Scelta consapevole del provider– il nome del provider viene specificato come

parametro all’interno del metodo getInstance() utilizzato per istanziare l’oggetto richiesto

• Esempi– MessageDigest hash =

MessageDigest.getInstance(“SHA-1”, “BC”);

– KeyGenerator kGen = KeyGenerator.getInstance(“TripleDES”, “BC”);

Page 20: Introduzione alla sicurezza in Java

Installazione di un CSP

• Installazione statica– inserire l’archivio jar che implementa il provider

tra le librerie esterne del JRE• <JAVA_HOME>\jre\lib\ext

– modificare il file java.security che si trova nella directory <JAVA_HOME>\jre\lib\security aggiungendo il nome del provider come ultimo elemento della lista che ha il formato

• security.provider.n=provider

• Esempio– security.provider.7 =

org.bouncycastle.jce.provider.BouncyCastleProvider

Page 21: Introduzione alla sicurezza in Java

Installazione di un CSP

• Installazione dinamica– il provider va importato all’interno

dell’applicazione– il metodo addProvider(String nome) della

classe java.security.Security consente di aggiungere il provider desiderato a run-time• Esempio

– import java.security.Security;

– import org.bouncycastle.jce.provider.BouncyCastleProvider;

– Security.addProvider(new BouncyCastleProvider());

Page 22: Introduzione alla sicurezza in Java

Provider-based Architecture

• Nessuna preferenza nella scelta del provider– il nome del provider non viene specificato come

parametro all’interno del metodo getInstance() utilizzato per istanziare l’oggetto richiesto

• Ricerca ordinata per preferenze– file java.security

– la ricerca continua finché non si trova il primo provider che implementa la funzionalità richiesta

Page 23: Introduzione alla sicurezza in Java

Provider-based Architecture

Page 24: Introduzione alla sicurezza in Java

Provider “Sun”

• Integrato nel JDK• Include implementazioni di:

– algoritmo DSA• KeyPairGenerator per DSA• AlgorithmParameter per DSA• AlgorithmParameterGenerator per DSA• KeyFactory per DSA

– algoritmi MD-5 e SHA-1 (hash)– algoritmo SHA1PRNG (SecureRandom)– CertificateFactory per X.509 e CRLs– KeyStore proprietario JKS

Page 25: Introduzione alla sicurezza in Java

Java Cryptography Extension

• Integrato nel JDK• Implementa in modo completo le

funzionalità di cifratura e decifrazione dichiarate dalla JCA

• Offre il supporto all’utilizzo di– cifrari simmetrici a blocchi e a flusso– cifrari asimmetrici– cifrari con password

• ... applicabili a– Dati– SerializableObjects– I/O stream

Page 26: Introduzione alla sicurezza in Java

Java Cryptography Extension

• Estende le funzionalità di cifratura e decifrazione dichiarate dalla JCA– JCE API: package javax.crypto

• Classi principali– Cipher

• CipherInputStream / CipherOutputStream

– KeyGenerator– SecretKeyFactory– SealedObject– Mac

Page 27: Introduzione alla sicurezza in Java

Java Cryptography Extension

• Integrato nel JDK• Implementa ed estende le tecniche

crittografiche definite dalla JCA– provider “SunJCE”

• algoritmi di cifratura (AES, DES, TripleDES, PBE, ...)• modalità di cifratura (ECB, CBC, OFB, CFB, CTR, PCBC)• padding (NoPadding, PKCS5PADDING)• facilities per la conversione delle chiavi da oggetti Java

in array di byte e viceversa• KeyGenerator• algoritmi MAC

Page 28: Introduzione alla sicurezza in Java

Provider BouncyCastle

• Non integrato nel JDK (va installato)• Implementa ed estende le tecniche

crittografiche definite dalla JCA e dalla JCE• implementazione alternativa degli algoritmi di cifratura

(AES, DES, TripleDES, PBE, ...)• algoritmi di cifratura asimmetrica (RSA, ElGamal)• algoritmi di firma digitale• padding (None, PKCS1PADDING)• facilities per diversi protocolli di KeyAgreement• facilities per utilizzare cifrari simmetrici a flusso e a

blocchi• ...

Page 29: Introduzione alla sicurezza in Java

Java Secure Socket Extension

• Integrato nel JDK• Implementa ed estende le tecniche

crittografiche definite dalla JCA a livello di rete– Provider “SunJSSE”

• KeyManager (SunX509)• KeyStore (PKCS12)• protocolli SSL/TLS (SSLv3, TLSv1)• Trust manager (PKIX)

Page 30: Introduzione alla sicurezza in Java

Java Secure Socket Extension

• Offre funzionalità per– autenticazione– protezione dell’integrità dei dati– protezione della riservatezza dei dati

• Opera a livello di rete– protocolli per comunicazioni sicure

• Secure Socket Layer v.2.0 e v.3.0• Transport Layer Security v.1.0

Page 31: Introduzione alla sicurezza in Java

Java Secure Socket Extension

• Le API JSSE (package javax.net e javax.net.ssl) estendono– javax.crypto (JCE)– java.security (JCA)– java.net

Page 32: Introduzione alla sicurezza in Java

Java Authenticationand Authorization Service

• Integrato nel JDK• Offre servizi per

– autenticazione: identificazione sicura– autorizzazione: verifica dei permessi

• E’ composto da– un framework di autenticazione estendibile– una serie di moduli dedicati alle singole tecniche

di autenticazione• verifica username / password• verifica di caratteristiche biometriche• ...

Page 33: Introduzione alla sicurezza in Java

Java Certification Path

• Integrato nel JDK• Offre interfacce ed engine classes per

gestire– certificati– certification path

• Le funzionalità principali riguardano– Basic Certification Path– Certification Path Validation– Certification Path Building– Certificate / CRL Storage

Page 34: Introduzione alla sicurezza in Java

Java Generic Security Service

• Integrato nel JDK• Ponte Java – Generic Security Service API

– GSS API: progettate dall’IETF per offrire un accesso uniforme a servizi di autenticazione e comunicazione peer-to-peer che adottano meccanismi di sicurezza

• I principali servizi offerti riguardano– autenticazione– riservatezza e integrità dei messaggi– sequencing dei messaggi protetti– replay detection

Page 35: Introduzione alla sicurezza in Java

Architettura Java per la sicurezza

Java 2 Security Platform (J2SE 1.4)Java 2 Security Platform (J2SE 1.4)

Java 2 Java 2 SecuritySecurity

ArchitectureArchitecture

java.securityjava.security packagepackage

Java Java Cryptography Cryptography Architecture Architecture

(JCA) (JCA)

Java Authentication and Java Authentication and Authorization Service Authorization Service

(JAAS)(JAAS)

Java Secure Socket Java Secure Socket ExtensionExtension

(JSSE) (JSSE)

Java Cryptography Java Cryptography Extension Extension

(JCE)(JCE)

Java Generic Security Java Generic Security Service Service (JGSS)(JGSS)

Java Certification Java Certification Path Path

(CertPath) (CertPath)

JDK 1.4 Security ModelJDK 1.4 Security Model