Login
Cerca all'interno di JavaPortal
Help
Home Page Documentazione Forum Progetti Partner Pubblica!
Documentazione > Tutorial > XML: Sicurezza
Hide
Best Practices
EJB
Frameworks
Howto
J2EE
J2ME and Wireless
J2SE
JSP e Servlet
Java Application Server
Java IDE/Tools
Java Media
Java Security
Java Sys Admin
Java e XML
Java e SQL
OpenSource Java
Patterns
Repository
Tesi
UML
Web Services
Slide
White Paper di jws.it
project management
Eventi
Groovy

Hai una tesi in Java?
Tesine preparate
per esami?
Pubblica tutto su
JavaPortal!

Scrivi al nostro staff


Atlantis


Publio Cornelio Tacito
Tutte le cose che ora si credono antichissime furono nuove


Tutorial per FOP


Rss Feed
Home Page
Articoli
News
Forum
Classi

  Visualizza Commenti (0) Aggiungi Commento    
Add to Shortcuts
 
Vota l'articolo
XML: Sicurezza
By Rudi Verago
17 agosto 2005

  XML: Sicurezza
Program Capitolo 1
Program Capitolo 2
Program Capitolo 3
Program Capitolo 4
Program Capitolo 5

Perché

I protocolli XML sono tutti belli, presentano infatti molti vantaggi: sono semplici da gestire, facili da capire, interoperabili, adattabili a moltissime situazioni. Come direbbe Cagigo non è tutto oro che quel che luccica. Le più evidenti problematiche riguardano le performance e la sicurezza.

Il problema delle prestazioni secondo me è piuttosto relativo, attualmente manipolare ed eseguire il parsing di file XML estesi risulta abbastanza efficiente: i risultati però sono sicuramente inferiori se ad esempio comparati con un database o con un servezio di directory come LDAP.

Il vero problema però si chiama sicurezza: i file XML sono semplicemente testo (non dati binari), ma un ‘testo’ particolare, in grado di passare i firewall e eseguire applicazioni. Sono quindi estremamente pericolosi.

E’ necessario quindi applicare le conoscenze sulla crittografia, sull’autenticazione ecc. sui file XML. In questa white paper verranno spiegati i problemi principali, illustrati i protocolli nuovi e di maggior utilizzo come XML-Encryption, mostrato e analizzato il caso particolare dei Web Services. Verranno infine esposte le teniche del passato (HTTPS) e le tecniche del futuro (SSO).

20 Settembre 2004 - Rudi Verago





Capitolo 1 top

XML: testo dolce e insidioso

Quando si parla di XML o Web Service (WS) si sottointende che il protocollo di comunicazione sia l’HTTP: non è l’unica scelta possibile ma sicuramente la più adottata; gli standard XML quindi sono sottoposti a tutte le debolezze dell’HTTP.

Mi scuso subito perché molte volte parlo direttamente di messaggi SOAP (vale a dire messagi XML nel caso di WS) anche quando dovrei parlare di XML in generale.


I messaggi HTTP ‘bucano’ i firewall senza problemi. Il consorzio W3C specifica che un’architettura sicura per i web service deve garantire:

  • autenticazione: il WS è usufruibile da utenti con identità verificata

  • autorizzazione: l’utente autenticato ha i permessi per accedere ai servizi o ai dati

  • confidenzialità: i dati scambiati sono protetti (cifrati)

  • integrità: i messaggi non possano essere modificati

  • non ripudiabilità: impossibilità di negare, successivamente, ciò che si è inviato

  • accessibilità: il WS è sempre accessibile e quindi non deve essere soggetto ad attacchi di tipo DoS (Denial of Service)

La maggior parte degli attacchi a cui vengono sottoposti i WS sono di tipo Denial of Service (DoS) mediante interruzione della disponibilità del servizio stesso oppure tecniche più evolute mediante cattura e manipolazione dei messaggi SOAP. La caratteristica più importante per i WS è anche quella più pericolosa: i WS possono invocare metodi ma non solo. Poco tempo fa ascoltavo un’intervista fatta ad un ingegnere della Microsoft che diceva che ogni programma (eseguibile) inWindows LongHorn sarà un WS. I WS infatti possono essere visti come un ottimo metodo di comunicazione tra programmi, quelli che ‘una volta’ erano i veri e cari socket. Ma se WS significa anche eseguibile allora devono esistere dei meccanismi, o meglio dobbiamo stabilire delle procedure, in modo tale da renderne sicuro ed affidabile il loro utilizzo.

  1. Tutto il tempo del mondo

