5
Sommario
Questo lavoro di tesi nasce grazie ad un tirocinio svolto presso la System
Management di Napoli sulle vulnerabilità presenti negli applicativi Web.
La necessità di approfondire le problematiche di sicurezza delle applicazioni
Web è legata alla sempre crescente pericolosità di utilizzo delle tecnologie
internet per i pagamenti elettronici ed ai rischi sempre maggiori che
derivano da una realizzazione poco attenta delle pagine Web da parte degli
sviluppatori software. La diffusione capillare delle applicazioni basate su
Web, infatti, stimola una comunità ampia di criminali informatici ad
utilizzare le debolezze e le vulnerabilità di tali applicazioni per scopi illeciti.
D’altra parte, nonostante i rischi, la possibilità di offrire un servizio sempre
raggiungibile, semplice da erogare per chi lo fornisce e da utilizzare per gli
utenti, rappresenta un valore a cui nessuno vuole rinunciare.
Il problema della sicurezza delle applicazioni Web è sostanzialmente
tecnico e va risolto con la diffusione di una cultura della sicurezza delle
applicazioni Web che attualmente non è soddisfacente. Sono tantissimi,
infatti, gli applicativi in rete suscettibili di attacchi da parte di
malintenzionati proprio per una programmazione “disinvolta”; tali
applicativi, con piccoli accorgimenti, potrebbero diventare piø sicuri.
L’obiettivo di questo lavoro è di offrire una panoramica delle vulnerabilità
piø comuni riscontrabili nelle applicazioni Web e di analizzare i possibili
metodi che permettono di mettere al riparo le nostre applicazioni.
Nella parte iniziale del lavoro sono state descritte le caratteristiche principali
delle Web Applications e le possibili minacce alla loro sicurezza. Ci si
sofferma sulle motivazioni che spingono a interessarsi al problema della
sicurezza e sullo sviluppo che gli applicativi Web hanno avuto negli ultimi
anni. Viene successivamente presentato il progetto OWASP (Open Web
Application Security Project), nato in ambito internazionale con l’obiettivo
di fornire linee guida nella realizzazione di applicativi Web sicuri. Durante
6
lo sviluppo della tesi, l’interesse verso la tematica mi ha spinto ad
approfondire gli argomenti principali trattati dal progetto e a partecipare
all’OWASP Italy Day III, giornata tenutasi all’Università di Bari lo scorso
23 Febbraio, dedicata all’analisi dell’attuale situazione della sicurezza nelle
Web Applications secondo il punto di vista delle Università e delle Aziende
del settore.
In questo lavoro, dopo l’analisi globale del problema, mi sono occupata del
Cross Site Scripting (XSS), un tipo di vulnerabilità presente nelle
applicazioni e sostanzialmente indipendente dai linguaggi di
programmazione utilizzati. Ho analizzato la pericolosità del Cross Site
Scripting, le tecniche per individuarlo ed una serie di possibili soluzioni al
problema con esempi di funzioni utili alla creazione di filtri anti-XSS.
Dopo una serie di attacchi di Cross Site Scripting realizzati in modo non
intrusivo, sono riuscita ad individuare le tecniche che un malintenzionato
può utilizzare per modificare il codice di un sito Web o reindirizzare da una
pagina vulnerabile ad un’altra per fini illeciti. La realizzazione di tali
attacchi è stata possibile grazie a specifici script iniettati nei siti vulnerabili
e a pagine web create ad hoc per ingannare gli ipotetici utenti truffati.
Successivamente, sono stati mostrati esempi di codice reso innocuo grazie
all’utilizzo di funzioni che possono permettere di costruire filtri anti XSS in
PHP.
Nella parte conclusiva sono state riportate le considerazioni e le conclusioni
riguardo la problematica affrontata e quelle che per noi potrebbero essere
eventuali evoluzioni future nella soluzione del problema esposto.
7
Capitolo 1:
Le Web Applications e le
possibili minacce alla
sicurezza
8
1.1 Introduzione
Applicazione Web, o Web-Application, è l’espressione con cui
generalmente ci si riferisce a tutte le applicazioni distribuite Web-based
[0]
.
Coloro che si occupano di Ingegneria del software utilizzano
frequentemente il termine Webapp per descrivere un’applicazione
accessibile via Web mediante un network che può essere, ad esempio, una
Intranet o la Rete Internet.
Questo modello applicativo è diventato piuttosto popolare alla fine degli
anni novanta, in considerazione della possibilità per un client (componente
che accede ai servizi o alle risorse di un’altra componente detta server) di
accedere a funzioni applicative utilizzando come terminali dei normali Web
browser (programmi che consentono agli utenti di visualizzare e interagire
con testi, immagini e altre informazioni, tipicamente contenute in una
pagina Web di un sito).
Infatti, l’opportunità di aggiornare ed evolvere a costo ridotto il proprio
applicativo, senza essere costretti a distribuire numerosi aggiornamenti ai
propri clienti attraverso supporti fisici, ha reso la soluzione piuttosto
popolare per molti produttori software.
L’approccio iniziale alle applicazioni Web-based fu rappresentato nei primi
anni di esplosione del fenomeno Web in Italia da un vero e proprio
“porting” (trasferimento) dei programmi client-server su un media
completamente nuovo per le applicazioni commerciali, ovvero la rete
Internet, che offriva un potenziale inaspettato: l’interazione dell’utente,
indipendentemente dalla sua locazione geografica rispetto alla rete LAN
(Local Area Network) o WAN (Wide Area Network) delle aziende, a tariffe
accessibili e senza restrizioni particolari.
[0] Le applicazioni distribuite sono chiamate in questo modo perché sfruttano più
macchine fisiche o virtuali per eseguire le proprie elaborazioni.
9
Nessuno immaginava allora che le Web Applications sarebbero divenute il
vettore primario del business del ventunesimo secolo e che, di conseguenza,
su di esse si sarebbero concentrati gli obiettivi di chi, nel bene o nel male,
deve trarre profitto dalla “new economy”.
Purtroppo però, la storia recente ci permette di affermare con certezza che la
società attuale ha pagato e continua a pagare il forte scotto di aver
sottovalutato a lungo le vulnerabilità intrinseche di Internet e dei suoi
protocolli. Un attacco a scopo di frode può infatti essere portato a termine
in svariati modi, ma solo dopo anni di investimenti e di crescita nel settore
della sicurezza delle informazioni, ci si è resi conto di come si sia ancora
molto indietro rispetto alla piena comprensione delle possibili nuove
minacce.
Ci troviamo quindi a fare i conti con qualcosa che avevamo dimenticato:
tipicamente infatti, dopo aver progettato e sviluppato sistemi di rete molto
sicuri, ci si accorge di come un’insignificante falla di una Web Application
possa essere sfruttata per violare tutto ciò che i nostri sistemi “sicuri”
cercavano di proteggere.
La Webapp è infatti una problematica estremamente difficile da gestire, in
quanto presenta una serie di aspetti e riflessioni molteplici; di conseguenza
l’approccio da utilizzare deve essere completamente diverso da quello finora
considerato.
Infatti, nonostante si pensi di poter risolvere il problema della sicurezza
delle informazioni negli applicativi Web-based implementando delle linee
guida, la verità è che non è così semplice: un codice non sarà mai
sufficientemente “sicuro” fino a quando qualcuno non lo verificherà.
Inoltre, dopo ogni test si dovrà necessariamente implementare nuovo codice
ed il “circolo vizioso” riprenderà, in quanto è solo una questione di tempo
prima che venga inventata una nuova metodologia d’attacco per violare
anche l’ultima versione “sicura” di quell’applicazione.
10
Quindi, solamente attraverso un ciclo continuo di prevenzione, sviluppo,
test e debugging
[1]
si potrà sostenere di avere una Web Application
sufficientemente e costantemente “sicura”.
Ciononostante bisogna sempre esser pronti a raccogliere la sfida: come
insegna la letteratura dell’Information Security, sia essa di tipo ufficiale che
non, niente è sufficientemente sicuro se non è gestito in forma continuativa.
Essendo la problematica della sicurezza negli applicativi Web based un
argomento di forte interesse ed impatto, negli ultimi anni si sta assistendo
alla nascita e allo sviluppo di metodologie, best practice e prodotti, con lo
scopo di supportare gli sviluppatori e gli utilizzatori finali nella verifica del
proprio livello di sicurezza applicativa Web.
Tra queste novità spicca, dal punto di vista della presenza temporale e per la
presenza capillare a livello internazionale, OWASP (Open Web Application
Security Project), un progetto di ricerca distribuito a livello mondiale.
1.2 PerchØ interessarsi alla sicurezza degli applicativi
Web?
La sicurezza informatica segue un ordine di sviluppo riconducibile per certi
versi alla pila OSI
[2]
(Open System Interconnection).
[1] Attività che consiste nell’individuare, a seguito dell’utilizzo di un determinato software
affetto da errori, le porzioni di programma in cui questi ultimi sono presenti.
[2] L’OSI è uno standard che definisce una pila di protocolli in sette livelli. Esso è stato
stabilito nel 1978 dall’ISO (International Organization for Standardization), il principale
ente di standardizzazione internazionale.
11
Questo è facilmente deducibile dal fatto che da un punto di vista culturale,
nell’arco degli ultimi dieci anni, l’approccio è stato fin dall’inizio piø fisico
che logico, ovvero si è partiti dal presupposto, purtroppo errato, che creando
un sistema di rete fisicamente controllato, tutto quello che vi sarebbe
transitato sarebbe stato protetto.
Sono bastati però pochi anni di esperienza per farci capire come tale
approccio avrebbe lasciato scoperta nel lungo termine una componente
dinamica importantissima: la Web Application, un elemento che nello
sviluppo della rete, in termini di risparmio economico e di rapidità di
evoluzione del mercato, avrà sempre piø peso nel campo della sicurezza
informatica.
Possiamo di fatto prevedere che la maggior parte del business
dell’Information Security si sposterà verso quest’area di mercato: è infatti
noto che, ad oggi, la maggior parte delle interfacce Web, permetta la
gestione a trecentosessanta gradi di tutti i servizi e le necessità aziendali.
Per fare un esempio pratico, possiamo dire che senza alcuna difficoltà uno
sviluppatore smaliziato potrebbe creare componenti applicative specifiche e
volutamente vulnerabili, in grado di rilevare un comportamento anomalo di
un sistema utilizzato per frodare uno specifico servizio.
Tornando alla pila OSI, gli applicativi Web oriented rappresentano l’ultimo
strato della sicurezza logica.
Per questo motivo si sta aprendo il sipario su uno sviluppo affascinante e
sicuramente tra i piø avvincenti della sicurezza delle informazioni, ovvero la
Web Application Security.
Lo standard OWASP si presenta attualmente come uno dei principali
protagonisti di questa evoluzione nella storia delle applicazioni Web.
12
1.3 Sviluppo degli applicativi Web
La diffusione di reti pubbliche su di un unico media di trasporto (TCP/IP-
Transmission Control Protocol/Internet Protocol) ha permesso che si
diffondesse il paradigma di “massima raggiungibilità al minor costo”:
un’applicazione Web, pur risiedendo su un qualsiasi server (componente
che fornisce servizi attraverso la rete) di Internet, è di fatto raggiungibile da
tutti senza limiti di distanza e di tempo.
Questo avviene grazie alla separazione e alla riorganizzazione dei fattori di
funzionalità: prima un’applicazione client/server tradizionale girava
sull’elaboratore client e usava la rete solo per lo scambio dei dati, mentre
oggi il lavoro di calcolo viene demandato al server, ed il client interagisce
utilizzando semplicemente un Internet Browser.
Occorre specificare che le reti pubbliche su TCP/IP esistevano, già come
Internet, parecchi anni prima della nascita del Web e c’erano parecchie
applicazioni client/server che realizzavano almeno le principali funzioni che
anche attualmente una Web Application può avere.
Nell’applicazione tradizionale il client era solo interfaccia e il server, che
possedeva la potenza di calcolo, svolgeva tutto il lavoro.
Il Web inizialmente ha fatto l’opposto, permettendo di avere server leggeri
che fornivano documenti HTML
[3]
(HyperText Markup Language) al client,
il quale si occupava di tutta l’elaborazione necessaria per la presentazione
anche grafica della pagina. In seguito, l’introduzione dei primi CGI
[4]
(Common Gateway Interface), ha riportato ad un paradigma piø tradizionale
in cui il browser è di nuovo principalmente interfaccia ed il server lavora.
[3] HTML è un linguaggio usato per descrivere la struttura dei documenti ipertestuali
disponibili nel WWW (World Wide Web).
[4] Common Gateway Interface (in italiano: interfaccia comune per gateway) è una
tecnologia standard usata dai Web server per interfacciarsi con applicazioni esterne.
13
Infine, linguaggi di programmazione e scripting come Java e Javascript
hanno ridistribuito parte del carico sul client. Grazie a queste evoluzioni,
storiche, ma soprattutto tecnologiche, è oggi possibile per un utente
accedere a servizi probabilmente possibili da utilizzare anche una decina di
anni fa, ma con funzionalità e comodità sicuramente impensabili in quegli
anni.
Oggi ad esempio, è possibile per qualsiasi utente accedere ad una mappa
ripresa dal satellite ad alta qualità e scaricarla sul proprio Personal
Computer collegato ad Internet tramite una connessione ADSL, occupando
un millesimo delle risorse disponibili su di esso e, soprattutto senza esser
dotato di conoscenze informatiche particolari.
E’ importante sottolineare che nello sviluppo delle applicazioni Web
entrano però in gioco anche altri fattori, che prima non venivano affatto
considerati:
• Accesso contemporaneo di più utenti alla stessa risorsa;
• Difficoltà di identificare con certezza chi è connesso al server;
• Esposizione dei sistemi, servizi e applicazioni, su una rete pubblica;
• Necessità di proteggere un sistema di comunicazione in chiaro;
• Necessità di sviluppare sistemi sicuri per il business.
Sino a pochi anni fa, quando si sviluppava un’applicazione Web, la
funzionalità e l’economicità prevalevano sulla necessità di sicurezza,
ovviamente a scapito della sicurezza stessa delle informazioni trattate.
Dopo anni di esperienza globale si è arrivati a soppesare con i giusti criteri
queste errate valutazioni, che hanno provocato perdite enormi in termini di
business, immagine, affidabilità, fidelizzazione della clientela: in molti
conoscono già i casi tristemente famosi di Ebay, Yahoo!, Amazon ed altri.
Oggigiorno, quando si progetta un sistema Web Oriented, si sa che la
componente di sicurezza è uno dei fattori fondamentali per lo sviluppo di
un’applicazione in grado di lavorare con la minima esposizione al rischio di
14
frodi, abusi alle risorse, mancato rispetto della privacy, violazione delle
normative vigenti e danno all’immagine pubblica.
1.4 Rischi a cui è esposto un servizio Web
Le falle di sicurezza nelle applicazioni Web vengono sfruttate dagli
attaccanti malintenzionati in tutto il mondo.
Secondo un’indagine, una percentuale di attacchi effettuati in Internet
compresa tra il 75% e l’80% è diretta alle Web Applications.
L’apertura dei servizi aziendali verso il mondo esterno garantisce nuove
possibilità di business, ma al contempo introduce problemi di sicurezza
delle informazioni.
Il primo caso di attacco perpetrato a un’applicazione Web risale al 2000.
Un ragazzo Norvegese di diciassette anni, mentre eseguiva delle transazioni
in linea con la sua banca, notò che gli URL (Uniform Resource Locators,
sequenza di caratteri che identifica univocamente l’indirizzo di una risorsa
in Internet) delle pagine che stava visualizzando mostravano il suo numero
di conto corrente come uno dei parametri dell’ URL stesso. In seguito ha
sostituito il suo numero di conto corrente con dei numeri casuali riuscendo
così ad accedere ad altri account e ai dati personali di altri clienti.
Nel 2001 invece, il sito Web di Acme Art Inc. è stato violato e sono stati
estratti dal database del negozio di e-commerce tutti i numeri delle carte di
credito; in seguito dette informazioni sono state pubblicate su un newsgroup
di Usenet. Tale attacco è stato segnalato all’opinione pubblica dai mass-
media e l’azienda ha perso centinaia di migliaia di dollari a causa degli
ordini ritirati dai clienti. Contemporaneamente, essa ha anche visto svanire
la possibilità di ottenere un finanziamento da parte di una società
precedentemente disposta ad investire in alcune delle sue attività.