Sperimentazioni di Sicurezza, A.A. 2009/2010 Apache e HTTPS Speaker: Luca Maria Aiello, PhD student...

34
Sperimentazioni di Sicurezza, A.A. 2009/2010 Apache e HTTPS Apache e HTTPS Speaker: Luca Maria Aiello, PhD student Università degli Studi di Torino, Computer Science Depa Corso Svizzera, 185 – 10149, Torino, Italy [email protected] Sperimentazioni di sicurezza A.A. 2009-2010

Transcript of Sperimentazioni di Sicurezza, A.A. 2009/2010 Apache e HTTPS Speaker: Luca Maria Aiello, PhD student...

Page 1: Sperimentazioni di Sicurezza, A.A. 2009/2010 Apache e HTTPS Speaker: Luca Maria Aiello, PhD student Università degli Studi di Torino, Computer Science.

Sperimentazioni di Sicurezza, A.A. 2009/2010

Apache e HTTPSApache e HTTPS

Speaker:Luca Maria Aiello, PhD studentUniversità degli Studi di Torino, Computer Science DepartmentCorso Svizzera, 185 – 10149, Torino, [email protected]

Sperimentazioni di sicurezza A.A. 2009-2010

Page 2: Sperimentazioni di Sicurezza, A.A. 2009/2010 Apache e HTTPS Speaker: Luca Maria Aiello, PhD student Università degli Studi di Torino, Computer Science.

Sperimentazioni di Sicurezza, A.A. 2009/2010

Apache HTTP server

o Server web open-source e multipiattaformao Versione 1.0 rilasciata nel 1995

• A partire dal 1996 diventa il web server più popolare al mondoo Utilizzato solitamente in combinazione con PHP e MySQL

Page 3: Sperimentazioni di Sicurezza, A.A. 2009/2010 Apache e HTTPS Speaker: Luca Maria Aiello, PhD student Università degli Studi di Torino, Computer Science.

Sperimentazioni di Sicurezza, A.A. 2009/2010

Download e installazione

o http://httpd.apache.org/• http://archive.apache.org/dist/httpd/

o Scaricare la versione 2.2.8o Ai nostri scopi è necessario anche il pacchetto OpenSSL (versione

0.9.7m), che dovete estrarre nella vostra HOMEo Create una cartella di nome “apache” nella vostra HOMEo Eseguite i passi di configure, make e make install

./configure --enable-module=SO--enable-ssl--prefix=$HOME/apache--with-ssl=$HOME/openssl-0.9.7m

makemake install

Page 4: Sperimentazioni di Sicurezza, A.A. 2009/2010 Apache e HTTPS Speaker: Luca Maria Aiello, PhD student Università degli Studi di Torino, Computer Science.

Sperimentazioni di Sicurezza, A.A. 2009/2010

Librerie necessarie

o Per il corretto funzionamento dello strato SSL è necessario disporre di alcune librerie

o Copiare nella cartella lib i seguenti files• /usr/sfw/lib/libcrypto.so.0.9.7• /usr/sfw/lib/libssl.so.0.9.7

o Ora è possibile avviare il server

Page 5: Sperimentazioni di Sicurezza, A.A. 2009/2010 Apache e HTTPS Speaker: Luca Maria Aiello, PhD student Università degli Studi di Torino, Computer Science.

Sperimentazioni di Sicurezza, A.A. 2009/2010

Avvio del demone http

o Il file apache/bin/apachectl serve per avviare o interrompere il demone di Apache (httpd)• apachectl start / restart• apachectl stop

o Inizialmente non si riuscirà a lanciare il comando, perché non si dispone dei permessi per avviare un demone in ascolto sulla porta di default per http (80)• Modificare il file di configurazione conf/httpd.conf

• Listen 8080• ServerName [email protected]

o Il comando ps auxw | grep httpd visualizza tutti i processi relativi al demone http

o Per controllare la correttezza della sintassi dei file di configurazione, eseguire httpd -t