Una prima suddivisione dei meccanismi di sicurezza puo’ essere di carattere temporale:

  • presente e passato:

  • HTTPS ovvero SSL/TLS

  • HTTP basic authentication

  • futuro

  • XML-Encryption

  • XML-Signature

  • WS-Security

  • XACML

  • . . .

Del presente e del passato parleremo subito, i prossimi capitoli invece saranno centrati sugli standard del futuro.

  1. Metodi HTTP

Al giorno d’oggi la sicurezza dei WS, e in generale dei messaggi XML, non viene intesa a livello di documento: applicandone quindi la cifratura, firmandoli o provvedendone all’autenticazione, ma piuttosto utilizzando le tecnologie che comunemente sono da supporto all’HTTP. Queste tecniche sono principalmente: HTTP basic authorization, SSL over HTTP (HTTPS, HTTP Secure). La miglior configurazione possibile è quella data dall’unione delle due tecniche: in questo modo si assicurano tutte le raccomandazioni del W3C tranne la non ripudiabilità e l’accessibilità.
    1.2.1 HTTP basic authorization

HTTP basic authorization (BASIC-AUTH) è un meccanismo molto semplice usato per proteggere l’accesso ad un WS: l’utente deve possedere username e password. Il web server ha una lista di account validi e le corrispettive risorse a cui possono accedere, il client all’atto dell’invocazione del WS deve fornire la coppia username-password. Ad esempio Apache Axis realizza tale caratteristica in maniera immediata, nel listato 1.1 è mostrata l’invocazione di un WS dal lato client con le credenziali d’autenticazione dell’utente.

Listing 1.1: Invocazione WS con BASIC-AUTH

1 // impostazione indirizzo server, nome WS e nome metodo

2 call.setTargetEndpointAddress(endPointWS);

3 call.setOperationName(new QName(nameWS, nameMethod));

4 // impostazione credenziali utente

5 call.setUsername("rudi");

6 call.setPassword("Pa33w0Rd");

7 // invocazione del Web Service

8 String ret = (String) call.invoke( new Object[] {dati} );


Il server cattura username e password con i metodi sotto indicati; l’handler, ossia la gestione e il controllo delle informazioni, deve essere realizzato ad-hoc oppure ci si deve appoggiare all’application server come ad esempio Tomcat.

Listing 1.2: BASIC-AUTH: lato server

1 String username = msgContext.getUsername();

2 String password = msgContext.getPassword();

Nel documento SOAP le informazioni dell’utente vengono codificatema il resto del messaggio rimane in chiaro quindi un ‘hacker’ potrebbe benissimo catturarlo, modificarne il contenuto e rispedirlo: si capisce quindi come questo meccanismo, se usato da solo, non offra alcun livello di sicurezza.

    1.2.2 HTTPS

HTTPS significa un tunnel SSL/TLS.

TLS (Transport Layer Security) è uno standard IETF specificato nel RFC 2246, deriva dal protocollo SSL (Secure Socket Layer); TLS è un protocollo che lavora tra il livello 4 (trasporto) e il livello 5 (sessione). Le caratteristiche fornite sono: riservatezza, integrità dei dati e autenticazione.

L’applicazione più diffusa è quella legata ai browser nella trasmissione sicura di pagine web o di dati provenienti da form HTML: si pensi ad esempio quando si controlla la mail con yahoo.it o si inviano login e password oppure quando si inserisce il numero di carta di credito per un acquisto su amazon.com (lì è un po’ più evoluto grazie al loro sistema proprietario ma la base è quella). Ora pensate che i messaggi SOAP/XML sono trasmessi di solito tramite il protocollo HTTP, unite il tutto e cosa ottenete?

Per la prima generazione di WS molti sviluppatori non usano quindi modelli ad-hoc (come quelli descritti nei capitoli successivi) ma usano sessioni SSL/TLS per fornire confidenzialità e autenticazione one-way (raramente two-way) come nel caso dei browser.

