La protezione del proprio sito o blog da attacchi Hacker è un tema molto importante e complesso.
Purtroppo il numero di persone che hanno talmente poco da fare che rovinare il lavoro magari di mesi di altre persone è in continuo aumento.
Aumentano e si raffinano le tecniche di attacco dei siti ma fortumanamente aumentano anche le contromisure.
Oggi vediamo delle tecniche di base per la proteizone del nostro webserver da attacchi esterni che si basano sull’utilizzo del file .htacces.
Per poter utilizzare correttamente tutte le funzionalità seguenti dovete avere il vostro sito su di un hosting che permette l’accesso ai file salvati e al file “.htaccess” appunto.
Cos’è il file .htaccess
Htaccess è un semplice file di testo ASCII posto nella root del sito web ed è uno strumento molto potente di configurazione sul server web Apache.È possibile creare e modificare un file .htaccess utilizzando un editor di testo come Blocco note.
Iniziamo subito dicendo che bisogna fare molta attenzione quando si modifica il file .htaccess.
Il punto all’inizio del nomefile indica che sui server linux si tratta di un file nascosto e non a caso.
I file .htaccess vengono interpretati dal server web prima di richiamare la pagina richiesta dall’utente.
E’ possibile, quindi, controllare le richieste prima di trasferirle allo script lato server.
Quindi si tratta di un file di configurazione molto potente e un piccolo errore di sintassi può causare un malfunzionamento grave del server e rendere il sito inaccessibile.
Per evitare problemi quindi è sempre buona norma avere una copia di backup di tutti i file dal server prima di iniziare a lavorarci su.
Vediamo, dunque, alcuni esempi e funzioni per aumentare la sicurezza di un sito web
Creazione di una pagina di errore personalizzata
Serve per redirigere i visitatori su una pagina personalizzata nel caso in cui il server web restituisca un errore (ad esempio il noto errore 404 per le pagine inesistenti).
In questo modo l’utente non vede l’indirizzo reale delle pagine di errore, perchè rimane sull’indirizzo che aveva cercato.
Tramite .htacces si può impostare (e quindi controllare) una pagina di errore per ogni tipo di errore.
ErrorDocument 401 /error/401.php
ErrorDocument 403 /error/403.php
ErrorDocument 404 /error/404.php
ErrorDocument 500 /error/500.php
Proteggere con password le directory e file
È possibile impostare l’autenticazione per alcuni file e directory
Di seguito il codice oer la protezione per un singolo file e la protezione con password per un intera directory.
# Per proteggere un file
AuthType Basic
AuthName “Prompt”
AuthUserFile / home / path / .htpasswd
Require valid-user
# Proteggere con password una cartella
risiede
AuthType Basic
AuthName “Questa directory è protetto”
AuthUserFile / home / path / .htpasswd
AuthGroupFile / dev / null
Require valid-user
Per consentire l’accesso a zone riservate del sito previo inserimento di un nome utente e una password si deve modificare anche il file .htpasswd che deve essere così costruito
utente:password
Bloccare User Agent indesiderati
L’User Agent è in breve il mezzo tramite cui si visualizza il sito web.
Può essere un software di navigazione (il browser), client per funzioni varie, ma anche uno script ad esempio Java o Javascript o altro.
I nostri siti subiscono la visita di user agent che servono agli scopi più disparati.
Ci sono quelli buoni, che indicizzano le nostre pagine per i motori di ricerca, e quelli meno buoni, che causano solo inutile traffico o peggio ancora sono utilizzati per raccogliere indirizzi e-mail ed effettuare spamming.
Tramite .htaccess è possibile bloccare le richieste basate su un preciso User Agent.
SetEnvIfNoCase ^User-Agent$ .*(craftbot|download|extract|stripper|sucker|ninja|clshttp|webspider|leacher|collector|grabber|webpictures) HTTP_SAFE_BADBOT
SetEnvIfNoCase ^User-Agent$ .*(libwww-perl|aesop_com_spiderman) HTTP_SAFE_BADBOT
Deny from env=HTTP_SAFE_BADBOT
Altri tipi di blocco che si possono fare sono su determinati url o determinati indirizzi IP.
Bloccare determinati Modelli Url
Per prevenire alcune tecniche comuni di hacking individuando modelli di URL maligni.
RewriteEngine On
# proc/self/environ? no!
RewriteCond %{QUERY_STRING} proc/self/environ [OR]
#Blocca ogni script che cerca di settare un valore mosConfig attraverso l'URL
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\%3D) [OR]
# Blocca ogni script base64_encode crap
RewriteCond %{QUERY_STRING} base64_encode.*(.*) [OR]
#Blocca ogni script che contiene un tag
Blocco di indirizzi IP
Su internet si trovano facilmente liste di indirizzi IP associati a spammer.
Noi possiamo aggiornare e convertire queste liste in una regola sul .htaccess che blocca l’accesso al sito da parte di tali IP.
La sintassi è la seguente:
ORDER allow,deny
deny FROM 123.45.6.7 - 123.45.6.9
allow FROM ALL
Se qualcuno tenta di accedere al sito da un IP tra qualli bloccati, otterrà un errore 403.
Blocco di visitatori indesiderati sulla base del dominio di provenienza
Nel caso in cui si ricevano attacchi da qualche sito specifico, può essere utile bloccare gli accessi diretti da quel dominio. Per impedire l’accesso, viene utilizzata una regola impostata sulla base dell’HTTP referrer
RewriteEngine on
RewriteCond %{HTTP_REFERER} scumbag.com [NC,OR]
RewriteCond %{HTTP_REFERER} wormhole.com [NC,OR]
RewriteRule .* - [F]
Disabilitare directory browsing
Quando Apache non trova un file index relativo alla risorsa richiesta tramite URL (cioè quando non viene specificato il nome di un file all’interno di un percorso, es. www.sito.it/cartella/), può eseguire un Directory listing, cioè mostrare il contenuto della cartella.
Nel file di configurazione di Apache (httpd.conf), è possibile abilitare o disabilitare questa caratteristica, semplicemente modificando il modulo mod_autoindex.
Volendo utilizzare il file .htaccess possiamo inserire le seguienti righe :
# Per disabilitare il directory browsing
Options All -Indexes
# Per abilitare directory browsing
Options All +Indexes
Parsing delle richieste
Ora entriamo nell’analisi del contenuto delle richieste.
Si sfruttano le espressioni regolari per prevenire alcune hotkey, come ad esempio script, ma in modo che non intralcino con il corretto funzionamento del sito.
Allo scopo si utilizzano le RewriteCond, ovvero regole che permettono fare determinate operazioni se arriva al server una determinata richiesta.
Un esempio è il seguente:
#Blocca le richeiste che hanno all'interno il tag
Possiamo anche intercettare caratteri in base64:
# Block out any script trying to base64_encode crap to send via URL
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [OR]
Dopo le RewriteCond, dobbiamo inserire una regola RewriteRule che blocchi e trasferisca la richiesta verso uno speciale script per avvisare l’utente del problema.
L’esempio finale diventa:
# Block out any script that includes a < script> tag in URL
RewriteCond %{QUERY_STRING} (\< |%3C).*script.*(\>|%3E) [NC,OR]
# Block out any script trying to base64_encode crap to send via URL
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [OR]
RewriteRule ^(.*)$ /blocca_attacco.php [F,L]
sarebbe possibile attraverso .htaccess e .htpasswd ottenere l ip del visitatore e l’oraio della visita salvati in un terzo file?