Page 6: Sperimentazioni di Sicurezza, A.A. 2009/2010 Apache e HTTPS Speaker: Luca Maria Aiello, PhD student Università degli Studi di Torino, Computer Science.

Sperimentazioni di Sicurezza, A.A. 2009/2010

Una prima pagina web

o Nella directory htdocs risiedono i file html che vogliamo rendere pubblici

o Editare il file htdocs/index.html a piacimentoo Da browser, accedere all’indirizzo

http://localhost:8080/index.html

Page 7: Sperimentazioni di Sicurezza, A.A. 2009/2010 Apache e HTTPS Speaker: Luca Maria Aiello, PhD student Università degli Studi di Torino, Computer Science.

Sperimentazioni di Sicurezza, A.A. 2009/2010

File httpd.conf

o conf/httpd.conf è il file di configurazione principale di Apache• Contiene un insieme di direttive in plain text• Le modifiche al file vengono percepite solo al riavvio del server• Il carattere # è usato per commentare

o È possibile specificare delle direttive all’interno di specifici blocchi• <Directory>, <DirectoryMatch>, <Files>, <FilesMatch>,

<Location>, <LocationMatch>, <VirtualHost>, …• <Directory /usr/local/httpd/docs> direttive </Directory>• <Directory "^/www/.*/[0-9]{3}"> direttive </Directory>

• È anche possibile annidare i blocchi di direttiveo Le direttive top level si riferiscono all’intero server

Page 8: Sperimentazioni di Sicurezza, A.A. 2009/2010 Apache e HTTPS Speaker: Luca Maria Aiello, PhD student Università degli Studi di Torino, Computer Science.

Sperimentazioni di Sicurezza, A.A. 2009/2010

File httpd.conf: direttive globali

o ServerRoot path• La directory base di Apache

o Listen port• La porta su cui il demone httpd è in ascolto

o ServerAdmin emailaddress• L’indirizzo dell’amministratore del server

o ServerName URL• Il nome di dominio del server

o Timeout n• Tempo di attesa massimo per le richieste (POST, GET) in secondi

o DefaultType MIMEtype• Il tipo MIME di default col quale il server fornisce i suoi file (specificato

nel Content-type della HTTP response)

Page 9: Sperimentazioni di Sicurezza, A.A. 2009/2010 Apache e HTTPS Speaker: Luca Maria Aiello, PhD student Università degli Studi di Torino, Computer Science.

Sperimentazioni di Sicurezza, A.A. 2009/2010

Accesso autenticato in chiaro: htpasswd

o Creare un sottoalbero di htdocs che sia accessibile solo da un ristretto numero di utenti, autenticati tramite id-password

o È necessario creare un file di password, in una directory non accessibile dall’esterno (e.g. apache/passwd)

o La creazione viene effettuata tramite il comando htpasswd• htpasswd [options] password_file_path username• Options:

• -c : crea un nuovo file• -m, -s : cifra tramite MD5 o SHA1• -p : salva la password in plaintext• -D : cancella l’utente specificato• …

htpasswd -c /usr/…/apache/passwd/password SpikeSpiegel

Page 10: Sperimentazioni di Sicurezza, A.A. 2009/2010 Apache e HTTPS Speaker: Luca Maria Aiello, PhD student Università degli Studi di Torino, Computer Science.

Sperimentazioni di Sicurezza, A.A. 2009/2010

Accesso autenticato in chiaro: httpd.conf

o Per specificare quali directory richiedono l’autenticazione via password è necessario aggiungere delle direttive in httpd.conf

<Directory /usr/home/…/apache/htdocs/protected>AuthType BasicAuthName “Bebop access”AuthBasicProvider fileAuthUserFile /usr/local/apache/passwd/passwordsRequire user SpikeSpiegel

</Directory>

le passwordsono memorizzate

in un file (default)

utenteautorizzato

path al filedelle password

autenticazionevia password

realm

Page 11: Sperimentazioni di Sicurezza, A.A. 2009/2010 Apache e HTTPS Speaker: Luca Maria Aiello, PhD student Università degli Studi di Torino, Computer Science.

Sperimentazioni di Sicurezza, A.A. 2009/2010

