Simulazione della rete Internet

Transcript

Simulazione della rete Internet
Corso di Sicurezza su reti II
Anno accademico 2006-2007
Prof. A. De Santis
Simulazione della rete Internet:
Versione finale
Parte prima: INFORMAZIONI GENERALI
NOME DEL GRUPPO
g2isp
DENOMINAZIONE
ISP2
COMPONENTI
Barone Ivo
Laurino Domenico
MISSIONE
Implementazione di un portale web commerciale che offra web authoring e
web hosting, registrazione domini e spazio web a terzi.
PROGETTO
L'intenzione del gruppo è di realizzare la missione
utilizzando
tutti
strumenti Open Source che risultino
affidabili e facilmente reperibili e
che naturalmente non comportino acquisto e rinnovo di licenze . La scelta
è
caduta così sull'utilizzo di un Web Server ( Apache )
unito ad un
DBMS ( MySQL ) con il quale si interagirà
mediante un linguaggio di
script ( PHP ) . Quest'ultimo
è indicato anche per la creazione del portale
web
da realizzare . Affinchè le operazioni più delicate avvengano
in
maniera sicura è ritenuto fondamentale l'utilizzo di certificati ( mediante
OpenSSL ) . Vi è inoltre l'intenzione di consentire agli utenti registrati l'upload
dei propri file mediante protocollo FTP ( ProFTPD ) ma con un certo limite
sullo spazio a disposizione ( Quota o soluzione del Sistema Operativo ).
Come firewall verrà utilizzato il tool di sistema iptables, la cui configurazione
verrà illustrata in fase di descrizione e implementazione dei servizi.
0521000212
0521000440
Parte seconda: SCHEDA TECNICA
DESCRIZIONE SERVIZI
Lo scopo del gruppo è quello di fornire servizi di Web Hosting e di Web
Authoring e di registrazione di domini per conto terzi.
MANUALE DI UTILIZZO
Gli utenti per accedere ai servizi offerti devono essere registrati. Inoltre è
prevista la messa in opera di un portale web attraverso il quale i clienti
possano inviare la descrizione e eventuali mock ups delle pagine web del sito
che intendono realizzare. Si prevede anche la possibilità, per gli utenti
registrati, di poter accedere tramite ftp direttamente alle pagine del proprio
sito in modo da poterle modificare loro stessi. E' previsto inoltre il supporto
per siti web dinamici mediante l'uso di pagine Php.
IMPLEMENTAZIONE
{ Come il gruppo evade le richieste dei clienti. Procedure, tempi e compiti }
Parte terza: FASE DI SETUP
ORGANIZZAZIONE
Entrambi i componenti del gruppo si sono occupati dell’installazione dei
software e della redazione della presente documentazione
RISORSE HARDWARE
1 pc assemblato con le seguenti caratteristiche:
processore
: AMD Athlon 550 Mhz
Memoria Ram
Scheda video
Hard Disk
Lettore cd
Scheda di rete
Inc.
Scheda audio
STRUMENTI SOFTWARE
: 128MB
: Matrox mga G200
: ATA Disk 19GB
: Philips 48X
: VT86C100A di VIA Technolologies,
: Ensoniq 5880 audiopci
Sistema operativo :
Software installati:
Ubuntu 6.06 LTS x86
Apache 2.2.4
OpenSSL 0.9.8e
Mysql 5.0.37
Php
5.2.1
Proftpd 1.3.0
INSTALLAZIONE SOFTWARE
UBUNTU 6 .06 LTS x86
Il Sistema Operativo utilizzato è la distribuzione Ubuntu 6.06 LTS ( Long Term Support ) per sistemi di
tipo x86 . Tale scelta è stata dettata dalla “maggiore” conoscenza del tipo di distribuzione da parte dei
componenti del gruppo e da una importante caratteristica della stessa: quando si parla di Long Term
Support ci si riferisce ad una distribuzione per la quale è garantito un totale supporto a livello di
sviluppo ed eventuali correzioni per diversi anni oltre che i fondamentali aggiornamenti di sicurezza; in
questo caso la garanzia dura fino al 2011. Una distribuzione di questo tipo è indicata per un sistema
destinato a fornire servizi web commerciali, di web hosting ed authoring.
Ubuntu 6.06 è stato installato utilizzando l’ ALTERNATE CD, ovvero la distribuzione supportata dai
sistemi con scarse risorse hardware in quanto la macchina in dotazione rientrava in questa categoria,
e completa di tutti i package necessari ed aggiuntivi; molti dei package installati in maniera automatica
sono stati rimossi in quanto inutili ai fini della missione del gruppo . L’interfaccia grafica utilizzata è
stata la XFCE, molto più leggera ed efficace rispetto alle altre interfacce normalmente utilizzate
GNOME e KDE.
La procedura di installazione è stata quella automatica scegliendo tuttavia di non lasciare allo stesso
sistema operativo la creazione del server LAMP, acronimo di Linux Apache Mysql Php, nel qual caso
le configurazioni dei vari software sarebbero state automatiche oltre che gli stessi applicativi utilizzati
sarebbero stati quelli presenti sul CD di installazione .
L’installazione è stata portata a termine senza problemi di alcun tipo .
APACHE 2 .2 .4
Il Web Server utilizzato è Apache 2.2.4, la versione più recente all’atto della stesura del documento.
Tale scelta è dovuta ad una richiesta di maggiore stabilità e sicurezza da parte del gruppo ; tale
versione infatti dovrebbe fare propri i pregi delle versioni 2.0.x e risolverne i bug oltre tutti quelli delle
versioni 2.2.x fino a quella utilizzata .
La pregressa conoscenza di un web server di tale tipo ha influenzato la scelta del gruppo .
La procedura di installazione si è composta di diversi passi; il primo di questi ha riguardato l’ unzip
dell’archivio di Apache httpd-2.2.4.tar.gz in una specifica cartella del filesystem omessa per motivi di
sicurezza. Dalla cartella httpd-2.2.4 ottenuta è stato eseguito con permessi di root il comando
./configure lanciando così lo script di configurazione con la seguente scelta di flags:
--with-mpm=prefork
--enable-ssl
--with-ssl=/usr/local/ssl/
--disable-charset-lite
--disable-include
--disable-env
--enable-setenvif
--disable-status
--disable-asis
--disable-cgi
--disable-negotiation
--disable-imap
--disable-actions
--disable-userdir
Terminata la configurazione sono stati eseguiti gli ultimi due passi , quelli relativi alla compilazione
vera e propria , ovvero i comandi make e make install . La compilazione non ha dato particolari
problemi previa l’installazione di alcuni package aggiuntivi non presenti nel repository del CD di
installazione del Sistema Operativo e non forniti dall’archivio del web server . Gli unici errori in fase di
compilazione infatti sono stati relativi all’assenza di pacchetti necessari per il supporto di determinati
moduli del web server.
OPENSSL 0.9.8e
Il progetto OPENSSL , del quale si utilizza la versione 0 .9.8e , è nato per sviluppare un toolkit
robusto, completo di tutte le funzioni utili , sicuro dal punto di vista commerciale ed Open Source che
implementi i due protocolli di sicurezza: Secure Sockets Layer ( SSL v2 / v3 ) e Transport Layer
Security ( TLS v1 ). Il progetto è coordinato da una comunità mondiale di volontari che comunicano
tramite Internet ed attraverso esso pianificano e sviluppano il kit e la relativa documentazione.
OpenSSL si basa sulla libreria SSLeay sviluppata da Eric A. Young e Tim J. Hudson e quindi la
licenza del tool in effetti è di tipo doppio : una licenza per OpenSSL ed una per SSLeay . In questa
situazione il kit può essere usato anche per scopi commerciali a patto di rispettare le due licenze.
I componenti principali forniti sono rappresentati da tre librerie fondamentali:
- libssl.a:
Implementazione di SSL v 2, SSL v 3, TLS v 1 ed il codice richiesto per il supporto dei
protocolli lato client e lato server
- libcrypto.a :
Consente operazioni crittografiche generali e fornisce l’implementazione dello standard
X.509 v 1 / v 3 richiesto dai protocolli SSL / TLS. Tale libreria contiene una serie di routines
relative a:
- Schemi Crittografici Simmetrici ed Asimmetrici ( chiave Pubblica / Privata ) come DES, RC4,
RC2 , BLOWFISH , IDEA, RSA, DSA, Diffie - Hellman
- Funzioni Hash quali MD5, MD2, SHA , SHA – 1, MDC2, ed infine una funzione per smart
cards basata su DES.
- Certificati nello standard X.509 v 3 con supporto per crittografia RSA e DSA.
- Utility di Sistema e supporto di strutture dati.
- openssl :
tool utilizzabile da linea di comando grazie al quale è possibile accedere alle molteplici
funzionalità citate in precedenza
Per poter installare OpenSSL è necessaria la presenza del comando make, che sia presente Perl 5,
che sia installato un compilatore ANSI C e che vi sia un ambiente di sviluppo in forma librerie di
sviluppo e header files C.
Soddisfatti i prerequisiti la procedura di installazione si è svolta in quattro fasi , una di configurazione e
tre di compilazione .
Innanzitutto è stato eseguito il comando . / configure al fine di lanciare lo script di configurazione con
le opzioni di default ritenute sufficienti per il corretto funzionamento ed utilizzo del tool ( non
escludendo a priori un “ritocco” della configurazione in caso di problemi allo stato attuale non
verificatisi ).
La prima fase di compilazione è stata eseguita mediante il comando make; terminato il passo è stato
eseguito il comando make test il cui compito è quello di verificare se vi sono stati problemi non rilevati
in precedenza. Non avendo riscontri negativi si è passati all’ultima fase della procedura con
l’esecuzione del comando make install .
La procedura non è stata caratterizzata da alcun tipo di errore .
MYSQL 5.0.37
MySql è un database management system open source. Date le sue caratteristiche di performance,
alta affidabilità e facilità d'uso si è pensato fosse ideale per sviluppare i servizi richiesti . La procedura
di installazione è stata portata a termine mediante la classica procedura dei sistemi UNIX based,
quindi una volta scaricato il codice sorgente si è provveduto a lanciare i comandi
./configure
make
make install
Per completare l'installazione si è reso necessario installare alcuni moduli aggiuntivi non presenti sul
sistema operativo in uso.
Per portare a termine la commessa si era provveduto ad effettuare un upgrade del server MySql alla
versione 5.0.41 con la speranza che essa supportasse senza problemi la connessione sicura remota
al server. Nonostante il tentativo di connettersi in modo sicuro al server non sia andato a buon fine, il
gruppo ha deciso comunque di mantenere la nuova configurazione del server.
PHP 5.2.1
PHP ( acronimo per "PHP : Hypertext Preprocessor" ) è un linguaggio
di
script general purpose utilizzato per lo sviluppo Web e che può essere utilizzato ( o meglio inglobato ) all'interno del
codice HTML.
Ciò che distingue PHP da linguaggi di script client - side come JavaScript è l'esecuzione del codice
sul server; molto importante risulta anche la
sua curva di apprendimento per i nuovi utenti i quali
in poco tempo possono scrivere script server-side .
PHP consente di creare anche script da linea di comando e applicazioni desktop anche se queste
due funzionalità sono quelle meno usate .
Non è obbligatorio avere quale input HTML ma il linguaggio consente
anche di gestire file PDF,
XHTML e file XML ; fornisce anche la possibilità di interagire con un DBMS ( in tal caso MySQL ) .
La possibilità di abilitare il supporto per OpenSSL ha confermato la scelta di PHP quale linguaggio di
script da utilizzare per compiere la missione
affidata .
La procedura di installazione come nel caso del web server Apache
ha richiesto i tre passi :
primo passo di configurazione e successivi
passi di compilazione .
Nella prima fase è stata caratterizzata dall'esecuzione dello script di
configurazione configure
con le seguenti opzioni :
--with-apxs2=/usr/local/apache2/bin/apxs
--with-mysql
--prefix=/usr/local/php
--with-config-file-path=/usr/local/php
--enable-force-cgi-redirect
--disable-cgi
--with-zlib
--with-gettext
--with-gdbm
--enable-ssl=/usr/local/ssl/
Come è possibile vedere tra le opzioni è stato indicato il path di installazione nonchè l'abilitazione
del supporto per MySQL e SSL con indicazione del path di installazione di quest'ultimo .
Una volta eseguito lo script si è passati alle successive fasi della procedura di installazione: con i
comandi make e make install si è provveduto alla definitiva compilazione .
Come consiglia ogni manuale di PHP, per testare l'installazione è stata creato uno script con una
chiamata alla funzione phpinfo la quale, in caso di avvenuta e corretta installazione, restituisce tutti i
dati della
stessa, sia quelli relativi alle funzionalità generali che quelli relativi a moduli ed
estensioni aggiuntive .
Nell'arco della procedura non sono stati riscontrati problemi.
In un secondo momento si è deciso di ricompilare Php specificando l'ulteriore opzione
--with-mysqli=/usr/local/mysql/bin/mysql_config
che permetteva l'uso di librerie più innovative per l'accesso al database MySql.
PROFTPD 1.3.0
ProFTPD è un server ftp scritto per le diverse varianti di unix. E' stato progettato per essere molto
simile ad Apache prendendo molte delle idee da esso, tra le quali metodi di configurazione e la
progettazione a moduli. L'installazione di ProFTPD è stata effettuata con la classica procedura di
installazione sui sistemi Linux based:
CFLAGS=-DHAVE_OPENSSL LIBS=-lcrypto ./configure
--prefix=/usr/local/proftpd
-–with-modules=mod_sql:mod_sql_mysql:mod_tls
:mod_quotatab:mod_quotatab_sql
-–withincludes=/usr/local/mysql/include/mysql:/usr/local/ssl/include
–-with-libraries=/usr/local/mysql/lib/mysql:/usr/local/ssl/lib
make
make install
Come è possibile notare dai flag di configurazione è stato integrato il modulo di connessione al
database mysql e il modulo di openssl per sfruttarne gli algoritmi di cifratura per crittografare le
passwords degli utenti all'interno del database. Inoltre è stato aggiunto il supporto per Quota per
gestire le quote degli utenti.
Nel file di configurazione l'utente speciale "anonimous" non è stato abilitato in quanto ritenuto non
necessario per l’attività del gruppo . Il demone è stato configurato in modo tale da poter gestire i login
di utenti virtuali, ossia di utenti non presenti nel sistema, e gestire la quota associata ad ogni utente.
WEBMIN 1.350
Per la amministrazione del nostro server abbiamo utilizzato il software web based Webmin. Con
questo strumento è possibile configurare tutto il software necessario per la realizzazione della nostra
commessa che abbiamo citato nei paragrafi precedenti. E' stato inoltre possibile configurare il firewall
IPTABLES in modo semplice ed efficace.
All'atto dell'installazione, avvenuta mediante il package di installazione per Debian disponibile sul sito,
abbiamo preferito non consentire l'avvio allo start up di Webmin, ma avviarlo noi in modo manuale
allorchè avessimo necessità di usarlo.
Siccome Apache, MySql e Proftpd non sono stati installati nei loro path di default, abbiamo dovuto
configurare Webmin in modo da indicare i path dei files all'interno del nostro server.
Come atto finale abbiamo configurato il firewall IPTABLES del quale parleremo nel prossimo
paragrafo.
IPTABLES
Il software IPTABLES è stato utilizzato per filtrare i pacchetti in ingresso e in uscita dal nostro server.
Attraverso l'interfaccia web fornita da Webmin abbiamo inserito le seguenti regole:
•
Permesso connessioni in ingresso attraverso la porta 80 usando il protocollo TCP.(WWW)
•
Permesso connessioni in ingresso attraverso la porta 443 usando il protocollo TCP.(HTTPS)
•
Permesso connessioni in ingresso attraverso la porta 3306 usando il protocollo TCP
dall'indirizzo 192.168.0.4.(MySql)
•
Permesso a tutti i pacchetti che provenivano dall'interfaccia lo.
•
Drop di tutti gli altri pacchetti.
La regola 3 è stata successivamente cancellata in quanto non più necessaria per la realizzazione della
commessa.
NMAP
NMAP è un software free per l'esplorazione delle reti. Nato con lo scopo di rendere rapida la
scansione di grandi reti, funziona bene anche per la scansione di singoli hosts.Con NMAP è possibile
utilizzare i pacchetti IP per individuare quali hosts sono disponibili sulla rete, quali servizi essi ofreno,
quale sistema operativo è in uso, quale packet/filter viene utilizzato e molte altre caratteristiche.
Per l'installazione sono state seguite le istruzioni presenti sul sito insecure.org. Si è proceduto con la
classica terna di passi
./configure
make
make install
L'installazione non ha portato all'installazione di pacchetti aggiuntivi. NMAP è stato utilizzato
principalmente per eseguire scansioni periodiche sul nostro server al fine di scoprire se fossero
presenti servizi attivi non desiderati e come primo approccio per individuare la presenza di attacchi.
Parte quarta: FASE DI TUNING
SERVIZI RICHIESTI
Per il corretto e regolare svolgimento della nostra attività abbiamo bisogno di
un certificato intestato alla nostra società per poter gestire le connessioni
sicure sul nostro sito web. Inoltre avremo bisogno di certificati intestati ad
ognuno dei nostri clienti per poter permettere loro connessioni sicure.
Inoltre abbiamo bisogno di registrare i nomi di dominio per conto nostro e dei
nostri clienti.
RICHIESTE EFFETUATE
Sono state effettuate due richieste specifiche, la prima al server DNS di
assegnazione dell’indirizzo di rete 192.168.0.2 e la seconda alla Certification
Authority per ottenere un valido certificato da utilizzare in futuro.
RICHIESTE RICEVUTE
Nessuna richiesta ricevuta
Parte quinta: COMMESSE
TITOLO
Informatica Granata
DESCRIZIONE SINTETICA
Realizzazione del sito di e-commerce Informatica-granata.com per la vendita
on-line di PC ed hardware convenzionato con "UfficialePagatore"
GRUPPI
Gruppo 2 e 3 (Internet Service Provider)
DESCRIZIONE
Il sito comprende alcune pagine esplicative, un catalogo navigabile e, per gli
utenti registrati, il listino prezzi, il carrello per la spesa e la possibilita' di
acquisto on-line, tramite il sistema implementato da "UfficialePagatore.com".
Per gli utenti che hanno effettuato almeno 10 acquisti e' previsto uno sconto
del 20% sul prezzo di listino.
SPECIFICHE
Si richiede l'implementazione del sito Informatica Granata e più precisamente:
1. Gestione anagrafica clienti
2. Gestione catalogo e listino (con apposito pannello amministratori)
3. Gestione utenti amministratori
4. Carrello della spesa
5. Interfaccia col sistema di pagamento U.P.
Si richiede la registrazione di almeno 30 utenti ed un catalogo di almeno 20
prodotti di diversa prezzatura
SOLUZIONE PROPOSTA
La soluzione proposta segue lo schema previsto dal protocollo definito nello
specifico documento; il sito web di Informatica Granata utilizza il web server
Apache ed il DBMS MySQL, mentre dal punto di vista della sicurezza si ci è
affidati ad OpenSSL.
Inizialmente la soluzione proposta prevedeva una suddivisione dei vari livelli
dell’applicazione tra i server dei gruppi 2 e 3; secondo tale decisione i livelli di
presentazione e di logica dell’applicazione avrebbero risieduto sulla
macchina del gruppo 3 mentre il database sarebbe stato creato e mantenuto
sul nostro server, il server del gruppo 2.
Nella sezione Difficoltà Incontrate verranno presentati anche i motivi che
hanno condotto alla revisione delle scelte iniziali; nonostante i cambiamenti
effettuati le scelte fondamentali e gli approcci per la realizzazione
dell’applicazione sono rimasti immutati.
In generale si è scelto di creare un sito web dinamico mediante PHP al fine di
consentire l’interazione con gli utenti/clienti del negozio e con l’applicazione
preposta al pagamento degli ordini eseguiti in maniera sicura.
L’interazione con l’utente avviene mediante form da compilare con
l’indicazione di dati ed input specifici per la richiesta di servizi; la soluzione
proposta viene descritta in dettaglio nella documentazione relativa e
rispecchia ciò che è stato definito nel protocollo.
LAVORO COMPIUTO
Il nostro gruppo si è occupato della creazione e della gestione del database
“SHOP” fondamentale per l’attività del sito Informatica Granata; ciò vuol dire
che oltre alla definizione delle associazioni e delle tabelle è stata fornita una
serie di funzioni che i programmatori dell’applicazione hanno utilizzato per
implementare le funzionalità del Sistema.
Gli strumenti utilizzati per lo svolgimento del proprio incarico sono stati
MYSQL e PHP.
Mysql 5.0.37 è il Database Management System installato in fase di setup
della simulazione sulla nostra macchina e scelto per i motivi indicati nel
documento di riepilogo di tale fase.
Lo stesso vale per PHP, linguaggio di script server-side, scelto in quanto
installato in fase di setup ed utilizzato dal Gruppo 3 per l’implementazione
delle funzionalità del sito Informatica Granata.
L’attività si è concretizzata nella creazione del succitato database e di un
oggetto PHP, MyDBManager caratterizzato da tutti i metodi necessari ai
programmatori del Gruppo 3 per il loro lavoro; in tal modo il nostro compito è
stato quello di creare la struttura necessaria alla memorizzazione dei dati e di
fornire funzioni predefinite d’accesso a questi.
La scelta della creazione di quest’interfaccia è servita a separare in maniera
molto netta la logica di applicazione da quella di memorizzazione dei dati.
All’interno del gruppo, o meglio della coppia, l’organizzazione del lavoro è
stata alquanto orizzontale con una sommaria suddivisione dello stesso come
segue:
Creazione Database
Interazione Database
-
I. Barone
D. Laurino
Come già detto, la separazione dei compiti è sommaria e non netta in quanto
i due tipi di attività hanno richiesto una costante interazione, una volta
determinato in coppia il modello ER da utilizzare.
L’interazione non ha banalmente interessato solo i componenti del gruppo
ma ha coinvolto anche, ed in maniera molto forte, i membri del Gruppo 3 A.
Bruno, F. Di Perna e F. Granato.
La definizione del modello ER è derivata dal processo di raccolta dei requisiti;
tale raccolta si è basata sulla descrizione della commessa e soprattutto sulle
richieste ed esigenze del gruppo collaboratore.
Allo stesso modo le funzioni da fornire al Gruppo 3 sono state realizzate, e
modificate in corso d’opera, sulla base di quanto lo stesso gruppo ha ritenuto
necessario al fine della realizzazione delle funzionalità.
Il Database SHOP si compone di 5 tabelle:
1. Customers : utilizzata per memorizzare le informazioni relative
ai clienti di Informatica Granata come Codice Fiscale,
Nominativo, Indirizzo, Uname, Password e
l’indicazione dei
privilegi di Amministratore
2. Orders : contiene i dati caratteristici di ogni ordine effettuato,
quali Codice, Cliente che effettua l’ordine, il Totale, la Data in cui
esso è stato effettuato e se esso è stato confermato o è ancora
sospeso
3. Products : sono presenti tutte le informazioni relative ai prodotti
del negozio, il Codice, il Nome, la Descrizione, il Prezzo, la
Quantità presente in magazzino ed il path del file che contiene la
foto dell’oggetto
4. Prod_Ord : è la tabella che nasce dall’associazione esistente tra
il prodotto ordinato e l’ordine in cui lo è stato; vengono indicati il
Codice del Prodotto e dell’Ordine e la quantità ordinata
5. Tokens : questa è la struttura che memorizza i token utilizzati
dall’applicazione Informatica Granata, con il riferimento al Codice
ed al Contenuto
Vengono presentate di seguito le istruzioni SQL che hanno permesso la
creazione del database
DROP TABLE IF EXISTS 'Customers';
CREATE TABLE 'Customers' (
'CF' varchar(16) NOT NULL,
'NAME' varchar(50) default NULL,
'ADDRESS' varchar(100) default NULL,
'UNAME' varchar(20) default NULL,
'PASSWORD' varchar(8000) default NULL,
'ADMINISTRATOR' enum('True','False') default 'False',
PRIMARY KEY ('CF')
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
DROP TABLE IF EXISTS 'Orders';
CREATE TABLE 'Orders' (
'COD_ORDER' int(11) NOT NULL auto_increment,
'CUSTOMER' varchar(16) default NULL,
'TOT_ORDER' double(12,2) default NULL,
'STATUS' enum('Suspended','Closed') default 'Suspended',
'DATE' datetime default NULL,
PRIMARY KEY ('COD_ORDER'),
KEY 'CUSTOMER' ('CUSTOMER')
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
DROP TABLE IF EXISTS 'Prod_Ord';
CREATE TABLE 'Prod_Ord' (
'PRODUCT' int(11) NOT NULL,
'COD_ORDER' int(11) NOT NULL,
'QTY' int(11) default NULL,
PRIMARY KEY ('PRODUCT','COD_ORDER'),
KEY 'COD_ORDER' ('COD_ORDER')
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
DROP TABLE IF EXISTS 'Products';
CREATE TABLE 'Products' (
'COD_PROD' int(11) NOT NULL auto_increment,
'NAME' varchar(50) default NULL,
'DESCRIPTION' varchar(8000) default NULL,
'PRICE' double(9,2) default NULL,
'QTY' int(11) default NULL,
'PHOTO' varchar(256) default NULL,
PRIMARY KEY ('COD_PROD')
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
DROP TABLE IF EXISTS 'Tokens';
CREATE TABLE 'Tokens' (
'ID' int(11) NOT NULL,
'TOKEN' text,
PRIMARY KEY ('ID')
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Una volta concretizzata la definizione del modello ER si può passare alla
descrizione dell’interfaccia creata.
Si è scelto di realizzare un oggetto PHP, denominato MyDBManager, molto
simile ad un classico oggetto Java.
All’interno del costruttore viene gestita la connessione al database in modo
che essa sia unica ed utilizzabile per tutte le operazioni consentite;
nell’applicazione, per poter accedere alle funzionalità da noi fornite, i
programmatori hanno dovuto istanziare un oggetto di tipo MyDBManager e
poi utilizzarlo invocandone i metodi.
L’oggetto in esame contiene funzionalità per:
Login di Utenti ed Amministratori
Gestione Utenti con modifiche dati
Elenco Utenti e Dati Utente Specifico
Gestione Prodotti con modifiche dati
Catalogo Prodotti e Dati Prodotto Specifico
Gestione ed Elenco Ordini e Prodotti Ordinati
Gestione di Timeout e Conferma Ordini
Dal punto di vista della sicurezza ci sono tre aspetti fondamentali che sono
stati trattati.
Innanzitutto è stata valutata le possibilità di collocazione del database
all’interno del Sistema; la scelta era tra il server del nostro gruppo oppure
quello del Gruppo 3.
E’ stata scelta la prima opzione; questo ha comportato una misura di
sicurezza da noi considerata necessaria, ovvero la connessione sicura al db
utilizzando il parametro che consente di sfruttare SSL. Questa accortezza
serve per evitare che le query eseguite sul database viaggino in chiaro sulla
rete dal momento che i metodi vengono invocati sul server del Gruppo 3 ma i
dati sono sulla nostra macchina.
Il secondo aspetto riguarda l’implementazione dell’oggetto MyDBManager al
fine di evitare che l’applicazione risulti vulnerabile ad attacchi di SQL Injection.
Come è possibile notare nel codice sorgente, per ogni metodo dell’oggetto,
sono state utilizzate le due funzioni predefinite PHP addslashes e stripslashes
con le quali aggiungere e rimuovere alle/dalle stringhe da gestire tutti gli slash
necessari per l’inserimento ed il reperimento nel/dal database dei caratteri
speciali.
PHP fornisce tali metodi al fine di consentire agli sviluppatori la difesa delle
proprie applicazioni dall’injection senza implementare funzioni proprie che
potrebbero contenere errori o non considerare ogni caso possibile.
Il terzo aspetto ed ultimo aspetto riguarda la gestione e considerazione delle
operazioni sul database quali transazioni ovvero unità atomiche di
elaborazione; si presuppone che tutte le operazioni che costituiscono una
transazione vengano eseguite in isolamento da altre transazioni.
Anche se a prima vista tale approccio sembra non riguardare la sicurezza
dell’applicazione, invece esso si rivela importante in quanto contribuisce
all’efficienza del Sistema e permette di limitare o evitare addirittura possibili
danni dovuti ad attacchi DoS, Denial of Service.
Le modifiche di eventuali query sul database vengono memorizzate e
diventano effettive solo quando viene eseguito il “commit” della transazione,
ovvero quando questa viene confermata in quanto correttamente terminata; in
caso di abort nessun dato viene modificato nel database.
Per indicare inizio e fine di una transazione, l’oggetto PHP utilizza due metodi
privati che vengono invocati dalle funzionalità che modificano il database;
ognuna delle caratteristiche dell’oggetto creato per fornire i servizi richiesti
può essere reperita nel codice sorgente allegato alla documentazione del
lavoro del gruppo e dell’intera commessa.
La gestione degli aspetti di sicurezza succitati riguarda unicamente il lavoro
del nostro gruppo e quindi non sono esclusi interventi ed ulteriori politiche di
sicurezza da parte degli altri gruppi che lavorano al progetto e che verranno
eventualmente descritti nella documentazione finale della commessa o
dell’intera simulazione del singolo gruppo.
DIFFICOLTA’ INCONTRATE
Nell’ambito dello sviluppo dell’applicazione e nelle fasi di creazione del
database e dell’interfaccia per accedervi sono state diverse le difficoltà
incontrate.
La più importante ha riguardato l’utilizzo del Secure Socket Layer (SSL) nella
comunicazione tra il server dove risiedeva il sito web (gruppo 3) ed il nostro
host sul quale avevamo creato il database SHOP; avendo optato per la
separazione dei livelli del Sistema è stato definito prioritario avere una
comunicazione sicura tra i nodi dello stesso.
L’esecuzione di ogni query sul DB avviene a cavallo della rete e quindi si è
scelto di non far viaggiare in chiaro i dati relativi a tali operazioni. Per fare ciò,
inizialmente la connessione al database veniva effettuata con il parametro
MYSQL_SSL_CLIENT sfruttando la funzione PHP mysql_connect.
Tale funzione viene tuttora invocata un’unica volta nel costruttore dell’oggetto
MyDBManager, al fine di averne l’esecuzione all’atto dell’istanziazione dello
stesso e di poterla utilizzare per ogni richiesta dell’applicazione.
L’indicazione del parametro per l’utilizzo di SSL permette la connessione
sicura al DB e la cifratura di ogni query eseguita sullo stesso. Purtroppo
quello che era stato ipotizzato non si è verificato in quanto sono stati
riscontrati dei problemi all’atto della comunicazione sicura fra i due nodi. Tali
problemi sono stati causati da MySQL del quale a quanto pare la comunità
acnora non è riuscita a risolvere tutti i malfunzionamenti. Per ovviare a
questo problema infatti si è effettuato anche un upgrade del server
portandolo all’ultima versione disponibile al momento della stesura di questo
documento, la 5.0.41. Nonostante il tentativo fallito il gruppo ha comunque
deciso di mantenere l’upgrade.
La soluzione è stata quella di spostare il database sul server del gruppo 2
rinunciando all’utilizzo della connessione sicura mediante il parametro sopra
citato e velocizzando anche i tempi di risposta per i servizi dal momento che
le query vengono eseguite in locale.
Le altre difficoltà sono state di minore importanza ed hanno riguardato la
definizione dello schema relazionale da adottare in termini di consistenza,
efficienza e di quelle che erano le richieste dei componenti del gruppo 2.
L’ultima difficoltà è stata quella relativa alla gestione delle transazioni SQL,
con il reperimento on-line delle operazioni necessarie per la loro
implementazione; la soluzione stata trovata grazie all’analisi di alcuni esempi
presenti in rete e che prevedevano l’esecuzione di particolari query sul
database come LOCK TABLE … WRITE, START TRANSATION e COMMIT
con le quali bloccare in scrittura le tabelle, cominciare una transazione ed
indicare la riuscita esecuzione della stessa. L’utilizzo di tali query è stato
racchiuso in due metodi privati con lo scopo di fare tutto il necessario per
dare inizio e terminare una transazione.
Bibliografia
Ubuntu Documentation. (n.d.). Retrieved Jul 13, 2007, from Ubuntu: www.ubuntu.com
(n.d.). Retrieved July 13, 2007, from http://www.debianadmin.com/install-and-configure-apache2-with-php5and-ssl-support-in-debian-etch.html
Apache Documentation. (n.d.). Retrieved July 13, 2007, from Apache: http://httpd.apache.org/docs/2.2/
Kabir, M. J. (2002). Apache Server 2 Bible. New York: Hungry Minds, Inc.
MySQL Documentation. (n.d.). Retrieved July 13, 2007, from MySQL: www.mysql.com
OpenSSL Documentation. (n.d.). Retrieved July 13, 2007, from OpenSSL: http://www.openssl.org
Php Documentation. (n.d.). Retrieved July 13, 2007, from PHP: www.php.net
ProFTPD: Highly configurable GPL-licensed FTP server software. (n.d.). Retrieved April 24, 2007, from
http://www.proftpd.org/docs
Timme, F. (n.d.). Apache2-SSi-PHP5-HowTo(+ ZEND Optimizer and IonCubeL Loader). Retrieved Apr 24,
2007, from www.howtoforge.com/linux_apache2_ssl_php5_zendoptimizer_ioncubeloader.htm