|
APPROFONDIMENTI
PRODOTTI
Hardware
Software
Reti
ADSL
Normative
Sicurezza
SERVIZI
Hosting/Housing
Registrazione Domini
Web Design
Motori di Ricerca
|
 |
AREA
TECNICA - SICUREZZA
Sicurezza sul
web server
Non
adottare criteri di sicurezza adeguati durante la realizzazione e la
gestione di un sito Web può generare il rischio di abusi del servizio da parte di soggetti
malintenzionati. Ciò può avvenire nei modi più svariati, ma spesso
grazie ad errori di configurazione o vulnerabilità a livello di:
-
sistema
operativo
-
http od altri servizi di rete (smtp, database, ftp, etc..);
-
programmi e script
impiegati per generare il contenuto del sito
-
routers,
firewalls
e altro hardware per il controllo degli accessi
La
procedura classica degli hacker di solito parte dala ricerca di un
accesso al sistema, ad esempio sfruttando script e
programmi in buffer overflow (un buffer di input saturato con un valore
superiore a quanto può gestire, per eseguire una
porzione di codice arbitrario all'interno dello stack di esecuzione del
processore), intercettando i file delle password o
effettuando veri e propri attacchi di forza. A questo punto inizia ad
attribuirsi privilegi amministrativi crackando le password o
eseguendo altre aggressioni. Tutto questo processo è seguito dall'immediata cancellazione dei
log file per nascondere il suo passaggio e dall'installazione di backdoors
per poter riprendere il controllo in un secondo momento. Controllo
che gli consentirà di sottrarre, cancellare, modificare
informazioni dal server, rendere il servizio indisponibile al
pubblico (Denial of Service), lanciare attacchi ad altri sistemi,
monitorare il traffico passante.
Effettuare un Vulnerability Assestment permette
di identificare con certezza i rischi del sistema e di predisporre
precauzioni per portare la sicurezza del sistema ad un livello
pari all'importanza delle risorse a rischio. Di seguito analizziamo
ogni singolo aspetto di cui si dovrà tener conto.
Sistema
operativo affidabile
L'affidabilità di un sistema operativo
influisce in modo rilevante
nel predisporre e mantenere livelli di sicurezza adeguati. Vi sono fattori
di cui tener conto che possono produrre risparmi anche sull'amministrazione del sistema:
la facilità di gestione è uno di questi, coaì come la possibilità di
permettere diversi livelli di privilegi agli utenti. Non vanno
trascurate nemmeno l'assenza di vulnerabilità note per tipi di
attacco conosciuti, la possibilità di rimuovere e disabilitare servizi non
necessari, la registrazione dell'attività degli utenti.
Rete
e web server separati
La soluzione che
da più garanzie è quella di separare web server e rete interna.
Ciò
è possibile con una "zona demilitarizzata" (DMZ)
in grado di separare i sistemi interni sicuri da quelli esterni
pubblici. Una DMZ è garanzia di sicurezza solo se
supportata da strumenti di controllo degli accessi come router o firewall.
E' così possibile bloccare il traffico UDP, ICMP e TCP non
necessario, le connessioni TCP originate dal web server, il traffico tra
web server e rete
interna, il source routing (che permette di influenzare il percorso
del pacchetto dati lungo la rete). Non è però possibile bloccare
le connessioni in uscita dal web server quando questi utilizza servizi erogati da altri server
(es.
un server SMTP per la posta in uscita). In questo caso collocate
anche gli host dei servizi di supporto
all'interno di una sottorete separata dalle reti interna ed esterna
con un firewall in modo tale da bloccare il traffico tra Internet e questi host
e allo stesso tempo quello tra utenti e servizi di
supporto.
Nel
caso non fosse possibile usare una DMZ si può comunque ricorrere a dispositivi come
hub e switch per separare il traffico web da
quello interno e criptare quest'ultimo in modo da renderlo
incomprensibile in caso di aggressione.
Il web server dovrebbe operare in configurazioni di rete e sistema
minime: questa semplice regola da sola produrrà un sensibile miglioramento dei livelli di sicurezza.
Ecco alcuni suggerimenti:
-
disabilitate i servizi di rete non essenziali
e con vulnerabilità conosciute
-
rimuovete
dal sistema i file dei servizi disabilitati
-
eliminate porte TCP
e UDP in ascolto superflue
-
rimuovete
o disabilitate compilatori, interpreti, shell, scripts ed altri strumenti
simili
-
applicate
politiche nella gestione di utenti con regole per
accesso e uso delle risorse
Questi
suggerimenti consentono al tempo stesso di semplificare le attività di amministrazione
riducendo la probabilità di
commettere quegli errori di configurazione che un aggressore potrebbe
sfruttare. L'approccio "deny all, then allow" consiste infatti
nel disabilitare tutti i servizi e le porte TCP/UDP
per riattivare solo in seguito solo ciò che è realmente necessario.
Gestione
di utenti e privilegi
Anche
in questo caso vanno prefissate delle
regole restrittive, con cautela poiché ad esempio bloccare gli
utenti può spingere l'aggressore a provocare una situazione di
Denial of Service per l'utente attraverso una serie di tentativi di connessione falliti.
Consigliamo sia di disabilitare o rimuovere gli account inutili installati dal sistema operativo o
altri software, per ridurre, in caso di intrusione, rischi di impersonificazione o
scalate dei privilegi, sia di modificare l'account dell'amministratore,
adottando in ogni caso criteri di robustezza delle password (lunghezza
di almeno 8 caratteri, complessità alfanumerica e durata massima di
3-4 mesi).
Programmi esterni e
script
Interpreti, plug-in e script
possono aprire falle nei livelli di protezione del web server. Prima
di utilizzare script accertatevi della provenienza, con massima
attenzione a lunghezza e complessità del codice, interazione con altri programmi
e accesso in lettura/scrittura al file system. Buona norma è quella
di non installare programmi ed interpreti nella stessa directory degli script.
L'uso di
script può introdurre nell'esecuzione
del codice molte variabili sfruttabili per ottenere un accesso
non autorizzato. Una delle aggressioni più classiche è l'invio di dati
inattesi al server tramite la URL, con quantità eccessive di
dati o combinando l'abuso di metacaratteri con l'encoding
della stringa. Ciò causa il classico buffer overflow, altera i meccanismi di
autenticazione o accesso a funzionalità riservate
dell'applicativo, spesso attivando anche funzioni di sistema, di programmi esterni,
file e
risorse che non fanno parte del contenuto del Web. Per
evitare questi effetti si consigliano tecniche basate sulla qualità della programmazione,
l'implementazione di una
logica applicativa robusta e sul controllo del flusso.
Se
non si è certi della natura dell'input ricevuto è possibile
identificarlo avvalendosi delle funzioni messe a disposizione
dai più linguaggi di scripting: Perl, PHP, CFML e ASP
possiedono queste funzioni. Sia
Perl che PHP, inoltre, evitano condizioni di
overflow del buffer di input aggiustando in automatico la sua dimensione per
supportare la quantità di dati ricevuta realmente.
Anche disabilitare gli SSI è
opportuno: se infatti da un lato offrono utili funzionalità interattive,
d'altro canto sono troppo elementari nel funzionamento in quanto basati su tags che possono essere inseriti
ovunque in un documento html per forzare l'esecuzione di comandi in locale sul
server. Se possibile,
infine, evitate tags html nascosti per raccogliere informazioni sensibili
che possono essere facilmente alterate.
Identificazione, logging ed auditing
Raccogliere
dati relativi a tutto il sistema permette di individuare intrusioni
(determinandone l'entità) ed operazioni di
"probing", segni di un
interesse esterno al sistema e alle sue debolezze.
Per riconoscere questi segni confrontate le informazioni relative al funzionamento del
sistema con informazioni analoghe rilevate in fase di prima installazione od operatività.
Si potranno utilizzare alcuni indicatori in base all'importanza
della situazione e alle risorse disponibili per memorizzarli:
-
il
numero, le intestazioni e il contenuto
di pacchetti, bytes e connessioni in entrata/uscita
-
il numero dei socket
aperti
-
gli errori sulle
varie interfacce di rete ed il loro stato
-
le connessioni effettuate
(con durata e flusso), ed i tentativi falliti
-
l'ammontare totale delle risorse in uso (CPU, memoria,
dischi)
-
lo stato del file system
ed i cambiamenti nello stato del sistema (shutdown e
riavvii)
-
la data e l'ora di
avvio, la durata e la percentuale di risorse dei vari processi
-
i
messaggi di errore inviati dal sistema
-
login (data ed ora,
tentativi falliti, accessi come utenti
privilegiati) e logout
-
i cambiamenti e le modifiche riguardanti i privilegi degli utenti ed
il loro uso
-
l'aggiunta,
cancellazione, modifica, il numero e il timestamp di files/directories
e loro attributi
-
il checksum per tutti i files e le directories più importanti
-
i cambiamenti nelle dimensioni, nel contenuto e nella protezione dei files
-
la presenza di eventuali "alternate data streaming" all'interno dei files
-
i risultati delle scansioni
antivirus
-
raccogliere ed analizzare i
log file per i vari servizi di rete (web, mail, ftp,etc...)
Per diminuire il volume dei dati da analizzare
esistono tecniche di rotazione che creano periodicamente copie dei logs online
per avere sempre una collezione di
logs relativi a precisi momenti temporali. E' essenziale poi che la "fotografia"
del sistema venga ripetuta in occasione di ogni aggiornamento, in modo da
poter effettuare un raffronto dei dati attendibile.
Per non vanificare i meccanismi di logging ed auditing è
conveniente proteggere i logs spostandoli su un host protetto,
criptandoli ed analizzandoli periodicamente.
Per mantenere integre le vostre risorse, infine, prendete la
saggia precauzione di creare copie di backup di tutti i files e programmi
significativi criptandole su supporti di memorizzazione a sola
lettura o su un altro host protetto da firewalls, restringendone
l'accesso e l'uso ai soli utenti autorizzati. Esse
vi consentiranno di ripristinare files e programmi nel caso la loro
integrità fosse compromessa.
|