Ipotizziamo di connetterci al sito mail.yahoo.it per controllare la mail, e di scegliere la modalità di connessione sicura, verremo reindirizzati ad un indirizzo https:// ossia verrà creato un tunnel SSL/TLS tra il nostro pc e un server di Yahoo.it effettuando un’autenticazione one-way poiché noi (il client) non abbiamo un certificato valido.

Listing 1.3: Configurazione Tomcat SSL/TLS

1 <!-- Define a SSL Coyote HTTP/1.1 Connector on port 8443 -->

2

3 <Connector port="8443"

4 maxThreads="150" minSpareThreads="25" maxSpareThreads="75"

5 enableLookups="false" disableUploadTimeout="true"

6 acceptCount="100" debug="0" scheme="https" secure="true"

7 clientAuth="false" sslProtocol="TLS" />

Anche se non assicura una sicurezza paragonabile alla autenticazione two-way il tunnel SSL/TLS ‘stile-browser’ permette di aggiungere un livello di sicurezza sufficiente con un costo amministrativo quasi nullo poichè i protocolli sono integrati perfettamente all’interno di qualsiasi web/application server.

Un esempio in JAVA-Axis-Tomcat

La prima cosa da confiurare è Tomcat in modo tale che accetti connessioni SSL/TLS: deve essere creato un certificato per il server tramite l’utility di Java: keytool; successivamente si deve configurare il web server in modo tale che accetti connessioni https sulla porta 8443 modificando il file di impostazioni server.xml (listato 1.3).

Ora ci sono due possibilità come annunciato: autenticazione one side o two side. Nella prima il client in linea di massima crea una chiave di sessione, la cifra con la chiave pubblica del server. Il server una volta ricevuta la decifra con la propria chiave privata. Tutte la comunicazioni d’ora in poi avvengono cifrate con la chiave di sessione appena inviata.

Dal lato client si deve innanzitutto implementare l’interfaccia di Java X509TrustManager per accettare certificati self-signed poiché il server usa un certificato firmato da se stesso e non viene usata la mutua autenticazione (non generiamo quindi il certificato del client). E’ sufficiente riscrivere i metodi della classe checkClientTrusted e checkServerTrusted lasciandoli vuoti in modo tale da accettare le connesioni non trusted e quindi non causare eccezioni di tipo

CertificateException.

Infine è necessario modificare l’url del web services modificando la porta di connessione e il protocollo (https):

https://+ipServer+:+8443+/axis/+nameWS

E’ importante notare che una soluzione che comprenda esclusivamente SSL/TLS e WS non è ottimale, può essere adeguata in contesti dove la sicurezza non sia fondamentale ma sicuramente non lo è nelle transazioni B2B (Business to Business) o in applicazioni particolarmente critiche.

E’ possibile effettuare anche la mutua autenticazione usando il tool di Java keytool per generare i certificati per la sessione SSL/TLS. L’installazione e l’uso del certificato sul lato client è molto semplice: è sufficiente copiare il file .keystore in una directory a piacere (ad esempio nella home in Linux o nel profilo in Windows XP) e specifare nell’invocazione del WS:

Listing 1.4: WS con HTTPS

1 String dirWS = "https://"+ipServer+":"+portServer+"/axis/"+nameWS;

2 System.setProperty("javax.net.ssl.trustStore","/home/vl/rudi.keystore");

  1. Spire Security: le 5 vulnerabilità

La Spire Security LLC and Forum Systems hanno stilato poco tempo fa la lista delle cinque più importanti vulnerabilità dei web service (consiglio la lettura di ‘Attacking and Defending Web Services’, veramente un ottimo documento).

  • vulnerability discovery (WSDL scanning): si cercano possibili ‘porte aperte’, insomma come se si usasse nmap o nessus. . .

  • probing attack (parameter tampering, replay attacks): richiedono forza bruta e intercettamento dei messaggi.

  • DoS (coercive parsing, recursive payloads, oversize payloads, routing detours): l’hacker fa un casino pazzesco.

  • external reference attacks

  • malicious content (schema poisoning e SQL injections): una specie di virus che infetta i messaggi XML.

 



Capitolo 2 top

Firma e cifratura: travestimento XML

