Sicurezza web e tecniche di attacco
L’efficienza del Web sia come mezzo di divulgazione che come mezzo di vendita di prodotti e servizi è ormai nota a tutti.
L’affermazione di questo nuovo strumento ha creato nuove opportunità ma contestualmente (contemporaneamente) ha esposto i dati e i sistemi senza neanche rendersene conto.
Internet, però, è un mondo con le sue regole e accessibile a tutti: utenti inesperti e inconsapevoli; gente che cerca di farsi un nome scoprendo vulnerabilità, distruggendo dati e facendo soldi in modo illegale.
Se fino ad oggi le principali minacce alla sicurezza venivano dall’infrastruttura di rete e dai sistemi operativi, la diffusione delle applicazioni web ha creato nuovi pericolosi obiettivi.
Infatti, oltre alle conseguenze derivanti dall’offerta di un’applicazione web, si devono fronteggiare i rischi legati al furto di informazioni e d’identità digitali o alla violazione delle banche dati.
Sfortunatamente, non esistono dei rimedi né delle tecniche da poter rendere sicuro al 100% un servizio contro gli attacchi provenienti dall’esterno e, infatti, in questa tesina discuto delle problematiche legate alla sicurezza provando a concentrarmi sia sull’ottica dell’hacker o dell’analista.
Prima di affrontare il problema della sicurezza nelle applicazioni web, vediamo alcuni chiarimenti che possono risultare utili nella comprensione del problema che stiamo per affrontare.
Bisogna sapere che l’applicazione web non è un unico blocco a sé stante, ma piuttosto un sistema complesso in cui un numero anche elevato di componenti eterogenei interagiscono e collaborano al fine di fornire un servizio agli utenti che ne fanno richiesta.
Però prima cerchiamo di capire da cosa è composta e quali sono i componenti di questa infrastruttura che ospita ed elabora i dati.
Reti e computer network
Le reti o computer network sono degli insiemi di elaboratori autonomi:
- Interconnessi fra loro dove tutti hanno le stesse funzioni e la stessa libertà.
In effetti, la rete rappresenta il mezzo fondamentale in assenza del quale non potrebbe esistere alcun sistema distribuito (in un sistema distribuito l’esistenza di più elaboratori è invisibile all’utente, che ha l’impressione di avere a che fare con un unico sistema di calcolo).
L.A.M.P.
L.A.M.P. – è l’acronimo che indica il Linux+Apache+Mysql+PHP.
Con queste quattro lettere si intende una particolare combinazione software di sistema costituito da:
- Linux, un sistema operativo multiprocess e multitask che oggigiorno è molto utilizzato nei server di dimensioni medie e piccole.
- Un web server, Apache, che ha conquistato circa il 50% del mercato.
- Un RDBMS, relational database management system, MYSQL.
- Il PHP, un linguaggio di scripting completamente orientato alla programmazione web.
La caratteristica che accomuna tutti i componenti sta nel fatto che sono “Open Source”, cioè freeware coperti da licenza GPL.
Linux
Linux – Linux è comparso nel 1991 come progetto personale di studio delle funzionalità di multiprogrammazione dei microprocessori i386 da parte di Linus Torvalds, all’epoca studente dell’Università di Helsinki, in Finlandia.
Il kernel rilasciato sotto licenza GNU – GPL rappresenta la difesa ideale per un software di pubblico dominio.
II
Apache
Apache – Sviluppato dall’Apache Software Foundation, è oggigiorno il web server più diffuso: stabile, sicuro, supporta l’integrazione con i principali RDBMS e diversi linguaggi di programmazione e inoltre ci lavorano con passione migliaia di persone sparse in tutto il mondo che contribuiscono allo sviluppo del web server.
Il web server è un programma che si occupa di ascoltare un canale di comunicazione per intercettare una richiesta da servire.
Il client, mediante un browser, lancia un messaggio di richiesta contenente l’URL, attraverso il collegamento di rete al web server.
Questo cattura la richiesta e risponde sempre attraverso il protocollo HTTP, con una pagina HTML con il contenuto richiesto dal client.
MySQL
MySQL – Le basi di dati sono dei contenitori atti a immagazzinare dati, strutturati o meno.
MySQL infatti, è un RDBMS, cioè un sistema di gestione di basi di dati che si occupa, da un lato di gestire la struttura e la coerenza (compattezza) dei file sul disco, e dall’altro di rispondere alle interrogazioni che l’utente o l’applicazione gli pongono secondo un linguaggio di interrogazione standard; SQL, Standard Query Language.
PHP
PHP – È l’acronimo ricorsivo di Hypertext Preprocessor, attualmente uno dei linguaggi web più diffusi su Internet che permette di creare da semplici script fino a portali completamente dinamici.
PHP è un linguaggio interpretato, nato da un progetto della Apache Software Foundation e distribuito gratuitamente.
Esso consente di realizzare velocemente pagine dinamiche, grazie al supporto nativo con i singoli RDBMS oltre alle numerose funzioni built-in o delle librerie reperibili in modo gratuito.
III
Funzionamento dell’applicazione
All’arrivo di una richiesta (1) il server esegue il controllo sull’URL e decide rispondere con una pagina HTML statica (2) oppure eseguire uno script per generare una pagina web dinamica (3).
In quest’ultimo caso il codice viene passato al PHP preprocessor che lo esegue, con eventuali richieste al server SQL (5, 6, 7), e genera in output una pagina statica (8) che viene restituita al client (9).
Web apps – Applicazioni Web
A partire dal primo Congresso Web tenutosi a Ginevra nel 1994, è iniziata ad affermarsi l’esigenza di rendere il web dinamico.
L’HTML non è un linguaggio di programmazione ma solo di formazione dei contenuti; esso permette solo di controllare come il testo comparirà nella finestra del browser.
Brevemente una “applicazione web” è un software, eseguito dall’application server di un web server, che produce dinamicamente pagine HTML secondo le richieste degli utenti e degli altri sistemi della rete.
Le funzioni svolte da questo tipo di software possono andare dalla semplice ricerca di un file in una directory a delle applicazioni estremamente sofisticate che eseguono in tempo reale vendite o registrazione di dati finanziari.
Cosa intendiamo per sicurezza
La sicurezza informatica è la tutela del sistema informatico dalla violazione da parte di persone non autorizzate al fine di garantire confidenzialità, autenticità, integrità e disponibilità dei dati.
Sebbene questa definizione sia chiara, in realtà la sicurezza è una misura che si tenta di massimizzare valutando attentamente l’equilibrio fra costo del rischio e costo della difesa.
IV
Vulnerabilità, minaccia e rischio
Un sistema può incorrere in dei rischi, può essere affetto da vulnerabilità e può essere minacciato.
Ma qual è il significato di questi termini?
- Una vulnerabilità, o falla, è la caratteristica di un componente per cui risulta suscettibile a particolari situazioni che portano al guasto, spesso improvviso, del componente stesso o di un altro che si trova in rapporto con quello fallato.
- La minaccia è la causa che provoca il guasto di cui si è appena detto.
- Il rischio è la probabilità che una falla sia incontrata (o scoperta) da una minaccia, associata all’intenzione di sfruttarla per trarne un vantaggio.
Perciò, possiamo dire che vulnerabilità + rischio = minaccia.
Tecniche di attacco
Una normale analisi del codice, fatta da un programmatore anche esperto, non può rilevare i problemi o le falle di sicurezza dell’applicazione.
Da una parte infatti, il testing manuale non può provare tutte le sequenze di input, e non pensa mai a manipolare l’applicazione per testarne la risposta.
Dall’altra, i tool di testing automatizzati, non essendo progettati per un’applicazione specifica, non funzionano per tutti.
Tipi di attacco
1. Information gathering – Messaggi ed errori
Non si tratta di un vero e proprio attacco, in quanto si cerca di trovare ogni informazione tecnica sull’applicazione e sul sistema.
Ha una pericolosità bassissima ma è il primo passo verso la maggioranza degli attacchi seri.
Si parte dai messaggi di errore standard (400, 401, 404) per continuare poi a cercare messaggi di notice o di warning, provando a modificare le variabili GET e POST con delle sequenze casuali.
Esistono dei tool free di testing automatizzato che ricavano le informazioni sul sistema.
- Italiano: Giovanni Verga (il verismo)
- Storia: il Taylorismo
- Informatica: la sicurezza web
- Sistemi: le tecniche di attacco sul web
- Inglese: Internet Security
- Elettronica: le microspie
- Matematica: gli integrali