Accesso autenticato in chiaro: group file

o Per garantire l’accesso ad un gruppo di utenti si può specificare Require valid-user, oppure creare un file in cui si specificano le identità dei membri autorizzati.• Semplice sintassi: GroupName: userName1 userName2 …

<Directory /usr/home/…/apache/htdocs/protected>AuthType BasicAuthName “Bebop access”AuthBasicProvider fileAuthUserFile /usr/local/apache/passwd/passwordsAuthGroupFile /usr/local/apache/passwd/groupsRequire group BebopCrew

</Directory>

BebopCrew: SpikeSpiegel JetBlack FayeValentine

Page 12: Sperimentazioni di Sicurezza, A.A. 2009/2010 Apache e HTTPS Speaker: Luca Maria Aiello, PhD student Università degli Studi di Torino, Computer Science.

Sperimentazioni di Sicurezza, A.A. 2009/2010

Restrizione degli accessi: httpd.conf

o Possono essere specificate differenti limitazioni all’accesso• Le clausole Order e Satisfy rendono flessibile la loro

combinazione

<Directory /usr/home/…/apache/htdocs/protected>AuthType BasicAuthName “Limited access”AuthBasicProvider fileAuthUserFile /usr/local/apache/passwd/passwordsRequire valid-userOrder allow, denyAllow from 192.168.1.1Deny from 192.231.2.2Satisfy Any

</Directory>

Page 13: Sperimentazioni di Sicurezza, A.A. 2009/2010 Apache e HTTPS Speaker: Luca Maria Aiello, PhD student Università degli Studi di Torino, Computer Science.

Sperimentazioni di Sicurezza, A.A. 2009/2010

Configurazione distribuita: .htaccess (1)

o Tramite httpd.conf si gestisce la configurazione delle direttive in modo centralizzato (i.e.: in un unico file)

o Alternativamente, è possibile specificare le medesime direttive in diversi file .htaccess (file di configurazione distribuita) posizionati nelle directory di interesse• Le direttive sono valide per tutto il sottoalbero a partire dalla

directory in cui .htaccess è creato• sovrascrive o specifica meglio le direttive di httpd.conf

o La configurazione distribuita dovrebbe essere usata solo se non si ha accesso al file di configurazione principale• Problemi di efficienza (ricerca dei file .htaccess)• Problemi di sicurezza (si delega agli utenti la responsabilità di

configurazione)

Page 14: Sperimentazioni di Sicurezza, A.A. 2009/2010 Apache e HTTPS Speaker: Luca Maria Aiello, PhD student Università degli Studi di Torino, Computer Science.

Sperimentazioni di Sicurezza, A.A. 2009/2010

Configurazione distribuita: .htaccess (2)

o Per permettere l’uso dei file di configurazione locale bisogna specificare la direttiva AllowOverride

o Per conoscere i possibili valori di directive-type, consultare il manuale di Apache• Ad esempio le opzioni di autenticazione possono essere

specificate:• AllowOverride AuthConfig

<Directory …>AllowOverride All / None / directive_type

</Directory>

Page 15: Sperimentazioni di Sicurezza, A.A. 2009/2010 Apache e HTTPS Speaker: Luca Maria Aiello, PhD student Università degli Studi di Torino, Computer Science.

Sperimentazioni di Sicurezza, A.A. 2009/2010

File httpd.conf: root directory

o È importante specificare delle direttive molto restrittive per la directory root

o Permessi di accesso per quei sottoalberi del file system che si desidera rendere accessibili saranno specificati da successivi blocchi <Directory>

<Directory />Options FollowSymLinksAllowOverride NoneOrder deny, allowDeny from all

</Directory>

<FilesMatch “^\.ht”>Order allow,denyDeny from allSatisfy All

</FilesMatch>

Page 16: Sperimentazioni di Sicurezza, A.A. 2009/2010 Apache e HTTPS Speaker: Luca Maria Aiello, PhD student Università degli Studi di Torino, Computer Science.

Sperimentazioni di Sicurezza, A.A. 2009/2010

