Un server web è un software (o insieme di software) che, in esecuzione su un server, gestisce le richieste di un client, solitamente di un browser. Ogni volta che visitiamo un sito internet, stiamo inviando richieste a dei server web, i quali ci rispondono con le pagine da noi richieste. Esistono moltissimi diversi software, ma i più utilizzati sono:
I primi due sono Open-Source, quindi hanno codice sorgente aperto, è possibile modificare ogni parametro o codice interno, mentre IIS è a codice chiuso, per cui (che io sappia) nessuno è a conoscenza del codice interno. L’architettura di un tipico web server Open Source è composta da:
L’architettura di un web server IIS è decisamente diversa, abbiamo:
Le motivazioni possono essere infinite, che vanno dalla semplice casualità di una mail infetta da virus aperta da un tecnico dell’azienda, all’attacco mirato di hacker che vogliono compromettere il sito per determinati motivi. Le principali cause di una compromissione sono:
Un server compromesso può causare molti danni, tra i quali:
Consiste nello sfruttare errate configurazioni di validazione dell’input e accedere a cartelle che, in teoria, non dovrebbero essere accessibili a nessuno, come il file delle password. Un esempio di questo tipo di attacco su un server *NIX può essere:
http://some_site.com.br/../../../../etc/shadow
Se il web server è mal configurato accetterà la richiesta, permettendomi di leggere il file delle password. Un software che cerca questa vulnerabilità è DotDotPwn, mentre altri esempi si possono trovare a questo indirizzo.
Questo tipo di attacco può essere utilizzato quando i dati di una richiesta web sono inclusi in una risposta HTTP e non sono validati. Per capirci meglio, possono essere i vari tipi di Injection (SQL, XSS, CSRF).
Può essere eseguito sia nella credenziali di login (ad esempio se si ha wordpress e la pagina di login non è protetta da questo tipo di attacco) sia tramite SSH, telnet, FTP. Se viene lasciato il servizio attivo, bisogna ricordarsi sempre di inserire protezioni, che possono essere (ad esempio) login permesso solo da certi indirizzi IP, ban di indirizzi IP che effettuando troppe richieste, etc. Un software che effettua un attacco bruteforce può essere Hydra. Ho già spiegato le diverse metodologie per il password cracking, per cui non mi dilungherò sul discorso. È bene ricordarsi sempre di non loggarsi mai se si è connessi ad una rete pubblica se non abbiamo il certificato, mai usare password semplici e inserire sempre controlli su chi cerca di entrare nel nostro sistema senza autorizzazione.
Questo tipo di attacco non dipende purtroppo da nessuna configurazione, ma è solamente un atto vandalico compiuto da chi non ha molto da fare (o è un azienda concorrente). La conseguenza di questo attacco è avere il sito non raggiungibile per tutta la durata dello stesso. Per ridurre le possibilità di attacchi DOS è possibile iscriversi a CloudFare, il quale implementa una serie di controlli e difese nel caso di un attacco. Un altro ente che può mitigare (ma non eliminare) è l’hosting provider, come Amazon, OVH o Aruba.
Le fasi di un attacco ad un server web sono le stesse fasi che vengono compiute in una sessione di Hacking, per cui:
Per eliminare la maggior parte dei rischi di un hacking al proprio web server bisogna seguire poche e semplici regole, che vanno attuate quotidianamente. Se non si è in grado o non si riesce più ad aggiornare il proprio sito, non lasciatelo andare per i fatti suoi, non è mai una buona idea.
Ho cercato di descrivere a grandi linee (molto grandi) i principali tipi di attacco e come difendersi da essi. Un plugin del browser che ho sempre trovato molto interessante è Wappalyzer. Esso ci informa ogni volta che visitiamo un sito che web server possiede, i cms utilizzati e una serie di altre informazioni più o meno utili.
Un esempio pratico e reale dell’hacking di un web server e di un intera azienda potete trovarlo nel recente caso di Hacking Team. L’hacker ha pubblicato tutti i passi compiuti dall’entrare nel server, sottrarre le informazioni ed uscire da esso come se niente fosse.