Sperimentazioni di sicurezza A.A. 2009-2010
Apache e HTTPS
Speaker:
Luca Maria Aiello, PhD student
Università degli Studi di Torino, Computer Science Department
Corso Svizzera, 185 – 10149, Torino, Italy
[email protected]
Sperimentazioni di Sicurezza, A.A. 2009/2010
Apache HTTP server
o Server web open-source e multipiattaforma
o Versione 1.0 rilasciata nel 1995
• A partire dal 1996 diventa il web server più popolare al mondo
o Utilizzato solitamente in combinazione con PHP e MySQL
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.8
o Ai nostri scopi è necessario anche il pacchetto OpenSSL (versione
0.9.7m), che dovete estrarre nella vostra HOME
o Create una cartella di nome “apache” nella vostra HOME
o 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
make
make install
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
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
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 piacimento
o Da browser, accedere all’indirizzo
http://localhost:8080/index.html
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 direttive
o Le direttive top level si riferiscono all’intero server
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)
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
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 Basic
realm
AuthName “Bebop access”
AuthBasicProvider file
AuthUserFile /usr/local/apache/passwd/passwords
Require user SpikeSpiegel
</Directory>
autenticazione
via password
le password
sono memorizzate
in un file (default)
utente
autorizzato
Sperimentazioni di Sicurezza, A.A. 2009/2010
path al file
delle password
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 …
BebopCrew: SpikeSpiegel JetBlack FayeValentine
<Directory /usr/home/…/apache/htdocs/protected>
AuthType Basic
AuthName “Bebop access”
AuthBasicProvider file
AuthUserFile /usr/local/apache/passwd/passwords
AuthGroupFile /usr/local/apache/passwd/groups
Require group BebopCrew
</Directory>
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 Basic
AuthName “Limited access”
AuthBasicProvider file
AuthUserFile /usr/local/apache/passwd/passwords
Require valid-user
Order allow, deny
Allow from 192.168.1.1
Deny from 192.231.2.2
Satisfy Any
</Directory>
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)
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
<Directory …>
AllowOverride All / None / directive_type
</Directory>
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
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 FollowSymLinks
AllowOverride None
Order deny, allow
Deny from all
</Directory>
<FilesMatch “^\.ht”>
Order allow,deny
Deny from all
Satisfy All
</FilesMatch>
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 interfaccia
o Vedremo i Virtual Host name-based
Sperimentazioni di Sicurezza, A.A. 2009/2010
Name-based Virtual Host
o Nel file httpd.conf, decommentare
Include conf/extra/httpd-vhosts.conf
o Creare due cartelle (loopback e localhost) in htdocs
o Nel file conf/extra/httpd-vhosts.conf creare due VirtualHost
<VirtualHost *:8080>
ServerAdmin [email protected]
DocumentRoot “…/htdocs/localhost”
ServerName localhost
ServerAlias …
ErrorLog “localhost-error_log”
CustomLog “localhost-access_log” common
</VirtualHost>
(Lo stesso per loopback)
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
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
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)
Sperimentazioni di Sicurezza, A.A. 2009/2010
Richiami OpenSSL: generazione certificati
o Per creare il certificato autofirmato della CA
openssl genrsa –out CAkey.pem 2048
openssl rsa –pubout –in CAkey.pem –out CApub.pem
openssl req –config openssl.cnf –key CAkey.pem –new
–x509 –days 365 –out CAreq.pem
o Per creare il certificato del server
openssl genrsa –out UsrKey.pem 2048
openssl rsa –pubout –in UsrKey.pem –out UsrPub.pem
openssl req –config openssl.cnf –key UsrKey.pem
–new –out UsrReq.pem
openssl x509 -days 365 -CA CAreq.pem -CAkey CAkey.pem
-CAcreateserial -req -in UsrReq.pem
-out UsrCert.pem
Sperimentazioni di Sicurezza, A.A. 2009/2010
Abilitazione di SSL: modifiche ad httpd.conf
o Le seguenti righe in httpd.conf devono essere decommentate
Include conf/extra/httpd-ssl.conf
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>
o Commentare anche la riga: Listen 8080
• È una necessità particolare in questo laboratorio…
Sperimentazioni di Sicurezza, A.A. 2009/2010
Abilitazione di SSL: impostazione del VirtualHost
o Posizionare server.key e servert.crt in apache/conf
o Posizionare ca-bundle.crt in una nuova directory apache/conf/ssl.crt
o Modificare il file conf/extra/httpd-ssl.conf
Listen 8443
…
<VirtualHost *:8443>
…
ServerName localhost:8443
DocumentRoot “…/apache/htdocs/ssl”
SSLEngine on
SSLCertificateFile “…/apache/conf/server.crt”
SSLCertificateKeyFile “…/apache/conf/server.key”
SSLCACertificateFile “…/apache/conf/ssl.crt/ca-bundle.crt”
…
</VirtualHost>
Sperimentazioni di Sicurezza, A.A. 2009/2010
Connessione tramite HTTPS
Con un browser, accedere a https://localhost:8443
o Verrà richiesto di dare fiducia al certificato della CA
o
Sperimentazioni di Sicurezza, A.A. 2009/2010
Common name mismatch
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”
o
Sperimentazioni di Sicurezza, A.A. 2009/2010
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
Sperimentazioni di Sicurezza, A.A. 2008/2009
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
Sperimentazioni di Sicurezza, A.A. 2009/2010
Installazione PHP
o Linguaggio di scripting server-side, necessario se si vuole sviluppare
o
o
o
o
un servizio web non banale
Scaricare la versione 5.1.6 (www.php.net)
Scaricare la libreria LibXML 2.6.30 (ftp://xmlsoft.org/libxml2)
Estrarre entrambi i pacchetti nella home
Eseguire, per PHP, i seguenti comandi
./configure –prefix=$HOME/php
–-with-apxs2=$HOME/apache/bin/apxs
--with-libxml-dir=$HOME/libxml2…
make
Sperimentazioni di Sicurezza, A.A. 2009/2010
Installazione PHP: modifica configurazione Apache
o Nel file httpd.conf, aggiungere
LoadModule php5_module modules/libphp5.so
<Files *.php>
SetOutputFilter PHP
SetInputFilter PHP
LimitRequestBody 9524288
</Files>
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
DirectoryIndex index.php
o Copiare il file php-5.1.6/libs/libphp5.so in apache/modules
Sperimentazioni di Sicurezza, A.A. 2009/2010
Una pagina PHP di test
o Creare una pagina index.php accessibile via HTTP
<?php
phpinfo();
?>
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…
Sperimentazioni di Sicurezza, A.A. 2009/2010
Piattaforme alternative
o
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/
Con Ubuntu, Linux, Windows e Mac potete provare XAMPP
• http://www.apachefriends.org/en/xampp.html
Sperimentazioni di Sicurezza, A.A. 2009/2010
Sperimentazioni di sicurezza A.A. 2009-2010
Apache e HTTPS
Grazie per l’attenzione!
Speaker:
Luca Maria Aiello, PhD student
Università degli Studi di Torino, Computer Science Department
Corso Svizzera, 185 – 10149, Torino, Italy
[email protected]
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.
Sperimentazioni di Sicurezza, A.A. 2009/2010
Scarica

slides - Luca Maria Aiello