Virtual Hosting

o Può essere utile utilizzare una unica macchina fisica per ospitare più servizi web. Questa tecnica viene denominata Virtual Hosting• Name-based: differenti siti web disponibili presso un unico

indirizzo IP• Il client invia una richiesta HTTP specificando il nome di dominio

desiderato; Apache si occupa di far pervenire la richiesta al servizio giusto

• IP-based: uno stesso sito è raggiungibile su diversi indirizzi IP• Utilizzato per server multi-homed, con un indirizzo IP diverso su

ogni interfacciao Vedremo i Virtual Host name-based

Page 17: Sperimentazioni di Sicurezza, A.A. 2009/2010 Apache e HTTPS Speaker: Luca Maria Aiello, PhD student Università degli Studi di Torino, Computer Science.

Sperimentazioni di Sicurezza, A.A. 2009/2010

Name-based Virtual Host

o Nel file httpd.conf, decommentare

o Creare due cartelle (loopback e localhost) in htdocso Nel file conf/extra/httpd-vhosts.conf creare due VirtualHost

Include conf/extra/httpd-vhosts.conf

<VirtualHost *:8080>ServerAdmin [email protected] “…/htdocs/localhost”ServerName localhostServerAlias …ErrorLog “localhost-error_log”CustomLog “localhost-access_log” common

</VirtualHost>

(Lo stesso per loopback)

Page 18: Sperimentazioni di Sicurezza, A.A. 2009/2010 Apache e HTTPS Speaker: Luca Maria Aiello, PhD student Università degli Studi di Torino, Computer Science.

Sperimentazioni di Sicurezza, A.A. 2009/2010

Accesso ai Virtual Host

o Da browser, digitare• http://localhost:8080• http://127.0.0.1:8080

o Appariranno le due diverse pagine che sono state definite nelle directory localhost e loopback

Page 19: Sperimentazioni di Sicurezza, A.A. 2009/2010 Apache e HTTPS Speaker: Luca Maria Aiello, PhD student Università degli Studi di Torino, Computer Science.

Sperimentazioni di Sicurezza, A.A. 2009/2010

Autenticazione sicura con HTTPS

o Le password dell’autenticazione Basic sono inviate in chiaro!o Una soluzione è rappresentata dall’uso di HTTPS, ossia il protocollo

HTTP reso sicuro tramite SSL

Page 20: Sperimentazioni di Sicurezza, A.A. 2009/2010 Apache e HTTPS Speaker: Luca Maria Aiello, PhD student Università degli Studi di Torino, Computer Science.

Sperimentazioni di Sicurezza, A.A. 2009/2010

Abilitazione di SSL: creazione dei certificati

o Con OpenSSL, creare una coppia di chiavi RSA ed un certificato autofirmato di una CA (ca-bundle.crt)

o Creare una coppia di chiavi RSA per il server. Rinominare la chiave segreta come server.key

o Con la chiave della CA, creare un certificato per il web server (server.crt)

Page 21: Sperimentazioni di Sicurezza, A.A. 2009/2010 Apache e HTTPS Speaker: Luca Maria Aiello, PhD student Università degli Studi di Torino, Computer Science.

Sperimentazioni di Sicurezza, A.A. 2009/2010

Richiami OpenSSL: generazione certificati

o Per creare il certificato autofirmato della CA

o Per creare il certificato del server

openssl genrsa –out CAkey.pem 2048openssl rsa –pubout –in CAkey.pem –out CApub.pemopenssl req –config openssl.cnf –key CAkey.pem –new

–x509 –days 365 –out CAreq.pem

openssl genrsa –out UsrKey.pem 2048openssl rsa –pubout –in UsrKey.pem –out UsrPub.pemopenssl req –config openssl.cnf –key UsrKey.pem

–new –out UsrReq.pemopenssl x509 -days 365 -CA CAreq.pem -CAkey CAkey.pem

-CAcreateserial -req -in UsrReq.pem -out UsrCert.pem