Analizziamo gli standard principali per la sicurezza dei file XML, nella maggior parte dei casi sono l’immediata applicazione delle metodologie di crittografia assimetrica e simmetrica.

In questo e negli altri capitoli successivi farò una panoramica di questi protocolli dando per scontato conoscenze base di crittografia: quindi ovviamente sapete cosa intendo quando parlo di PKI o di X.509, di Kerberos and so on come dicono gli ammmmerriccani.

  1. XML Digital Signature

XML Digital Signature (XMLDS) è stata sviluppata dal W3C e dall’IETF. XMLDS fornisce servizi di integrità, autenticazione di messaggi e autenticazione del firmatario per qualunque tipo di dati. Il compito fondamentale è quello di associare una chiave a dei dati, non specifica però le chiavi associate a persone o istituzioni e nemmeno il significato dei dati firmati. Ci si deve riferire, quindi, ad altri protocolli per la definizione delle chiavi dell’algoritmo. XMLDS può essere usato per firmare ed effettuare il digest di qualsiasi file XML.

La flessibilità dell’XML è un vantaggio importante però introduce alcune problematiche: due documenti possono contenere le stesse informazioni ma avere differenti strutture; la differenza non riguarda la logica, ossia la struttura dei tag, ma ad esempio gli spazi all’interno dei tag, i delimitatori di riga, i commenti. . .Per un parser che deve interpretare un documento XML ciò non è rilevante ma per uno strumento di signature è fondamentale firmare esattamente e solamente i dati. Per ovviare a tale inconveniente viene introdotto il concetto di canonizzazione; la canonizzazione è un processo che consiste nell’applicare al documento XML un insieme di trasformazioni in modo da rappresentare le informazioni variabili in maniera standard. Due documenti logicamente equivalenti devono quindi avere la stessa forma canonica.

Ci sono tre tipi di XML signature: enveloping,enveloped e detached.

Quando la firma raccoglie tutti i dati si dice enveloping, quando fa parte del documento (diventandone un elemento) si dice enveloped, infine quando la firma è tenuta separata dai dati è detta detached. Il processo di signature si compone di cinque fasi:

  1. identificare il documento da firmare

  2. trasformarlo in forma canonica

  3. applicare le eventauli trasformazioni (ad esempio con il linguaggio XSLT)

  4. creare un sommario (digest) dei risultati della trasformazione

  5. cifrare per produrre la firma del digest

Si deve quindi, in fase di ‘firma’, provvedere alla creazione dell’elemento Signature che contiene tre elementi:

  • SignedInfo: è una struttura che contiene i vari algoritmi usati e il digest del messaggio;

  • SignatureValue: è il valore vero e proprio della firma ;

  • KeyInfo: è un identificatore dell’algoritmo usato per la verifica della firma, è l’unico opzionale.

Listing 2.1: Esempio XML Digital Signature

1 <?xml version="1.0"?>

2 <SOAP-ENV:Envelope

3 xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"

4 xmlns:ds="http://www.w3.org/2000/09/xmldsig\#">

5 <SOAP-ENV:Header>

6 <ds:Signature>

7 <ds:SignedInfo>

8 <ds:CanonicalizationMethod

9 Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>

10 <ds:SignatureMethod

11 Algorithm="http://www.w3.org/2000/09/xmldsig#rsasha1"/>

12 <ds:Reference URI="#un_nome_come_un_altro">

13 <ds:Transforms>

14 <ds:Transform

15 Algorithm="http://www.w3.org/2001/10/xml-excc14n#"/>

16 </ds:Transforms>

17 <ds:DigestMethod

18 Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>

19 <ds:DigestValue>

20 il.valore.digest..lunghezza fissa...

21 </ds:DigestValue>

22 </ds:Reference>

23 </ds:SignedInfo>

24 <ds:SignatureValue>

25 M.u.l.t.i.v.a.c.firma...Asimov?!?

26 </ds:SignatureValue>

27 <ds:KeyInfo>

28 <ds:KeyName>identificatoreChiaveOpzionale</ds:KeyName>

29 </ds:KeyInfo>

30 </ds:Signature>

31 </SOAP-ENV:Header>

32

33 <SOAP-ENV:Body>

34 <!-- messaggio SOAP contenenente... -->

