Lo scopo di questo documento è descrivere la realizzazione di un Web Proxy con controllo antivirus sulle pagine web e blacklist/whitelist sui siti. Il documento è suddiviso nelle seguenti sezioni:
- Perché utilizzare un proxy web con antivirus?
- Modalità Transparent Proxy
- Configurazione e attivazione del servizio proxy
- Log degli accessi e privacy
- Controllo antivirus sulle immagini
- Aggiornamento automatico delle signature di ClamAV
- Blacklist e Whitelist dei siti web
- Testare il funzionamento del proxy e dell’antivirus
Perché utilizzare un proxy web con antivirus?
Le pagine
web sono sempre più spesso il mezzo con cui Worm e Virus si diffondono
in Internet. Può capitare infatti, che dei siti web, intenzionalmente o
perché vulnerabili e quindi modificati all’insaputa degli autori
legittimi, abbiano dei riferimenti a codice eseguibile capace di
infettare i computer degli utenti. La situazione è peggiorata peraltro,
da quando alcune vulnerabilità nel sistema di visualizzazione delle
immagini ha permesso di trasportare virus anche in file JPEG. Infine, la
sempre maggiore diffusione di Applet Java sta incrementando il numero
di virus multipiattaforma capaci di giungere via http ed operare
indipendentemente dalla piattaforma (PC, palmare, cellulare) e dal
sistema operativo su cui giungono.
La soluzione principe per questo tipo di
problemi è dotare tutti i dispositivi client che si connettono ad
Internet di un buon antivirus con protezione in tempo reale, che
controlli ogni file proveniente dall’esterno. Ma ciò può non bastare per
due motivi: nessun antivirus, benché disponga di meccanismi di
auto-aggiornamento delle signature, può fornine una garanzia al 100%
contro ogni virus; il controllo in tempo reale dei contenuti entranti
pesa notevolmente dal punto di vista computazionale e specialmente su
dispositivi non troppo performanti, può rallentare talmente il sistema
da indurre chi lo usa a disabilitare il controllo antivirus.
Per questi motivi, sempre più si tenta di
attuare un controllo dei virus a monte, prima che questi giungano sul
client dell’utente. In altre parole, si utilizzano dei sistemi di
antivirus centralizzati sui server che offrono un determinato servizio.
L’esempio più diffuso è quello del server di posta elettronica che
dispone di un sistema che scompone i messaggi in ingresso e uscita via
SMTP e sottopone gli allegati al controllo di un antivirus. In questo
caso, applicare un controllo antivirus su di un gateway SMTP è
abbastanza naturale poiché questo è un punto di passaggio obbligato per
gli e-mail, prima che giungano nelle Inbox degli utenti. Per il servizio
http, invece, la cosa non è così banale visto che un client di una LAN,
può potenzialmente connettersi direttamente ad uno qualsiasi dei server
web presenti in Internet. La soluzione a questo problema, consiste
nell’introduzione all’interno della LAN di un gateway a livello
applicativo che raccolga le richieste http dei client e le inoltri ai
server web di competenza. Tale gateway applicativo prende il nome di Proxy Web e
poiché è capace di interpretare il protocollo http, può non solo
filtrare in base agli URL, ma anche scomporre i contenuti trasportati
(HTML, JavaScript, Applet Java, immagini, …) e controllarli mediante un
antivirus. Una delle funzionalità finora più diffuse dei proxy è quella
di web cache, cioè di archiviare su disco le pagine web già
visitate in maniera da accelerarne la visualizzazione in caso di
successive richieste ai medesimi URL. Lo scopo di ciò è anche quello di
ridurre il consumo di banda verso Internet ed uno dei sistemi di proxy
più conosciuti, in grado di svolgere la funzione di web cache è Squid, distribuito in Open Source.
Zeroshell non integra Squid poiché non si
propone di svolgere il lavoro di web cache. Il compito di antivirus
centralizzato sulle pagine web e di filtraggio dei contenuti, mediante
blacklist degli URL, viene affidato ad HAVP come sistema proxy e a ClamAV come software antivirus. Entrambi sono distribuiti sotto licenza GPL.
Modalità Transparent Proxy
Uno dei
problemi maggiori quando si utilizza un server proxy è quello di dover
configurare tutti i browser web ad utilizzarlo. Bisogna cioè specificare
il suo indirizzo IP o nome host e la porta TCP su cui risponde
(generalmente la 8080). Ciò potrebbe essere un onere gravoso nel caso di
LAN con numerosi utenti, ma ancor peggio, non potrebbe garantire contro
gli utenti che rimuovano tale configurazione per accedere direttamente
al web, sfuggendo così al controllo antivirus, al logging degli accessi e
alle blacklist di siti.
A soluzione di questo problema, Zeroshell, utilizza la modalità Transparent Proxy che
consiste nell’intercettare automaticamente le richieste dei client
sulla porta 80 TCP. È ovvio, che affinché Zeroshell possa intercettare
tali richieste web, deve essere configurato come gateway di rete, in
maniera che il traffico dei client verso Internet lo attraversi.
Zeroshell gestirà automaticamente la cattura delle richieste http sia
che si tratti di un gateway di livello 2 (bridge tra interfacce
Ethernet, WiFi o VPN) che di un gateway in layer 3 (router). Si tenga
tuttavia presente che, è necessario specificare su quali interfacce di
rete o subnet IP il redirect delle richieste debba avvenire. Ciò è
possibile aggiungendo le cosiddetteHTTP Capturing Rules come mostrato nella figura sotto:
Configurazione delle regole di cattura delle richieste http
Nell’esempio
della figura, vengono intercettate le richieste http provenienti dalle
interfacce di rete ETH00 e ETH03. Da queste richieste restano escluse
quelle destinate ai server web appartenenti alla subnet IP 172.16.0.0/16
e quelle provenienti dal client avente indirizzo IP 192.168.0.1. I
motivi per cui su alcuni client e per alcuni server web sia necessario
escludere l’intervento del proxy trasparente possono essere diversi. Per
esempio, un server web potrebbe restringere l’accesso solo ai client
con un determinato IP presente nelle sue ACL. In tal caso, se il proxy
intercettasse le richieste verso il suddetto server, le farebbe giungere
con il suo IP e ciò impedirebbe l’accesso. D’altra parte, non si
potrebbe autorizzare l’indirizzo IP del proxy nelle ACL del server web
poiché ciò significherebbe concedere l’accesso indiscriminato a tutti i
client che utilizzano il proxy. È quindi evidente, che l’unica soluzione
è quella di evitare l’intercettazione delle richieste da parte del
proxy trasparente.
Si noti infine, che le regole iptables per
effettuare il redirect verso il servizio proxy (8080 tcp) sono poste a
valle di quelle che intervengono nel funzionamento del Captive Portal.
Grazie a ciò, Captive Portal e Transparent Proxy possono essere
abilitati contemporaneamente sulla medesima interfaccia di rete.
Configurazione e attivazione del servizio proxy
Come illustrato nella figura sottostante, la configurazione del servizio proxy con antivirus è molto semplice. Dopo aver configurato il box Zeroshell per agire da router e avendolo configurato sui client come Default Gateway, oppure configurandolo come bridge e interponendolo in un punto della LAN da cui fluisce il traffico da e verso Internet, basta abilitare il flag [Enabled] affinché il proxy inizi a funzionare. Come accennato nel paragrafo precedente, le richieste web che effettivamente vengono intercettate e sottoposte all’azione del proxy sono quelle specificate mediante la configurazione delle [HTTP Capturing Rules].
Interfaccia web di configurazione del proxy
Si noti,
che l’avvio del servizio proxy è molto più lento rispetto ad altri
servizi e su hardware non troppo veloce può impiegare anche 30-40
secondi. Ciò è dovuto alla necessità, da parte delle librerie
dell’antivirus ClamAV, di dover caricare e decodificare in memoria un
numero molto alto di signature di virus. Per evitare che ciò blocchi a
lungo l’interfaccia web di configurazione e gli script di startup, si è
scelto di avviare il servizio in maniera asincrona. Pertanto, quando si
abilita il proxy o lo si riconfigura, la voce Status non riporta ACTIVE(in verde) immediatamente, ma passa prima dallo stato STARTING (in
arancione) che indica che il servizio sta caricando le signature. Per
capire quando effettivamente il proxy inizia a svolgere il suo compito,
bisogna cliccare su [Manage] in modo da fare il refresh della
pagina di configurazione, oppure, semplicemente fare click su [Proxy
log] per visualizzare i messaggi di startup del daemon havp. Durante il periodo di avvio del daemon havp, le regole iptables di
cattura delle richieste http vengono temporaneamente rimosse,
consentendo al traffico web di fluire regolarmente, anche se non
sottoposto al controllo dell’antivirus.
Nei successivi paragrafi sono analizzate più in dettaglio alcune voci di configurazione.
Log degli accessi e privacy
Poiché un
web proxy è un gateway applicativo in grado di interpretare le richieste
http, inevitabilmente, proprio per poter svolgere il suo lavoro,
decodifica gli URL visitati dagli utenti. Per default, Zeroshell non
manda nei log di sistema tali informazioni, che associate all’indirizzo
IP dei client richiedenti le pagine web, possono far risalire ai
contenuti visitati dagli utenti.
Tuttavia, il logging di tali informazioni può essere abilitato modificando la voce [Access Logging] da “Only URL containing Virus” a “Any Access”.
Così facendo, ogni URL visitato viene registrato nei log associato
all’indirizzo IP del client. Si raccomanda, prima di abilitare tale
opzione, di consultare la normativa del proprio paese per verificare che
il logging degli URL visitati non violi qualche norma sulla Privacy
degli utenti.
Peraltro, bisogna essere consapevoli, che
così come, abilitando il NAT su di un router di accesso a Internet, ogni
richiesta proveniente dai client, risulta all’esterno come effettuata
dal router stesso, anche le richieste http passanti per un proxy
risultano effettuate con l’indirizzo IP sorgente di quest’ultimo. Ciò
può creare difficoltà nel risalire all’identità di un utente che abbia
commesso delle azioni illecite su server remoti. Una possibile soluzione
a quest’ultimo problema, meno invasiva dal punto di vista della
privacy, potrebbe essere quella di attivare il logging del Connection Tracking (dall’interfaccia web di Zeroshell [Firewall][Connection Tracking]).
In tal modo, qualsiasi connessione TCP/UDP viene registrata nei log
riportando IP sorgente, porta sorgente, IP di destinazione e porta di
destinazione. Non sarà pertanto possibile risalire al contenuto
dell’attività dell’utente, ma si terrà traccia delle connessioni
effettuate. Anche in questo caso, si consulti la normativa prima di
abilitare il connection tracking.
Controllo antivirus sulle immagini
Per molto
tempo si è ritenuto che un file che contenga un’immagine come una JPEG o
una GIF non potesse contenere un virus, in quanto costituito
semplicemente da dati formattati in un formato prestabilito,
opportunamente interpretabile dal sistema di visualizzazione del sistema
operativo. Ultimamente invece, alcune componenti di rendering delle
immagini hanno dimostrato di avere delle falle se non opportunamente
aggiornate con delle patch. Un’immagine costruita ad arte, potrebbe
creare un Buffer Overrun ed eseguire codice arbitrario sul
sistema. È facilmente intuibile la gravità di ciò, visto che buona parte
dei contenuti degli ipertesti del WWW sono immagini.
Il proxy HAVP configurato in Zeroshell,
per default, sottopone le immagini al controllo antivirus di ClamAV.
Tuttavia, su hardware lento, lo scanning delle immagini potrebbe
ritardare l’apertura delle pagine web costituite da molte figure. In tal
caso, si dovrebbe valutare l’ipotesi di disabilitare il controllo sui
file contenenti immagini, impostando l’opzione [Check Images (jpg, gif, png)] da “Enabled” a “Disabled”.
Aggiornamento automatico delle signature di ClamAV
La
rapidità con cui vengono immessi in rete ed identificati nuovi virus, fa
si che le signature degli antivirus aumentino e vengano modificate
molto frequentemente. Non fa eccezione a ciò il database di ClamAV, che
grazie al daemon freshclam, può essere aggiornato online ad intervalli regolari di tempo.
Zeroshell configura per default freshclam per
effettuare il check sul database delle signature 12 volte al giorno.
Tale intervallo, può essere impostato mediante il parametro [Number of Checks per Day], da un minimo di 1 controllo al giorno fino ad un massimo di 48. È anche importante impostare correttamente il parametro [Country of the Mirror], mediante cuifreshclam sceglie
il sito più vicino da cui scaricare le signature dei virus. Si noti
comunque, che l’aggiornamento periodico è un’operazione veloce che non
genera molto traffico, poiché viene utilizzato un sistema di update
differenziale.
Blacklist e Whitelist dei siti web
Spesso si
ha la necessità di bloccare la visualizzazione di alcuni siti poiché il
loro contenuto non è ritenuto adatto all’utenza a cui il servizio web è
destinato. Si pensi per esempio, ai siti contenenti materiale per soli
adulti, la cui visualizzazione andrebbe evitata sui Personal Computer a
cui hanno accesso dei bambini. Una soluzione molto efficace per questo
problema è rappresentata dal forzare i client web ad accedere a Internet
attraverso un proxy, che tramite l’uso di software di Content Filtering come DansGuardian,
esamina il contenuto delle pagine html bloccando quelle ritenute
appartenenti ad una categoria non desiderata. I meccanismi con cui
lavorano questi filtri sono paragonabili a quelli dei sistemi antispam.
Purtroppo però, non è chiaro se la licenza con cui DansGuardian viene
rilasciato sia compatibile con l’integrazione all’interno di un sistema
come Zeroshell e, pertanto, si è preferito evitarne l’uso allo scopo di
non rischiare di violarla.
Al momento, per ciò che si è detto,
l’unico modo di bloccare o permettere la visualizzazione delle pagine
web, è quello di utilizzare le Blacklist e le Whitelist degli indirizzi web così come mostrato in figura.
Configurazione della Blacklist del web proxy
Sia la
blacklist che la whitelist sono composte da una sequenza di URL disposti
su linee distinte. Ogni linea può corrispondere a più pagine web se si
utilizza il carattere jolly *. Se si vuole bloccare tutto il sito http://www.example.com bisogna inserire nella blacklist www.example.com/*, mentre la linea www.example.com, cioè senza il carattere *, bloccherebbe soltanto la home page del sito.
La whitelist ha priorità sulla blacklist.
In altre parole, se una pagina web corrisponde ad un item nella
blacklist e contemporaneamente nella whitelist, l’accesso alla pagina
viene consentito.
Si noti peraltro, che lo scopo della
whitelist non è soltanto quello di permettere l’accesso a pagine che
sarebbero altrimenti vietate dalla blacklist, ma anche quello di
bypassare il controllo antivirus. Si presti attenzione a ciò.
Se l’amministratore di una LAN vuole
adottare la politica di fornire accesso soltanto ad un insieme limitato
di siti, potrà specificare nella blacklist la linea */* che vieterà l’accesso a tutte le pagine tranne quelle elencate nella whitelist.
Testare il funzionamento del proxy e dell’antivirus
Ci possono
essere essenzialmente due ragioni per cui il proxy potrebbe non
funzionare correttamente. In primo luogo bisogna assicurarsi, sia se il
box Zeroshell è configurato come router oppure come bridge, che il
traffico da e verso Internet lo attraversi effettivamente. In secondo
luogo, bisogna essere certi della corretta configurazione delle [HTTP Capturing Rules] che
determinano quali richieste http effettivamente deviare verso il
processo che espleta la funzione di proxy (havp è in listen su
127.0.0.1:8080). In particolare poi, se si impone l’intercettazione
delle richieste http su di un’interfaccia di rete che fa parte di un
bridge, ci si deve assicurare che su quest’ultimo sia definito almeno un
indirizzo IP.
La maniera più semplice per verificare se
il proxy sta lavorando correttamente, è quella di abilitare
temporaneamente il logging di tutti gli accessi e visualizzare i log del
proxy dopo aver richiesto delle pagine web da un client.
Una volta sicuri che il proxy intercetti
le richieste web nella maniera che ci si aspetta è necessario verificare
il buon funzionamento dell’antivirus ClamAV. Per far ciò, controllare
per prima cosa, dai log del freshclam, che gli aggiornamenti
delle signature avvengano regolarmente. Poi, dall’URL
http://www.eicar.org/anti_virus_test_file.htm provare se il virus di
test (a detta degli autori è innocuo) EICAR-AV-Test viene intercettato e bloccato.
Si noti infine, che il proxy non può
servire richieste https (http cifrato con SSL/TLS) visto che, non
disponendo della chiave privata del server web, non potrebbe decifrare
il contenuto e gli URL di tali richieste incapsulate in tunnel cifrati.