Page 22: Sperimentazioni di Sicurezza, A.A. 2009/2010 Apache e HTTPS Speaker: Luca Maria Aiello, PhD student Università degli Studi di Torino, Computer Science.

Sperimentazioni di Sicurezza, A.A. 2009/2010

Abilitazione di SSL: modifiche ad httpd.conf

o Le seguenti righe in httpd.conf devono essere decommentate

o Commentare anche la riga: Listen 8080• È una necessità particolare in questo laboratorio…

Include conf/extra/httpd-ssl.conf<IfModule ssl_module>

SSLRandomSeed startup builtinSSLRandomSeed connect builtin

</IfModule>

Page 23: Sperimentazioni di Sicurezza, A.A. 2009/2010 Apache e HTTPS Speaker: Luca Maria Aiello, PhD student Università degli Studi di Torino, Computer Science.

Sperimentazioni di Sicurezza, A.A. 2009/2010

Abilitazione di SSL: impostazione del VirtualHost

o Posizionare server.key e servert.crt in apache/confo Posizionare ca-bundle.crt in una nuova directory apache/conf/ssl.crto Modificare il file conf/extra/httpd-ssl.conf

Listen 8443…<VirtualHost *:8443>

…ServerName localhost:8443DocumentRoot “…/apache/htdocs/ssl”SSLEngine onSSLCertificateFile “…/apache/conf/server.crt”SSLCertificateKeyFile “…/apache/conf/server.key”SSLCACertificateFile “…/apache/conf/ssl.crt/ca-bundle.crt”…

</VirtualHost>

Page 24: Sperimentazioni di Sicurezza, A.A. 2009/2010 Apache e HTTPS Speaker: Luca Maria Aiello, PhD student Università degli Studi di Torino, Computer Science.

Sperimentazioni di Sicurezza, A.A. 2009/2010

Connessione tramite HTTPS

o Con un browser, accedere a https://localhost:8443o Verrà richiesto di dare fiducia al certificato della CA

Page 25: Sperimentazioni di Sicurezza, A.A. 2009/2010 Apache e HTTPS Speaker: Luca Maria Aiello, PhD student Università degli Studi di Torino, Computer Science.

Sperimentazioni di Sicurezza, A.A. 2009/2010

Common name mismatch

o Nel caso in cui il nome di dominio dell’URL richiesto dal browser e il common name del certificato del server non corrispondano, il browser mostra un disclaimer

o Provate, ad esempio, ad accedere al servizio specificando l’IP della macchina e non “localhost”

Page 26: Sperimentazioni di Sicurezza, A.A. 2009/2010 Apache e HTTPS Speaker: Luca Maria Aiello, PhD student Università degli Studi di Torino, Computer Science.

Sperimentazioni di Sicurezza, A.A. 2008/2009

Successo!

o Se tutti i passi sono stati eseguiti correttamente il browser dovrebbe segnalare che la connessione è stata stabilita in modo protetto

Sperimentazioni di Sicurezza, A.A. 2008/2009

Page 27: Sperimentazioni di Sicurezza, A.A. 2009/2010 Apache e HTTPS Speaker: Luca Maria Aiello, PhD student Università degli Studi di Torino, Computer Science.

Sperimentazioni di Sicurezza, A.A. 2009/2010

Buone proprietà di HTTPS

o L’uso di HTTP su SSL garantisce diverse buone proprietà• Autenticazione del server• Scambio di una chiave di sessione per cifrare flusso di dati• (Autenticazione del client)

• Se il client è in possesso di un certificato di una sua chiave pubblica è possibile inviarlo al server in modo che la comunicazione sia two-way authenticated

o La possibilità dell’asimmetricità del protocollo di autenticazione rende questo schema molto utile in servizi reali, dove l’utente vuole avere assicurazione sull’identità del server ed inviare i propri dati in modo sicuro, ma senza dover possedere un certificato• E.g.: servizi bancari on-line

Page 28: Sperimentazioni di Sicurezza, A.A. 2009/2010 Apache e HTTPS Speaker: Luca Maria Aiello, PhD student Università degli Studi di Torino, Computer Science.