35 <!-- ... il metodo da invocare e i parametri -->

36 </SOAP-ENV:Body>

37 </SOAP-ENV:Envelope>

La procedura di validazione del messaggio è semplice ed è composta tipicamente da tre passi:

  1. trasformazione in forma canonica dell’elemento SignedInfo

  2. controllo dell’integrità del messaggio verificandone il valore di digest: questa operazione può avvenire in quanto il ricevente conosce i dati (il messaggio è in chiaro), le eventuali trasformazioni applicate (sono contenute in SignedInfo nel campo Transforms) e l’algoritmo di digest (contenuto nell’attributo Algorithm dell’elemento DigestMethod )

  3. in caso di correttezza del digest si esegue la verifica della firma, anche qui tutte le informazioni da conoscere sono contenute nell’elemento SignedInfo

  1. XML Encryption

XML Encryption soddisfa la raccomandazione del W3C sulla condifenzialità.

La cifratura può riguardare il documento nella sua interezza, un elemento del documento, il contenuto di un elemento, gli attachment.

La cifratura dell’intero documento (in ogni caso) produce un file piuttosto semplice e dalla struttura sempre uguale, un esempio è indicato nel listato sequente.

Listing 2.2: Esempio XML Encryption

1 <?xml version=’1.0’?>

2 <EncryptedData

3 xmlns="http://www.w3.org/2001/04/xmlenc#"

4 MimeType="text/xml">

5 <EncryptionMethod

6 Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc"/>

7 <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">

8 <ds:KeyName>identificatore</ds:KeyName>

9 </ds:KeyInfo>

10 <CipherData>

11 <CipherValue>M.U.L.T.I.V.A.C.sono_simpatico...</CipherValue>

12 </CipherData>

13 </EncryptedData>

 

Viene indicato il tipo di algoritmo usato, l’identificatore della chiave (opzionale) ed infine il risultato dell’operazione di cifratura. La cifratura di un elemento invece va a riscrivere solo la parte che rigurda quell’elemento inserendo tutti i ‘campi’ del caso precedente; il resto del documento XML rimane intatto. Naturalmente verranno aggiunte le informazioni di cifratura nell’envelope nel messaggio XML. Le estensioni negli altri casi sono banali: nella cifratura del valore dell’elemento rimarrà invariato il tag, verrà modificato esclusivamente il valore (aggiungendo le stesse informazioni del caso precedente); la cifratura dell’attachment produrrà un allegato cifrato mentre le informazioni sull’algoritmo saranno contenute nel messaggio XML

  1. XKMS

XML Key Management Specification (XMKS) provvede ad un interfaccia XML per i servizi di PKI, specifica quindi la distribuzione, la validazione e la revoca delle chiavi.

Un servizio XKMS è in tutto e per tutto un WS che permette agli utenti di registrare e revocare le loro chiavi usando un dialetto XML.

E’ formato da due protocolli:

  • XML Key Information Service Specification (XKISS): servizio per validare le chiavi pubbliche usate nella XMLDS e XML Encryption

  • XML Key Registration Service Specification (XKRSS): WS che accetta la registrazione e la revoca delle chiavi pubbliche

  1. XACML

XML Access Control Markup Language (XACML) è sviluppato dall’OASIS e fornisce una sintassi per la gestione delle informazioni di autorizzazione; descrive inoltre un linguaggio di policy. La tipica applicazione riguarda il caso in cui un utente A voglia eseguire un’operazione su una risorsa, A dovrà richiedere l’autorizzazione (il permesso) a chi ‘controlla’ questa risorsa; l’organo controllore è detto Policy Enforcement Point (PEP). Il PEP forma una richiesta (request) composta: dagli attributi dell’utente A, dalla risorsa in questione, dal tipo di azione e provvede ad inviarla ad un’altra entità chimata Policy Decision Point (PDP); il compito di PDP è quello di controllare le policy e inviare a PEP il risultato (response). PEP comunicherà ad A il permesso (in caso positivo) di uso della risorsa.

Le entità PEP e PDP devono essere tenute concettualmente separate ma nessuno vieta di implementarle nella stessa applicazione.

Nonostante XACML sia molto giovane (appena uscita la versione 2.0) ha la caratteristica di poter integrarsi perfettamante con SAML (lo vedremo più avanti), LDAP e con molti altri protagonisti delle nostre notti insonni.



