II portscan: un occhio
indiscreto nella rete La "Rete delle Reti" ci spia? Facciamo chiarezza su una delle "leggende" più diffuse degli ultimi anni, affrontando l'argomento "pori scanning", un must per ogni appassionato di sicurezza
Marco Ortisi <m,ortisi@linuxpratico.com>
Ogni persona che oggi può essere definita esperta nel settore della sicurezza informa
tica ha dovuto, prima o poi, affrontare le problematiche legate allo scanning; queste possono
host: sta quindi alia base di attacchi maggiormente
essere descritte e raggruppate all'origine come un
compiessi.
insieme di tecniche mirate ad ottenere informazioni
Nmap può essere considerato oggi il più completo
importanti su un computer (d'ora in poi definito
tool di tecniche di scanning pubblicamente accessi
host) o un gruppo di essi, quali possono per esem
bile. Gli esempi che seguiranno si baseranno sulla
pio essere la reperibilità di un indirizzo IP in rete, i
versione 3.48 reperibile (assieme alla passate e
tipi di servizi offerti agli utenti, le relative versioni
future release) all'indirizzo
etc. La parola scan deriva dall'inglese e sta infatti a
http; //vfM. insecure.org
significare "esaminare", "scrutare", "analizzare". Con il passare degli anni comunque l'accezione scanning ha subito un'evidente espansione di signi
Sweep Scanning & Broadcast Scanning
ficato ed in essa sono state inglobate anche altri tipi di tecniche (come per esempio quella del
Uno dei problemi basilari riguarda la possibilità di
fingerprinting discussa nel corso dell'articolo).
determinare quanti indirizzi IP in un range (un grup
Grazie a quanto sin'ora detto, conoscere ed utilizza
po) sono raggiungibili in una rete (pubblica o priva
re tali tecniche può sortire un doppio effetto: essere
ta) prima di passare ad analisi più complesse. La
d'aiuto in fase d'attacco (in quanto il fruitore finale
logica che sta dietro questa tecnica è molto sempli
delle informazioni raccolte potrà scegliere quella
ce: se un indirizzo IP risponde ad una determinata
maggiormente appropriata in base al tipo d'am
richiesta vuoi dire che lo stesso fa capo ad un host
biente e situazione da esaminare), ed esserlo in
attivo per il quale è possibile effettuare controlli
fase di difesa (in quanto l'avere conoscenza di cosa
maggiormente invasivi (caso A). Sarebbe invece
sia possibile fare servirò a comprendere come
uno spreco di tempo comportarsi nella stessa
potersi proteggere da questo tipo di attacchi).
maniera con un indirizzo IP che non fornisce alcuna
In realtà lo scanning non è un attacco nel vero e
risposta alle richieste inviate (caso B), d'ora in poi
proprio senso della parola. Esso è, però, lo stadio
definite query.
precedente ai tentativo concreto d'intrusione in un
Bisogna tuttavia fare una precisazione: un host che
non risponde a determinate richieste non necessa riamente è inattivo. Lo stesso potrebbe avere un firewall configurato che blocchi le query inviate. Lo scopo è quindi quello di trovare un modo per otte Vittima
Attaccante (Caio A)
nere delle risposte dall'host destinatario anche in
presenza di dispositivi di filtraggio o sistemi ID5. La tecnica che stiamo discutendo prende il nome di
Richiesta
Sweep Scanning. Nmap necessita dell'opzione -sP
Risposte
per sfruttarla.
Il concetto è !o stesso del ping (famoso tool presen te nella maggior parte dei sistemi operativi odierni): si tende ad inviare una richiesta definita ICMP Echo
(Caso B}
Richiesta Richiesto Richiesto
c
Request in attesa di ricevere in risposta un ICMP Echo Reply. Dato che solo questo potrebbe non bastare per rilevare un host attivo (in quanto le
query di tipo ICMP vengono solitamente bloccate dai firewall}, Nmap invia alla destinazione un pac chetto TCP con flag ACK settato, diretto verso la L'interazione tra attaccante e vittima durante due diversi tentativi di scanning
porta 80 (solitamente utilizzata per usufruire del
servizio web). Questo sotterfugio (attivabile anche tramite l'utilizzo dell'opzione -sA di nmap) dovrebbe
causare l'invio da parte dell'host di destinazione di
Host
192.168.0.165 appears
to
be up.
un pacchetto TCP con il flag R5T settato. La geniali
Host
192.168.0.166 appears
to
be
down.
tà di questa tecnica consiste nel fatto che nmap
Host
192.168.0.167 appears
to
be
up.
invia un pacchetto riguardante una connessione
Host
192.168.0.1Q8 appears
to
be down.
che in realtà risulta essere estranea al destinatario,
Host
192.168.0.1G9 appears
to
be down.
il quale ReSeTtandola fa capire di volerla interrom
Host
192.168.0.116 appears
to
be down.
pere e conseguentemente (ma non volontariamen
Host
192.168.S.Ili appears
to
be down.
te) di essere un host attivo.
Host
192.168.0.112 appears
to
be
Ecco una sessione d'esempio:
Nmap
run
addresses
completed
-
13
IP
up. (4
scanned #
nmap
-sP
Starting
hosts up) in
3.243 seconds
192.168.9."
nmap 3.48
(
http://www.insecure.org/nmap/ at
La modalità verbose può arricchire maggiormente
)
2633-12-16 22:Q1
CET
l'output di dettagli quando specificata 2 volte di
te
be
up.
seguito t-vv). La notazione dell'indirizzo IP utilizza
192.168.Q.105 appears
to
be
up.
ta come parametro dell'esempio sopra esposto è
192.168.G.107 appears
to
be
up.
separata questa volta dal simbolo -
Host
192.168.6.112 appears
to
be
up.
Nmap
run
Host
192.163.0.100 appears
Host Host
compieteci
-
256 IP
addresses
(4
hosts
scanned
in
108.836
(trattino),
up) secondi
-
La notazione 192.168.0. ■ che è stata utilizzata da lìnea di comando, istruisce nmap ad effettuare uno sweep scanning su tutti gli indirizzi IP racchiusi tra l'intervallo 192.168.9.1 e 192.168.0.255. Nmap supporta anche altri tipi di notazioni (alcune delle quali verranno illustrate in seguito). Dall'output del comando si evince che 4 host sono attivi e raggiungibili in rete {per ognuno di essi
viene stampato a video l'indirizzo IP), ma quello che salta subito all'occhio riguarda l'elevato tempo di scansione: 108 secondi sono tanti, soprattutto se si pensa all'impatto che ciò potrebbe avere quando si opera su molti più host. Questo è dovuto ai fatto che nmap prova a risolvere ogni indirizzo IP attivo trovato, in una stringa FQDN {Fuily Qualified Domain A/ame, ossia hostname più dominio, esem pio serverl.altavista.com) attraverso l'ausilio dei
server DNS configurati nella macchina da cui viene
Un host che non risponde ai ping può
lanciato l'attacco. E' per tale motivo che è possibile
risultare invisibile ad un'analisi superficiale
specificare il flag
-n (ossia "don't reverse") che di
sabilita questo comportamento standard:
#
rmap
i...]
-sP parti
-n di
192.163.9." output
omesse
Nmap run compieteti - 256 IP addresses scanned
(4 hosts up) in
55.663
Indirizzo Broadcast
seconcis
In questo caso sono stati risparmiati quasi la metà dei secondi in confronto alla sessione precedente.
ICMP Echo Requeit
Un altro flag che sarà maggiormente apprezzato
nelle prossime sessioni d'esempio è -v. Esso attiva la modalità verbose di rimai), che mostra un output arricchito di maggiori dettagli (nel caso dello sweep scanning, specifica oltre agli indirizzi IP trovati attivi anche quelli inattivi):
»
nmap
-sP
Starting
-n
-u
192.168.0.1GO-112
nmap 3.48
(
http://www.insecure.org/nrrtap/ at
2093-12-16
Host
192.168.0.160 appears
to be up.
Host
192.168.0.1G1 appears
to
be
Host
192.168.9.102 appears
to
be down.
Host
192.168.0.163 appears
to
be down.
Host
192.168.0.1G4 appears
to
be
©te
)
22:38
CET
PI ^^=LJ
Q
_Z=*L,
PI '?=W
Oown.
down.
Un ping all'indirizzo dì broadcast permette di ricevere risposta dagli host attivi
~
p. 38
INFORMAZIONI
Tecniche avanzate di
pacchetto TCP con flag SYN settato. Di riflesso l'effetto impor
mascheramento
averlo contattato, ed invierà ad esso gli eventuali pacchetti di
tante che si ottiene è che Host C crederà che sia Host B ad risposta, in questo caso cercando di portare a termine il
Vi sono deile situazioni in cui si desidera ottenere il massimo
3WayHandshake e replicando con il secondo pacchetto della
livello di anonimato in fase di scansione. Questa è una di quel
fase in questione (il SYN/ACK). Ricevendolo. Host B invierà ad
le tecniche definite "esoteriche" per via dell'alto livello di ano
Host C un pacchetto TCP con flag RST attivo, in quanto lui non
nimato che assicura all'utilizzatore finale.
ha mai richiesto l'inizializzazione di quella connessione. Ciò
Essa necessita di 3 soggetti per poter funzionare:
causerà l'aumento del suo campo IPID di 1. Host A a questo punto reinvierà una richiesta di connessione
> colui che è interessato ad effettuare la scansione (Host A);
ad Host B ed analizzando il valore IPID precedentemente
una postazione residente tisicamente in qualsiasi parte del
memorizzato con quello attualo, riuscirà a determinare che la
mondo da poter impersonare (Host B);
porta interessata è nello stato "open". Viceversa se la porta
> la postazione presa di mira, nonché oggetto dello scanning (Host C)
fosse stata chiusa. Host C avrebbe replicato con un pacchetto RST (al posto del SYN/ACK) e ciò non avrebbe causato l'invio
di alcuna replica da parte di Host B e nemmeno il relativo
II concetto teorico è quello di riuscire ad effettuare la scansio ne delle porte a cui si è interessati, rendendo visibile tra i file di log di Host C, l'indirizzo IP di Host B. Detta così sembra faci
aumento del campo IPID.
Nmap implementa questa tecnica attraverso il flag "-si". La sintassi è molto semplice:
le. Ma come è possibile fare ciò senza mostrare la propria # nmap -PO -si
identità?
192.168.0.36 192.168.e.112 -n -p 79-85
Ogni pacchetto che viene spedito in rete è contrassegnato da un numero identificativo chiamato IPID. La maggior parte dei
In questo esempio l'host mittente utilizzerà come dumb
sistemi operativi non assegnano ad ogni pacchetto un IPID
(l'Host B del caso) l'indirizzo IP 192.168.0.30 per effettuare la
casuale, bensì tendono ad aggiungere il valore 1 all'ultimo
scansione delle porte dalla 79 alla 85 di 192.168.0.112. Il
generato. In questo modo tenendo traccia dei vari ÌPID in un
flag "-PO" istruisce nmap sul fatto di omettere la fase di ping
determinato lasso di tempo si ha la possibilità di sapere quan
dell'host e procedere direttamente con lo scanning. Questa
ti pacchetti un host ha inviato in giro per la rete. Ma come può
tecnica è la meno tracciabile tra quelle fin'ora introdotte, ma
questo far capire se una porta è nello stato "open" presso un
ciò non corrisponde a dire che sia quella maggiormente utiliz
host remoto? La pratica dell'attacco si sostanzia nel momento
zata. L'IPÌD di un sistema potrebbe non seguire un andamento
in cui Host A invia una richiesta (solitamente un SYN) ad Host
sempre costante durante la scansione e ciò compromettereb
B analizzando il valore originario dell'IPID e tenendone traccia.
be l'attendibilità dell'output finale. Talvolta la difficoltà nel tro
In seguito Host A contatterà Host C alla porta desiderata, fal
vare host dormienti (nella fattispecie del caso 192.168.G.30)
sificando il proprio indirizzo IP con quello di Host B, utilizzando
e la generazione randomica dell'IPID in un sistema, rendono
una tecnica definita spoofing. Questo avviene attraverso un
l'implementazione pratica dì questa tecnica molto ardua.
stante ad indicare che si ha interesse ad effettuare
#
solamente la scansione degli indirizzi IP racchiusi
[...]
tra l'intervallo 192.168.0.100 e 192.168.0.112.
nmap
nmap
-sP
parti run
-PP
-n
192.16B.0--
di output omesso
conpleted
-
256
Talvolta può essere comodo effettuare lo sweep
IP addresses scanned
(4
hosts
in
up)
36.867
seconds
scanning di un range di indirizzi IP usufruendo di messaggi di query differenti dai tanto sfruttati ICMP
E' però possibile utilizzare un modo più semplice
Echo Request. Essendo questi infatti portatori sani
dello Sweep Scanning per conoscere quanti indirizzi
di attacchi di tipo DoS e DDoS (per intenderci quelli
IP sono attivi in una rete. Esso prende il nome di
mirati alla consumazione della banda di un host ed
Broadcast Scanning.
alla conseguente inattività dei servizi forniti) è pre
Esistono infatti degli indirizzi particolari (definiti di
feribile bloccare il loro ingresso a priori, evitando la
broadcast) che vengono determinati in base ad una
fuoriuscita in risposta di un ICMP Echo Reply.
specifica maschera di sottorete applicata ad un IP.
Fortunatamente non tutte le query del protocollo
In pratica basta l'invio di una sola richiesta ICMP
sono così
Echo Request all'indirizzo di broadcast, per far si
tanto conosciute e temute. Per esempio l'ICMP
che ogni host "vivo" residente in rete replichi con
Timestamp Request viene utilizzato per ottenere
un ICMP Echo Reply (evitando di fatto l'invio di un
l'orario corrente in millisecondi (a partire dal 1970)
alto numero di richieste come accade con lo Sweep
di un host e la sua presenza tenderà a sollecitare
Scanning). Dato che le maschere di sottorete utiliz
un ICMP timestamp reply in risposta.
zate {o subnet mask) sono quasi sempre standard,
Ma dove sta l'inghippo? Si va incontro ad una mar
è solitamente facile determinare tale indirizzo di
ginale implementazione della query in questione
broadcast di un gruppo di host.
(alcuni stack TCP/IP di vari sistemi operativi potreb
Utilizzando per esempio un indirizzo IP di classe C
bero ignorare per default l'ingresso di tali pacchetti
192.168.0.112 ed applicando ad esso una masche
di richiesta), ma in linea di massima si tratta di un
ra di sottorete standard 255.255.255.0, l'indirizzo
dettaglio minore vista la gran mole di sistemi che la
broadcast rilevato sarà 192.168,0.255.
implementano nativamente (la stragrande maggio
Nmap
ranza degh OS presenti oggi nel mercato).
so l'ausilio del flag -PE:
ICMP sfruttabili per lo sweep scanning
implementa il Broadcast Scanning attraver
Nmap mette a disposizione il flag -PP per lo scopo:
(!©
Scanning dei servizi [TCP e UPP] Attentante
Vittima
SYN (Y)
Una volta determinati quali indirizzi IP sono attivi in un range (operazione definita anche "mappatura
STN(K) + ACK(Y+1)
della rete"), si può procedere alla fase successiva
ACK(K + 1)
relativa alla scoperta dei servizi presenti negli host desiderati; sarà attraverso quelli vulnerabili che
avverrà in seguito l'intrusione. C'è da dire comun La sequenza del 3-way handshake che
que che nmap di per sé non segnala un servizio
permette di stabilire una connessione TCP
come vulnerabile, ma comunica le porte aperte degli host a cui si è interessati. Sarà compito dell'u
tente sfruttare altre caratteristiche del tool per avere notizie sempre più certe sul tipo di servizio
attivo; non è detto infatti che se la porta 80 sia aperta in un host il relativo servizio sia necessaria mente un Web Server (come da standard dovrebbe
essere). La correlazione porta/servizio non è quindi Atto«ante
Porta aperto
sempre vera. Nmap da la possibilità di portare a
SYN (Y)
termine la fase mirata alla rilevazione di tutte le
SYN (K) + ACKfY+ì)
porte aperte in uno o più host in molti modi, a
RSTACK
seconda del grado di anonimato che si desidera
~
ottenere. Ciò consentirà anche di fare una panora
mica sulle tecniche utilizzabili maggiormente in
Porto chiuso
auge fino ad oggi.
SYN (Y)
TCP Vanilla Scanning
RST(Y+1)
II Vantila Scanning è la tecnica più semplice che possa essere utilizzata. Nmap la implementa attra verso il fiag -sT. Il concetto è banale: essa tenta di Funzionamento del "vanilla scan": se la
porta è chiusa si riceverà un RST
stabilire una connessione per ogni porta che si desi dera analizzare. Per fare ciò conduce a termine quella che viene definita la fase del "3 Way Handshake" o preludio alla connessione. In pratica, prima che un client decida di stabilire un collegamento TCP (che sarebbe uno dei protocolli
9
rniap
[parti
-sP di
-PE
192.168.S.255
di trasporto che permette lo scambio dei dati tra
-li
gli host) con un server, ha bisogno di sincronizzare
output omesse]
dei valori definiti numeri di sequenza (ISN) con
Host 192.168.B.255 seems ta be a subnet broadcast address
[returned 5 extra
pmgs)
l'host di destinazione. Senza questa fase l'invio sicuro dei dati non sarebbe possibile. Il termine
A causa delle pericolosìtà degli indirizzi broadcast,
sicuro qui prende un'accezione diversa da quella
molti sistemi oggi per default disabilitano la possibi
che si potrebbe immaginare: sta ad indicare che i
lità di rispondere a query di questo tipo.
dati arriveranno con certezza all'host destinatario,
Lo Sweep Scanning rimane perciò, nella maggioran
anche se certe porzioni d'informazione vengono
za dei casi, più utilizzato.
smarrite durante il tragitto. Un esempio:
Come difendersi dallo Sweep Scanning e dal ;? Bloccare in ingresso le query di tipo ICMP non desiderate (esempio request
S nmap
-ST -11
Interesting
192.168.0.112
ports on
-p
1-25
192.163.3.112:
e timestamp) e/o bloccare in uscita le risposte ICMP
(Thè 22 ports scanned but not shojn betow are in state:
alle query non desiderate;
PORT STATE
per i firewall di tipo
closed}
SERVICE
statefull (che mantengono, cioè, lo stato delle con
21/tCp filtered
ftp
nessioni intercorse tra l'host che si sta proteggendo
22/tcp open
ssh
e le altre reti) bloccare in ingresso tutti i pacchetti
25/tcp open
smtp
TCP con flag ACK settati che non si riferiscano a sessioni relative a connessioni realmente inizializza-
Un nuovo flag che qui bisogna introdurre è -p. Esso
te e stabilite (RELATED, ESTABUSHED).
specifica il range di porte che devono essere analiz
Per il Broadcast Scanning potrebbe anche essere
zate. Se omesso nmap per default effettua la scan
abilitata l'opzione iempecho
sione di tutte quelle racchiuse tra l'intervallo 1 e
ignorebroadcasts
attraverso il comando
1024 ed in seguito tutte quelle specificate nel file services fornito assieme alla versione utilizzata del
# echo
"1"
>
tool. In entrambi i casi, le porte vengono analizzate
/proc/sys/net/ipv4 /ìcmp echo
ignorebroadcasts
in modo casuale (cioè senza un ordine sequenzia le). Alla voce STATE nmap riporta lo stato della porta:
©te
^
_
INFORMAZIONI open: sta a significare che la connessione è
TCP/IP
stata accettata e quindi che la porta è aperta;
Fìngerprinting
filtered: indica che un firewall od un dispositivo di filtraggio impediscono ad nmap di.
Spesso si potrebbe essere interessati a scoprire il sistema
determinare se quella porta è aperta o meno;
operativo dell'host di destinazione se durante la fase di
unfiltered: indica che la porta è chiusa e
scansione ciò non è stato possibile (per esempio non
nessun dispositivo ostacola nmap nel
riuscendo a riconoscere dai banner ottenuti certi servizi che
determinare ciò.
sono proprietari di determinati OS). La tecnica utilizzata in questo caso prende il nume di TCP/IP
Solitamente quest'ultima voce appare solo se in
Fingerprint. Nmap la implementa attraverso il flag -0.
fase di scansione sono state rilevate molte porte
Essa si basa sull'invio di pacchetti con una serie di opzioni e
flag settati in modo mirato che tendono a sollecitare rispo ste particolari che identificano lo specifico sistema operati vo. Ciò è dovuto al fatto che gli stack TCP/IP sono spesso
afflitti da sviste di programmazione o con volontarie elusioni degli standard dichiarati nelle RFC. Pertanto si potrebbero creare situazioni in cui i sistemi Microsoft rispondano in un
nello stato fìitered.
Nella colonna SERVICE nmap indica il tipo di servizio standard che equivale a quella porta, ma non fa un reale controllo per vehficare che, come detto prima, quest'accoppiamento sia vero. Per la sua semplicità, il vanilla scanning ha il van
certo modo a delle richieste, mentre quelli Linux lo facciano
taggio di poter essere utilizzato da utenti anche
in un'altra maniera.
senza privilegi di root e, per contro, lo svantaggio
Il TCP/IP Fingerprint serve a rilevare queste anomalie.
dì essere facilmente rilevabile in quanto si basa
Le richieste ricevute vengono infine confrontate con le istru
sullo scambio completo dei pacchetti che identifica
zioni contenute nel file nmap- f jngerprints. per riconoscere
no il preludio alla connessione.
lo specifico sistema operativo.
Per tutte
Ecco una sessione d'esempio:
le porte che non si riferiscono a servizi che si desi derano rendere fruibili all'utenza, bloccare in
a nmap
-0 192.168.9.5
[parti di Runmng: OS
-n -v
Linux Z.l.X
detsiXs:
Linux
Uptime 43.131 TCP Sequence
days
|
Generation:
II SYN Scanning è un buon compromesso tra tecnica
2.2.25
(since Tue Nov 11
Prediction:
Sequence
TGP SYN Scanning
2.2.X
2.1.19 -
Diffìculty=2064259 IPID
ingresso tutti i pacchetti TCP con flag 5YN settato.
output omesse)
68:58:23 20S3)
Clas5=random positive
increments
veloce e poco rintracciabile: è a tutt'oggi quella maggiormente utilizzata. Nmap la implementa
(Good lucjcjj
attraverso il flag -sS. Essa viene spesso identificata
Incrementai
con il nome di "scanning a mezza apertura" (half-opcn scanning), perché non completa la fase
L'output ottenuto anzitutto mostra che il sistema operativo
del 3 Way Handshake e quindi, di fatto, non stabili
rilevato è Linux con kernel compreso tra la versione 2.1.19
sce una vera e propria connessione.
e la 2.2.25. Uptime sta ad indicare il tempo di attività di
Ciò che fa capire ad un host che vi è qualcuno
tale host in rete; in questo caso lo stesso ha subito l'ultimo riavvio o shutdown 43 giorni prima. Questo esame è possibile attraverso l'invio di richieste TCP Timestamp e solo se l'host destinatario fornisce questo tipo
di informazioni. L'opzione -v da linea di comando abilita 2 test differenti:
intenzionato ad effettuare un collegamento ad una
sua porta (sia essa chiusa o aperta) è un pacchetto TCP contenente un'opzione settata definita SYN. Quando una porta è chiusa il comportamento di
default della destinazione è di inviare un pacchetto RST al mittente (comunicando di fatto di non voler
1)TCP Sequence Prediction utilizzato per determinare la
accettare la connessione). Ma quando una porta è
difficoltà di portare a termine una connessione per intero
aperta, l'host destinatario tende a rispondere con
attraverso lo spoofing, sfruttando una tecnica definita
un singolo pacchetto recante 2 opzioni settate (il
"predizione dei numeri ISN":
SYN e i'ACK), stante a significare che sì desidera
2) IPID Sequence Prediction utilizzato per verificare il tipo di incremento
applicato all'omonimo campo IPID
andare avanti nel collegamento. Il mittente a que sto punto (avendo determinato ciò che voleva) non
(utile per riconoscere se la destinazione può essere
ha più interesse nel terminare la SYN-cronìzzazione
soggetto passivo del Dumb Host Scanning).
della connessione ed invia alla destinazione un pac chetto RST (rifiutando di fatto l'invito a proseguire
Esiste un'altra tecnica definita ICMP Fingerprint utilizzata
lo scambio di dati). Questa situazione sortisce un
per scoprire il sistema operativo di un host. Essa si basa
doppio effetto:
sullo stesso concetto dell'altra, sfruttando però l'invio di richieste ICMP. Entrambi (TCP e ICMP Fingerprint) sono tracciabili utilizzando tool di analisi dei pacchetti a basso livello (quali tcpdump, ethereal, etc), ma sono difficilmente con trastabili.
Di norma sarà sufficiente una singola porta aperta o la rice zione di una sola risposta per determinare il sistema opera tivo di un host.
a) da la possibilità di sapere se una porta è aperta o meno;
b) non conduce a termine di fatto alcuna connessione, quindi non lascia tracce nei file di
log (che registrano tutte le attività intraprese da chi contatta uno o più servizi) del sistema dell'indirizzo IP di chi ha effettuato la scansione.
(«0
ESERCIZI
Alcuni esercizi
TCP FIN Scanning
~
II FIN Scanning è una tecnica altamente "stealth"
per approfondire
(silenziosa) che può essere definita un vero colpo di genio. Presentata su di un ormai storico numero
Nmap dò la possibilità di usufruire di molte altre opzioni
della famosa ezine Phrack. reperibile all'indrizzo:
d'ausilio alle tecniche di scanning fin qui introdotte.
http://www.phrack.org/show.php?p=49&a=15
Utilizzando la pagina di manuale del tool (man
II concetto di base è più semplice di quello che si
nmap) quale
sarebbe la sintassi da linea di comando per raggiungere i seguenti obiettivi, sapendo che l'indirizzo IP oggetto della
scansione (ove non specificato) è quello della propria macchina?
possa immaginare: un host di destinazione risponde ad un pacchetto TCP con flag FIN settato {che sta ad indicare la volontà di porre fine ad una connes sione) con un pacchetto RST se la porta analizzata
1) Utilizzo del 5yn Scanning sulle porte dalla 1 alla 1024 con fiag don't reverse e verbosità abilitati.
è chiusa o non fornendo alcuna risposta se è aper ta. Per far ciò dovremo usare i! fiag - sF. Esempio di sintassi:
2) Utilizzo del Vantila Scanning sulle porte 80, 22 e 25 con l'abilitazione del flag don't reverse.
# nmap
3) Utilizzo dello Sweep Scanning su 3 indirizzi IP di classe
-sF
192.168.6.199
-n
-p
privata (192.168.0.1,192.168.0.2, 192.168.0.3) forniti
PORI
STATE
attraverso un file chiamato IPS.txt
22/tcp
open
ssh
23/tcp
closetì
tel.net
24/tcp
closed
priv-mail
25/tcp
closed
smtp
■UAvendo effettuato una scansione ad un host usufruendo della sintassi
H
nmap
-sS
192.168.Q.1
-p
24-26
-PO
-n
22,23,110,25
Interesting ports on 192.168.0.112: 5ERVICE
Una cosa da notare qui è che il carattere "," può
ed avendo ottenuto ti successivo risultato, cosa si può evincere osservando lo stato delle porte analizzate?
essere utilizzato per specificare esattamente le porte che si intendono analizzare. Inoltre, in questa
sessione, anche senza l'ausilio del parametro -v, PCRT
STATE
nmap mostra lo stato di tutte le porte controllate (sia
SERVICE
aperte che chiuse).
24/tcp
filtered
priv-mail
25/tcp
operi
sratp
Il FIN Scanning potrebbe essere a tutt'oggi la tecni
26/tcp
fiUeretì
unknown
ca maggiormente utilizzata se non fosse per un det
taglio molto importante: alcuni sistemi operativi 5) Quali opzioni sono abilitate ed a cosa servono nella seguente sintassi?
» nmap
-PO
-sV
-sF
(quali per esempio Microsoft, IOS Cisco, IRIX, MVS, HP/UX e B5DI) tendono a rispondere con dei pac
-p 20,21,22,23,24.25 ■v
-n 192.168.0.1
6} Utilizzo del TCP/IP Fingerprint con Decoy Scanning
chetti RST anche quando una porta è aperta. Essendo i sistemi Microsoft i più diffusi tra quelli poc'anzi menzionati, un output di nmap che dovesse rilevare lo stato di tutte le porte analizzagli possibili
spoofando 4 indirizzi di rete privati (192.168.1.1,
(dalla 1 alla 65535) come "chiuse", potrebbe far
192.168.100.100, 192.168.90.1. 192.168.4.4), flag don't
capire all'attacker (colui che lancia cioè lo scan) di
reverse e verbosità abilitati.
avere a che fare con una piattaforma Microsoft anziché BSD Compliant o Unix Like e procedere di
Sarà possibile scaricare le soluzioni degli esercizi proposti direttamente dal sito delia rivista, all'indirizzo:
http://www.linuxpratico.com/sicurezza/
~
conseguenza ad attacchi mirati per quel tipo di sistema. Il FIN Scanning può quindi essere utilizzato come una tecnica pre-fingerprint. La sua attuazione
necessita di privilegi di root. Come difendersi da! FIN Scanning? Bloccare in
ingresso tutti i pacchetti TCP con flag FIN settato Esempio di sintassi:
per tutte le porte chiuse o relative a servizi che non si vogliono rendere pubblici all'utenza. Per i firewall
« nmap
-sS www.xxx.com
-v
-p
1-25
di tipo statefull (che mantengono cioè lo stato delle connessioni intercorse tra l'host che sì sta proteg
L'unica cosa d'interesse qui è che non viene specifi
gendo e le altre reti) bloccare in ingresso tutti i pac
cato il flag -n e viene fornito un FQDN al posto di un
chetti TCP con flag FIN settati che non si riferiscano
indirizzo IR La bassa tracciabilìtà di questa tecnica
a sessioni relative a connessioni realmente tnizializ-
è in realtà un palliativo, in quanto è possibile affian
zate e stabilite (RELATED, ESTABUSHED).
care oltre al sistema di logging standard, altri stru
menti in grado di registrare anche il singolo pac
Conclusione
chetto ricevuto ed accorgersi di fatto dell'attacco
Lo scanning è il gradino primario per effettuare altri
subito. L'attuazione di questa tecnica necessita dei
tipi di controlli su host o intere reti. Esso è inscindi-
privilegi di root.
bile dalla fase di raccoglimento delle informazioni. canning? Prendere le
stesse precauzioni utilizzate per il Vanilla Scanning.
L'efficacia di ciò dipende dalla tecnica utilizzata e dal grado di anonimato che si desidera ottenere.
~
Sicurezza: attacchi passivi in rete locale hi una rete locale è possibile portare attacchi di tipo passivo attraver so tecniche di miffìng. Scoprite insieme a noi il funzionamento di tali tecniche e dell'ARP Spoofmg...
Marco Drtisì <m.ortisi@linuxpratico.cofn>
Andrea Desantis <a.desantis@linuxpratico.con>
Dopo aver portato a termine la fase dello scanning si avranno sufficienti informazioni
per poter passare allo step successivo: l'at tacco o il tentativo d'intrusione vero e proprio, quel
informazioni all'attaccante. Questo modo d'agire
lo che dovrebbe garantire l'accesso alla postazione
viene denominato attacco passivo.
desiderata ed ai suoi dati. Esso può essere lanciato
Ma cosa si va ad "attaccare" nella pratica attivamente
da due punti strategicamente diversi:
0 passivamente? Principalmente due cose sono sog gette a questo tipo di "trattamento" nell'ambito che si
> da locale: se l'intrusore ha accesso alla rete
sta discutendo: i servizi presenti in un host o i protocolli
locale (come per esempio una intranet) in cui si
di cui esso fa uso per comunicare in rete.
trovano gli host che vuole colpire;
Quest'ultimi, sopratutto in ambiti locali {che sono
> da remoto: se l'intrusore si trova in una rete diversa da quella in cui vuole accedere.
quelli che analizzeremo), sono particolarmente vul nerabili ad attacchi di tipo passivo. Uno strumento valido per testare e dimostrare que
Tuttavia nella sicurezza informatica il termine
sta ed altre modalità offensive è Ettercap. Esso è
"attacco" non sempre indica un intervento diretto
stato creato da due autori italiani {Alberto Ornaghi
su qualcosa; anzi i risultati migliori spesso si otten
e Marco Valìeri) ed è reperibile all'uri:
gono semplicemente osservando i movimenti della
http://ettercap.sourceforge.net
vittima, ignara, che possono rivelare importanti
L'ultima versione è la 0.6b ma a breve dovrebbe essere disponibile una nuova release chiamata "ettercapNG" con una serie di caratteristiche
INFORMAZIONI
aggiuntive interessanti.
Dato che per i nostri esempi pratici utilizzeremo
Compilazione
proprio questo tool, consiglio caldamente sin da ora
d'installarlo sul proprio sistema. La compilazione di Ettercap a partire dai sorgenti può esse re necessaria per ottenere un binario personalizzato per (a nostra distribuzione e le nostre esigenze di configurazione.
Per compilare Ettercap sarà necessario avere installato i pacchetti di sviluppo (gec, glibc-dev, binutils, etc). Dopo aver scaricato i sorgenti del programma, estraiamoli con il solito comando:
Installazione di Ettercap 1 pacchetti binari di Ettercap sono disponibili per la maggior parte delle distribuzioni Linux. Per le distri buzioni basate su RPM basterà scaricare i pacchetti ettercap, ettercap-plugins e libettercap dispo nibili sul sito:
#
tar xvfz
ettercap-9.6.b.tar.gz
Quindi procediamo con la compilazione:
--enable-Mtps
rpm
-Uvh
".rpm
--disable-gtk
Per Debian, invece, sarà sufficiente utilizzare, come
# make # make
Per installarli basterà, in genere, un semplice:
#
# ed ettercap-6.6.b
# ./configure
http://rpm.pbone.net
instali
II parametro --disable-gtk omette l'installazione del sup porto grafico. Se non lo si specifica sarà necessario avere
al solito, APT:
# aptget
instali
ettercap
ettercap-plugins
installato anche il pacchetto gtk2-devel. Se si desidera il supporto all'interfaccia grafica sotto XFree, non bisognerà specificare tale opzione.
Lo Sniffìng
Per installare anche i plugin che vengono distribuiti assieme
Come visto poc'anzi il termine "attacchi passivi" è
al tool bisogna digitare:
da imputare interamente all'implementazione di
* make plug-ins # make plug-insinstall
una serie di tecniche (che man mano analizzeremo) le quali mettono un attaccante nelle condizioni di poter ottenere accesso ad altre postazioni in rete senza violarle in modo diretto. Tra queste, una delle
più interessanti è lo sniffing. Come facilmente intui bile dai nome essa si occupa di intercettare (in gergo sniffare) i dati in circolazione su una rete, dando così la possibilità ali'intrusore di "catturare" l'intero contenuto di E-Mail, documenti o, cosa ancor più grave, di quaìsiasi tipo di password della vittima (del proprio sistema, di altri sistemi localizzati all'interno o all'esterno della rete, di caselle E-Mail, d'accesso a servizi web, di client di messenging,
ecc..)- Lo strumento che, all'atto pratico, si occupa di tutto questo prende il nome di sniffer. Lo sniffing non è una tecnica propriamente "univer sale", nel senso che talvolta ha bisogno dell'ausilio
di altre tecniche per poter essere correttamente Schermata iniziale di Ettercap, da cui è
portata a termine. Ciò è causato principalmente
possibile selezionare gli IP da attaccare
dalla presenza in rete di due diversi tipi di dispositi vi: gli hub o gli switch. Tuttavia eviteremo di parlare dei primi, ormai in disuso, e passeremo direttamen
te ai secondi. Questa scelta non è assolutamente limitativa per l'utente, sia perché gli hub sono ora
~
mai poco presenti nelle reti odierne, sia perché la tecnica di sniffing che tratteremo in questo articolo funziona molto bene con entrambi i dispositivi
(semplificando di gran lunga quelle che erano le
SOUBCti
tecniche originarie di cattura dei dati in ambienti di
USI
:
192.168.0.10
i.—.
rilier
]92.iee.0.1
<—'
IL=;ivs
rete con presenza di hub).
Esempia pratica Ettercap rende banale all'utente l'intercettazione delle connessioni desiderate (e naturalmente dei
relativi dati). Tutto ciò che bisogna conoscere, sem plicemente, è l'indirizzo IP dell'host che si vuole spiare. Quanto detto può essere dimostrato com piendo pochissime operazioni. Per prima cosa, andrà eseguito il tool attraverso il comando: Schermata raffigurante il dettaglio dei dati intercettati in una connessione.
# ettercap
Nella lista di sinistra selezionare (premendo Invio) ['indirizzo IP che si intende spiare (nell'esempio
TIPS 'n' TRICKS
192.168.0.70); in quella di destra, invece, l'indirizzo che funge da gateway d'uscita per la rete (nell'esem pio 192.168.0.1) come da figura 1. Premere il tasto
Sonde anti-sniffing
a, quindi per dimostrare la veridicità dell'attacco
In ambienti di rete con presenza di hub è possibile rilevare
spostarsi al computer che si intende spiare e visita
gli host che stanno praticando sniffing. Una postazione,
re il sito http://www.oltrelinux.com navigando un po' in qualche link. Tornare al
computer in cui è stato eseguito
prima di portare a termine attacchi di questo tipo, imposte rò la propria scheda Ethernet in una modalità definita pro
miscua che inibirà di fatto i controlli fatti dal filtro hardware della stessa figura 5. In modalità promiscua, un'interfaccia
Ettercap. Durante l'assenza dal PC saranno state
riceve tutto il traffico transitante, incluso quello non indiriz
inserite delle voci dal programma che si riferiscono
zato direttamente ad essa.
a tutte le connessioni sniffate in quel momento.
Un amministratore può quindi inviare in rete una serie di
Attraverso le frecce cursore posizionarsi in quella che interessa (in questo caso una di quelle che si riferiscono all'IP 8G. 17.149.253) e premere il tasto
pacchetti sonda opportunamente manipolati: questi, in con dizioni normali, quando cioè una scheda non è settata in modalità promiscua, non dovrebbero causare la ricezione di alcuna risposta. In caso contrario l'amministratore avrebbe
Invio. A questo punto apparirà a video il dettaglio in
la certezza che l'host che ha risposto è predisposto per lo
chiaro testo dei dati intercettati come da figura 2.
sniffing. La discussione sul tipo di sonde inviate rischierebbe
Premere il tasto q per tornare al punto precedente,
di allungare smisuratamente i contenuti dell'articolo: da
quindi nuovamente q per interrompere lo sniffing
delle connessione e ritornare al menu iniziale di
kernel a kernel, infatti, esse possono cessare di funzionare, pertanto in questo campo vige una ricerca continua.
Per tale motivo ci limiteremo a dire che Ettercap può rileva
Ettercap.
re la modalità promiscua attraverso un plugin chiamato
Pratica ws Teoria
dalla lista all'avvio del programma).
Come visto Ettercap permette in modo pratico di intercettare tutte le connessioni volute. Ma cosa
hunter (attivabile premendo il tasto p e selezionandolo
Un controllo di questo tipo, di tanto in tanto, non farebbe assolutamente male a qualunque rete.
accade "tecnicamente" quando si preme il tasto a nella schermata iniziale del programma? Per capirlo bisogna partire dal modo in cui ì PC di una rete comunicano a livello fisico l'un l'altro.
Ciò che viene collegato fisicamente alla porta di uno switch è un cavo che va a terminare nella sche da di rete (anche denominata "scheda Ethernet") di un client/server. In essa è presente un indirizzo a 48
bit definito "MAC" (di tipo hardware) come 00:3Q:84:40:9E:91 che identifica univocamente la scheda tra tutte le altre presenti In rete e che assie me all'indirizzo IP (di tipo software) in essa configu rato, creano "un'associazione" certa ad un determi nato host.
Uno switch effettua lo smistamento dei singoli "pac chetti dati" (d'ora in poi definiti frame) conservan do in memoria una tabella dove ad ogni porta fisica viene associato un indirizzo MAC. Questa tabella
Switdi
fohelli swiKh
Porto
MAC
1
N
2
y
3
K
viene analizzata al momento della ricezione di un nuovo frame in modo da determinare univocamen te in quale porta instradarlo (figura 4). Una scheda di rete effettua due tipi di controlli su ogni trame che riceve in modo da far arrivare al kernel de! sistema operativo solamente i dati che gli competono. II primo viene portato a termine da
un filtro hardware che analizzando la porzione dati specifica di ciascun frame in ingresso (chiamata header Ethernet) consente l'accesso solamente a
quelli destinati al proprio indirizzo MAC. Arrivati nella zona kernel del sistema operativo il frame
diventa "pacchetto" in quanto viene privato dello funzionamento di HUB (in alto) e Switch
header Ethernet ormai non più utile. A questo punto
(in basso) a confronto
il pacchetto viene preso in consegna dal sistema
operativo e inviato al processo utente solamente se passa il controllo di un ulteriore filtro software (le cui regole di accettazione o scarto vengono settate
da tool quali iptables, ìpchains, ecc... figura 4). Una delle principali limitazioni alle tecniche di sniffing in ambienti con presenza di switch viene pertanto for
Frame
nita, oltre che dagli stessi switch attraverso le asso ciazioni univoche MAC-IP che essi creano, anche dalle schede di rete con il proprio filtro hardware e
Filtro hardwore Indico
MAC destinazione
quello software del sistema operativo.
Sniffino in
MAC uhedo di tetti
Indirizzo IP
ambienti switchati Detta così sembrerebbe che sia impossibile fare sniffing in ambienti switchati. in realtà un classico sniffer nato per operare su segmenti di rete connes
Kernel Esistono (imitazioni d'accesso
perii pacchetto?
si con hub non avrebbe possibilità di funzionare cor rettamente senza sfruttare una tecnica ausiliaria.
Tale tecnica prende il nome di ARP Poisoning.
Fillro soffwore
Vediamo in cosa consiste.
Ko
Come già detto un computer connesso ad una rete Ethernet è provvisto di due tipi d'indirizzi: IP e MAC.
Quest'ultimo è necessario affinchè i frame possano Usertond
essere inviati e ricevuti ed è l'unico punto di colle gamento dello strato datalink. In pratica un host per scambiare dati con una destinazione inizialmente ne conosce solamente l'indirizzo IP e ciò non è suffi
Percorso intrapreso da un frame quando
ciente. Dato che la comunicazione avviene in real
viene ricevuto da una scheda di rete
tà a livello fisico tra le varie schede di rete attra verso lo switch, un host necessita di un metodo
per conoscere l'indirizzo MAC di una destinazione a partire dal relativo indirizzo IP prima di cominciare ad inviargli dei dati. Per questo scopo viene utilizza to il protocollo ARP (Address Resolution Protocol).
Quando un computer ha bisogno di contattare un host di cui non conosce l'indirizzo MAC, invia in rete un pacchetto ARP Request settando l'indirizzo fisi co di destinazione al classico broadcast address (cioè FF:FF:FF:FF:FF:FF) e specificando l'indirizzo
IP equivalente alla destinazione desiderata. In que sto modo la richiesta viene smistata a tutte le schede Ethemet collegate in rete (essendo di tipo broadcast).
Chi la riceve deve analizzare l'indirizzo IP presente con quello configurato nella propria interfaccia di rete e. se equivalente, ritornare al mittente il pro prio indirizzo MAC in un pacchetto ARP Reply.
Per fare in modo che l'invio di ogni pacchetto non generi sempre una richiesta ARP, ciascun host man tiene una cache (definita ARP Cache), in cui sono presenti le coppie indirizzo IP/MAC Address associa
to (visualizzabili attraverso il comando arp
-a).
Una postazione invia una richiesta ARP di tipo broacast per ottenere il MAC Address di y.y.yy. Questo risponde con un ARP Reply
Queste associazioni vengono eliminate nella ARP
~
Cache dopo un certo periodo di tempo che va dai 5 ai 20 minuti. Le associazioni incomplete (quelle per
definitivamente come all'inizio dell'articolo è stato
cui ad un indirizzo IP non equivale alcun MAC
possibile visualizzare in chiaro testo i dati scambiati
Address) sono causate dal tentativo di inviare pac
tra un host in rete ed un sito web.
chetti ad host che non sono presenti in rete e che
Supponiamo che le postazioni qui oggetto dell'at
non possono quindi rispondere alle ARP Request.
tacco aggiornino le loro cache ARP a partire dalla
Il problema d'insicurezza risiede nel fatto che l'ARP
ricezione di una semplice ARP Reply e poniamo il
è un protocollo stateless {al contrario del TCP) quin
caso che ATTACCANTE sia l'intruso, IP_B la posta
di la ricezione di un ARP Reply senza averne fatto
zione attaccata e IP_C i! gateway d'uscita in una
espressamente
rete locale.
richiesta
attraverso
un
ARP
Request, causa l'aggiornamento automatico della ARP Cache di un host. L'ARP Poisoning è in definiti va la tecnica che ne permette l'alterazione.
1 ATTACCANTE altera la cache ARP di IP_B
inviandogli un ARP Reply in cui afferma che
L'eccezione alla regola comunque esiste ed è rap
ii MAC Address di IP_C è equivalente a quello
presentata da Linux con kernel 2.4.x; esso non
di ATTACCANTE.
accetta repliche ARP non espressamente sollecita te, ma rimane comunque vulnerabile a questo tipo
2 ATTACCANTE altera la cache ARP di IP_C
di attacco se riceve una richiesta ARP contraffatta.
inviandogli un ARP Reply in cui afferma che
In pratica l'intrusore invia una ARP Request con il
il MAC Address di IP_B è equivalente a quello
proprio MAC Address ed indirizzo IP contraffatto
di ATTACCANTE.
(secondo le esigenze dell'attaccante). Il kernel 2.4.x dell'host vittima pensando che qual
cuno è interessato ad avviare una comunicazione
3 Quando IP__B e IPC entrano in comunicazione,
in realtà essi (a causa dei punti 1 e 2) inviano i
con lui, aggiunge l'associazione IP/MAC appena
pacchetti da loro generati a ATTACCANTE il
ricevuta nella propria ARP Cache e risponde con un
quale sarà libero di sniffarli. Quest'ultimo dovrà
ARP Reply. Ettercap utilizza entrambe le tecniche
provvedere anche a forwardare all'occorrenza i
(poisoning attraverso ARP Reply ed ARP Request)
dati ricevuti verso IP_B e IP_C facendogli
alternandone l'uso (ma la tecnica più diffusa rimane
credere così di essere in diretto contatto l'uno
sicuramente la prima). Maggiori dettagli in tal senso
con l'altro.
sono inclusi nel file README reperibile nel pacchetto sorgente del tool.
Snìffing & ABP Poisoning L'attacco che è possibile vedere nel riquadro (detto
4 Per mantenere un effetto continuo i punti 1 e 2 devono essere ripetuti ad intervalli regolari
anche successivamente l'inizio dell'attacco, principalmente per evitare che !e associazioni
appunto ARP Poisoning) causa di per sé una sempli
IP/MAC scadano nella cache ARP degli host
ce negazione di servizio (Denial of Service) alla vit
soggetti a poisoning. Se ciò accadesse infatti
tima, ma può essere agevolmente utilizzato per
l'attacco cesserebbe di funzionare. Non appena
sniffare le connessioni di uno o più host.
terminato ATTACCANTE dovrà ripristinare i
Fortunatamente queste tecniche sono utilizzabili
MAC Address originari nella cache delle vittime
solamente in reti locali dato che i pacchetti ARP non
se non vorrà causar loro difficoltà di
possono essere forwardati attraverso router. Un
comunicazione in rete (come dimostrato nel
esempio teorico "illustrato" servirà a comprendere
paragrafo precedente).
~
INFORMAZIONI
.
Esempio di alterazione della Arp cache di un trast Dimostriamo quanto è banale alterare la cache ARP di un host. Eseguire Ettercap attraverso il comando:
COMUNICAZIONE NORMALE ip
# ettercap
D::i
Nella lista di sinistra selezionare l'indirizzo IP a cui si vuole alte rare la cache {esempio 192.168.0.113); in quella di destra selezionare invece l'indirizzo IP del gateway d'uscita della rete (esempio 192.168.G. 1). L'effetto ottenuto quando l'attacco verrà portato a termine sarà quello di isolare 192.168.G. 113 da Internet.
Dall'host vittima (192.168.0.113 del caso) pingare l'indirizzo IP
del gateway (esempio ping
-e
FASE1 ATTACCANTI
1 192.168.G. 1) e quindi visua
lizzarne la cache ARP attraverso il comando:
#
arp
-an
Si otterrà un output simile al seguente:
MAC- 00=11:22:33:44:55 IP €.= «0=11 22-33-44.55
(192.168.6.1}
at
ee:9B:27:27:B0:64
[ether|
on
eth9
Tenere ben a mente in questa fase l'indirizzo MAC
FASE 2 IP B
60:99:27:27:BD:64 associato con TIP 192.168.0. 1.
ATTACCANTE
Dal computer su cui gira Ettercap premere il tasto j. Per dimo strare la veridicità dell'attacco spostarsi sul computer che si
vuole isolare e riciigitare il comando arp - an. Il risultato sarà: (192.168.9.1)
at 90:09:5B:fl6:2A:C6
[ether]
on ethe
Caée IP 1=00:11:22=33 44 55
IP C= 00.11=21 J3.44:H
La prima cosa che salta subito all'occhio è la differenza d'asso ciazione IP/MAC tra i due comandi che mostrano il contenuto della cache ARP della vittima. Tentando dì navigare da questo
host si noterà l'impossibilità di raggiungere qualsiasi sito
FASE 3 IP B
ATTACCANTE
Internet. Esso cercherà in pratica di inviare i propri frame all'in dirizzo MAC sbagliato (Q0;Q9:5B:O6:2A:C6 e non a 0O:9G:27:27:BDi64),che in realtà è quello della macchina dalla quale è stato lanciato l'attacco: quest'ultima, scartandoli, causerà di fatto alla vittima l'impossibilità di navigare in rete. Per terminare l'attacco spostarsi nel computer dal quale è stato
eseguito Ettercap e premere un tasto qualsiasì.
L'ARP Poisoning è una tecnica geniale che può
INFORMAZIONI
essere utilizzata sia per sniffare il flusso di dati tra due IP (come d'esempio tra un client, 1P_B, ed il suo gateway d'uscita, IP_C) che tutto il traffico
ARP gratuiti...
verso uno specifico IP o tutto il traffico verso qual
Quando un host manda un'ARP Request impostando TIP
siasi destinazione.
sorgente e destinazione della richiesta al proprio indirizzo
Un'altra tecnica di sniffing in ambienti switchati
ed il MAC di destinazione al classico valore broadcast
consiste nell'inviare un alto numero di repliche o richieste ARP con dei MAC Address casuali, per ten
tare di "resettare" il comportamento dello switch. E'
(FF:FF:FF:FF:FF:FF}sÌdÌceche ha inviato in rete un ARP gratuito. Questo tipo di frame viene generato per assicurar si che non vi sia nessuna altra scheda di rete che utilizzi il proprio indirizzo IP.
stato appurato che alcuni dispositivi, se tenuti sotto
Nel caso che l'host mittente riceva un'ARP Reply alla sua
stress in questo modo, passano in una modalità
richiesta, ci si troverà in presenza del famoso fenomeno del
definita frame-broadcast assumendo di fatto un
"conflitto" in cui 2 host in una rete possiedono lo stesso
comportamento del tutto simile a quello degli hub (forwardare, cioè, ogni frame ricevuto in ogni porta
hardware presente a prescindere dalla destinazio
indirizzo IP (e ciò non è possibile). Gli ARP gratuiti vengono anche inviati quando ad una posta zione viene cambiata la scheda di rete. Questa avrà un indi rizzo MAC differente da quello della precedente, l'ARP gra
ne). Ettercap viene installato nativamente con un
tuito al reboot della macchina è un metodo veloce per
plugin chiamato spcctre che agisce proprio tn que
notificare tutti gli host presenti (attraverso una richiesta
sto modo. Può essere testato lanciando ettercap, premendo p e selezionandolo dalla lista dei plugin.
Se non si sa ciò che si sta facendo sì sconsiglia cal damente dì attivarlo.
broadcast) che l'associazione IP/MAC è cambiata. Tutto ciò servirà a far aggiornare la cache ARP delle singole postazioni in rete.
~ Contromisure anti
non ne indicheremo uno od una serie specifica,
Sniffing/ABP Ppisoning
Sarà sufficiente cercare le parole managed switch
Esistono diverse contromisure che permettono di
Quando si ha a che fare con reti di piccole dimen
nel sito del produttore preferito.
contrastare attacchi di Sniffing attraverso ARP
sioni o non si dispone dei fondi necessari per l'ac
Poisoning. Il problema può essere risolto, pratica
quisto di uno switch amministrato (anche se ormai
mente, a livello hardware o a livello software. Nel
le differenze di prezzo non sono abissali come in
primo caso, se si è in possesso di dispositivi hub, è
passato) è possibile risolvere il problema diretta
indiscutibile il fatto che debbano essere cambiati
mente a livello software. Sarà sufficiente creare
con degli switch. Anche i semplici dispositivi switch
delie voci statiche nella ARP Cache degli host pre
(così come gli hub) devono essere sostituiti con i
senti in rete. Questa accortezza non permetterà più
cosiddetti switch amministrati che permettono di
l'aggiornamento della cache ARP per un determina
fissare gli indirizzi MAC desiderati su ciascuna
to IP attraverso la ricezione di ARP Request o Reply.
porta. Di fatto, questi strumenti non consentono la
Per esempio, se si desidera aggiungere in una
fuoriuscita da una specifica porta hardware di
postazione presente in rete una entry ARP statica al
frame con MAC Address diversi da quelli configurati.
gateway d'uscita con IP 192.168.0.1 si dovrà:
Esistono diversi modelli di switch amministrati ma > Ottenere l'indirizzo MAC del gateway digitando il
TIPS 'n' TRICKS
comando arping
192.168.0.1;
> Fissare (in gergo lockare) l'indirizzo iP del
gateway al MAC Address ottenuto nella fase
Oltre le ARP statiche
precedente attraverso il comando arp
E' possibile filtrare le coppie IP/MAC Address direttamente dal gateway con IPTables; questa soluzione è molto più fles sibile di quella di creare ARP statiche su ogni nodo. Posto che
-s
192.168.0.1 HAC_Address; > Per dimostrare che un tentativo di poisoning non
può più corrompere le informazioni contenute
gli indirizzi dell'host siano 192.168.0.1 e 00:11:22:33:44:55.
nella cache ARP della postazione appena
la sintassi è molto semplice:
configurata, eseguire gli stessi passi già illustrati
# iptables
-A INPUT
-s
192.168.0.1
# ìptables
nel riquadro Esempio d'alterazione della ARP
-n mac
■■mac-source 86:11:23:33:44:55
-j
ACCEPT
cache di un host (avviando naturalmente Ettercap da una postazione differente da quella
-P INPUT DROP
in cui è stata messa la voce statica); > Navigare in rete dal computer vittima ed
INFORMAZIONI
accertarsi della corretta visualizzazione dei siti
visitati.
ARP Proxy
L'efficacia di questo metodo è controbilanciata dal ARP Proxy: è un sistema utilizzato per mettere in comuni cazione due o più reti che non sono in diretto contatto tra loro. Per esempio supponiamo che un client presente in una rete abbia intenzione di comunicare con un server residente
fatto che, in pratica, è un lavoro lungo e faticoso creare voci ARP statiche in una postazione per ogni host residente in rete, pertanto il consiglio che
in un'altra e che le 2 reti vengano collegate tra loro tramite
spesso viene dato è quello di affrettarsi a farlo per
un router. Il client invia una Richiesta ARP per conoscere
lomeno in tutti i server e client in cui circolano dati
l'indirizzo MAC del server.
importanti (qualora non fosse possibile affidarsi a
Come già detto il protocollo ARP non è routabile (non può essere in pratica inoltrato a reti esterne a quella locale) per tanto è il router stesso a prendersi carico della richiesta ed
a rispondere con un ARP Reply. In questo modo il client
switch amministrati).
Considerazioni finali
invierò a lui tutti i frame destinati al server che verranno a
Lo sniffing, semplice o coadiuvato da ARP poisoning
loro volta smistati alla giusta destinazione.
come metodo di attacco passivo, è uno strumento
In Internet. essendoci diversi salti tra un host mittente ed
molto potente, ma di perse non consente l'intercet
uno di destinazione, questo processo viene ripetuto ciclica
tazione di dati al di fuori di quelli transitanti in chia
mente nella cache di ogni router.
ro testo. In presenza di sessioni crittografate (come SSL o 55H) la semplice analisi dei pacchetti non
WEBOGRAFIA
Riferimenti web RPM per Ettercap
http://rpm.pbone.net DEB per Ettercap
http://packages.debian.org/unstable/net/ettercap Risorse sui protocollo ARP
http://mia.ece.uìc.edu/-anùt/Ethernet/msg00002.html Sito di Ettercap
http://ettercap.sourceforge.net RFC riguardante ARP
http://vwirf.faqs.org/rfcs/rfc826.htnil
consente di avere un output leggibile o comprensi bile. La chiave di tutto risiede nell'adeguato sfrutta mento dell'ARP Poisoning (a meno che non possie da accesso ad un punto nella rete in cui tutti i dati
fluiscono, come per esempio un gateway), interve nendo "attivamente" nella comunicazione tra un
client e un server, non limitandosi alia semplice osservazione dei pacchetti. La manipolazione fraudolenta di false repliche e
richieste ARP permette all'intruso di operare altri tipi di attacchi oltre quelli menzionati. Molti di essi verranno trattati nel successivo articolo assieme alle relative tecniche di rilevamento.
Sicurezza: sniffing, spoofing e hijacking Una volta compreso il funzionamento dcU'ARP-Spoofing, è possibile effettuare con estrema facilità gli attacchi basati su IP spoofing ed IP hijacking, in particolar modo in ambito locale.
Marco Ortist <m.ortisif3linunpratico.com>
Andrea Desantis <a.desantis@linuxpr3tico.com>
Gli attacchi passivi ai protocolli di rete con sentono l'intercettazione di dati in modo del tutto silenzioso. Con lo sniffing infatti le password che viaggiano in chiaro testo possono essere "catturate" ed utilizzate per introdursi nei
Spoofing: la base Lo spoofing è una tecnica che permette l'aiterazio-
sistemi desiderati.
ne dei pacchetti in modo che sembrino provenire da
Tuttavia questa tecnica è completamente insuffi
un host diverso da quello in cui l'ipotetico intruso
ciente contro protocolli che fanno massiccio utilizzo
sta in realtà lanciando l'attacco.
della crittografia, come SSL ed SSH (tale situazione
Questo avviene principalmente falsificando il campo
verrà chiamata "scenario 1 ").
"Source Address" nell'header IP di ogni pacchetto.
Un altro pessimo luogo comune da sfatare è l'osan-
Detto campo specifica l'indirizzo del mittente che sta
nazìone totale della "password" come mezzo sicuro
cercando d'inizializzare una connessione TCP o UDP. Lo
d'intrusione in un sistema. Non si considera il fatto
spoofing viene definito vedente quando l'intruso ha la
che ci potrebbero essere ulteriori strumenti di prote
capacità di sniffare il traffico tra l'host che vuole
zione come quello di consentire l'accesso esclusiva
impersonare e quello che vuole attaccare e cieco
mente ad uno o più indirizzi IP (scenario 2).
quando ciò non è possibile.
In presenza di situazioni come queste, possedere la
Solitamente questo accade quando non si dispone
password di root di un host, ma non avere accesso
dell'accesso locale ad una rete e si tenta di sferrare
ad un sistema di cui esso si fida in modo da poter
l'attacco direttamente da remoto.
lanciare un attacco direttamente da tale host, ne pre
Lo spoofing cieco è una tecnica molto complessa,
cluderà la riuscita.
nella maggior parte dei casi oggi difficilmente
Tutti i problemi sinora menzionati possono essere
sfruttabile o addirittura impossibile da portare a
bypassati intervenendo attivamente nell'attività di
termine, pertanto non verrà qui discussa (dando per
rete. Lo sniffing rimane, quindi, il fulcro principale su
scontato quindi che l'intruso si trovi in una postazione
cui poggiano due tra le sue conseguenze più dirette:
qualsiasi all'interno di una rete locale, vedi figura 1).
lo spoofing e l'hijhacking. Esse permetteranno all'intruso di risolvere problematiche come quelle precedentemente poste.
Attaccare utilizzando il protocollo TCP: lo spoofing
La produzione di sessioni d'esempio verrà praticata
Un intruso dovrà adempiere correttamente a 3 fasi
attraverso l'ausilio di Ettercap 0,6b.
ben precise per riuscire a concludere un attacco di
spoofing vedente:
Intrusa
Palchetto (on indirizzo IPlalsKkoio
Server
i^l)
1 Posizionare uno sniffer in modo d'intercettare il flusso dei dati tra l'host che intende impersonare e la vittima (avvalendosi di una qualsiasi delle tecniche discusse nella prima parte dell'articolo se necessario).
Cileni lecito
2 Attraverso un attacco DoS mettere fuori gioco
isolato dalla rete
l'host che deve essere impersonato in modo da isolarlo dal resto della rete {magari utilizzando la tecnica "ARP Poisoning" per lo scopo).
3 Avviare una connessione con la vittima Sessione di spoofing, l'intruso inizia una connessione con il server
falsificando il proprio indirizzo IP come se fosse quello del client lecito
"spoofando" l'indirizzo IP dell'host isolato dalla rete, portare avanti la connessione rispondendo correttamente ai pacchetti intercettati. Una volta
inizializzato il collegamento l'intruso avrà la
possibilità di inviare i dati desiderati e far credere
alla vittima di riceverli da un host fidato. Passata questa fase iniziale, tenere in piedi una connessione non sarà molto difficile: bisognerà solamente prestare attenzione ai valori Sequence Number ed Acknowledgment Number ritornati dalla destinazione e rispondere adeguatamente. Per fare
ciò si devono conoscere profondamente le regole del gioco (che in questo caso si chiama protocollo
TCP} ed avvalersi dell'ausilio di un programma che automatizzi tutte le operazioni necessarie. Le
specifiche tecniche del TCP sono comunque consumabili all'uri
http://www.faqs.org/rfc/rfc793.txt II punto 2 è di fondamentale importanza per la riuscita dell'attacco: se l'host da impersonare non
Esempio di come l'intruso può distruggere la connessione tra IP_B ed IP C inviando un paio di pacchetti RST spoofati con j corretti valori di Acknowledgment
venisse isolato dal resto della rete, i pacchetti invia ti dalla vittima gli verrebbero recapitati anche se non sono stati da lui realmente sollecitati (non dimentichiamoci che il vero mittente è l'intruso). Di fatto l'host lecito non avendo richiesto l'inlzlallzzazione di alcuna connessione risponderà alla destina zione con un pacchetto TCP con flag RST attivo. Questo causa la distruzione della connessione in corso e vanifica di fatto l'attacco intrusivo. Con lo spoofing lo scenario 2 proposto all'inizio dell'artico lo può essere facilmente bypassato. In questo modo, se un server di cui si conosce la password garantisce l'accesso solamente ad uno specifico indirizzo IP, l'intruso avrà ugualmente la
possibilità di insinuarsi al suo interno. Dato che lo spoofing permette principalmente l'al terazione dell'indirizzo IP del mittente di un pac
chetto, esso trova applicazione in tantissimi altri ambiti: uno dei più classici è quello di causare un
DoS killando tutte le connessioni intraprese da un host {il cosiddetto "Kill Connection").
Con "Ettercap" basta semplicemente sniffare il traf
Classica Sessione di Hijacking: il client stabilisce una connessione con il server e
l'intruso si insinua successivamente nel mezzo di questo flusso.
fico che circola in rete {come già ampiamente descritto nel corso del precedente articolo) e pre mere il tasto k. Ma vediamo cosa accade, nello specifico, sfruttando questa caratteristica de! tool. Ponendo il caso che IP_A sia l'intruso, IP_B la vittima ed IP_C la desti nazione che esso prova a contattare: 1IP A posiziona uno sniffer in grado d'intercettare il flusso di dati tra IP B ed IP C ed attende che il primo tenti di stabilire una
connessione con il secondo; 2 quando il client inizia la fase di 3-way handshake con il server o successivamente a questa, IP A invia un pacchetto con flag RST attivo
Classico attacco Man In Thè Middle: l'intruso mantiene il client ed il server in un'illusione di connessione diretta, ponendosi invece al centro della comunicazione
a IPB spoofando l'indirizzo di IP C e uno ad IP C spoofando l'indirizzo di IP B. In questo modo rende
impossibile la comunicazione alla vittima
paio di campi definiti "Sequence Number" ed
causandogli di fatto la "negazione di un servizio"
"Acknowledment Number" per differenziare le
(Denial Of Service).
connessioni intraprese da parte di un host.
Pertanto la riuscita dell'attacco dipende dalla cor Il punto 2 necessita di ulteriori spiegazioni. La sem
retta manipolazione di questi valori.
plice ricezione di un pacchetto con flag RST attivo
Se l'intruso non usufruisse di uno sniffer per inter
non implica la distruzione di un collegamento.
cettarli sarebbe molto difficile indovinare queste
Il TCP utilizza (oltre che le porte e gli indirizzi IP) un
informazioni alla "cieca", vedi figura 2.
Hijacking: la base
■ Scoordinarlo durante una connessione, attendendo che entri nello stato ESTABLISHED e
L'hijacking è una tecnica che consente all'intruso di
prima che faccia altrettanto il server inviargli un
inserire dei comandi o "iniettare" dei dati in una
pacchetto con flag RST in modo da resettare la
connessione già legalmente intrapresa tra un client
sua connessione verso il client, Quindi intrapren
ed un server. Essa può anche
dere un nuovo collegamento con il server,
essere di tipo veden
te o cieco. I nostri esempi si baseranno prettamente
spoofando naturalmente l'IP del client, portando
sulla prima tipologia di attacco.
lo avanti finché desiderato. Dato che la connes
Va detto comunque che se lo spoofing cieco è molto
sione resettata è solamente quella che va dal
difficile o addirittura impossibile da portare a termine,
server verso il client e non viceversa, questo non
l'hìjacking cieco (che è un po' la congiunzione di tutte
avrà voce in capitolo sul nuovo collegamento
le tecniche sinora analizzate) lo è ancora di più.
intrapreso dall'intruso: attenderà, fino ad andare
L'attacco ha quindi luogo nel momento in cui il
in timeout, che il server comunichi di esser pron
client, ii server o entrambi passano allo stato
to a scambiare i dati con lui (e quindi di esser
ESTABLISHED. In quel preciso istante entra in scena
entrato nello stato ESTABLISHED). Ciò naturalmen
l'intruso. Per fare in modo che questo attacco vada
te non accadrà mai.
a buon fine sarà necessario utilizzare in congiunzio ne tecniche di sniffing
- per intercettare i dati che
fluiscono tra 2 host - e di spoofing - in modo da far
> Desincronizzarlo, attendendo lo stabilimento della connessione ed inviando dati al server
credere al server che sia i! client "lecito" ad inviargli i
prima che lo faccia il client stesso. Dato che l'in
pacchetti - [figura 3).
vio di ogni pacchetto causa l'alterazione dei valo ri Sequence Number e Acknowledgment Number,
Hijacking: attaccare
il client non sarà più in grado di fornire i giusti
utilizzando il protocollo TCP
parametri al server se l'intruso trasmetterà dati prima di lui.
Un classico scenario di hijacking prende il nome dì character ìnjection. In pratica l'intruso s'insinua nel mezzo di una connessione ed invia caratteri al ser
> Isolarlo dalle altre postazioni in rete attra verso un qualsiasi attacco DoS.
ver al posto del reale mittente. Il problema principale in questo caso è decidere cosa farne del client. Sarebbe possibile:
> Agire come un "Man in Thè Mìddle" (uomo nel mezzo) inserendosi tra i capi del collegamen
to e mantenendoli in un'illusione di connessione diretta (peer-to-peer), come in figura 4.
INFORMAZIONI
U
Attacco a Internet!
Il National Infrastructure Security Co-ordination Centre inglese ha rilasciato un advisory di sicurezza
L'ultima opzione è quella più proficua e meno sospetta: il client non noterà brusche interruzioni di comunicazione o grossi ritardi nello scambio dei
http://vfrW.uniras.gov.uk/vuls/2004/236929/index.htm
dati che potrebbero insospettirlo.
riguardante una grave falla nel protocollo TCP/IP che è stata
Questo tipo di attacco è particolarmente indicato per
immediatamente etichettata come critica: il "buco" era già
tutti quei servizi che consentono l'interazione testuale
noto da diverso tempo ma i suoi effetti erano stati subito
con il server (come una sessione telnet di chat).
ridimensionati perché si pensava che fosse impossibile da sfruttare praticamente. Tuttavia i calcoli del matematico Paul Watson hanno dimostrato che la falla e invece utilizzabile per nuocere concretamente. In pratica è
esempio di "character injection" in questo modo:
possibile resettare
delle connessioni TCP tramite l'utilizzo di pacchetti spoofati
Con Ettercap possiamo agilmente simulare un
Fin qui niente di nuovo in quanto attraverso lo
spoofing vedente questo era già uno scenario conosciuto. In
realtà stiamo parlando di poter resettare delle connessioni anche risiedendo su una rete diversa da quella del client e del server.
> Eseguire Ettercap nella postazione desiderata ed avviare una sessione di sniffing (come illustrato
nel corso del precedente articolo). > Da un altro PC sfruttare ia console testuale di
Come funziona in pratica il meccanismo? Si tratta di
Linux per collegarsi ad un server IRC come
inviare un pacchetto con il flag RST impostato, spoofando TIP
nell'esempio (i caratteri contrassegnati in
di uno degli host della connessione lecita e specificando un
grassetto sono i comandi che dovranno essere
numero di sequenza che rientri nella "finestra" dei possibili
digitati dall'utente):
valori accettabili (il TCP accetta tutti i numeri di sequenza pre senti all'interno di una certa "finestra" e le probabilità di tro vare, in questo modo, il giusto sequence number sono mag
$
tetnet
irc.tin.it
6667
giori di un qualsiasi altro attacco alla "cieca"). Ovviamente
Trying 62.211.69.9...
anche le porte TCP sorgente e destinazione devono essere cor
Connected to irc.tln.lt.
rettamente specificate.
Escape character
Fattore mitigante dell'attacco è comunque il fatto che oggi-
NICK
giorno sempre più router non accettano di instradare pacchetti
ìs
'*]'.
F0l3n4
II cui indirizzo IP mittente sia diverso dalla interfaccia dalla quale proviene. In questo modo i pacchetti spoofati saranno scartati a priori e non raggiungeranno mai la destinazione.
Dopo un po' dal server si otterrà una risposta
simile a questa:
:irc2.tin.it 081 F6l3n4
all'interno di messaggi cifrati asimmetricamente.
:Welcome to thè
Gli algoritmi di crittografìa asimmetrica sono quelli
Internet Relay Network F6l3n4l-ciao@x.x.x.x
che utilizzano la tecnologia chiave pubblica/chiave
:irc2.tin.it 682 F6l3n4 :Your host is irc2.tin.it,
privata. Un certificato contiene (oltre alle
running version 2.16.3p3+heap+p65v2
informazioni dell'ente che lo ha generato) una :irc2.tin.itJW6 F0l3n4 :F0l3n4 MODE F9l3n4
chiave pubblica che una volta estrapolata consente
:End of MOTO coiwnand.
al client di cifrare i messaggi SSL scambiati
:+i
inizialmente e mirati a negoziare le session key. A questo punto sarebbe possibile dialogare con il
Solamente il server è in grado di decifrare questi
server in modo da joinare un canale desiderato,
messaggi; nemmeno il client stesso una volta
inviare un messaggio in query a qualcuno etc...
cifrati è in grado di riportarli in una forma leggibile. Ciò è dovuto alla corrispondenza biunivoca che
> Dalla console di Ettercap selezionare la
esiste tra chiave pubblica e chiave privata (la
connessione che si riferisce alla sessione avviata
prima in pratica non può essere utilizzata per
dal client con il server IRC e premere invio. A
risalire in qualche modo alla seconda dalla quale
questo punto premendo sul tasto i
comunque è stata generata). Semplicemente
(abbreviazione di injection) appare una maschera
sniffando traffico di rete inerente sessioni SSL un
in cui è possibile digitare i caratteri che verranno
intruso non sarebbe in grado di risalirne al
iniettati nel flusso della connessione sniffata,
contenuto per via di questo motivo. Non
attraverso l'ulteriore pressione del tasto Invio
possedendo la chiave privata del server l'unica
(vedi figura 5). Digitare, per esempio, la breve
cosa che è possibile fare consiste nell'inviare un
frase "Ciao Amico!".
proprio certificato ad IP B facendolo sembrare proveniente da IP C attraverso la tecnica dello
> Nella console testuale del client apparirà ora il
spoofing. In questo modo la vittima cifrerà i dati
testo iniettato con Ettercap.
inerenti la negoziazione delle session key da inviare al server con la chiave pubblica di IPA, il
> E' possibile ritornare ad osservare la lista delle
quale sarà in grado di decifrarli e dopo averne
connessioni sniffate con Ettercap premendo il
osservato il contenuto cifrarli nuovamente con la
tasto q. L'ulteriore pressione di questo tasto ci
chiave pubblica di IP C (nel punto 1 infatti IP A
riporterà nel menu iniziale del programma.
aveva accettato il certificato del server per conoscerne proprio la chiave pubblica) e
Se non si dispone di 2 PC è comunque possibile simulare
trasmettere così il tutto a IP C.
l'attacco su un'unica postazione, come nelle figure 5 e 5/1. L'intervento attivo nel flusso dei dati scambiati
tra due host non è fine solamente all'invio di caratteri testuali.
Lo scenario si fa più interessante se si pensa che è possibile intervenire su "oggetti" importanti come i "certificati"
nelle
connessioni
cifrate.
S •
Effettivamente l'hijacking è la soluzione più logica
tlifUr
InforMCien.
7 - J«w» C«Aligur«i»B.
allo scenario 1 reso noto nell'introduzione di questo articolo: come fare ad intercettare informazioni in chiaro testo anche in presenza di protocolli come SSL?
Chi si è "divertito" con Ettercap si sarà certamente accorto che usufruendo dello sniffing tramite ARP
Poisoning possono essere ottenuti, durante il corso
J
di una sessione crittografata, informazioni come
Ettercap permette di iniettare caratteri in una connessione digitandoli direttamente da una mascherina
username/password, header o codice html diretta mente in chiaro testo. Come può essere raggiunto questo scopo? Ponendo
come al solito, il caso che IP A sia l'intruso, IP_B la vittima ed IP C il server SSL che esso contatta:
Inon appena IP B prova a stabilire un
collegamento SSL con IP C, IPAsi frappone tra i due ed invia ad IP B un certificato falso da lui generato. Contemporaneamente IPA accetta il certificato che gli viene inviato da IP C come se fosse il client lecito.
ltc2 tin
72
rO13n4
ire]
«.„
72
F013M
rlrc2
ti»
72
roi Sul
:lic2
72
DI Sol
ilici
72
roi
72
DI
qualslttl Clpo esse Slatto.
-
ilrci
ti»
"
-
da Te lecco Italia Het. impedire o
:
TI» si riserva U diritto di
lialtaze l'ascesso a tpialsiasl
meste o
TI. ~ .«.«- .1» «,«=!.= „„.„«. 0 ««■»„.
:ltc2
lire;
7< rotini
;ltc2
:rO13 14 R
rOlSni
End ot BOTO connand.
:*1
mie
2 All'inizio di una sessione SSL le cosiddette session key (quelle che successivamente
consentiranno la codifica/decodifica dei dati utente che andranno scambiati) vengono immagazzinate
Il testo "Ciao Amico!" è stato correttamente iniettato tramite Ettercap
nel flusso della connessione del client
311 punto 2 ha lo scopo principale di catturare le session key che saranno utilizzate per
cifrare/decifrare i dati utente veri e proprì. Una sarà in pratica, la chiave attraverso la quale i! client
codificherà i dati mentre il server li decodificherà, con l'altra invece il client decodificherà i dati ed il server li codificherà (non a caso le session key prendono il nome di write session key e read session key. Ottenute entrambe, niente e nessuno
potrà più evitare all'intruso di consultare in chiaro testo i dati scambiati da IP B ed IP_C. Ettercap attiva le caratteristiche racchiuse nei punti 1, 2 e 3 automaticamente (se compilato con il supporto SSL) quando si usufruisce della tecnica dell'ARP
Esempio di connessioni HTTPS sniffate in chiaro testo: abbiamo username e password.
Poisoning per fare sniffing.
Il file di certificato che utilizza può essere trovato in /usr/local/share/ettercap/etter.ssl.crt, tuttavia uno nuovo può essere generato digitando da shell il comando ettercap -w.
Questo modo d'agire causa un problema che l'occhio
attento dovrebbe sempre esser pronto a rilevare
Ciientag
Gì
Intruso
Server ONS
che è spesso sentore di qualcosa di anomalo. Quando un client riceve un certificato solitamente fa 3 tipi di controlli su di esso:
risposto spoofola IP=«.««jt fl
> si assicura che sia inerente al sito contattato
confrontando l'FQDN contenuto al suo interno (nome host+dominio) con quello richiesto; > controlla la sua data di emissione e la sua durata per accertarsi che non sia scaduto; > controlla che sia firmato da una certifìcation II client invia una query al server DNS per
ottenere l'indirizzo IP di microsoft.com. L'intruso intercetta la richiesta e replica
authority fidata confrontandone la firma con quelle contenute nel database del proprio browser.
specificando nella risposta l'IP desiderato al
quale il client successivamente si connetterà
La falsificazione dei primi due punti non comporta
particolari difficoltà. Il check del terzo punto, fallirà invece miseramente, se il certificato non sarà firmato dalla reale certification authority per la quale l'in truso vuole spacciarsi (il che è assolutamente pro au.ty
[avii.qbcv.iwc!
babile). Il fallimento di un controllo dovrebbe essere
'
un grave campanello d'allarme. e)
1
(Oil)
IDI
Oiclll
w.qksc-.-.retì
1
(OH)
Iti
Oitrlll
t]
->
Purtroppo a tutt'oggi attacchi di questo tipo possono
andare facilmente in porto a causa delia poca com
|Ì1I.)1.JO9.I)3 lf!).O.73i l.!B]
(0.11
[mnr.qlsrv.r
petenza in ambito sicurezza degli utenti.
Oltre a questo c'è da considerare che moltissimi siti (talvolta anche alcuni molto conosciuti) utilizzano certificati "fatti in casa" magari attraverso tool come OpenSSL (vAvw.0pen5sl.org) il che rende familiare alla vista il fallimento di almeno un check per un certificato.
■11"!
Differenza tra spoofing t]
-»
|B1.2!.!!. IH]
e hijacking La differenza tra spoofing e hijacking potrebbe sem brare meno sottile di quella che in realtà è.
Ettercap permette di sniffare il traffico DNS: in base a quanto contenuto nel file etter.dns alterare le risposte a determinate query,
si intende creare una connessione ex novo con una
grazie al plugin "phantom"
destinazione. Viceversa l'hijacking si applica su
Lo spoofing viene utilizzato principalmente quando
connessioni già in corso. Tuttavìa quest'ultima
^ tecnica si avvale della prima per operare corretta
La riga 1 indica che se Ettercap dovesse sniffare dal
mente ed entrambi si avvalgono dell'aiuto dello
flusso di dati intercettati una query DNS per il dominio
sniffing per portare a termine il proprio lavoro.
microsoft.com, esso dovrebbe rispondere al client
Comunque il raggiungimento di uno scopo non
{spoofando l'indirizzo !P del server DNS al quale la
sempre si ottiene con l'ausilio di tecniche "oscure".
richiesta era stata inviata) che l'indirizzo IP da puntare
Spesso intere sessioni TCP possono essere intercettate
è
con maggiore semplicità alterando un singolo data-
www.linux.org). Come si nota dalla riga 2, è possibile
gramma UDP.
utilizzare anche il carattere speciale * che ha il
Spoofing e Hijacking: un attacco utilizzando il
198.182.196.56 (di fatto
l'indirizzo
IP di
significato di "tutti" (nell'esempio specifico, tutti gli
hostname
che
terminano
con
dominio
microsoft.com). Il file etter.dns può essere
protocollo UDP
aggiornato a piacimento, rispettando il solito formato
Se a livello del trasporto delle informazioni l'intera
Questo tipo d'attacco è molto pericoloso, se si
infrastruttura di internet si basa sui router, la
considera il fatto che l'intruso può redirigere il flusso
reperibilità degli host è, invece, resa possibile grazie
di comunicazione di un client verso un server sotto
ai DNS.
il suo controllo.
Nella maggior parte dei casi prima di stabilire una
In tal modo esso non avrebbe più bisogno di operare
connessione, un client contatta il proprio server
all'interno della rete della vittima ma potrebbe
DNS richiedendo la conversione dell'FQDN di una
raggiungere i suoi scopi semplicemente facendo il
destinazione ad indirizzo IP. Ottenuta questa risposta
bello e cattivo tempo all'interno di una postazione
esso può cominciare ad inizializzare una connessione
"sicura" da lui gestita.
indirizzoIP hostname/[*].dominio/[*1.
con il server desiderato.
Il "sicura" sta ad indicare che. di fatto, ogni tecnica
Tali query DNS generano solitamente, traffico di tipo
sfruttata all'interno di una rete amministrata da
UDP per questioni di ottimizzazione dei tempi di
persone che non si conoscono genera un minimo di
collegamento (di fatto con questo protocollo non è
traffico anomalo, che potrebbe portare alla scoperta
prevista alcuna fase di 3-way handshake preventiva
delle attività dell'intruso. Su una macchina propria
il che fa diminuire i tempi di risposta, ma aumentare
invece questo rischio non esiste, vedi figura 8.
il rischio che le richieste o le repliche stesse non giungano mai a destinazione). Un intruso potrebbe
Considerazioni finali
sniffare questo tipo di traffico e rispondere alle
A meno che un intruso non risieda in un gateway o
query del mittente prima che lo faccia il server DNS
in un punto in cui è libero di osservare tutto il traffico
lecito. In questo modo sarebbe in grado di redirigere
di una rete, esso avrà bisogno dell'ARP Poisoning (in
la vittima verso qualsiasi altro host esso desideri.
ambienti switchati o anche in presenza di hub) per
Questa tecnica trova applicazione pratica in ogni
effettuare sniffing e attaccare attivamente con
servizio (telnet. ssh. smtp, pop3), ma senza dubbio
tecniche di spoofing e hijacking.
da il meglio di sé affiancata al protocollo HTTP (vedi
Il percorso logico da seguire quindi per combattere
figura 7). Con Ettercap questo attacco può essere
queste due "piaghe" consiste nell'evitare che un
dimostrato utilizzando il plugin phantom dopo aver
intruso possa portare a termine attacchi di sniffing.
avviato una classica sessione di sniffing.
Essendo che questo (come già ampiamente discus
Nella directory /usr/local/share/ettercap/ è
so) si avvale dell'ARP Poisoning per operare corret
presente il file etter.dns. Da lì il tool prende le
tamente, se ne deduce che riuscendo a rendere
informazioni necessarìe per capire quali risposte a
nulla tale tecnica (in un modo o nell'altro), la riusci
richieste DNS devono essere propositamente alterate.
ta di tutti gli altri attacchi verrebbe compromessa.
Il file è formato al suo interno da righe del tipo:
Oltre alle soluzioni "attive" (che richiedono cioè la variazione di componenti hardware o configurazioni
1)
198.182.196.56
inicrosofT.com
2)
198.182.196.56
-.nicrosoft.com
software) menzionate nella prima parte dell'articolo, un ottimo metodo di prevenzione consiste ne! controllo "passivo" del traffico "strano".
WEBOGRAFIA
Riferimenti wen Sito di Ettercap ht tp://ettercap.sou rcefo rge.net RPM per Ettercap
http : //npm. pbone. net DEB per Ettercap
http://packages.debian.o rg/unstable/net/ettercap Specifiche tecniche del TCP http://www.faqs.org/rfc/rfc793.txt Sito di OpenSSL
http: / A>ww. openssl. org Sito dove reperire Arpwatch http://www-nrg.ee.lbl.gov/nrg.html
Ettercap stesso da la possibilità di utilizzare un
semplice plugin chiamato arpcop che segnala la presenza di richieste o repliche ARP "anomale"
(sentore di possibili attacchi di ARP Poisoning). Il top del monitoraggio da questo punto di vista viene assicurato da arpwatch. Questo ottimo tool reperibile all'uri http://www-nrg.ee.lbl.gov/nrg.html si occupa esclusivamente d'intercettare traffico di tipo ARP e segnalare l'ingresso in rete di nuovi host
o possibili anomalie (come appunto le variazioni d'indirizzi MAC).
Cominciare a proteggersi già a livello dei protocolli è un ottimo punto di partenza per assicurare la sicurezza a tutta l'infrastruttura di rete.
Sicurezza: Intrusion Detection System Prevenire è meglio che curare...ed il detto non sbaglili. Vediamo come applicare questa regola nel campo della sicurezza informatica cercan
do di intercettare sul nascere eventuali attacchi o intrusioni... Marco Ortisi <m.ortisi@1inuxpratico.com>
Andrea Desantis <a.de5anti5@linuxpratico.com>
Nel corso delle precedenti pagine abbiamo
già ampiamente trattato le principali tecni che offensive che possono essere utilizzare per ottenere importanti informazioni su un host o
ce avverte l'amministratore del pericolo e logga i
addirittura comprometterlo. Stiamo parlando di
dati relativi alla specifica connessione 0 trans
scanning, sniffing. spoofing e hijacking. E' venuto il
azione in appositi file, di modo che possano
momento di fare un break e spostare il baricentro
essere analizzati in seguito.
della discussione dalla parte opposta, vale a dire
SNOBT
quella difensiva. Oggi introdurremo ai cosiddetti ID5 {Intrusion
II tool IDS OpenSource più rinomato in ambiente
Detection System), sistemi capaci di allertare l'am
Linux è Snort. All'interno del sito del progetto è pos
ministratore di una rete quando si subisce un attac
sibile scaricare i sorgenti in formato tar.gz 0 con
co intrusivo (in talune circostanze confermando se
sultare l'esplicativa documentazione all'indirizzo
lo stesso è andato a buon fine 0 meno) o quando
http://www.snort.org/docs/
nella propria rete circola traffico sporco quale
Per l'installazione è possibile consultare l'apposito
potrebbe essere quello generato da un trojan, da un
riquadro nelle prossime pagine.
worm o da un virus (0 magari dallo stesso intruso).
Snort in realtà non agisce solo come un classico
Tutto naturalmente dipende da come l'IDS viene
ID5, bensì viene distribuito con 3 modalità native:
configurato, ma questi sono dettagli cui daremo
■ Modalità Packet Sniffer: consente di
rilievo più avanti. Gli IDS svolgono un ruolo diverso
da altri apparati difensivi come i firewall.
visualizzare a video tutti i pacchetti sniffati in
La principale differenza consiste nel fatto che men
rete. Agisce praticamente come un classico
tre i firewall vengono utilizzati per bloccare o con
network sniffer;
;■ Modalità Packet Logger: agisce allo stesso
sentire il transito di un certo tipo, basandosi sulle informazioni contenute all'interno degli header dei
modo della modalità sniffer con l'eccezione che
protocolli di rete (ad esempio IP) e di trasporto (ad
tutto viene loggato su disco;
esempio TCP), un IDS può arrivare ad ispezionare
■ Modalità Intrusion Detection: consente di
anche i dati che un pacchetto trasporta (detti anche
analizzare il traffico circolante in rete alla ricerca
paytoad) prima di decidere se allertare o meno
di attacchi e sessioni pericolose.
l'amministratore. In definitiva possiamo dire che il primo funge da gestore del traffico di rete, bloccan dolo o facendolo transitare, il secondo invece da
controlfore dello stesso, avvertendo quando qualco sa di anomalo viene rilevato.
Come già detto, lo scopo principale di un IDS consi ste nell'awisare l'amministratore del verificarsi di
>— I.—,
NOTE: .
eventi importanti (come un tentativo di scansione,
l'infezione di un PC in rete, eco). Ciò è possibile
■
.
...
..
-_-
...
grazie agli alert. Questi non sono altro che dei mes saggi visualizzabili su console o memorizzabili su file di testo che descrivono in sintesi l'anomalia rile vata. Lo scopo e l'importanza di un alert non è,
!
(*■*«• Tlj ibi RL I fi
1
_fli • I.BI
._j
■Eli»! wii ■' ™- '
" ' ■
per un'ulteriore consultazione, in appositi file di log. essere svincolata da quella di alert (un IDS può cioè essere configurato in modo da loggare tutte le ano
malie rilevate senza prima avvisare). Un alert inve
- X*.
-^- ■ 1
it:
■
-
.
UUM
'.
■-
Lr.
■
sto è fondamentale che i dati scambiati nella con
Tale fase viene appunto definita di togging e può
.1
jìo
però, solo quello di mettere in guardia; oltre a que nessione che io ha generato vengano conservati,
Jtum '■""
flilnia
';-;■ '■
■' -
leu
■
■
I sito ufficiale di SNORT, su cui è possibile trovare sia il pacchetto da scaricare, sia
'ampia e ben fatta documentazione, a cui far sempre riferimento
INFORMAZIONI
Installare SHORT dai sorgenti e tramite RPM Come al solito è possibile installare Snort da pacchetto RPM
Installare dai sorgenti
o da sorgente. Nel primo caso ci si può affidare ai package
Dopo aver scaricato il sorgente d'interesse decomprimerlo
forniti dalla propria distribuzione Linux o si possono utilizzare
con il seguente comando:
quelli generici scaricandoli dal sito: http://www.snort.org/d\/binaries/linux
# lar xvfz snort-x.x.x.tar.gz
Nel secondo caso I sorgenti possono essere scaricati da: http : //uhm. snort. org/dl/ In entrambi i casi comunque è necessario sapere che Snort (come la quasi totalità dei pacchetti attualmente circolanti) è soggetto a dipendenze ed ha bisogno di alcune librerie per
funzionare correttamente; in particolar modo la sua intera struttura poggia sulle librerie libpcap (winw.tcpdump.org) che dovranno necessariamente essere presenti nel sistema. Anche le pere (wnw.pcre.org) saranno fondamentali. Con esse è possibile scrivere delle regole Snort usufruendo della sintas si classica del Peri.
Installare il pacchetto precompilato Dopo aver scaricato il package RPM di interesse digitare da linea di comando:
quindi procedere con ia compilazione in questo modo:
<t
./configure
per conoscere quali opzioni sono disponibili in fase di compila zione digitare il comando ./configure
--help
# make # malte
check
# make
instali
Snort è ora installato. Effettuando una compilazione standard come quella poc'anzi mostrata, il binario snort verrà posizio
# rpm -Uvh snort-x.x.x-ixxx.rpm
Modalità Packet Snìffer
nato nella cartella /usr/local/bin a meno che non sia stata
specificando da linea di comando il parametro -l.
La modalità Packet Sniffer è utile per analizzare ai
Questa modalità è particolarmente indicata quando
volo il traffico che in quel momento sta transitando
si deve fare un'analisi completa di una determinata
in rete. Si comporta allo stesso modo di un classico
connessione o di un particolare flusso di dati. La
tool di analisi dei pacchetti (come per esempio
visualizzazione su console dei pacchetti è spesso
tcpdump) ed è utile soprattutto quando si deve fare
troppo rapida in modalità sniffer, per questo in
una breve verifica del flusso di dati attualmente
certe circostanze è utile conservare ciò che viene
transitante. In modo molto semplicistico tale moda
intercettato in appositi file di log che ne consentano
lità può essere avviata digitando da shell:
~
specificato un percorso diverso attraverso l'opzione --prefix.
la consultazione e l'analisi successiva. Questo è quello che in pratica è possibile fare con la modalità
s
snort
packet logger. Un esempio:
-v
Così facendo verrebbero stampati a video header
1
snort
-vd
-l
/var/log/snort
IP. TCP, UDP e ICMP dei pacchetti intercettati. Per visualizzare anche i dati che i pacchetti trasportano
In questo caso i file di log verranno salvati all'inter
è possibile specificare da linea di comando:
no di una gerarchla di directory in /var/log/snort.
Ponendo il caso di una connessione tra gli host #
snort
192.168.1.12 e lG.10.ie.2G, specificando l'opzio
—wd
ne -l
/var/log/snort i dati intercettati verranno
Specificando l'opzione -e è inoltre possibile visualiz
salvati all'interno di /var/log/snort talvolta in una
zare a video l'Ethernet header. Snort utilizza le
sottodirectory chiamata 192.168.1.12/ altre volte
librerie libpcap per prelevare i pacchetti dallo stack
in una sottodirectory chiamata 10.10.10.20/.
di rete; se la si conosce bene è possibile sfruttare a
Questo può essere un problema, soprattutto perché
piacimento la stessa sintassi di tcpdump specifican
porzioni di dati di una connessione possono risiede
do un filtro bpf per limitare in qualche modo il con
re in file e directory diverse, costringendo così l'am
trollo sui dati che fluiscono, soprattutto quando si è
ministratore che li analizza a continui rimandi da un
in presenza di sessioni molto ingombranti. Per
punto all'altro del disco, al fine di ricomporre finte
esempio ii seguente comando mostra come stam
rà sessione d'interesse.
pare a video gli header ed il payload dei pacchetti
Per ovviare a questo problema, potremo utilizzare il
sniffati al di fuori di quelli che arrivano o sono desti
parametro -h: a questo va specificato il range di
nati alla porta 22 (ssh) di qualsiasi host:
indirizzi allocati nella propria rete locale per far sì che il logging venga uniformato secondo un certo
#
snort
-vd
not
pori
22
standard. Per esempio, digitando da linea di comando:
Modalità Packet togger
p snort
-vd
-l /var/log/snort
-h 192.168.1.0/24
Quando si ha la necessità di salvare i pacchetti snif
fati in una gerarchla di file di log si può passare
i file di log verranno conservati in /var/log/snort
dalla modalità sniffer alla modalità Packet Legger
all'interno di sottodirectory che assumeranno
~
solamente i nomi degli indirizzi IP appartenenti alla
> EXTERNALNET che indica quale è la rete esterna.
propria rete (nel nostro specifico caso la directory si
E' possibile anche qui specificare uno o più range
chiamerà 192.168.1.12/).
di indirizzi IP. ma le funzioni di Snort verrebbero
Tutte le sessioni di esempio sin ora mostrate logga-
limitate drasticamente (a meno che non si
no su disco in modalità ASCII. E' possibile loggare i
desideri controllare solamente il traffico
pacchetti in un modo più compatto come quello
proveniente o diretto verso specifiche fonti ed ignorare tutte le altre). E' consigliabile lasciare il
binario specificando il parametro -b:
valore standard any. In questo modo Snort considererà rete estema qualsiasi cosa non
# snort -l /var/log/snort -b
rientri in ciò che è stato specificato in H0ME_NET.
I file generati potranno essere riportati ad un forma to leggibile utilizzando un qualsiasi tool che suppor
Un modo corretto di settare la variabile HOMENET
ti il formato binario di tcpdump come Ethereal,
potrebbe essere:
tcpdump o lo stesso snort attraverso il parametro - r: var HOME NET 192.168.1.6/24
# snort
-dvr nomefile.log
cosi facendo tutti gli indirizzi che vanno da Anche in questa modalità è possibile specificare un
192.168.1.0 a 192.168.1.255 verranno considerati
filtro bpf per mostrare a video solo i pacchetti che
locali. Per specificare più indirizzi IP o range è possi
interessano.
bile utilizzare la seguente sintassi:
II
successivo
esempio
mostrerà
dal
file
nomefile.log solamente il traffico relativo allo
var H0HE_NET 1192.168.1.6/24,
172.16.1.2,
16.6.1.6/8]
scambio di datagrammi UDP :
Le stesse regole vanno seguite per impostare la # snort
-dvr nomefile.log udp
variabile EXTERNALNET, nel caso in cui il valore
standard any non soddisfi le proprie esigenze. Un altro parametro importante richiamabile da linea
Proseguendo all'interno di snort.conf vengono
di comando è -P: con esso sarà possibile specificare
dichiarate altre variabili come DNS
lo snaplen dei dati, vale a dire quanti byte all'inter
SMTP SERVERS o HTTP_SERVERS, il cui scopo è quello
no del pacchetto sniffato dovranno essere stampati
di identificare le esatte postazioni in cui sono attiva
a video o salvati su log.
ti determinati servizi (DNS, SMTP, WEB, appunto).
SERVERS,
In modo standard Snort assegna a ciascuna di esse il valore contenuto in HOMENET. Il concetto di base
è molto semplice ed è ben commentato all'interno del file di configurazione di Snort: La modalità Intrusion Detection System è senza
dubbio quella più personalizzabile tra le varie sup
Configura la lista dei tuoi server.
portate. E' particolarmente indicata quando si vuole
Snort di controllare gli attacchi diretti solamente a
costantemente analizzare la qualità del traffico cir
quei sistemi che hanno un servizio attivo.
colante nella propria rete e loggare o essere avver
controllare gli attacchi basati sul protocollo HTTP se
Ciò permette a
Perché
titi da un alert quando vengono rilevati eventi rite
non si possiede un server web? Questo modo di pensare
nuti dannosi e/o pericolosi.
raigliora le prestazioni di filtraggio basate sugli
La modalità IDS, per essere avviata correttamente,
indirizzi IP.
ha bisogno di prelevare alcune informazioni utili al
può essere settata allo stesso modo di $HOME_NET
Ciascuna delle variabili qui specificate
suo funzionamento da un file standard chiamato snort.conf.
Il punto in cui questo file si trova
All'interno di snort.conf seguono quindi una sfilza
dipende dal pacchetto rpm e dalle opzioni eventual
di altre variabili. Una certamente molto importante
mente utilizzate in fase di compilazione.
è RULE PATH. Essa contiene l'esatto percorso in cui
Solitamente Snort lo ricerca nella directory corrente
si trovano i file mie di snort. Tali file contengono le
o in /etc. Alternativamente è possibile specificare
regole che lo istruiranno su come e quando segna
un percorso o un file diverso attraverso il parametro
lare un evento pericoloso (un attacco specifico ad
-e come da esempio:
un server di posta interno, un tentativo d'intrusione
# snort
cui si fosse scelto di compilare il pacchetto dai sor
dalla rete interna verso Internet, ecc). Nel caso in -e /hone/pippo/snort.conf
genti è necessario creare la directory che conterrà Analizziamo il contenuto di snort.conf per capire il
questi file con un mkdir
suo ruolo in modo più approfondito. All'inizio del file
settare la variabile RULE PATH secondo le proprie
vengono dichiarate due variabili (altre possono
esigenze.
essere create a piacimento):
Snort inoltre viene distribuito con un set di regole
-p
/path/desiderato e
divise per categoria e tipologia di servizio: sarà > HOME NET in cui vengono specificati l'indirizzo IP
necessario copiarle dalla directory rules/ del pac
o il range di indirizzi IP che serviranno a Snort
chetto sorgente decompresso, all'interno della
per capire quale è la rete locale che si sta
directory specificata nella variabile RULE PATH, per
monitorando.
far sì che tutto funzioni correttamente. Ulteriori
informazioni e dettagli sono consumabili nel para
1
snort
-vd -h
192.168.1.8/34
-e
/etc/snort.conf
grafo Rule e Signature. Verso la metà del file snort.conf vi sono delle
In questo caso il programma verrà avviato in moda
sezioni di testo utilizzate per la configurazione dei
lità console. E' possibile avviarlo anche in modalità
cosiddetti preprocessori. Questi consentono l'ag
background con l'ausilio del parametro -D:
giunta di nuove funzionalità al programma: potrem mo definirli dei veri e propri plugin
#
snort
-vd -h
192.166.1.8/34 -e
/ete/snort.conf -0
Ne esistono molti, ognuno con le sue caratteristi che, il suo scopo e le sue opzioni. La loro attivazio
Cos'i facendo l'interruzione dello stesso non potrà
ne all'interno del file di configurazione avviene
avvenire tramite la semplice pressione dei tasti
attraverso la forma:
Ctrl+C, bensì dovrà prima essere identificato il suo PID attraverso il comando ps e quindi il processo
preprocessor <nome_del_preprocessore>:
dovrà essere killato con il comando kill
<opzicni>
-9 pid.
Una maniera più sbrigativa può essere lanciare un Fare una trattazione compieta sui preprocessori
killall
richiederebbe davvero molto tempo, per questo
invierà tutti gli alert al file /var/log/messages se
-9
snort. Una volta in esecuzione, Snort
rimandiamo all'uri
da linea di comando è stato specificato il parametro
http://www.snort.org/docs/snort manual
■ s o se è stato abilitato il logging facility relativo nel
/nodel7. ritmi
file snort.conf, come mostrato precedentemente.
qui ne introdurremo in modo basilare solamente
Con il parametro -A è possibile attivare da linea di
alcuni:
comando al volo uno dei 7 alert mode disponili (con
"
cui è possibile , per esempio, specificare di allertare l'amministratore tramite console piuttosto che
> f rag2: lo scopo di questo preprocessore è quello di eseguire la deframmentazione IR Con questo
attraverso un socket UNIX o non allertarlo comple
plugin è anche possibile rilevare attacchi DoS
tamente, etc).
che usufruiscono del meccanismo di
Il dettaglio dei dati intercettati potrà sempre
deframmentazione dei pacchetti. Prende in
essere consultato nella gerarchia di file di log pre
ingresso 4 parametri. Se nessuno viene
senti all'interno delle directory contenute in
specificato Snort utilizza dei valori di default.
/var/log/snort {a meno di non specificare un altro
percorso da linea di comando). Ulteriori opzioni
> stream4: questo è uno dei preprocessori più
sono consumabili digitando da console snort
importanti e utili. Il suo scopo è quello di
■ ?.
riassemblare uno stream di dati TCP (un
pacchetto solamente, infatti, spesso non è in INFORMAZIONI
grado di contenere una sessione intera) e di analizzarne il contenuto. E' in grado di rilevare e
segnalare vari tipi di portscan e tecniche di
Non tutti sanno che...
fingerprlnt. > telnet decode: si occupa di normalizzare le stringhe contenute all'interno di sessioni Telnet o
Lo scopo di un ID5 non è solo quello di allertare l'amministra tore o loggare gli attacchi subiti. Esso può agire attivamente
FTP. Banalmente possiamo definire la
nel flusso dei dati scambiati. Per esempio nel paragrafo Rule
normalizzazione di una stringa come la
e Signature mostriamo una semplice regola che genera un
sostituzione di dati grezzi all'interno di uno stream in un formato human-readable.
> http inspect: normalizza il traffico HTTP e rileva
evento alert quando nello stream di dati scambiati tra un
host della HOME_NET ed un qualsiasi server di posta è presen te la stringa HELP. Con Snort è possìbile interrompere una connessione quando in uno stream di dati viene rilevata la
le anomalie presenti nelle comunicazioni che si
presenza di un qualcosa di anomalo. Snort può insomma
svolgono utilizzando tale protocollo.
intervenire attivamente in una sessione di rete. Questa carat
teristica si chiama Flexresp ed è ben documentata nel file
Verso la fine del file di configurazione sono presenti le opzioni di logging. E' sempre bene decommenta re la stringa output:
alert
syslog:
LOG AUTH
README.FLEXRESP presente all'interno della cartella doc/ dei sorgenti. Per attivarla bisogna specificare in fase di compila zione l'opzione - -enable- flexresp e nel sistema dovranno essere installate le librerie libnet.
LOG_ALERT per ottenere un veloce report degli alert
Vediamo un esempio pratico. Sostituiamo la regola inserita
rilevati sul file /var/log/messages.
all'interno del file smtp. rules con quest'altra:
Seguono poi
alcune dichiarazioni include simili al C. La maggior parte di queste indicano quali regole devono essere
alert
abilitate e quali no. Vi sono per esempio alcune
msg:
categorie come le backdoor. rules che non sono mantenute da tempo e pertanto vengono disabilita te di default anteponendo alla direttiva include il
tep SHOHE NET any
■> any 25
(content:
"HELP";
"Comando HELP richiesto a server SMTP";
resp:rst_all;)
In questo modo quando verrà identificata la stringa HELP in uno stream di byte scambiato con un server di posta la con nessione verrà chiusa, rst ali specifica il modo in cui que
simbolo canceiletto #. Per abilitare ciò che si desi
sto andrà fatto (in tale circostanza inviando un pacchetto di
dera basterà rimuovere il segno del canceiletto
tipo RST sia alla destinazione che al mittente).
dalla riga desiderata.
Altre opzioni sono consultanti all'uri
Una volta settato il file di configurazione secondo le
http://vww.snort.org/docs/snort manual
proprie esigenze è l'ora di avviare Snort in modalità
/nodel6.httil#SEaiONOO373OOOO0OOSflOOOOOO
Intrusion Detector.
~
o
1j( Fìle necessari al funzionamento di SHORT File
Percorso
Descrizione
snort.conf
/et e/
file di configurazione di Snort
*.rules
/var/snort/
file che racchiudono le regole di Snort.
classification.config
/etc/
File identificativo per la classificazione degli attacchi. Sezione dasstype http://iftvw.snort.org/docs/snort manual/nodel3.htrnl
reference.config
/etc/
File utilizzato per referenziare un particolare tipo di attacco. Sezione reference http://vww.snort.org/docs/snort manual/nodGl3.html
unicode.np
/var/snort/
File map unicode di 115. Utile al corretto funzionamento del preprocessore httpinspect. Ulteriori informazioni possono
essere reperite all'uri http://vwrf.snort.org/docs/snort manual/nodel7.html
Un IDS per amico:
alert
modalità di funzionamento
generiche
tep
192.168.l.fl/24 any
-> any
135
L'insieme delle parole chiave che Snort mette a dis posizione può essere considerato un mini linguag
La presenza di un firewall non preclude quella di
un
gio di programmazione a tutti gli effetti, data la
ID5. Gli apparati possono coesistere nello stesso
vastità dei termini utilizzabili.
ambiente, anzi l'uno va a completare l'altro.
Basti pensare che l'argomento ha riempito libri inte
Poniamo il caso di avere un Web server protetto da
ri, come Snort 2.1 Intrusion Detection, Second
firewall. L'unica porta raggiungibile dall'esterno
Edition (Syngress).
sarà la 80. Un firewall garantisce sì un alto livello di
Anche questa volta introdurremo ì concetti basilari
protezione, ma è limitato ad un certo tipo di analisi
della questione. Esiste un intero capitolo della docu
(a livello dello strato di rete e di trasporto); in que
mentazione che tratta di questi temi; è consumabile
sto specifico caso uno script PHP, una CGI o lo stes
all'indirizzo:
so Apache potrebbero essere vulnerabili ad un par
http://www.snort.org/docs/snort_manual/node9.html
ticolare attacco. Lo scenario classico potrebbe
Qui ci fecalizzeremo sulle parole chiave di base.
essere quello di un tentativo d'intrusione mirato al
Una regola è formata principalmente da una parola
server web con i! firewall che permetterà il transito
iniziale che indica l'azione (alert = avverti e logga,
di tali dati pericolosi. Il massimo che si potrà infatti
log = logga solamente, pass = ignora il pacchetto.
fare con un firewall sarà quello di bloccare o abilita
adivate e dynamic) seguita dal protocollo (udp,
re l'accesso da e verso la porta 80, invece in questo
tep, etc), una coppia socket (indirizzo:porta
caso un IDS, se presente, potrebbe segnalare il ten
sorgente, indìrizzo:porta
tativo d'intrusione all'amministratore attraverso
operatore direzionale.
l'ausilio delle signature che possiamo restrittiva
Per esempio la regola precedentemente mostrata
mente definire come dei termini ben conosciuti (uti
generava un alert ogni qual volta un host apparte
destinazione) ed un
lizzati da un particolare virus o worm o da uno spe
nente alla rete 192.168.1.0/24 contattava un qual-
cifico tool) che possono trovarsi all'interno del
siasi altro host (direttiva any) sulla porta tep 135. La
payload di un pacchetto, identificando (possibil
regola può essere semplificata con opportune varia
mente in modo univoco) il tipo di attacco ed il
bili in questo modo:
rischio correlato. Questo è in parole povere il mec
canismo utilizzato da Snort: mantenere un'insieme
alert tep SHOME NET any ■> SEXTERNALNET 135
di file rule in cui poter specificare quali signature o caratteristiche di un pacchetto controllare.
Rule e Signatore Un'ottima abitudine è quella di mantenere aggiorna
In quest'ultimo caso la regola è più leggibile, ma il risultato finale non cambia. Oltre all'operatore direzionale -> che indica il senso del flusso dei dati, può essere specificato l'operato
to il database delle regole di Snort, magari usando
re <>. In tal caso il flusso sarà bidirezionale.
quelle che gli esperti distribuiscono gratuitamente in
Vediamo una regola un po' più complessa:
rete. Un buon punto d'inizio potrebbe essere con
trollare costantemente il sito:
http://www.snort.org/dl/rules/ Alternativamente se si hanno le idee ben chiare è
alert tep sEXTERNAL NET any (contenti
-> 192.168.1.15 21
"USER roof; msg: accesso ftp
"Tentativo dì
come utente root";)
possibile scriversi le proprie regole utilizzando le parole chiave che Snort mette a disposizione...
In questo caso l'alert Tentativo di accesso ftp come
Ma che forma sintattica ha, praticamente, una rego
utente root verrà generato se sarà trovata la frase
la? Un primo semplice esempio potrebbe essere
USER root all'interno dello stream di dati scambiato
una stringa del tipo:
tra un IP della rete esterna ed il server FTP interno 192.168.1.15. Questo è molto utile quando si
intende tenere traccia dei tentativi fatti da chi
alert tcp !$H0ME NET -> 192.168.1.6/24 111 (content:
cerca di collegarsi come utente root verso un
"|SQ 81 56 a5|"; msg:
"accesso mountd dall'esterno";)
proprio servizio FTP.
Dentro la direttiva content possono essere specifi
L'operatore ' in questo caso indica tutti gli indirizzi
cati valori Dinari oltre che ascii (o un mix di entram
IP diversi da SHOME_NET.
bi) racchiudendo i dati tra 2 pipe:
Per fare un esempio pratico e constatare gli effetti che un alert può generare, aggiungiamo all'interno
del file smtp. rules (presente nella directory specifi cata nella variabile SRULEPATH) la seguente regola: alert tcp SHOMENET any
j [rootScOresecurity rrooc] # teinet 192.16S.0.45 2S Trying
220
-> any 25
[content: "HELP";
"Comando HELP richiesto a server SMTP";)
192.168.0.45...
Contiecced to Escape
msg:
192.168.0.45.
character
ìs
Quindi dopo aver configurato correttamente
'"■]'.
——:~ r~.
snort,conf e dopo averlo avviato in modalità IDS
ESHTP
aprire un'altra console (sempre sullo stesso siste ma) e digitare il comando:
Inizia il collegamento, via Teinet, ai server * tail -f /var/log/messages
SMTP della nostra rete
Da un qualsiasi altro client interno (o dalla box ID5 [rootBcOresecuncy root] # teinet 192 .168. 0 .15 25 Trying
stessa) digitare {figura 2):
192.168.0.45...
Connected co
192 .166.0. -J5.
Escape character
ìa
teinet
'*]'.
HELP
214 cpnail
h«ne page:
IP server di posta qualsiasi 2S
A connessione stabilita digitare HELP (figura 3) e
http://pobox.com/-d3b/qmail.htral
premere Invio. A questo punto nella console aperta
inizialmente verrà visualizzato a video Comando
Digitiamo il comando HELP per richiedere
HELP richiesto a server SMTP. Avrete così beccato
l'aiuto in linea del server
un provetto hacker, all'interno della vostra rete, che
non ricorda bene i comandi SMTP (figura 4). Non dimentichiamoci che un ID5 può ispezionare un pacchetto sin già allo strato di rete (generando
winiuraaiii ■!.
15 05:0
-.1 ■
Jul
-1
1:
■-.
II
0?:0
"
1!
ili ec
CF)
9C
15
■
(
09:0
Sii. .18.0.1
[11
«rt:
111
■
:
(spp_3Cre«pJ)
?o= 3 iole
-
I9pp
rei iicle
■
13PP .tcMMI
Un esempio chiarificatore potrebbe essere:
SJ CHCUdt
9
:• =
[11
7j
9
,■:
[111 iJil
90 .110.1»». j
ipf
i:rniM]
StMfllM]
re, ut
■
alert
Po' ;.;,.- BITMIISHHI! >
[111
«securlt
:;]
quindi alert anche senza analizzarne il contenuto).
.
Ili
■cp) ■ ■:■ enon
.
II*
15 G9:0
Jul
.._
:.-
ItD
ari:
resecunt
-:
BiÙU
(6:6(121
orti
[NO
is;.
I
X
anànd? HELP richl*
S+;
msg:
-> SHOMENET 445
"Tentativo di
trasmissione virus";)
»«*»" '■
.lio.ua.
il? CD (12277 i ->
tcp SEXTEHNAL NET any
(flags:
server
Swrr
rtrer
In questo caso verrà generato un alert quando un mittente esterno contatterà una destinazione locale
'.
-
Nei log, SNORT rileva che qualcuno ha richiesto l'help per un server SMTP
sulla porta 445 e nel pacchetto TCP sarà attivato il
flag SYN (utilizzato per inizializzare una connessio ne). Il segno + indica che l'alert viene generato
anche se oltre a! SYN è attivo un qualsiasi altro ffag. La porta 445 (altrimenti definita microsoft-ds) è uti lizzata per trasportare il protocollo CIFS (o SMB)
INFORMAZIONI
Webografia
direttamente da TCP/IP senza l'ausilio di layer e
strati intermedi, al contrario di come avveniva su sistemi precedenti a Windows 2000 attraverso la porta 139.
Sito principale di Snort:
http://wrtw.snort.org
Snort download:
http://vAw.snort.org/dl/
Documentazione di Snort:
http://www.snort.org/docs/
Conclusione Snort in definitiva è un ottimo strumento pro-sicurezza che va a completare i tipi di controllo che pos
Snort FAQ: http://WrtW.snort.org/docs/FAO.txt
sono essere espletati in una rete. Che sia un tool OpenSource poi va totalmente a favore dell'integra-
I Preprocessori di Snort: http://vjvw.snort.org/docs/snort manual/nodel7.html
Documentazione regole snort: http://www.snort.org/docs/snort_manual/node9.html Snort Rules:
http://www.snort.org/dl/rules/
Librerie Libpcap:
http://www.tcpdump.org
Librerie Libnet:
http://libnet.sourceforge.net
Librerie Pere:
http://www.pcre.org
zione con altri strumenti orbitanti nella stessa cate
goria. Una soluzione completa potrebbe essere, per esempio, quella di installarlo all'interno di una box Linux adibita a firewall. Questi ed altri concetti avanzati verranno discussi nelle pagine successive.
~
IPTables in pratica: massima protezione! impariamo ad utilizzare iptables per creare regole di firewalìing funzionali e veramente utili per la proiezione della nostra rete
Marco Ortisi <m.ortisi@Unuxpratico.com> e Antìrea DeSantis <a.desantis@linijxpratico.com>
La prerogativa principale di un firewall è senza ombra di dubbio quella di proteggere il pro prio PC o la propria rete da attacchi o traffico
indesiderato. E', insomma, lo strumento difensivo
Prima di proseguire introduciamo alcuni concetti
più in prima linea tra tutti quelli che è possibile
base di iptables. Il comando:
schierare a favore della propria sicurezza. A causa
di questa sua caratteristica è certamente il sistema
#
iptables
-L
che merita più attenzioni prima di essere reso ope
rativo. Non sempre, però, è chiaro ed immediato il
visualizza a video la tabella delle regole sino a
modo in cui configurarlo. Vediamo quindi cosa fare
quel momento inserite all'interno delle chain
quando si ha intenzione di proteggere la propria
INPUT, OUTPUT e FORWARD. Una risposta come la
postazione Linux e non si sa proprio da dove comin
seguente indica che le tabella è vuota (cioè non è
ciare a mettere le mani.
stata ancora inserita alcuna regola):
IPTables: primi rudimenti
Tabella 1
IPTables è la componente firewall standard di Linux
sin dall'introduzione dei kernel 2.4. Con esso è pos
Ctiain
sìbile trasformare la propria postazione casalinga o
target
INPUT
(polìcy ACCEPT)
prot
opt
source
destination
source
destination
source
destination
d'ufficio in un firewall di alto livello che non ha nulla da invidiare a gran parte delle soluzioni commercia
Cfiain
li più competitive oggi sul mercato. IPTables viene
Target
FORWARO
(policy ACCEPT)
prot
opt
comunemente installato di default nella maggior parte delle distribuzioni esistenti. Per determinare
Chain OUTPUT
la sua presenza nel proprio sistema è possibile digi
target
(policy
prot
ACCEPT) opt
tare da linea di comando: Alcune distribuzioni Linux in fase di post-installazio# which iptaOles
ne potrebbero aggiungere delle regole nelle varie
/soin/iptables
tabelle iptables del proprio sistema. Per evitare che gli esempi che riporteremo non funzionino cor
II comando restituisce il percorso completo in cui si
rettamente interferendo con esse è consigliabile
trova il binario dell'applicativo (/sbin/iptables in
azzerarle tutte digitando da linea di comando:
questo caso).
IPTables è basato su regole. Il suo utilizzo è quello
#
iptables
-F
classico di ogni programma che si avvii da prompt:
#
iptabtes
-F
-t
nat
per ogni regola da inserire si digita il nome del
#
ìptablei
-F
-t
mangle
comando {iptables} seguito da una serie di opzio ni, Queste determinano il comportamento del siste
Nel corso del testo si indicherà con Linux box o
ma quando viene rilevato un certo tipo di traffico
postazione Linux il sistema utilizzato per testare
che coincide con una o più regole inserite. La pagi
tutti gli esempi qui presentati, Presupporremo che
na di manuale (raan iptables) è molto esplicativa in
tale Linux box sia dotata di un'interfaccia Ethernet
tal senso, ma la troppa carne al fuoco può certa
(ethO) che la coileghi ad altri eventuali PC presenti
mente infondere più confusione che altro. Per tale
in rete e di un'interfaccia pppO che gli consenta di
motivo utilizzeremo un approccio passo-passo che
collegarsi ad Internet.
ci consentirà di capire, attraverso appropriati esem
In alcuni degli esempi che proporremo considerere
pi, come IPTables operi. Ciò ci aiuterà in seguito a
mo l'indirizzo IP 192.168.0.4 come quello assegna
configurare il nostro firewall Linux in modo efficace
to all'interfaccia ethO del PC Linux che si vuole pro
ed opportuno contro attacchi o probing di vario
teggere. Gii esempi che ne fanno uso potranno
tipo, agendo direttamente sulle varie chain e tabel
pertanto essere testati nel proprio ambiente di rete
le messe a disposizione dall'applicativo.
modificando tale indirizzo IP con quello assegnato alla Linux box personale. Buon divertimento!
^
1 firewall e le policy
programma avviato dall'utente. Quando decidiamo di impostare la policy di una o
Un firewall può essere configurato di base in due
più chain del nostro firewall ad ACCEPT dobbiamo in
distinti modi:
pratica inserire delle regole che specifichino chiara mente cosa vogliamo che venga bloccato, altrimen ti la nostra Linux box sarà raggiungibile da chiun
> consentendo l'accesso a tutto ciò che non è
que ed in qualunque forma. Il vantaggio di questo
esplicitamente negato;
approccio è certamente la sua semplicità d'utilizzo.
> negando l'accesso a tutto ciò che non è
Lo svantaggio è che un errore nella definizione delle
esplicitamente consentito.
regole o una dimenticanza potrebbero ancora
Queste modalità prendono il nome di policy. Di
consentire a certo traffico che pensavamo di
default iptables setta la policy di tutte le sue chain
aver bloccato di raggiungere la nostra Linux box
ad ACCEPT rispecchiando così in toto il comporta
liberamente.
mento descritto nel primo modello presentato. Ma
Quando decidiamo, viceversa, di impostare la policy
vediamo pregi e difetti di entrambi i tipi di policy. Nel primo caso, che è quello standard per iptables
INFORMAZIONI
{Tabella 1), la policy ACCEPT nelle chain INPUT ed
I target di IPTables
OUPUT della tabella FILTER sta ad indicare che tutto il traffico in entrata ed in uscita dalla propria Linux
Box verrà accettato. Un ping od una sessione telnet verso o dall'esterno verranno fatti passare senza alcun problema.
Ecco tutti i target che possono essere specificati nelle regole: ACCEPT: si utilizza quando si intende accettare il transito di un pacchetto.
Proviamo adesso a modificare la policy di default
DROP: si utilizza quando si intende bloccare un pacchetto.
della chain INPUT da ACCEPT a DROP
QUEUE: il pacchetto viene passato ad user-space.
(secondo
modello) digitando da linea di comando:
RETURN: iptables smette di analizzare le regole della chain corrente e salta alla successiva regola nella chain chiamante.
* iptables
-P
INPUT DROP
Un iptables
RIQUADRO 1
-L mostra lo stato della modifica
Differenze tra
appena apportata:
Chain INPUT target
DROP e REJECT
(policy DROP]
prot
■>
opt
(■■_■
destinatici
Come già visto il target di una regola determina il comporta mento assunto da iptables nella gestione di un pacchetto
Chain FORWARD Target
quando lo stesso fa match. DROP per esempio sta ad indicare
(policy ACCEPT}
prot
opt
saure?
destination
blocca, ma esiste un'ulteriore target spesso snobbato o fonte di confusione: stiamo parlando di REJECT. Talvolta è preferibi le infatti non bloccare totalmente una connessione o una
Chain OUTPUT
target
(policy ACCEPT]
prot
richiesta indesiderata bensì inviare un messaggio d'errore al
opt
source
destination
Proviamo adesso ad avviare una sessione ssh verso
mittente. Prendiamo in considerazione questo esempio:
*
iptables
#
ssh
-I
INPUT
-j
la nostra Linux box da un altro PC:
-p
iemp
REJECT
-s
192.168.6.67
- -reject-with ìcmp-host-unreachable
Questa regola specifica che tutti i pacchetti ICPM {-p iemp) pro
192.16B.0.4
venienti dal PC in rete 192.168.0.67 vengano bloccati (-j
dopo un po' verrà mostrato a video il messaggio
REJECT) inviando al mittente un messaggio d'errore ICPM
Host Unreachable (- - reject-with iemp- host -unreachable).
Digitiamo adesso dal PC 192.168.0.67: (eventualmente è ssh:
connect
to
host
possibile modificare la regola secondo i propri indirizzamenti IP):
192.168.9.4 port
22:
Connecllon
timefl
out
#
ping
192.168.8.4
PING
192.168.0.4
stare la policy della chain INPUT a DROP. Ciò causa il
From
192.168.0.4 ìcmp seq=l Destination Host Unreachable
rifiuto di tutto il traffico in entrata. I problemi
Prora Ì92.16B.0.4
Non riusciremo assolutamente a collegarci! In que
(192.168.0.41 from 192.168.9.67
sto caso abbiamo infatti detto ad iptables di impo
:
56(84)
bytes of data.
icmp_seq=l Destinatiti Host Unreachable
comunque si ripercuoteranno anche in uscita, vale a dire non avremo alcuna possibilità di dialogare con il mondo esterno:
In questo caso non otteniamo alcuna risposta, solamente il messaggio d'errore specificato nella regola di iptables. Altri parametri che possono essere passati a - - reject-with
*
ping
sono icmp-net-unreachable, icmp-host-unreachable.
«vn.qoocile.it
PING 66.182.9.99
(66.162.9.99)
56(84)
bytes of data
iemp-port-unreachable,iemp-proto-unreachable, iemp-net-proftibited o iemp-host-prohibited.
In realtà le risposte ai ping tornano indietro al
mittente, ma la tipologia di policy prescelta fa sì che queste vengano bloccate e non notificate al
Per le connessioni TCP è invece possibile utilizzare il parame tro tep- reset che causa l'invio del classico pacchetto TCP RST utilizzato appunto per distruggere le connessioni TCP.
di una o più chain del nostro fìrewall a DROP dobbia
indirizzi IP assegnati al sistema.
mo invece inserire delle regole che specifichino
Fortunatamente, con iptables è anche possibile
esplicitamente cosa vogliamo che venga fatto pas
specificare l'interfaccia d'ingresso dalla quale pro
sare, altrimenti qualsiasi connessione verrà blocca
vengono i pacchetti che desideriamo analizzare
ta. Questo approccio è certamente più difficoltoso
attraverso l'opzione -i, settando tutte le regole che
del primo perché bisogna sapere con esattezza che
vogliamo senza preoccuparci dell'indirizzo assegna
tipo di traffico deve poter transitare liberamente:
to all'interfaccia stessa.
un minimo errore nella definizione delle regole e la
Ciò è particolarmente appropriato quando si ha a
comunicazione con certi host potrebbe essere com
che fare con indirizzi assegnati dinamicamente o
promessa! Rimane il fatto comunque che questo
quando uno degli indirizzi IP della propria Linux box
tipo di policy è l'ideale per raggiungere livelli di
va cambiato in continuazione presso una specifica
btindatura elevati.
interfaccia (come quando ci colleghiamo con un
Una volta ottenuto un buon grado di preparazione
modem al nostro provider e questo ci assegna un
con iptables varrà la pena migrare le proprie rego
indirizzo IP dinamico).
le basandosi su questo tipo di policy per ogni chain
In questo modo si evita di riscrivere tutte le regote
utilizzata. Tuttavia oggi noi utilizzeremo il primo
riadeguando il vecchio fP al nuovo, il che di per se è
approccio. Rimettiamo quindi tutto come prima:
un grosso risparmio in salute! Il seguente è un esempio lampante di quanto abbia
#
iptables
-P
INPUT
mo detto:
ACCEPT
Adesso è venuto il momento di vedere che forma
»
iptables
-A
INPUT
-p
tcp
-i
ettìtì
ha una regola e che influenza può avere sul siste
■s
6/e
--dport
22
■}
DROP
ma. Digitiamo da linea di comando: Anche se l'indirizzo IP assegnato all'interfaccia ethQ * iptables
-A INPUT -p
tcp
-s 8/B
--dport 22
-j
DROP
(o qualsiasi altra desideriamo specificare) dovesse variare di volta in volta, le regole scritte in questo
Osserviamo in dettaglio le singole opzioni che la
modo continueranno ugualmente a funzionare
compongono:
senza alcuna modifica.
> l'opzione -A appende una regola in coda a quelle
presentate produce lo stesso identico risultato fina
già presenti nella chain INPUT. Nel nostro caso
le. L'utente dovrà solo scegliere quella più appro
La regola scritta in una qualsiasi delle tre forme qui
non essendoci ancora alcuna regola dichiarata
priata per lui. Questa scelta è dettata principalmen
questa sarà la prima presente nella chain INPUT:
te dal proprio ambiente di rete e dal grado di
> l'opzione -p specìfica il protocollo della regola
(cioè if tcp);
praticità che si intende ottenere.
Detto questo vale
davvero la pena constatare la solidità della regola
> l'opzione -s indica l'indirizzo IP sorgente delie regola. 0/0 significa qualsiasi IP\
prescelta. Per testarne il corretto funzionamento digitiamo da
> l'opzione --dport indica la porta di destinazione
un altro PC collegato in rete:
della regola. In questo caso viene specificato il valore 22 che corrisponde al servizio standard
tt
telnet
192.168.6.4
22
ssh;
> l'opzione -j indica il target della regola, ovvero
L'output a video rimarrà bloccato su Trying
cosa fare in caso iptables rilevi un pacchetto
192.168.0.4. . .
che coincida con le caratteristiche specificate
secondi. Se passato questo lasso di tempo la videa-
nella stessa. In questo caso DROP significa scarta
ta non mostrerà il classico prompt dei comandi, per
il pacchetto. Se ne avessimo voluto consentire
sbloccare il tutto e tornarci forzatamente basterà
l'ingresso avremmo dovuto specificare ACCEPT.
Lasciamolo così per una decina di
premere la sequenza dei tasti Ctri+C. Ciò significa che la nostra Linux box blocca correttamente qual
Questa regola non fa altro che bloccare (-j
DROP)
siasi tentativo di collegamento al suo servizio SSH
qualsiasi pacchetto TCP (-p tcp) con qualsiasi indi
effettuato da qualsiasi indirizzo IP sorgente.
rizzo IP sorgente (-s
Complimenti! Abbiamo configurato con successo
G/0) che tenti di collegarsi al
servizio SSH (--dport
22) di qualsiasi interfaccia
della nostra Linux box.
la nostra prima regola! Un migliore esempio di debug verrà comunque presentato più avanti.
Se la nostra postazione Linux disponesse invece di
Nota: quando possibile ogni volta che un'opzione
più indirizzi IP potremmo specificarne uno qualun
viene omessa, come per esempio - -sport che indi
que utilizzando l'opzione -d. La regola varierebbe
ca la porta sorgente utilizzata da un IP mittente o
quindi in questo modo:
l'opzione -d già vista in precedenza, iptables setta il corrispondente parametro a qualsiasi.
# iptables
-A INPUT -p tcp -s B/0 -d
192.168.8.4
--dport 72
-j
DROP
In tal caso verrebbero bloccate solo le sessioni SSH
Propedeuticità delle regale
avviate verso TIP locale 192.168.0.4. Questa rego
Analizziamo dalla tabella delle regole la chain INPUT
la non avrebbe quindi effetto su altri ipotetici
per vedere come il suo contenuto è cambiato a
seguito dell'inserimento della nostra prima regola:
consiste nell'utilizzo dell'opzione -A. Essa mette in
# iptables -L INPUT -n
quelle eventualmente già esistenti. Il problema può
coda (in gergo appende) la regola specificata a
essere bypassato eliminandole nel seguente modo: Chain INPUT (policy ACCEPT) target
prot
opt^
source
destination
drop
tcp
--
e.e.e.e/e
e.e.e.e/e
tt iptables -0 INPUT -p tcp
tcp dpt:22
-s 192.168.0.2 ■-dport 22 -J ACCEPT
# iptables -D INPUT -p tcp
Ogni regola inserita viene analizzata da iptables in
-s x^x^x.x --dport 22 -J ACCEPT
modo sequenziale, cioè dalla prima all'ultima. Per esempio se viene rilevato un pacchetto in ingresso
e ridigitandole:
nella nostra Linux box, iptables analizza una ad una tutte le regole contenute nella chain INPUT
# iptables -I INPUT -p tcp
esattamente nell'ordine in cui queste sono dichiara te. Quando ne viene trovata una che corrisponde
-S 192.168.0.2 --dport 22
-j
ACCEPT
-j
ACCEPT
# iptables -I INPUT -p tcp
con il pacchetto rilevato, iptables ferma la ricerca
-s x.x.x.x
--dport 22
ed esegue l'azione associata alla regola.
Da ciò si deduce che alcune regole devono essere
L'opzione -I in questo caso mette ciascuna regola
necessariamente dichiarate prima di altre, pena il
digitata in testa a quelle già presenti all'interno
loro mancato funzionamento.
della chain INPUT pur essendo stata inserita succes
Per esempio se vogliamo che 192.168.0.2 (un host
sivamente. Provando adesso a collegarci in ssh alla
della nostra rete locale ) ed x.x.x.x (TIP remoto del
nostra Linux box da uno degli host abilitati non
nostro ufficio) possano collegarsi al servizio SSH della nostra Linux box potremmo digitare:
noteremo alcun problema.
Analizziamo quindi nuovamente la tabella delle regole per la chain INPUT:
» iptables
-A INPUT -p tcp
# iptables
-A INPUT -p tcp
-s 192.168.0.2 •-dport 22
•s x.x.x.x
--dport 22
-j ACCEPT
-j
ACCEPT
Adesso proviamo a collegarci da 192.168.G.2 o dal
Chain INPUT
(policy ACCEPT)
Target
prot
opt
source
destination
ACCEPT
tcp
-
x.x.x.x
0.0.6.6/e
ACCEPT
tcp
--
192.168.6.2
6.6.6.0/0
tcp dpt:22
DROP
tcp
o.e.e.e/e
e.e.o.e/e
tcp dpt:22
tcp dpt:22
nostro ufficio alla postazione Linux in SSH digitando:
L'ordine delle regole è ora corretto. Qualsiasi tenta # ssh
192.168.6.4
tivo di connessione al servizio ssh della nostra Linux box proveniente dagli indirizzi IP x.x.x.x ed 192.168.0.2 verrà fatto passare; tutto il resto verrà
oppure:
invece bloccato. # ssh nostro ippubblico
non riusciremo a farlo! In questo caso infatti non abbiamo considerato la
propedeuticità delle regole. Vediamo cosa contiene
Bloccare le connessioni indesiderate o l'ingresso di
a questo punto della discussione la tabella delle
determinati tipi di pacchetti sarebbe una pratica
regole appositamente numerata per l'occasione:
fine a se stessa se non si avesse la possibilità di verificare chi ha fatto cosa in un determinato
# iptables
momento. Fortunatamente ed intelligentemente
-L INPUT -n
iptables è in grado di loggare tutto ciò che voglia Chain INPUT
mo con l'aggiunta di una semplice regola. Anche in
(policy ACCEPT)
questa circostanza comunque bisogna rispettarne
Target
prot
opt
source
destination
i)orop
o.G.e.e/e
e.e.o.e/e tcp dpt:22
la propedeuticità.
192.168.6.2
0.6.6.6/0 tcp dpt:22
Vale in ogni caso questo assioma fondamentale: la
x.x.x.x
0.6.8.6/8 tcp dpt:22
tcp
--
2)ACCEPTtcp
-
3)ACCEPTtcp
--
regola di LOG deve sempre precedere la regola di DROP ed il suo contenuto deve essere identico a
L'ordine delle regole è, evidentemente, sbagliato.
quest'ultima.
Infatti dato che ciascuna di esse viene analizzata
Per esempio vediamo come loggare su file tutte le
sequenzialmente, la numero 1 prevarrà su tutte le
connessioni bloccate dalla prima regola preceden
altre. In pratica, per ogni pacchetto in ingresso nella
temente digitata. Dapprima svuotiamo la tabella
nostra Linux box la prima regola verrà analizzata e,
delle regole:
corrispondendo al pacchetto, verrà eseguita; questo non permetterà agli indirizzi IP 192.168.0.2 e
# iptables
-F
x.x.x.x di collegarsi tramite ssh alla nostra posta
zione Linux perché ogni tentativo di connessione
Quindi ridigitiamo la prima regola; tra le tre forme
alla porta 22 verrà bloccato.
presentate scegliamo per adesso la seguente:
L'errore nella dichiarazione delle ultime due regole
w
#
iptables
-fi
INPUT
-p
tcp
-s
D/6
--dport
22
-j
semplicità. Per esempio nel nostro caso avremmo
DROP
potuto cambiare la direttiva da: A questo punto anteponiamo ad essa la regola di LOG:
«
--log-prefix "Connessione Bloccata:
ìptables
-I INPUT -)
LOG
-p tcp
-5 0/9
--dport
a:
22
--log-prefix "Connessione Bloccata:
" ■■log-prefìx "Connessione Bloccata porta
ssh:
"
ed analizziamo il contenuto della tabella delle rego le per capire come le stesse vanno dichiarate:
E' più semplice, così, capire a prima vista ciò che succede piuttosto che analizzare per Intero i vari
# iptables chain
-L
INPUT
campi visualizzati nel file di log.
INPUT -n
(policy ACCEPT)
Target
prot
opt
source
destination
LOG
tcp
--
e.0.6.G/O
0.0.0.0/0
■-log-prefii 0.0.0.B/B
tcp
Proteggersi da tecniche
di Scanning comuni
"Connessione Bloccata:
G.9.e.9/e tcp dpt:22
Capite le basi ed il funzionamento di iptables vediamo come dotare la nostra Linux box di un
Tutte le connessioni bloccate verranno cosi loggate
firewall software adeguatamente configurato per
all'interno del file /var/log/messages. Per esempio
proteggerci dalle continue intemperie cui siamo sot
dopo aver inserito entrambe le regole possiamo
toposti quando ci colleglliamo ad internet. Prima di
simulare una o più connessioni bloccate digitando
procedere, però, azzeriamo la tabella delle regole:
nella propria Linux box: * «
iail
-(
ìptatjles
-F
/var/log/messages
Una delle preoccupazioni principali quando si confi quindi da un PC diverso della propria postazione
gura un firewall dovrebbe essere quella di far si che i! proprio sistema sia immune ailo Scanning, cioè
Linux si dovrà digitare:
far sì che lo stesso possa rilasciare meno informa H
ssh
zioni possibili (o addirittura nessuna) a chi esegue
192.168.G.4
tale attacco. Due tra le tecniche di scanning oggi o, nel caso in cui si avesse la possibilità di simulare
maggiormente utilizzate sono il Vanilla Scanning ed
l'esempio da un host esterno alla propria rete,
il Syn Scanning. Per proteggersi da esse possiamo
potremmo digitare:
digitare da linea di comando:
*
«
ssh
proprio
ip pubblico
ìptaoles
-I
INPUT
-p tcp
-1
■s
--dport
O/e
pppfl 1:65535
--syn
-j
DROP
A questo punto nella prima consoie sarà possibile osservare le connessioni bloccate da ìptables
Osserviamo in dettaglio le opzioni ed i parametri ad
identificate dalla stringa Connessione Bloccata.
esse associati che ancora non conosciamo:
Dall'output della Tabella 2 si evince inoltre che la direttiva
-■ log-prefix specificata nella regola di
LOG influenza il contenuto del file di log. Possiamo
> l'opzione --dport indica la porta di destinazione della regola. In questo caso è stato specificato
cioè inserire una frase o un termine diverso per
un range che va da 1 a 65535. Questa notazione
ogni regola di LOG che desideriamo in modo da
sta ad indicare qualsiasi porta. L'abbiamo
poter identificare il traffico bloccato con maggiore
utilizzata per introdurre la possibilità con
TABELLA 2
I log delle connessioni registrati da IPTables Sep 16 11:06:15
localhost kernel:
Connessione Bloccata:
INspppB OUT= HAC=98:3e:84:4B:9b:ec:eB:3e:84:49:9e:91:0B:BS 5RC=x.x.x.x D5T=propno ippubblico LEN=48 T0S=9xBB PREC=9x00 TTL=128 ID=16679 DF PROTO=TCP SPT=2dB2 DPT=22 WIND0W=6S535 RES=6xee SVN URGP=6
Sep 16
11:06:18
localhost kernel:
Connessione Bloccata:
IN^pppQ OUT= MAC=O9:39:84:48:9b:ec:G9:3O:84:48:9e:91:0B:QO SRC=x.x.x.x DST=proprioìp pubblico LEN=4B TOS=0xOO PREC=BxG9 TTL=128 ID=16768 DF PROTO=TCP SPT=24B2 DPT=22 WINDDW=65535 RES=Ox00 SYN URGP=O
Sep
16 11:96:24
localhost
kernel:
Connessione Bloccata:
IN=ppp9 0UT= HAC=e9:3e:84:4e:9b:ec:ee:39:84:4e:9e:91:98:ee SRC-x.x.x.x DST=propno ip pubblico LEN=48 TOS^BxBO PREC=6x90 TTL-128 ID=17117 DF PROTO-TCP SPT=24B2 DPT=22 WIND0W=65535 RES=8x8e SYN URGP=9
iptables di specificare qualunque range di porte
flessibili. Per esempio usando la caratteristica del
desiderato purché separato dal simbolo :
connection tracking la regola antì-scannìng prece
> l'opzione - -syn indica il flag TCP che ci interessa controllare per ogni pacchetto in entrata nella
dentemente dichiarata può essere tranquillamente sostituita in:
nostra box. I pacchetti con il flag SYN attivo sono i responsabili della messa in comunicazione di
0 iptables
-I INPUT -p tcp -i ppp9 -a state
due host. Sono il cosiddetto preludio alla
-s B/6 --dport 1:65535 --state NEW -J DROP
connessione cioè la fase antecedente alla connessione vera e propria.
L'opzione -m consente l'aggiunta ad hoc di nuovi
moduli che danno la possibilità all'utente d'usufrui La regola poc'anzi digitata non fa altro che bloccare
re di caratteristiche ed opzioni addizionali al set
(-j
standard messo a disposizione da iptables. In que
DROP) qualsiasi pacchetto TCP (-p
qualsiasi indirizzo IP sorgente (-s
tcp) con
6/0) che tenti di
sto caso abbiamo abilitato il modulo state che ci
inizializzare una connessione (--syn) verso una
consente di fare controlli sullo stato del pacchetto
qualsiasi porta (--dport
intercettato.
1:65535) in ascolto presso
l'interfaccia esterna della propria Linux box
Infatti attraverso la direttiva --state
(-i
istruzioni ad iptables di bloccare (-j
pppO). In parole povere questa regola blocca
tutte le nuove connessioni in entrata!
NEW diamo DROP) tutti i
pacchetti il cui stato della connessione sia NEW, vale
E' possibile testarla anteponendo ad essa una rego
a dire tutto ciò che cerca di iniziare una connes
la di log nel seguente modo:
sione in ingresso con la nostra Linux box.
Gli effetti finali sono praticamente identici alla rego e iptables
la anti-scanning mostrata in precedenza.
-I INPUT -p tcp -i ppp9 -5 e/8 --dport 1:65535
--syn
-)
LOG
--log-prefix "Tentativo di Connessione:
"
Testiamo quindi questa nuova regola dicendo ad nmap di effettuare un Syn Scanning (-sS) di tutte le
porte (-p Quindi basterà digitare da un host esterno alla pro
1-65535) dell'host proprio_IP_pubblico
(la nostra Linux box) digitando da PC esterno:
pria rete: « nmap
-sS
-n
-p 1-65535 proprio_IP_pubblico
# telnet proprio ip pubblico 25
Dopo un po' l'output ottenuto sarà: In questo esempio abbiamo utilizzato la porta 25,
ma potremmo usufruirne di una qualsiasi nel range
Ali 65535 scanned ports on
1:65535. Dopo di che basterà analizzare il contenu
proprio IP pubblico are:
filtered"
to di /var/log/messages alla ricerca della frase Tentativo di Connessione:
Complimenti tutte le porte risultano irraggiungibili
Sep 16 12:16:15 localhost kernel:
scanning!
in ingresso se analizzate con questa tecnica di Tentativo di Connessione:
IN=ppp9 OUT»
Nota: se lo si desidera, tutti gli esempi qui mostrati
MAC°ee:3e:84:4e:9b:ec:ee:38:84:4e:9e:91:88:e8
possono essere adeguati alla propria rete locale
SRC=x.x.x.x DST=proprio_ip_pubblico LEN=48 T0S=8xGe
cambiando la direttiva delle regole da -i pppO a -i
PREC=9x88 TTL=128 ID=13188 0F PR0T0=TCP SPT=32189
ethO (o qualsiasi altra interfaccia desiderata) e
DPT=25 WIND0W=8192 RES=8x89 SYN URGP=8
sostituendo nelle sessioni nmap o telnet d'interesse
proprio IP pubblico con l'indirizzo IP locale della
Iptables oltre ad analizzare la presenza di certi valo
propria Linux box.
ri nei pacchetti intercettati (packet inspection) è in grado di memorizzare gli stati delle connessioni. In pratica grazie alla caratteristica del connection
In realtà le regole antiscanning mostrate non vanno
tracking per ogni pacchetto rilevato riesce a capire
bene per qualsiasi caso: sono insufficienti contro
in che stato si trova la relativa connessione vale a
tecniche più avanzate come il FIN Scanning o VACK
dire se il pacchetto si riferisce ad una connessione
probing. Ciò è facilmente dimostrabile avviando da
di tipo:
un PC esterno alla propria Linux box una nuova ses
sione di nmap:
> NEW: indicante un pacchetto che vuole iniziare una nuova connessione;
> INVALID: indicante un pacchetto che non è associato ad alcuna connessione esistente;
> ESTABLISHED: indicante un pacchetto che si
e nmap
-sF
-n proprioIPpubblico
PORT
STATE
22/tcp
open
SERVICE ssh
6998/tcp
open
Xll
riferisce ad una connessione già stabilita. > RELATED: indicante un pacchetto che vuole
Vengono così rilevate delle porte aperte: siamo
iniziare una nuova connessione che, però, a sua
ancora rintracciabili in rete! Questo dimostra l'inef
volta è associata con una esistente (come per
ficacia della prima regola contro altri attacchi e tec
esempio un trasferimento FTP).
niche di scansione.
Nelle prossime pagine vedremo come colmare que
Ciò ci consente di scrivere regole più dinamiche e
sta ed altre lacune della nostra Linux box.
IPTabies: sicurezza totale La configurazione di IpTables continua con la protezione da tecniche di attacco più avanzate: ecco che vi sarà la necessità di conoscere un po' più in dettaglio alcuni protocolli Marco Ortisi <m.ortisi@linuxpratico.coin> e Andrea DeSantis <a.desantis@linuxpratico.com>
Come visto nel numero precedente la prote zione da attacchi informatici diretti riguarda principalmente la capacità di configurare il
proprio firewall in modo che la propria Linux Box
Il - -state NEW della regola precedente corrisponde
non risponda, né con messaggi di errore né con mes
va di fatto all'opzione - - syn vista nelle scorse pagi
saggi dì notifica, alle richieste di un malintenzionato.
ne e tendeva a fare match con tutti i pacchetti che
Abbiamo anche avuto modo di constatare che la
avessero il flag TCP SYN attivo (nella fattispecie
regola di scanning:
della nostra regola tutti i pacchetti aventi il flag SYN attivo venivano bloccati). Utilizzando invece la
iptabl.es
-I
INPUT
-p tep
-s O/O
-i pppQ
seconda estensione --state
-m state
--dport 1:65535
--state NEW ■]
DROP
ad IPTabies di bloccare (-j
INVALID.NEW si indica
DROP) tutti i pacchetti il
cui stato della connessione sia INVALID o NEW, il che pecca nel garantire la sicurezza della nostra Linux
applicato alla nostra nuova regola e tradotto in
Box contro tecniche di scanning avanzate (FIN
parole semplici significa che:
Scanning, ACK probing, ecc.) provenienti da > con INVALID blocchiamo tutti quei pacchetti che
Internet.
Vale certamente la pena colmare questa lacuna e
non sono associati con alcuna connessione
volgere uno sguardo anche ad altri protocolli al di
esistente;
fuori del TCP. Le insidie possono celarsi ovunque!
> con NEW blocchiamo tutti quei pacchetti che tentano di inizializzare una nuova connessione.
Va detto a priori che tutte le regole antiscansione introdotte in queste pagine presuppongono che l'interfaccia di collegamento alla rete Internet
Questa regola ci fornisce contemporaneamente due
dell'utente sia pppO. Per effettuare inoltre tutti i
benefici. Il primo consiste nel fatto che la nostra
test qui presentati è consigliabile che l'utente dis
Linux Box è contemporaneamente immune a
ponga di un sistema posto all'esterno della propria
diversi tipi di scanning. Possiamo per esempio
LAN, condizione questa non strettamente necessa
avviare diversi test con nmap da un altro PC non
ria ai fini della fruizione completa delle informazioni
presente nella rete interna:
contenute in queste pagine. Tutte le regole qui pre sentate possono naturalmente essere testate nella
# nmap
-sF
-n
-p 1-65535 proprio ip pubblico
propria LAN modificandole ad hoc in base al proprio
#
rwap
-sS
-n
-p
ambiente di rete.
#
nirap
-sA
-n
-p 1-65535
Proteggersi da tecniche
1-65535
proprioip pubblico proprio
ìp pubblico
La prima scansione rileverà 65535 porte aperte. Ciò
di Scanning avanzate
accade perché il FIN Scanning si distingue dalle comuni tecniche di scansione.
Per proteggersi da tecniche di scanning avanzate
Questo output viene generato proprio quando si è
bastano davvero pochi accorgimenti. Dapprima
in presenza di un sistema che blocchi tutti i pac
svuotiamo la tabella delle regole di IPTabies per non
chetti relativi ad un attacco dì questo genere. Ciò ci
fare confusione con quelle già presenti:
fa capire che abbiamo impostato la regola giusta
#
A conclusione delle ultime due scansioni (SYN
per contrastare tale tecnica di scansione. iptabl.es
-F
Scanning ed ACK Scanning) verrà invece riportato a ...quindi digitiamo la nuova:
video il seguente messaggio: "Ali 65535 scanned portson 192.168.0.4 are: filtered".
#
iptables -s
-I
G/S
INPUT --dport
-p
tep
-i pppO
1:65535
-m state
--state INVALID,NEW
Tutte le porte risultano cioè irraggiungibili ad host -)
DROP
esterni. Non c'è che dire, un gran bel risultato! Il secondo beneficio di questa regola consiste nel
w
Anzitutto notiamo la sostituzione dell'estensione
fatto che il traffico dei dati uscenti dalla nostra
--state
Linux Box è comunque garantito senza alcuna
NEW della regola precedente con quella
attuale --state INVALID,NEW.
interruzione.
(y©
Nessuna delle connessioni che effettueremo verso
scansione dovrebbe essere "You have blocked ali of
l'esterno verranno bloccate. A dimostrazione di ciò
our probes!" indicante che tutte le porte controliate
possiamo effettuare dei tentativi di navigazione con
risultano nello stato BLOCKED.
un browser web o in modo più sbrigativo possiamo
Complimenti la nostra regola antiscansione TCP è
digitare da linea di comando:
stata impostata correttamente nel sistema!
# tel.net www.google.it 80
Filtrare il protocollo icmp
Trying 66.102.9.99...
Nonostante l'efficacia dell'ultima regola inserita
Connected to wiiw.google.com.
siamo ancora rintracciabili con un semplice ping da
Escape
un qualsiasi PC al di fuori delia nostra rete:
cHaracter
is
"*]■.
Questo ci fa capire che la connessione è davvero
# ping propriQ_ip_pubblicc
avvenuta con successo. La regola inserita non
PING
influenza quindi in alcun modo il traffico da noi
64 bytes from 192.168.0.4:
icmp_seq=l ttl=64 tirc>e=G.194 ms
generato.
64 bytes from I92.16B.0.4;
Ump_seq=2 ttl=64 time=Q.216 ms
la prova del 9: TCP
o
Scanning Test!
192.168.6.4
con
un
-e
2
(192.168.G.4)
56(84)
bytes of data
pacchetto ICMP di query come il
TimeStamp sol lec i tabi le da nmap attraverso l'opzione -PP:
Se non si dispone di un sistema esterno alla propria
^
rete per effettuare le prove di scansione con nmap
non c'è bisogno di scoraggiarsi: se Maometto non va alla montagna...la montagna va da Maometto... che tradotto in lessico informatico sta a significare "utilizziamo uno dei tanti servizi gratuiti in giro per
-L- ZJ
il web in grado dì indicarci il livello di protezione che il nostro firewall ci fornisce".
505
Per l'occasione possiamo utilizzare il servizio gratui
Horo ; -.
to di Sygate. Il sito è http://scan.sygate.com. Il test
., ■
T iL
;-
-
1 Spedai Bundtc!
più mirato che possiamo fare per raggiungere il nostro scopo è quello che nel sito viene definito
•Piar l'tllt JlfasMhB -ed pigi
come "Stealth 5can". Vengono controllate in pratica
rv.'-JI l'i-.'.r
» TQy ir» nj-irung un l prwtf» n#(w*K>. jGjitHj bt cgnntcit
tutte le porte TCP di uso più comune attraverso tec
tury
fri .-.I l-iJw.rr«,Dp ch#> n;"
f* Kfj vtT >T Sjjrtf "« V*»&pii He
niche di scansione avanzate. Puntiamo quindi il
torti
[le&Bd
browser della nostra Linux Box alla pagina:
http://scan.sygate.com/prestealthscan.html e cicchiamo sul pulsante Scan Now {Figura 1}. Al termine della scansione apparirà una tabella con tenente le specifiche delle singole porte analizzate
Pagina del sito delia Sygate riguardante il servizio di port scanning stealth. Il pulsante scan now avvia la scansione
ed il relativo stato {Figura 2). In base alla regola antiscansione TCP inserita con IPTables nel paragrafo
^
precedente, lo stato di ogni porta testata dovrebbe essere 6L0CKED. Alla fine della pagina viene riporta to in rosso l'esito del test. Quello in figura 2 è un esito positivo in quanto tutte le porte sono state identificate come BLOCKEO. Questo sta a significare che un malintenzionato non
ha possibilità di contattarle e quindi identificarci in Internet attraverso esse.
Il test di scansione Stealth, anche se di per sé molto importante, è solamente indicativo. Noi non ci accon
f
BLOCEZD
:■
FUlOEf.
T»
:■:
!
BiOCKTO
WEB
i;ji
FCt!
1:
. : ■ ■. 7-
poche decine di porte (anche se sono state control
IDBIT
113
.■:
voghamo testarne ancora di più! In questo caso ci vieni in aiuto il test definito "TCP Scan": http://scan.sygate.con/tcpscan.html
con esso possiamo testare la rintracciabilità di tutte
Una volta aperta la pagina corretta del sito clicchiamo sul pulsante Scan Now. Al termine della scansio ne nessuna porta dovrebbe essere nello stato OPEN. Il messaggio finale [Figura 3) riportato dal test di
■ a
Estratto del
Tftbf [IflJiLt Tbl f-.11 fin Dr
i:r[ 'L>Jl
»
Fnrrs
«3
■ :
tfanp
44)
■l; :■:---
■■.; ■
BIJDCKED
:
e:
■
..
.:
■■
■■■
■:rr.iisj
■
risultato di scansione
■■■
1 ■ ■:!•■
rf:]i r.i'dl
-
' '
" r
y.n
:
■
■
T>«jcci1htì no
HdKS
le porte della nostra Linux Box comprese nel range 1-1024 (cioè dalla numero 1 alla numero 1024).
.=..-
finale del test
tentiamo di verifìcare la rintracciabilità dall'esterno di late attraverso tecniche di scansione avanzate),
■
7.-; --.
ree
I
Dlyiriiltii^
dragai a=T il fi (Ciir
:i
■M
rniius
"SS?
..
;:;:
-EEE-ntìEjflto
Hlttc4fd|j
«
-
_-
. -
' '
stealth. Il test ha avuto esito positivo
Questa non fa altro che
bloccare tutti quei pacchet
ti ICMP che cercano di raggiungere la nostra Linux Box senza che la loro presenza sia stata richiesta, cioè tutti quei pacchetti il cui stato sia INVALID o -'
-
■
. ,i;|
-
r
■■
MGD
n
uBM
NEW.
S'uni pini 33 IsSJO .■!««^ 1 --;.-;
Estratto del
Inserendo questa regola in pratica la nostra Linux
r:. M
b>!30
risultato finale
Box non risponderà più ad alcun pacchetto ICMP
-■■
ulto
del test di
non richiesto. E' possibile constatarlo tentando nuo
:
uno
-' -— ri
-
"
scansione TCP
loSSJ
Scan. Il test ha
-n:*L6j ;■ !"■ 9» »m ■ii-.
latta
vamente di pingarla da un altro PC o lanciando un
avuto esito
icmp TimeStamp da un altro host attraverso nmap.
positivo
Viceversa avremo la possibilità di generare tutto il traffico ICMP in uscita che desideriamo senza
rischiare che lo stesso venga bloccato. Anche le risposte alle richieste da noi generate o i messaggi di errore relativi ad esse verranno fatti passare da IPTables senza problemi. Come prova a dimostrazio ne di ciò è possibile pingare dalla propria Linux Box
■ Fan 1801 BIO10
un host a caso (al di fuori di se stessi) ed osservare
ip«n 1011 lo H30
l'arrivo delle risposte:
# ping www.google.it
-e
4
^
PING www.google.it
(66.192.9.99)
64 bytes from 66.102.9.99:
sos Homo
56(84)
bytes
of
data
icmp seq=l ttl=64 time=0.694 ms
64 bytes from 66.1Q2.9.99:
icmp_seq=2 ttl=64 tlme=0.416 ms
64 bytes
from 66.102.9.99:
ìcmp_seq-l ttl=64 titne-Q.394 ms
64 bytes
from 66.1G2.9.99:
icmp seq=2 ttl=64
time-0.716 ras
A questo punto della discussione la tabella delle regole per la chain di INPUT dovrebbe mostrare le seguenti entry:
Ut bori intnM Ila! J« hi.» • firmi Urti, 1TIP f
# ìptables
-L
INPUT
Chain
INPUT
[poliey ACCERTI
target
prot
opt
source
destination
DROP
icmp
--
0.8.9.8
O.e.B.G
state INVALID,NEW
O.G.0.0
tep
O.D.6,0
state
INVALID,NEW tep dpts:1:65535
Estratto del risultato finale del test di
La presenza di queste due semplici regole disturba
scansione UDP Scan. Il test ha avuto esito
così tanto l'operato della maggior parte delle tecni
positivo
che di scanning odierne che nmap si rifiuterà di pro cedere nella scansione della nostra Linux Box se non lo si forzerà con un apposito parametro. Vediamo assieme un esempio:
# nmap
Nmap
-PP
run
-n
proprio
compieteti
-■
ìp pubblico
1
IP
sddress
# nmap
(1
host
up)
scanned
in
-sS
Stamng
-n
nmap
proprio ip pubblico
3.SQ
(
http://wvAj.insccure.org/nmap/
3 seconds
aX Note:
Host
seems
down.
II vantaggio di non rispondere né ai ping né a qualsiasi altro pacchetto ICMP (al di fuori di rare ecce
zioni) è una pratica che aiuta certamente ad essere
If
it
is
blocking
Nmap
run
completed
■■
2004-G9-Q8
really our
1 IP address
up.
ping
)
14:56
CEST
but
probes,
try
-PO
(0 hosts up)
scanned
in
12.109
seconds
meno rintracciabili ed identificabili in rete.
Un'ottima regola da applicare in tal senso potrebbe
In questo modo lanciamo un Syn Scanning contro
l'indirizzo IP pubblico della nostra Linux Box ma
essere:
subito dopo pochi secondi nmap ritorna al prompt # iptables
-I
INPUT
-p
icmp -s 0/G
-i
pppO
--state
-m
dei comandi perché la postazione analizzata non
state
INVALID,NEW
-j
DROP
risponde a nessuno dei suoi tentativi di probing ini ziali (Host seems down). Questi gli servono per sta
L'unica cosa di nuovo qui è il parametro passato
bilire se si sta effettuando ia scansione di un host
all'opzione -p (vale a dire "icmp") che indica
attivo/raggiungibile o meno. Fallendo questi check
appunto a quale protocollo fa riferimento la regola.
nmap non può andare avanti con la scansione a
33
meno di forzarlo con il parametro -PO. Deduciamo
RIQUADRO 1
da ciò che è come se la nostra Linux Box fosse a tutti gli effetti invisibile alla rete Internet. Abbiamo inserito poche regole e siamo già riusciti a
far arrendere nmap. Niente male!
Scansione completa delle porte TCP
Filtrare il protocollo udp
Verificare diverse centinaia di porte è già di per se un test
Nonostante gli accorgimenti intrapresi la nostra
scansione TCP presentata in queste pagine. Tuttavia l'utente
significativo al fine di controllare l'efficacia della regola anti
Linux Box non è sufficientemente protetta da tutte
"paranoico" potrebbe non essere soddisfatto se non control
quelle tecniche che si basano sull'ottenimento di
lando tutte le porte possibili e allocabili in un sistema (dalla
importanti informazioni attraverso lo sfruttamento del protocollo UDP.
Anche se è molto improbabile che un utente casa lingo offra al mondo esterno servizi che si basino su
numero 1 alla numero 65535) o un ranye pdrtkoldre da lui
specificato. L'utente sarà molto contento di sapere che gli è possibile effettuare questi test visitando il sito:
http://vAsw.pcflank.com/scannerl.htm Una volta aperta la pagina sarà necessario cliccare sul pul
porte UDP è buona norma comunque filtrare questo
sante "Start Test" quindi su "Continue". A questo punto dopo
protocollo in ingresso. Per l'occasione possiamo uti
aver scelto la voce "TCP Syn Scanning" e cliccato su
"Continue" ci si ritroverà sulla pagina rappresentata in "figu
lizzare la seguente regola: »
iptab1.es
-I
INPUT
-p
udp
-i
-s 0/0
ra 5". Per selezionare un range di porte desiderato sarà pppG
-n
necessario selezionare la voce "Scan desidered ports and/or
state
--state INVALID.NEW -j
thè range of ports". Nella text box in basso si dovrà infine DROP
inserire il range di porte desiderato separato dal segno tratti no "-" (es. 2000-5010) e cliccare su "Continue". Adesso con
I benefici di questa regola sono i classici già ampia
fermate l'avvio della scansione ed attendete il risultato.
mente discussi nei precedenti paragrafi. Anzitutto saremo liberi di inviare pacchetti UDP dalla nostra
Linux Box verso l'esterno senza rischiare che IPTables li blocchi precludendo la nostra normale attività in rete. Nel seguente esempio dimostriamo come sia possibile dialogare con un server dns:
# nslookup hWLj.altauista.com Server:
xxx.xxx.xxx.xxx
Address:
xxx.xxx.xnn.xxx»
www.altavista.com
canonical
nane =
avatw.search.yahoo2.akadns.net. Name:
avatw.search.yahoo2.akadns.net
Address:
216.155.200.155
Allo stesso tempo si è immuni da scansioni o probing UDP come dimostrato dal successivo esempio di
sono nello stato open quando in realtà sono tutte
nmap:
chiuse, ci fa capire che la nostra regola IPTables è stata settata correttamente. Qualsiasi porta analiz
# nmap
-sU
proprio
ippubbLico
-n
-p
zata sfruttando queste tecniche verrà in pratica
10-20
indicata come aperta da nmap. Starting nmap V.
2.5-1BETA31
Interesting ports on
I
www.insecure.org/nirap/
)
(10.12.B.114):
La prova del 9: UDP
Scanning Test!
Port
State
Service
10/udp
open
unknown
11/udp
open
systat
Se non si dispone di sistemi esterni alla propria LAN
12/udp
open
unknown
è possibile testare l'efficacia della regola antiscan-
13/udp
open
daytiine
sione UDP precedentemente inserita attraverso
14/udp
open
unknown
l'UDP Scan test attivabile dal sito:
15/udp
open
unknown
http://scan.sygate.com/preudpscan.html
lG/uflp
open
unknown
Dopo aver aperto la pagina e cliccato su "Scan Now"
17/udp
open
qold
al termine del test si dovrebbe ottenere lo stesso
ie/udp
open
19/udp
open
chargen
responso finale "You have btocked ali of our probes!"
29/utlp
open
ftp-data
ci fa capire che la nostra regola antiscansione UDP
risultato visualizzato nella figura 4. Anche qui il
fa il suo lavoro con efficacia. Le tecniche di scansione o probing che si basano su
protocolio UDP differiscono nella forma e nel risulta to finale da quelle classiche TCP (un po' come acca
Creare regole meno
restrittive in entrata
deva con il FIN Scanning). L'output appena riporta to, in cui si evince che tutte le porte UDP analizzate
©5)
Dopo l'inserimento dell'ultima regola la chain INPUT
~
differenti indirizzi IP esterni "y-y-y-y" e "z.z.z.z" di
conterrà le seguenti entry:
raggiungerci con un ping. Affinchè le nuove regole *
iptables
Cftain
-L
INPUT
che intendiamo aggiungere funzionino dovremmo
INPUT
far si che le stesse risiedano nella chain INPUT
fpoliCy ACCEPT)
target
prot
DROP
udp
opt
source
destination
e.9.e. n
0 fl R e
prima della seconda della nostra tabella, altrimenti questa prevarrà su tutte le altre (il rispetto della
state
propedeuticità delle regole è stato già trattato nelle
INVALID,NEW DROP
e ,9 e .8
O.G.O. 9
icmp
pagine precedenti).
state
Per farlo sarà sufficiente digitare:
INVALID.NEW
DROP
0 e 0 .e
9-6-0. e
tcp
state
INVALIO,NEW tcp
# iptables
dpts:l:65535
-I
INPUT
-p icmp
-i
pppO
-s
y.y.y.y
--iemp-type echo-request
-j
ACCEPT
-j
ACCEPT
La dichiarazione di queste tre semplici regole, può essere considerata a tutti gli effetti come la confi
# iptables
-I
INPUT
-p
icmp
gurazione base di ogni firewall avanzato. I loro
-ì
pppO
-s
z.z.z.z
■■ìcmp-type echo-request
benefici si estendono anche all'immunità da prati
che di Fingerprint oltre che, come già visto, alle più
L'opzione --iemp-type ci da la possibilità di specifi
svariate tecniche di scanning. Per esempio l'esecu
care il tipo di pacchetto ICMP su cui si intende ope
zione del seguente comando da un altro PC:
rare. In questo caso il parametro echo-request cor risponde alla
w.
»
nmap
-0
-n
richiesta
di
ping.
Una lista di
parametri utilizzabili è consultabile digitando il
proprio ìp pubblico
comando: non fornirà alcuna informazione sul sistema operativo della nostra postazione Linux.
#
ìptables
-p
ìemp
-h
Come già detto queste semplici tre regole sono la base di qualsiasi sistema Firewall ed in quanto tali
Un'altra necessità che potrebbe sorgere sarebbe
vanno adattate alle proprie esigenze.
quella di consentire a chiunque l'accesso incondi
Potrebbe essere utile per esempio consentire a due
zionato a certi servizi residenti nella propria Linux Box. Per esempio si potrebbe voler rendere accessi
bili i servizi di posta (porta 25 e 110), il proprio ftp
RIQUADRO 2
pubblico (porta 21) ed il proprio server web (porta
80) all'esterno. In questo caso tutte le regole
Script delle regole
andranno naturalmente inserite prima della terza della nostra tabella originaria:
Ecco un piccolo script che raccoglie la maggior parte delle regole sin qui mostrate che ci consentirà di creare un firewall
#
Ìptables
-I
INPUT
-p tcp
-1
pppO
-s
efficace capace di proteggerci contro i più comuni attacchi dì
natura diretta oggi perpetragli. All'utente viene lasciato
#
ìptables
-I
INPUT
-p
tcp
-i
pppQ
-s
#
ìptables
-1
INPUT
p
Up
-i
pppG
-s
# ìptables
-I
INPUT
-p tcp
-ì
ppp8
-s 9/e
naturalmente il compito di apportare le modifiche/migliorie necessarie per adattarlo alla propria infrastnittura di rete ed
alla propria distribuzione Linux.
0/0 -dport
--dport
in5en.ner.tn del noduli di
> Le segjentt
connectiontracklng se non inclusi dal kernel.
rione vanno decoaaentate te 1 aodull non sino gli caricati nel
• sistema. Ciò può essere versificato utilu/amto il
comanda
■]
ACCEPT
80
-j
ACCEPT
-■dport
116
-)
ftCCEPT
A questo punto nella chain INPUT saranno visibili
ip cnnntrack ftp
quattro regole in più:
#
p tcp -i pppO -m slato -s 6/t
» Questa regola biotta tutto 11
■■ state INVALID,NEW -j W0P
Iralflco lene non richiesto proveniente da
• Internot e destinalo direttamente alla Llnu* Box; -p icmp
-1 pp|>a
iptables
Chain
--(Iport 1:65535
INPUT
25
tp_cnnntr»cli
iptables -I INPUT
-I
ACCEPT
"Ismod".
• Internet e destinato direttamente alii Linm Bo>:
lotables
-j
9/0
■-Ctport *
21
9/6
■■ state -s B/e -■stale
INVALID,NEW ■) DROP
-L
INPUT
INPUT
(pollcy ACCEPT]
Target
prol
ACCEPT ACCEPT
opt
source
Oestination
tcp
e.e.o.o/o
d.q.o.B/o
tco
0.0.0.0/0
B.0.S.D/O
lep dpt:80
ACCEPT
tcp
0.6.0.0/0
O.O.B.S/Q
tcp dpl:25
ACCEPT
tcp
e.e.e.e/G
o.e.e.9/0
tcp dpt:2i
tep dpt:iia
• Onesta regola blocca tutto il traffico udp non richiesto proveniente aa • Intenwt e deificato direttamente ili» Lini» Bo«:
ìptjDles -I IWUT -p udo -i pppB ■■ state -i 9/0 -state INVALID.NEW -J DROP
Possiamo comunque ottimizzare l'operato di
* Questa regola consente di rendere visibili all'esterno
iptables combinando queste quattro regole in
'
un'unica regola nel seguente modo:
ipotetici servizi
ftp,
• di posta e web installati sulla propria Lini» Boi. »
ìpiables
-I
INPUT
-p tcp
-1 appO
■ mulitport
.4 B/8
■ tìporti 21.25,89,110 .j
ACCEPT
# ìptaliles
-I
INPUT
-p tcp -1
-s S/6
ppps
-m muluport
--dports 21,25.80.11G -] ACCEPT
Il risultato finale visibile nella chain INPUT sarà:
Quest'ultima regola chiude il cerchio.
#
alla nostra postazione Linux di contattare in uscita
Ricapitolando in questo modo si da la possibilità iptables
-l
Chain INPUT Target
input
tutti i servizi TCP relativi al range di porte 1-3000 ed
(policy ACCEPT)
prot
opt
source
il servizio UDP dns.
destination
Qualsiasi tentativo di contattare qualunque altro ACCEPT
tcp
6.8.9.0/9
G.e.Q.0/0
multipari
dports
21,25,80.119
servizio verrà bloccato da IPTables. Ciò è suffi ciente nella stragrande maggioranza dei casi a garantire alla propria Linux Box una certa auto
nomia in Internet assieme ad un maggior grado L'estensione -m multiport consente di aggiungere
di protezione.
alla nostra regola il supporto multiporta attraver
Naturalmente in base alle circostanze potrebbe
so il quale possiamo specificare al massimo 15
essere necessario aggiungere o rimuovere le porte
porte separate da virgola (,) utilizzando l'opzione
relative ai servizi desiderati o stringere/allargare li
- -dports.
range di porte rese accessibili all'esterno per risol
Il risparmio in termini di prestazioni è evidente!
vere il manifestarsi di problematiche legate ad una regola troppo restrittiva. Per esempio il servizio VNC
Restrizioni in uscita
sta in ascolto sulla porta 5900 o ancora alcuni servi
Fino ad ora ci siamo preoccupati solo ed esclusiva
zi di web cache stanno in ascolto sulle porte 3128 o
mente di proteggere la nostra Linux Box bloccando
8080. Non sarebbe possibile usufruire di essi con le
o abilitando in ingresso {attraverso la chain INPUT)
regole inserite precedentemente!
il traffico che ci sembrava più o meno congruo.
potrebbe essere invece risolto allargando il range di
Il problema
Tuttavia potrebbe tornarci utile limitare il traffico in
porte contattabili in OUTPUT o aggiungendo l'abilita
uscita dalia nostra postazione abilitando per
zione alle singole porte desiderate in testa alla
esempio tutti quei protocolli e quei servizi che
chain OUTPUT.
siamo soliti utilizzare e bloccando il resto.
Inoltre le tre regole poc'anzi inserite potrebbero
La chain su cui lavorare in questo caso è OUTPUT.
causare problemi di comunicazione con altri ipotetici
Essa ci consente di prendere decisioni sui pacchetti
PC presenti nella propria rete privata. Infatti queste
che sono in uscita e che vengono generati local
regole si applicano a qualsiasi indirizzo IP assegnato
mente dalla nostra postazione Linux.
alla propria Linux Box e ciò può inficiare con la cor
Naturalmente bisogna conoscere con esattezza
retta comunicazione tra la propria postazione Linux
quali porte relative a quali servizi devono essere
ed altri PC interni.
rese accessibili in uscita pena il corretto funziona
Fortunatamente con IPTables è possibile specificare
mento di certi applicativi. Per esempio se si fa un
l'interfaccia di uscita a cui le regole vanno applicate
utilizzo "classico" di Internet il traffico in uscita
attraverso l'opzione -o.
potrebbe essere regolamentato in questo modo:
Per esempio per far si che le tre regole inserite siano applicate solo all'indirizzo IP assegnato
# iptables
-A OUTPUT
-p tcp
all'interfaccia connessa alla rete Internet e non a
s 0/6 ■■dport
1:3099
■]
ACCEPT
tutti gii indirizzi IP della propria Linux Box è possi bile digitare:
#
iptabl.es
-A
OUTPUT
-p
udp
-s
G/G
-s 9/9
■]
DROP
dport
53
•]
ACCEPT
#
# iptables
-A OUTPUT
Nel primo caso (regola 1) si indica chiaramente
ìptables
-A OUTPUT
-p
tcp
-o
pppG
s
--dport
#
iptables
-A OUTPUT
-p
udp
-o pppfl
che a qualsiasi indirizzo assegnata alla Linux Box
s
9/6 1:3999
-j
ACCEPT
■]
ACCEPT
0/0
■■dport
53
(-s 0/9) viene data la possibilità di collegarsi {■]
ACCEPT) alle porte tcp (-p
tcp) nei range che va
#
iptables
-A OUTPUT
-s
0/G
-o
pppO
-)
DROP
dalla numero 1 alla numero 3000 ( - - dport 1:3000). In questo modo si dovrebbe poter garantire la cor
In questo caso l'unica differenza tra questo set di
retta consultazione della maggior parte dei servizi
regole e quello specificato precedentemente risie
oggi esistenti, compresi quelli che gestiscono lo
de nell'interfaccia alla quale le regole stesse si
scambio di dati attraverso l'allocazione dinamica
riferiscono (-0 pppO).
delle porte {come fa il protocollo FTP).
Conclusione
Nel secondo caso (regola 2) si indica che a qualsia si indirizzo assegnato alla Linux Box <-s 0/0) viene
Che dire! ìptables è proprio uno strumento facile ed
data la possibilità di collegarsi (j ACCEPT) alla
allo stesso tempo avanzato che ci consente di confi
porta udp (-p
gurare un firewall sicuro e funzionale in pochissimo
udp) 53 (relativa al servizio dns) di
qualsiasi indirizzo di destinazione. In questo modo
tempo.
si evitano problematiche dì navigazione o consulta
Pensate che le sorprese siano finite qui? Seguiteci
zione di risorse poste in Internet
ancora nella prossime pagine e rimarrete sempre
Nel terzo caso (regola 3) viene specificato di bloc
più sbalorditi dalla sua versatilità e dalla sua
care (-j
potenza.
DROP) qualsiasi connessione verso qualsiasi
destinazione.
©te
iptables: ecco come
blindare la rete Approfondiamo l'argomento iptables: è la volta dell'impostazione di
regole per la prolezione della rete locale, filtrando il Ira/fico anche in metta e introducendo la tecnica per rendere pubblici i server interni Marco Ortisi <m.ortisi@linuxpratico.com>
Andrea DeSantis <a.desantis@Unuxpratico.con>
Nelle pagine precedenti abbiamo imparato a
conoscere i rudimenti di iptables. abbiamo visto come impostare regole capaci di pro
teggere la nostra rete da attacchi diretti quali
con lo stesso indirizzo IP pubblico di uscita e non
Scanning e Fingerprinting ed abbiamo compreso
comunicano il proprio IP privato - che comunque
come può essere gestito e regolamentato tutto il
non sarebbe direttamente raggiungibile. La comuni
traffico in uscita dalla nostra Linux Box.
cazione avviene senza sovrapposizioni nella rete
Una delle problematiche più ricorrenti, soprattutto
privata in quanto l'host che esegue la procedura di
per chi possiede una piccola rete casalinga o
NAT mantiene lo stato attivo delle connessioni in
comunque in generale diversi computer collegati in
essere, riuscendo a sapere perfettamente chi ha
LAN, è certamente la possibilità di condividere una
richiesto cosa.
singola linea di collegamento ad Internet tra più PC
iptables implementa il mascheramento con l'ausilio
e di rendere pubblico un servizio disponibile su una
di un'apposita tabella (definita appunto nat) ed uno
delle
specifico target MASQUERADE: all'interno di tale
di
macchine
posta
FTP
protette
oppure
un
(ad
web
esempio
server
o
un
server
ancora
un
server).
tabella possono essere utilizzate tre chain, ognuna per uno specifico compito:
iptables è in grado di aiutarci a risolvere questi ed altri problemi con l'ausilio di poche regole e senza la necessità di ulteriore software.
Network Address
OUTPUT: utilizzata per analizzare/alterare i pacchetti che stanno per uscire, generati localmen te dalla Linux Box;
Translation
PREROUTiNG: utilizzata per analizzare/alterare i
Vi sono due possibilità, in generale, per rendere
decisioni riguardo il loro smistamento (percorso di
possibile la navigazione ai ctient della propria LAN:
routing);
a) assegnando ad ogni PC un indirizzo IP
POSTROUTING: utilizzata per analizzare/alterare i
pacchetti in ingresso prima che vengano prese
pubblico diverso;
pacchetti che sono già pronti per essere smistati
b) condividendo lo stesso IP pubblico.
verso l'esterno.
Il primo caso è spesso impraticabile per gli utenti
I! target MASQUERADE è invece utilizzabile sola
casalinghi che possono disporre di un solo indirizzo
mente con la tabella nat nella chain POSTROUTING
IP pubblico assegnato dal provider e, in ogni caso, è
ed il suo scopo è quello di consentire il maschera
una pratica sconsigliata anche quando possibile,
mento ai client/server posti in Internet degli indirizzi
principalmente perché gestire la sicurezza di più PC
IP privati presenti nella propria LAN. Prima di prose
direttamente visibili dall'esterno è estremamente
guire ulteriormente svuotiamo il contenuto delle
più difficile che gestire un singolo punto di ingres
eventuali regole presenti nelle chain della tabella
so/uscita dei dati.
nat, per evitare che queste vadano ad interferire
La soluzione naturale al problema è, pertanto, quel
con gli esempi che proporremo:
la relativa alla condivisione di un unico IP pubblico che viene posta in essere grazie ad iptables e ad
9
iptables
-F
-t
nat
una procedura nota come NAT.
NAT è l'acronimo di Network Address Translation ed
Assumiamo ora che il range di indirizzi IP assegnati
è principalmente un meccanismo che permette agli
all'interno della
host di una rete locale di utilizzare i servizi di
192.168.0.0/24 e che la postazione Linux che funge
Internet come se fossero direttamente connessi alla
da firewall abbia 2 interfacce: pppO che acquisisce
propria rete corrisponda a
stessa, con in più la possibilità di occultare il proprio
l'indirizzo IP pubblico dal provider (una connessione
indirizzo privato.
via rnodem ADSL o analogico, ad esempio) ed ethO
Tali host, infatti, si presentano alla risorsa su
con IP 192.168.0.1 che è in diretto contatto con le
Internet, sia essa un web server o una chat, tutti
postazioni interne. Su questo PC digitiamo:
# ìptables
-A POSTROUTING
-t nat
da agire come router per la propria rete, ossia per
-s 192.168.9.0/24 -j
mettere che i pacchetti provenienti dalie varie
MASOUERADE
interfacce possano transitare attraverso la stessa. Questa regola consentirà, ai client della rete privata
Di defauit questa impostazione è disabilitata e va
che hanno impostazioni TCP/IP corrette (per esem
attivata direttamente dal filesystem /proc. Il file
pio nel nostro caso gateway d'uscita impostato a
che determina in tal senso il comportamento del
192.168.0.1. server DNS configurati in modo esatto,
sistema è /proc/sys/net/ipv4/ip
etc), di accedere ad Internet.
contenere al suo interno 2 valori:
forward e può
Accertiamo che questo sia vero: 0: disabilita questa opzione
AVerifichiamo che la Linux Box che funge da
1: attiva questa opzione
gateway/firewall/router riesca a navigare, in modo da evitare la presenza di problemi di connet-
*
tività che niente hanno a che fare con iptables.
0
cat
/proc/sys/net/ipv4/ip forward
BVerifichiamo che la regola sopra evidenziata sia stata inserita in testa alla chain POSTROUTING nella tabella nat:
# iptables
-L
POSTROUTING
Chain POSTROUTING target
prot
MASQUERADE
RIQUADRO 1
ali
-t nat
Attiva IP Forwarding
-n
al boot del sistema
(policy ACCEPTì opt
source
destination
■-
192.168.Q.9/2a
O.Q.G.e/Q
RedHat & Fedora Aprire il file /etc/sysctl.tonf ed aggiungere al suo
Nel nostro esempio è l'unica ad essere presente
interno la direttiva:
nella chain e nella tabella interessata.
net .lpv4.ip_forward
CDigitiamo il seguente comando in una shell
della Linux Box che acquisisce l'indirizzo IP pubblico:
#
tcpdump
- 1
SuSE Linux Aprile il file /etc/rc.config e specificare a! suo interno la direttiva:
-1
any
-n
port
IP FORWARD="yesM
80
Così facendo verranno intercettati e stampati a
Debian GNU/Linux
video tutti i pacchetti relativi a collegamenti http
Aprire il file /etc/network/options e specificare al suo
provenienti/destinati da/verso qualsiasi indirizzo.
interno la direttiva: ip
forward=yes
DDa un client qualsiasi della LAN apriamo un
browser http e proviamo a collegarci ad un sito web (esempio http://www.google.com). Da questo
Mandrake Linux Aprire il file /etc/sysctl.conf ed aggiungere al suo
momento in poi lasciamo il tcpdump in esecuzione
interno la direttiva:
perché ci servirà ancora per esempi successivi.
net.ipv4.ip_forward =
1
Il sito non verrà aperto! Dopo qualche secondo
l'output ottenuto dalla shell in cui è stato eseguito tcpdump mostrerà un risultato simile al seguente
ripetuto più volte: 14:03:33.855982
IP
192.168.0.10.60470
66.249.85.104.89: <rr.ss
>
S 2319097123:231009712319) win 5840
146Q,5ackOK,timestamp 3213999171 |tcp]>
La stringa è interpretabile in questo modo: il client interno 192.168.0.10 ha provato ad iniziare una
connessione (S corrisponde al flag TCP SYN) con la destinazione 66.249.85.104. Vengono fatti diversi tentativi di connessione ma nessun dato torna indietro al client.
L'errore
che è
stato
commesso
è
uno
dei
più
comuni e non risiede nei modo in cui è stata impo stata/dichiarata la regola di iptables, che risulta esatta. Il problema risiede nella configurazione della Linux Box che acquisisce l'indirizzo IP pubbli co: essa, infatti, deve essere configurata in modo
client si connette al server Web su internet
tramite il gateway della propria rete
~
_
3 Nel passo 3 l'interfaccia della Linux Box che ha
E' chiaro che c'è la necessità di attivarla. E' possibi
acquisito l'indirizzo IP pubblico dal provider
le compiere questa operazione scrivendo diretta
riceve una risposta al pacchetto inviato nel passo 2
mente il valore desiderato nel file, come segue:
(da IP mittente 66.249.85.104 a IP destinatario 8 echQ
1
>
/proc/sys/net/ipv4/ip
62.121.13.119). Analizzando al suo interno la tabel
forward
la dei pacchetti che sono già stati mascherati, il
Cosi facendo al riavvio del sistema tale impostazio
sistema comprende che questo deve essere in
ne ritornerà al suo valore originario, cioè "0". Per
realtà smistato al client interno 192.168.0.10, che è
rendere permanente tale modifica consultare il
stato l'host a richiedere lo stabilimento della
riquadro 1.
connessione.
Proviamo nuovamente a navigare da un qualsiasi client interno. La pagina web verrà adesso mostrata
Per questo motivo nel passo 4 l'indirizzo IP di
a video dopo qualche attimo. In questo modo siamo
'destinazione del passo 3 (62.121.13.119) viene
in grado di navigare in Internet da postazioni che
variato a 192.168.0.10 ed il pacchetto viene inviato
possiedono indirizzi IP privati grazie alla tecnica del
così al giusto destinatario.
Network Address Translation. C'è da comprendere più a fondo in cosa consista
D'ora in poi tutti i pacchetti relativi alla specifica
però il mascheramento operato dal NAT. Il riquadro
connessione operata dal client interno verranno ad
1 indica lo scambio dei pacchetti relativi alla prima
esso smistati dal sistema che pratica NAT.
parte dell'inizio di una connessione tra il client di una LAN con indirizzo IP privato ed un host residen te in Internet. Le informazioni salienti dovrebbero
Firewail per tutta la rete II Network Address Translation va configurato nella
corrispondere alle prime righe dell'output catturato
Linux Box che fungerà, in pratica, da router/firewall
dalla sessione di tcpdump avviata in precedenza che
per i PC di tutta la LAN e sarà l'unico punto di
è adesso possibile sospendere premendo i tasti
ingresso/uscita dei dati. La comunicazione tra la
Ctrl+C. Analizziamo il contenuto del riquadro 2:
rete interna e le reti esterne potrà essere corretta mente garantita in quanto la Linux Box sarà dotata
INel passo 1 la Linux Box riceve un pacchetto da
di un'interfaccia direttamente visibile ai client della rete locale (es. ethX) e di una interfaccia diretta
uno dei client della LAN (192.168.0.10) destina to all'indirizzo 66.249.85.104 (www.google.com). Il
mente visibile da Internet {es. pppO).
pacchetto reca con sé il flag tcp 5YN (S) il che signi
Grazie a questo tipo di configurazione è possibile
fica che si sta cercando di stabilire ex-novo una
estendere le caratteristiche di iptables ad altri usi.
connessione.
Vediamo assieme i più diffusi.
2 Se il sistema lasciasse inalterato l'indirizzo IP
Regolamentare le
mittente del passo 1 non sarebbe possibile
connessioni verso Internet
comunicare correttamente con la destinazione (gli indirizzi privati non sono raggiungibili dall'esterno),
L'utilizzo della tecnica del mascheramento delle
per questo motivo nello passo 2 tale indirizzo viene
connessioni fa si che la Linux Box preposta alla
modificato
dal
scopo possa fungere da firewail non solo per pro
pravider (nell'esempio 62.121.13.119). Tutti gli altri
teggere se stessa ma anche, e soprattutto, per pro
campi {porte, opzioni e valori del pacchetto) vengo
teggere t client interni. Per poter garantire una vera
con
quello
pubblico
acquisito
no lasciati inalterati. Da questo momento in poi la
protezione è necessario aumentare il controllo sul
Linux Box memorizza in una sorta di tabella ì dati
traffico che passa attraverso gii host delta rete per
relativi alla connessione dietro NAT.
evitare che l'operazione di mascheramento dia solo una falsa sicurezza. Ecco quindi che può essere
m ■ RIQUADRO 2
1 Sessione di tcpdump relativa ali 'inizio
J^di una connessione w
13:56:35.188403 <mss
2) 3) 4)
IP
13:56:35.188454 IP <mss
321351154
> 66.249.85.1B4.89:
5
1989238142:1909238142(6)
win
5S40
S
19B923B142:1909238142(e>
win
584G
S.nop wscale Q>
62.121.13.119.60465
> 66.249.85.1B4.8e:
146O,sackOK,timestamp 321351154 9,nop wscale 9>
13:56:35.311652 IP win
192.168.0.1B.60465
146e,sackOK,timestamp
TCP
8190 <mis
13:56:35.311673 IP win 819Q
<mss
66.249.85.104.80
>
62.121.13.119.68465:
s
2813525196:2813525196(9)
ack
1909238143
66.249.85.104.80
>
192.168.B.10.60465:
s
2813525196:2813525196(9)
ack
1909238143
1460>
1468>
^3
utile, in certi ambiti, limitare
le
risorse
che
i
#
iptables
-t
nat
computer all'interno della rete possono contattare
-A PREROUTING ■s
-p
udp
192.168.9.6/2'!
--dport
53
-]
ACCEPT
su Internet, circoscrivendo il tutto solo a quelli stret tamente necessari. Questo modo di impostare il
* iptables
-t
nat
-A PREROUTING
proprio firewall aiuta certamente a dare maggiore
-s
192.168.S.G/24
-j
DROP
sicurezza alla propria infrastruttura di rete. Per contro, è necessaria la conoscenza esatta di
Nel primo caso (regola 1)
quali porte devono poter essere raggiunte dai client
ip nel range 192.168.0.0/24
per evitare un possibile fermo di servizio.
la possibilità di collegarsi {-j
Prendiamo in considerazione queste 3 regole:
(-P
diamo, a tutti gli indirizzi (-s
192.168.0.G/24) ,
ACCEPT) alle porte tcp
tcp) 20,21,22.25,80,110,443 di qualsiasi indi
rizzo fP di destinazione. » iptables
-t nat
192.lea.o.a/24
-A PREROUTING
--dports
-p tcp
-m muUiport
20,21,22,25,39.110,443
In questo modo si da ai client la possibilità di utiliz
-5
zare rispettivamente i servizi di trasferimento file
-j accept
RIQUADRO 3
Regole per IPTABLES Ecco un piccolo script che raccoglie la maggior parte delle regole sin qui mostrate. Con esso sarà possibile creare un firewall efficace e capace di proteggerci dai più comuni attacchi diretti oggi perpetrabili (Scanning, Fingerprint, etc). All'utente viene lasciato naturalmente il compito di apportare le modifiche/migliorie necessarie per adattarlo slla propria infrastruttura di rete ed alla propria distribuzione Linux. Potete scaricarlo da http://www.linuxpratico.com/ risorse/sicurezza/ regolefw.sh
# Interfaccia esterna della propria linux box. n ette si possiede
(modero o
Variare in base al
tipo di
apparato
router ethernet),
EXT_INTERFACE="pppB"
* Inserimento dei moduli di » caricati nel
sistema.
connection-tracking.Le seguenti
righe vanno decomentate se
Ciò può essere veriflcato utilizzando il
ì moduli non sono già
comando "Ismod".
S /sbin/modprobe ip_conntrack
* inserimento dei moduli per
i collegamenti
ftp dietro nat.
Oecommentare se il
sistema pratica masquerading.
t
# /sbin/modprobe ìp_conntrack_ftp 9 /sbin/modprobe ip^ftp_nat
# Questa
regola blocca tutto
iptables
-I INPUT -p tcp -i
# Si
blocca tutto il
il
traffico
tcp
SEXT_IHTERFACE
non
richiesto proveniente da
-m State -S 0/0
--dport 1:65535
Internet
e
destinato direttamente alla
--State INVALID,NEW -j
linux
box;
DROP
traffico ìcmp non richiesto proveniente da Internet e destinalo direttamente alla
linuK box;
s
iptables
-I INPUT -p iemp -i SEXT_INTERFACE
-ra state -s 0/fl
--state INUALID.NEW -j
DROP
ti Questa regola blocca tutto il traffico udp non richiesto proveniente da Internet e destinato direttamente alla linux box; s
iptables
-1 INPUT -p udp -i $EXT_INTERFACE
-ra state -s 0/0
S Questa regola attiva il masquerade delle connessioni. a
fornire la connettiwità Internet ai
# iptables
--state INVALID.NEW -j
DROP
Decommentare e configurare opportunamente se si desidera
PC della propria LAN.
-A POSTROUTING -t nat -s 192.168.0.0/24 -j MASQUERADE
9 Limitazioni dei
servizi Internet ai
client/server della
# si desidera inporre delle limitazioni all'operato dei
rete interna.
Decomtnentare e configurare opportunamente se
client/server della propria LAM verso
Internet.
#_
# iptables
-t nat
-A PREROUTING -p tcp -m multiport -s 192.168.8.8/24 --dports 20,21,22,25,80,110,443
# iptables
-t nat
-A PREROUTING -p udp -s
8 iptables
-t nat
-A PREROUTING -S 192.168.0.0/24 -j DROP
e Port
Forwardìng.
« iptables -t nat
192.16B.8.0/24
--dport 53
-j
-j ACCEPT
ACCEPT
Decommentare e configurare opportunamente la regola se si desidera praticare port
forwarding.
-I PREROUTIHG -p tcp -s 0/8 -i SEXTINTERFACE --dport porta_dest_fw -j
DNAT
--to-destination
11server_interno:porta"
^
RIQUADRO 4
o qualsiasi tentativo di contattare qualunque altro
servizio non elencato ai punti 1 e 2 verrà bloccato dal firewail.
FTP e NAT Quando si condivide lo stesso collegamento ad Internet attra
verso la tecnica del masquerading. i client della rete interna
Ciò è sufficiente, nella maggioranza dei casi, a garantire ai PC della propria Intranet una certa
potrebbero avere problemi ad effettuare delle transazioni FTP
autonomia e un buon controllo durante la naviga
con server posti in Internet.
zione in Internet. Naturalmente si è liberi di aggiun
Questi problemi sono dovuti alla natura stessa del protocollo
gere o rimuovere le porte relative ai servizi deside
FTP che non opera su una porta singola, bensì su più porte
rati, ad esempio quelli relativi alla chat oppure ai
che possono essere allocate anche in modo dinamico e che pertanto potrebbero indurre il firewall in inganno. La conse
guenza diretta di questo problema sarebbe il blocco di con nessioni lecite.
file sharing.
Port Fnrwarding
Per risolverlo in modo indoìore e pulito è possibile aggiungere
Talvolta, anche in presenza di reti casalinghe o di
un paio di moduli kernel nella propria Linux Box digitando da
ufficio, potrebbe essere necessario rendere visibile
linea di comando:
all'esterno un servizio ospitato da un client/server
# modprobe
ip
della propria LAN: ad esempio potremmo desidera
# modprobe
ip nat ftp
conntrackftp
re di rendere visibile un sito web in sviluppo su una Linux Box interna che ancora non è stato spostato
Così facendo i PC della propria LAN intraprenderanno e termi
neranno correttamente le sessioni FTP avviate. Entrambi i moduli sopra indicati possono essere inseriti nell'elenco dei
moduli da caricare al boot, presente nel file /etc/modules
sul server web principale. Il mascheramento effettuato dal NAT non rende
possibile l'accesso diretto ai vari host; ecco quindi
(solo il nome del modulo) così da non doverli lanciare
che bisogna ricorrere ad una nuova tecnica detta di
manualmente ad ogni riavvio.
port forwarding, che permette, sempre grazie ad iptables. alla chain PREROUTING e al target DNAT, il collegamento ad un computer altrimenti non rag giungibile da Internet.
via FTP (20 e 21), shell remota (22), posta in uscita
Il target DNAT è valido solamente nella tabella "nat"
(25), http (80), posta in entrata via pop3 (110),
e consente di modificare a piacimento l'indirizzo 1P
https (443).
e la porta di destinazione dei pacchetti relativi ad
In questa regola abbiamo usufruito dell'estensione
una connessione. La sua opzione più utilizzata è
multiport (-m
infatti --to-destination con la quale è possibile
multiport) e della sua opzione
"dports" {--dports 20,21,22,25,80,110,443) per
modificare i parametri di destinazione di un collega
evitare di inserire nel sistema sette distinte regole.
mento: la stringa passata a questa opzione è in pra
La chain utilizzata è PREROUTING. che ci consente di
tica formata dall'indirizzo IP e dalla porta, separate
analizzare i pacchetti in ingresso nella nostra Linux
dai due punti, a cui la connessione dovrà essere
Box prima che vengano prese decisioni riguardo il
dirottata.
Per
loro smistamento e, per questo, è la chain più indi
visibile
Internet
cata per filtrare il traffico in uscita dalla nostra rete
con
interna: ne! caso un pacchetto soddisfi una delle
re la seguente regola:
in
esempio il
se
volessimo
nostro
rendere
server web
interno
indirizzo IP 192.168.0.2 basterebbe aggiunge
condizioni elencate, si procede nell'inoltro verso la
destinazione, ignorando le regole che seguono.
#
ìptabtes
-t
nat
Con il secondo comando diamo la possibilità di col legarsi <-j
ACCEPT) alla porta UDP (-p
-d
-I
PREROUTING
-p
tcp
proprio ip pubblico
udp) 53
--dport 88
--to-destination
-j
DNAT
"192.168.8.2:89*
(relativa al servizio dns), a tutti gli indirizzi IP nel
range 192.168.0.0/24
{-s
192.168.0.0/24) con
qualsiasi indirizzo di destinazione. In questo modo
oppure, se TIP non è noto ma solo l'interfaccia di rete dal quale proviene la connessione:
eviteremo problematiche di navigazione o consulta zione di risorse poste in Internet dovute alla manca ta interrogazione dei
server DNS. Anche qui la
# iptables --dport
-t
nat
80
-]
-I PREROUTING DNAT
-p tcp
- - to-Oestination
-i
pppo
"192.166.6.2:80"
chain utilizzata è PREROUTING. Nel terzo caso specifichiamo di bloccare (-j
DROP)
In entrambi i casi presentati, tutte le connessioni in
qualsiasi connessione verso qualsiasi destinazione
ingresso sulla porta 80 verranno redirette alla porta
da parte del range di indirizzi IP 192.168.0.0/24 {-s
80 del server 192.168.0.2.
192.168.0.0/24): in questo modo solo il traffico
Ecco quindi che l'utente proveniente dall'esterno
indicato esplicitamente e autorizzato può essere
che voglia collegarsi al server web, dovrà digitare
effettuato, altrimenti tutto il restante verrà bloccato
nel proprio browser l'indirizzo
da questa regola. Ricapitoliamo:
http://a.b.c.d dove, al posto di a, b. e. d andranno indicate le cifre
o diamo ai client interni la possibilità di contattare i
dell'IP pubblico da raggiungere.
servizi tcp "ftp-data, ftp, ssh, smtp posta in
E' anche possibile utilizzare porte diverse da quelle
uscita, http, pop3 posta in entrata, https";
classiche: ad esempio, se sulla porta 80 esiste già
o diamo ai client interni la possibilità di contattare il servizio udp "dns";
un server web e noi vogliamo rendere visibile una versione ancora in sviluppo è possibile ridirigere le
* RIQUADRO 5
tcpdump relativo ad un part-fnrward 1)
13:54:38.135966 IP
151.38.31.246.55967
> 62.121.13.119.39:
S 2236072530:2286972530(8]
2) 13:54:38.136618 IP
151.38.31.246.55957
> 192.168.0.10.80:
S 2286072538:2236672536(9)
3) 13:54:38.136190 IP
192.168.6.18.88
> 151.3B.31.246.55967:
S 1295163523:1295163523(8)
ack 2286672531
4)
62.121.13.119.80
> 151.38.31.246.55967:
S 1295163523:1295163523(0)
ack 2286072531
13:54:38.136208 IP
L'analisi viene effettuata sul gateway/firewall della rete locale: si suppone che 62.121.13.119 sia l'indirizzo IP pubblico con la quale naviga la rete locale e che 151.38.31.246 sia l'host remoto che effettua la connessione:
1) 151.38.31.246 contatta sulla porta 80 l'indirizzo IP pubblico della propria rete (figura 2). 2) a causa della regola di port (orwarding il sistema smista il pacchetto verso il web server interno 192.168.0.10. 3) il web server interno risponde al pacchetto utilizzando il suo gateway d'uscita di default.
4) il mascheramento della connessione permette la modifica dell'indirizzo IP mittente da 192.168.0.10 a 62.121.13.119 (cioè l'indirizzo IP pubblico). 151.38.31.246 può in questo modo essere raggiunto dal pacchetto e rispondere di conseguenza.
essere configurato in modo che effettui a sua volta port forwarding per le porte interessate verso l'interfaccia a lui direttamente visibile (ad esempio ethO) della Linux Box interna che agirà da gateway per tutta la rete.
Attivare il redirect delle porte nel modo che abbia mo appena detto è un processo che varia in base I
■
Inumai
alla marca ed al modello del router che si possiede, anche se, normalmente, questi apparati sono confi gurabili attraverso un pannello web: le voci interes
sate da ricercare, nella maggioranza dei casi, sono Port Forwarding, Virtual Server o semplicemente Port
192.166.C.10
Forward. Il router, quindi, praticherà port
forwarding verso il firewall Linux che, a sua volta, praticherà port forwarding verso le postazioni della server web è interno alia rete locale, e il client riesce a connettersi grazie al port forwarding
rete interna.
Ovvio che potete effettuare port forwarding anche direttamente dal router verso il server web, igno rando la presenza di una Linux Box con iptables: il
risultato sarà lo stesso, anche se perderete qualco connessioni da un'altra porta verso la 80 interna, in questo modo:
sa sia in flessibilità che nell'approccio didattico. Un altro esempio per chiarire le possibilità offerte dal port forwarding:
#
iptables
-t
--dport
8801
nat -j
-I
PREROUTING
DNAT
-p
tcp
--to-destination
-i
pppO
"192.168.B.2:86*
*
iptables
-t
nat
-I
PREROUTING -i
In questo caso il client, quindi, dovrà puntare il
-p eth9
tcp
-5
y.y.y.y
--dport
-to-destination
86B6
-j
DNAT
"192.168.8.2:443"
browser all'indirizzo http://a.b.c.d:8001
La richiesta, però, avverrà sempre sulla porta 80:
In questo caso solo l'host esterno "y.y.y.y" potrà
quindi il server web andrà configurato come di con
contattare la porta "8080" dell'interfaccia "ethO"
sueto e sarà compito dell'host che effettua NAT
della postazione Linux che funge da firewall. A quel
modificare le richieste affinchè risultino standard e
punto la connessione verrà rigirata alla porta "443"
non su una porta particolare.
del server "192.168.0.2". In questo caso l'indirizzo
Perché tutto funzioni a dovere è però necessario
IP pubblico non è acquisito dalla Linux Box. bensì da
che chi riceve la connessione da Internet provveda
un router ethernet che pratica, come detto in prece
alla giusta redirezione della connessione: quando è
denza, port forwarding verso l'interfaccia "ethO" del
la Linux Box ad ottenere l'indirizzo pubblico, con
firewall Linux.
l'interfaccia pppO ad esempio, non si verificano pro
La Linux Box naturalmente dovrà essere equipag
blemi di sorta.
giata con un'altra scheda di rete (ad esempio l'in
Ovviamente il sito web dovrà essere progettato
terfaccia ethl) il cui indirizzo IP sarà visibile a tutti i
secondo gli standard, in modo da far riferimento
client interni che avrà per gli stessi ruolo di
sempre ad uri relativi e non assoluti.
gateway di uscita.
Qualche difficoltà in più potrebbe sorgere quando il
Con quest'ultima regola abbiamo mostrato come
collegamento viene effettuato da un router ADSL: in
sia possibile praticare port forwarding in tutta sicu
questa particolare circostanza, per poter praticare
rezza, permettendo l'accesso ai servizi desiderati
correttamente port forwarding, tale router deve
solamente a specifici indirizzi IP.
~