Sperimentazioni di Sicurezza, A.A. 2009/2010

Installazione PHP

o Linguaggio di scripting server-side, necessario se si vuole sviluppare un servizio web non banale

o Scaricare la versione 5.1.6 (www.php.net)o Scaricare la libreria LibXML 2.6.30 (ftp://xmlsoft.org/libxml2)o Estrarre entrambi i pacchetti nella homeo Eseguire, per PHP, i seguenti comandi

./configure –prefix=$HOME/php–-with-apxs2=$HOME/apache/bin/apxs--with-libxml-dir=$HOME/libxml2…

make

Page 29: Sperimentazioni di Sicurezza, A.A. 2009/2010 Apache e HTTPS Speaker: Luca Maria Aiello, PhD student Università degli Studi di Torino, Computer Science.

Sperimentazioni di Sicurezza, A.A. 2009/2010

Installazione PHP: modifica configurazione Apache

o Nel file httpd.conf, aggiungere

o Copiare il file php-5.1.6/libs/libphp5.so in apache/modules

LoadModule php5_module modules/libphp5.so<Files *.php>SetOutputFilter PHPSetInputFilter PHPLimitRequestBody 9524288</Files>AddType application/x-httpd-php .phpAddType application/x-httpd-php-source .phpsDirectoryIndex index.php

Page 30: Sperimentazioni di Sicurezza, A.A. 2009/2010 Apache e HTTPS Speaker: Luca Maria Aiello, PhD student Università degli Studi di Torino, Computer Science.

Sperimentazioni di Sicurezza, A.A. 2009/2010

Una pagina PHP di test

o Creare una pagina index.php accessibile via HTTP

<?phpphpinfo();

?>

Page 31: Sperimentazioni di Sicurezza, A.A. 2009/2010 Apache e HTTPS Speaker: Luca Maria Aiello, PhD student Università degli Studi di Torino, Computer Science.

Sperimentazioni di Sicurezza, A.A. 2009/2010

Problemi di installazione?

o Con la versione di Solaris che c’è in laboratorio si possono verificare alcuni problemi di configurazione dovuti alla incompatibilità di alcune particolari versioni dei diversi moduli

o Seguire alla lettera le istruzioni riportate in queste slides• Se nonostante ciò non riuscite ancora a risolvere i problemi,

provate uno switch di macchina (a volte funziona!)o Alternativamente…

Page 32: Sperimentazioni di Sicurezza, A.A. 2009/2010 Apache e HTTPS Speaker: Luca Maria Aiello, PhD student Università degli Studi di Torino, Computer Science.

Sperimentazioni di Sicurezza, A.A. 2009/2010

Piattaforme alternative

o Il pacchetto WAMP fornisce la possibilità di installare facilmente tutte le componenti per lo sviluppo di un web-service sicuro in ambiente Windows

• http://www.wampserver.com/o Con Ubuntu, Linux, Windows e Mac potete provare XAMPP

• http://www.apachefriends.org/en/xampp.html

Page 33: Sperimentazioni di Sicurezza, A.A. 2009/2010 Apache e HTTPS Speaker: Luca Maria Aiello, PhD student Università degli Studi di Torino, Computer Science.

Sperimentazioni di Sicurezza, A.A. 2009/2010

Apache e HTTPSApache e HTTPS

Speaker:Luca Maria Aiello, PhD studentUniversità degli Studi di Torino, Computer Science DepartmentCorso Svizzera, 185 – 10149, Torino, [email protected]

Sperimentazioni di sicurezza A.A. 2009-2010

Grazie per l’attenzione!

Page 34: Sperimentazioni di Sicurezza, A.A. 2009/2010 Apache e HTTPS Speaker: Luca Maria Aiello, PhD student Università degli Studi di Torino, Computer Science.

Sperimentazioni di Sicurezza, A.A. 2009/2010

©2009 by Luca Maria Aiello. Permission to make digital or hard copies of part or all of this material is currently granted without fee provided that copies are made only for personal or classroom use, are not distributed for profit or commercial advantage, and that new copies bear this notice and the full citation.