Capitolo 3 top

Web Service sicuri

  1. XML firewall

I concetti visti permettono di introdurre una nuova entità nell’universo della sicurezza detta XML firewall: esso è un firewall che si occupa del controllo dei file XML, quando riceve ad esempio un documento SOAP provvede a verificare che sia firmato e cifrato correttamente e che le informazioni all’interno sia coerenti. Agisce nei livelli più alti del modello ISO/OSI o meglio del modello TCP/IP, e può essere sia di tipo hardware che software.

Come detto in altre occasioni uno dei motivi dell’insicurezza dei WS è il fatto che siano trasparenti ai firewall; con il concetto di XML Firewall eviteremo tale inconveniente: è necessario però che a tutti i documenti sia applicato XML Digital Signature e XML Encryption.

Fig. 1 Web Service sicuri

  1. WS Security

Le specifiche WS-Security (WSS) indicano uno standard per l’uso delle tecnologie XML-Encryption e XML Digital Signature nei messaggi SOAP.

WS-Security precisa che l’header SOAP contenga i dati relativi alla protezione; non specifica il formato della firma o della crittografia, ma come incorporare le informazioni sulla protezione definite in base ad altre specifiche.

Uno degli aspetti fondamentali di WSS è l’uso del concetto di Security Token. Un SecurityToken è simile ad una carta d’identità o meglio ad un pass che deve essere mostrato per usufruire di un determinato WS. I token possono essere sia in formato testo che binario, vengono suddivisi in 6 tipi:

  • UsernameToken: coppia login e digest della passoword

  • certificato X.509: è il più usato tra quelli binari, viene definito come BinarySecurityToken

  • ticket Kerberos: il Kerberos è un sistema di autenticazione nato nel 1993 ad opera del MIT, un ticket in questo contesto è un ‘insieme di dati’ che permette ad un servizio di identificare un client. Nonostante Kerberos non sia un server di AAA (assicura solo l’autenticazione) è usato in varie implementazioni di UNIX e

    come default in Windows 2000/2003

  • SAML assertion: vedi capitolo successivo

  • documento XCBF: nel caso di dati biometrici

  • documenti XrML (eXtensible rights Markup Language): gestione diritti digitali

Se il client usa lo UsernameToken deve inviare, nella richiesta di esecuzione del web service, la sua password sottoposta ad hash e firmare il messaggio usando tale password; in caso di X.509 (PKI) il messaggio può essere firmato con la chiave privata.

Listing 3.1: UsernameToken e BinarySecurityToken

1 <!------------------------------------------------------->

2 <wsse:UsernameToken>

3 <wsse:Username>rudi</wsse:Username>

4 <wsse:Password Type="wsse:PasswordDigest">

5 780d06d3a2af1b22aa2f657aa1385e3813a9d2ecc16edff

6 </wsse:Password>

7 <wsse:Nonce>5uW4ABku/m6/S5rnE+L7vg==</wsse:Nonce>

8 <wsu:Created

9 xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility>

10 2004-09-18T15:44:02Z

11 </wsu:Created>

12 </wsse:UsernameToken>

13

14 <!------------------------------------------------------->

15 <wsse:BinarySecurityToken

16 ValueType="wsse:X509v3"

17 EncodingType="wsse:Base64Binary"

18 Id="SecurityToken-f49bd662-59a0-401a-ab23-1aa12764184f">

19 UUBni3ImMULTIVAC...e...cavolate..vArIIIeee..

20 </wsse:BinarySecurityToken>

Nel listato 3.2 viene mostrato un esempio di applicazione della XML Encryption all’interno del WSS. Il body del messaggio SOAP è esattamente identico a quello del listato 2.2 mentre, come detto, nell’header vengono aggiunte altre informazioni. Altri livelli della WSS o altre specificazioni che di solito risiedono al di sopra dello standard principale sono:

  • WS Trust: rende sicura e gestisce la ‘fiducia’ in un’architettura distribuita;

  • WS SecureConversation: usa WSS e WS Trust che permette la negoziazione di un contesto per l’instaurazione di una connessione sicura come lo scambio delle chiavi di sessione;

  • WS Federation: per lo scambio e la condivisione di informazioni sensibili tra differenti organizzazioni;

  • WS SecurityPolicy: è un’aggiunta allo standard WSS, specifica policy e requisiti di sicurezza.

Listing 3.2: XML Encryption e WS Security

1 <soap:Envelope

2 xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"

3 xmlns:xenc="http://www.w3.org/2001/04/xmlenc#">

4 <soap:Header

5 xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/07/secext"

6 xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility">

7 <wsu:Timestamp>

8 <wsu:Created

9 wsu:Id="Id-3beeb885-16a4-4b65-b14c-0cfe6ad26800">

10 2004-08-22T14:26:15Z

11 </wsu:Created>

12 <wsu:Expires

13 wsu:Id="Id-10c46143-cb53-4a8e-9e83-ef374e40aa54">

14 2004-12-22T14:31:15Z

15 </wsu:Expires>

16 </wsu:Timestamp>

17 <wsse:Security soap:mustUnderstand="1" >

18 <xenc:ReferenceList>

19 <xenc:DataReference

20 URI="#EncryptedContent-f6f50b24-3458-41d3-aac4-390f476f2e51" />

21 </xenc:ReferenceList>

22 <xenc:ReferenceList>

23 <xenc:DataReference

24 URI="#EncryptedContent-666b184a-a388-46cc-a9e306583b9d43b6" />

25 </xenc:ReferenceList>

26 </wsse:Security>

27 </soap:Header>

28 <soap:Body>

29 ...il messaggio SOAP vero e proprio...

30 </soap:Body>

31 </soap:Envelope>

 



Capitolo 4 top

L’autenticazione del futuro

  1. SAML e Single Sign-On

Il Single Sign-On (SSO) consente ad un utente di autenticarsi una sola volta per accedere a differenti risorse. Nelle sua implementazione di base permette di scambiare il securityToken in maniera sicura tra diverse entità.

Security Assertions Markup Language (SAML) è un linguaggio XML che definisce appunto le regole (la sintassi) per lo scambio delle informazioni di autenticazione tra applicazioni; deriva dalla fusione di due standard concorrenti S2ML (Security Services Markup Language) e AuthML (Authentication XML). Questo modello introduce un entità chiamata SAML Authority, che svolge mansioni paragonabili a quelle di una Certification Authority (CA); un ruolo simile ad esempio è svolto da Microsoft nell’infrastruttura chiamata Passport.

Immaginiamo che un utente A voglia invocare due WS di due differenti server che indichiamo con X e Y, ipotizziamo inoltre che l’uso dei WS necessiti di autenticazione. A invia a X le proprie credenziali, X controlla la validità ed in caso di veridicità permette l’uso del WS: l’utente A invoca il WS. Ora A deve usufruire del service del server Y: nella metodologia comune dovrebbe inviare una seconda volta le credenziali. Con il SSO, e con SAML, il server Y quando riceve la richiesta di esecuzione del WS chiede alla SAML Authority, cioè al server X oppure ad una terza entità, l’assertion dell’utente, ossia l’informazione che l’utente A è autenticato.

Fig. 2  L’autenticazione del futuro

L’assertion è in generale una dichiarazione di un ‘fatto’ che ri guarda un determinato soggetto in un determinato istante; può essere di tre tipi: di un attributo, di autenticazione e di autorizzazione.

Gli elementi di un assertion sono:

  • issuer: SAML authority

  • assertion ID: codice identificativo

  • subject: entità di cui si richiede l’autenticazione

  • advice: informazioni addizionali fornite dalla SAML Authority

  • conditions: condizioni sulla validità dell’assertion; è espressa nella forma NotBefore e NotOnOrAfter

Listing 4.1: Esempio SAML assertion di autenticazione

1 <samlp:Response

2 MajorVersion="1" MinorVersion="0"

3 RequestID="128.14.234.20.90123456"

4 InResponseTo="123.45.678.90.12345678"

5 StatusCode="Success">

6 <saml:Assertion

7 MajorVersion="1" MinorVersion="0"

8 AssertionID="123.45.678.90.12345678"

9 Issuer="Il laboratorio della vostra mente"

10 IssueInstant="2002-01-14T10:00:23Z">

11 <saml:Conditions

12 NotBefore="2003-12-14T10:00:30Z"

13 NotAfter="2004-12-14T10:15:00Z" />

14 <saml:AuthenticationStatement

15 AuthenticationMethod="Password"

16 AuthenticationInstant="2001-01-14T10:00:20Z">

17 <saml:Subject>

18 <saml:NameIdentifier

19 SecurityDomain="ilserver.del.mondo" Name="rudi" />

20 </saml:Subject>

21 </saml:AuthenticationStatement>

22 </saml:Assertion>

23 </samlp:Response>

Le richieste, le risposte e le assertion SAML vengono trasportati in un messaggio SOAP; generalmente risiedono nel body del messaggio. L’estrazione degli elementi SAML può avvenire tramite browser oppure all’interno di XML Firewall, nell’ultimo caso il messaggio deve necessariamente essere elaborato con le specifiche XMLDS.

Nel settembre del 2001 è nata la Liverty Alliace, un consorzio di aziende (vendor e software house) formato con lo scopo di definire standard per la gestione delle identità e in particolare per proporre un framework SSO. Attualmente comprede più di 160 membri: Sony, Nokia, Novell, Vodafone, HP, Bank of America, Sun, RSA. . .

Lo scopo, come detto, è quello di integrare le varie tecnologie XML in una infrastruttura che permetta la gestione: dell’identità (network e federal), del SSO2 e del singolo logout, del cosidetto circolo di fiducia (idendity provider, service provider ecc.) e SAML. Tutto questo dovrebbe avvenire nella piena osservanza delle regole di privacy.



Capitolo 5 top

Alla fine

  1. Qualche implementazione

Avete bisogno di qualche software o di qualche libreria? Per SSL/TLS usate pure Apache e Tomcat configurato adeguatamente. Per IPsec potete ricorrere ad OpenSWAN (o al defunto FreeSWAN), a KAME o a OpenVPN: io preferisco il primo ma il secondo promette molto bene. Soluzioni proprietarie non le voglio elencare!

Implementare XML Encryption (e XML-Sig) in Java non è difficile, in rete sicuramente troverete qualche articolo interessante (consiglio di partire da webservices.xml.com.L’architettura .NET offre delle discrete (mai usate personalmente, ma almeno così sembra) librerie, mamma Microsoft pensa sempre a voi. Progetti Open Source sono ad esempio XML Security di Apache, offre l’implementazione degli standard sia per C++ che per Java.

Per SAML affidatevi pure all’ottimo OpenSAML (i pacchetti che iniziano con Open sono sempre marchio di qualità), anche qui c’è sia Java che C++. A XACML ci pensa Sun con il suo SunXacml, lo trovate su sourceforge.

Il JavaWeb Services Developer Pack (versione 1.4) implementa WSS, maggiori info le trovate sul sito di Java. C’è un ottimo progetto individuale chiamato Axis-wsse che guarda caso implementa le specifiche Web Service Security per Apache Axis. Infine soluzioni proprietarie serie le offrono ad esempio Verisign, Netegrity e Entrust, per il sito googlate.

Nonostante sia decisamente più SW che HW finisco questa disordinata lista con un dispositivo hardware veramente interessante: il XS40 XML Security Gateway della DataPower.

    1. Conclusioni

Ricapitoliamo brevemente.

Se siete un utente qualsiasi o se avete bisogno di usare XML o i WS all’interno di una rete privata vi consiglio l’uso delle tecniche basate su SSL/TLS (o al massimo uno dei miei standard preferiti l’IPsec).

Se volete fare i fighi applicate pure XML Encryption e XML Signature.

Se siete veramente advanced allora usate SAML e usate SSO anche solo per controllarvi la posta.

Il resto inventatelo.

 

Copyright @2004 Verago Rudi.

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being ‘Perché’, with no Front-Cover Texts, and with no Back-Cover Texts.



Username:
Password:
To sign up for an account, click register... Register
Hide





Powered By



Campagna Anti-IF


Skin


PARTNER
Zio Budda
HostingJava


LICENZA



Eccetto dove diversamente specificato, i contenuti di questo sito sono rilasciati sotto licenza Creative Commons

Sitemap  © 2002-2004 Copyright Information. Privacy . Today is domenica 1 agosto 2010