La Rete
Configurazione di base della rete
File system distribuiti
La sicurezza della rete
Giuseppe Stanghellini - IGM - CNR - Bologna
La rete TCP/IP
Le rete che si basa su IP (internet protocol) è stata
sviluppata dall'esercito degli stati uniti con lo
scopo di creare una topologia di rete che fosse in
grado di sopravvivere ad eventuali attacchi.
IP è alla base di una struttura di protocollo a livelli,
ciascun livello di protocollo fornisce una funzione
particolare al livello superiore.
Insieme dei protocolli che si basano su IP
- IP
(Internet protocol)
- TCP
(Transmission control protocol)
- UDP
(User datagram protocol)
- ICMP
(Internet control message
protocol)
La rete TCP/IP
Lo stack di protocollo IP e i protocolli applicativi
La rete TCP/IP
L'header del pacchetto IP
- Il protocollo IP non è orientato alle connessioni, cioè
ciascun pacchetto è posto in rete ed inviato alla
destinazione senza verifica che vi sia realmente giunto.
- Nell'header del pacchetto si nota che gli indirizzi sono a 32
bit.
La rete TCP/IP
L'header del pacchetto TCP
- Il protocollo TCP è orientato alle connessioni, cioè sono
garantiti sia la consegna che il corretto ordine dei pacchetti
mediante l'uso di numeri sequenza e di conferme.
- Il protocollo TCP usa i numeri di porte per instradare i pacchetti
al processo corretto negli host di provenienza e destinazione.
La rete TCP/IP
Struttura della rete TCP/IP
- La rete TCP/IP è divisa in sottoreti, ognuna delle quali comunica
con le altre reti attraverso un dispositivo chiamato gateway.
- L'indirizzo di una macchina in rete è univoco ed è a 32 bit, ed è
rappresentato come una quaterna di numeri, ognuno dei quali può
essere assegnato nell'intervallo che va da 0 a 255, per esempio
'10.1.2.24'
- Una sottorete è definita con un quaterna di numeri che specificano
quale parte dell'indirizzo a 32 bit è statico e quale dinamico, per
esempio la quaterna 255.255.255.0 specifica che i primi tre numeri
dell'indirizzo delle macchine della rete sono statici e che il quarto è
invece modificabile; questa sottorete ha una disponibilità di 255
indirizzi diversi.
- Se per esempio avessimo Ipaddr=10.1.2.24, Netaddr=255.255.255.0
e tentassimo di comunicare con un IPaddr=10.2.2.123, allora il
sistema si renderebbe conto (tramite Netaddr e IPaddr) che il
numero chiamato è al di fuori della sottorete locale e instraderebbe
il pacchetto attraverso il gateway.
Configurazione di base della rete
Quindi per garantire il collegamento dobbiamo
configurare diversi parametri.
Parametri da configurare:
?
Numero IP (4 byte che identificano la macchina)
Netmask (4byte che identificano la rete locale)
Gateway (Dispositivo di rete che permette di uscire
dalla rete locale)
Nome host (Nome che identifica la macchina)
DNS (Host che trasla da Nome host a numero IP)
Configurazione di base della
rete
?
Configurazione di base della
rete
?
Configurazione di base della rete
?
Configurazione di base della rete
?
Ifconfig
Ifconfig
Route
Hostname
DNS (domain name system)
I servizi di rete
???
A questo punto, abbiamo configurato la rete
dal punto di vista del basso livello, cioè
abbiamo configurato la rete fino al livello di
trasporto.
Ora dobbiamo configurare i servizi, cioè
dobbiamo configurare il livello applicativo.
???
I servizi di rete
Cosa sono
- Sono quei programmi che ci consentono di
aprire sessioni telnet, ftp, web, nfs etc.
- I servizi che si vogliono fornire sono quindi
molti.
- Il numero IP invece è unico.
QUINDI
- Ogni connessione di rete avviene attraverso un
canale esclusivo (porta) che identifica in modo
univoco la connessione stessa.
- Vi sono porte dedicate a ben determinati
servizi; quelle fino a 1023 e alcune successive.
I servizi di rete
Il file /etc/services (corrispondenza porta/servizio)
I servizi di rete
Come sono implementati
-Vengono implementati tramite programmi
(demoni) che si pongono in ascolto su una
porta che gli viene assegnata.
-La modalità di esecuzione di tali programmi
puo' essere di due tipi:
1) Installazione permanente del
programma in memoria.
2) Esecuzione del programma su
richiesta del client (alla apertura
del
collegamento).
I servizi di rete
Modalità 'programma in memoria'
Unix e i runlevel
Unix e' caratterizzato da una modalità di
funzionamento definita 'runlevel', runlevel 1
per la modalita' 'single user', runlevel 3 per
quella multiutente e cosi' via ...
Ad ogni runlevel corrisponde una
configurazione dei servizi di rete che
vengono offerti (attivati o disattivati).
I servizi di rete
Impostazione e configurazione dei runlevel
I runlevel si impostano tramite il file di
configurazione:
/etc/inittab
La struttura di directory /etc/rc.d e' utilizzata
dal sistema per fare partire o fermare i
servizi nei relativi runlevel (rc0.d, rc1.d, rc2.d
etc.)
I servizi di rete
Impostazione del runlevel predefinito
I servizi di rete
Configurazione dei runlevel(GUI)
I servizi di rete
Configurazione dei runlevel
I servizi di rete
Modalidtà 'esecuzione alla richiesta'
- Si ottiene tramite un 'superservizio' in
grado di attivare i servizi alla richiesta di un
utilizzatore, si chiama Inetd e deve essere
avviato con la modalita' precedente (rcX.d).
- Ultimamente e' stato arricchito di una
nuova
sintassi e chiamato xinetd.
(extended inetd)
I servizi di rete
Configurazione di inetd (file /etc/inetd.conf)
I servizi di rete
Tcpd e i file /etc/hosts.*
- Tcpd è un contenitore (wrapper) che offre
delle capacità di logging e controllo degli
accessi.
- Viene eseguito prima del programma del
servizio.
- Intercetta tutto il traffico di rete da e verso il
servizio, effettuando su di esso dei controlli
che ne aumentano la sicurezza.
- Il controllo degli accessi avviene tramite i
file /etc/hosts.allow e /etc/hosts.deny.
I servizi di rete
Tcpd (come funziona)
- Tre regole molto semplici applicate in
cascata:
1) Se l'host è presente nel file hosts.allow la
connessione è accettata.
altrimenti
2) Se l'host è presente nel file hosts.deny la
connessione è rifiutata.
altrimenti
3) La connessione è accettata.
I servizi di rete
Configurazione di xinetd (come si fa)
-Xinted è caratterizzato da un file di
configurazione principale e da un file per
ogni servizio che puo' attivare ftp, telnet,
etc. (ma potrebbe anche essere un file
unico, TANTO PER COMPLICARCI LA VITA)
-Il principale è /etc/xinetd.conf
-Gli altri sono in /etc/xinetd.d/
I servizi di rete
Configurazione di xinetd (/etc/xinetd.conf)
I servizi di rete
Configurazione di xinetd (/etc/xinetd.d/)
I servizi di rete
Restart del servizio
-Tutte le volte che si cambia un file di
configurazione di un servizio, perchè i
cambiamenti abbiano luogo è in genere
necessario fare ripartire il servizio stesso.
Per farlo è sufficente utilizzare lo script
presente in /etc/init.d, per esempio:
/etc/init.d/xinetd restart
ma anche cambiamenti alla config. di rete:
/etc/init.d/network restart
File system distribuiti
NFS (network filesystem)
- Permette ad un host remoto di montare
partizioni di un sistema e di usare quelle
partizioni come se fossero filesystem locali.
- Correntemente ve ne sono due versioni, la 2 e
la 3. Linux usa la 3 quando è disponibile,
altrimenti prova con la 2.
- La versione 3 è più evoluta e fornisce il
supporto all'estensione LFS large file support
che permette anche ai sistemi a 32 bit di creare e
manipolare file più grandi di 2GB.
File system distribuiti
NFS (network filesystem)
- NFS 2 e NFS 3 sono entrambi implementati sul
contenitore tcpd, quindi anche loro utilizzano i
file /etc/hosts.allow e /etc/hosts.deny.
NFS 3 è meglio perchè:
- Ha LFS, importante perchè si sta parlando di un
filesystem distribuito, e quindi sistemi UNIX a 64
bit quali Solaris, Digital Unix, Irix etc, possono
montare tale filesystem e avere la capacità di
creare file più estesi di 2GB come per i loro
filesystem proprietari (xfs, ufs, avfs etc).
- NFS 3 gestisce meglio i problemi di rete.
File system distribuiti
Come funziona l'NFS
- NFS usa RPC (remote procedure call) per indirizzare le richieste
tra client e server.
- I processi che lavorano tramite RPC e che permettono ad NFS
di funzionare sono:
1) rpc.mountd: Accetta le richieste di 'mount' dai client.
2) rpc.nfsd: Implementa la parte utente della comunicazione
NFS, in sostanza monta il file system e ne permette
l'utilizzo
alla stregua di uno locale.
3) rpc.statd: Implementa il 'Network Status Monitor' (NSM),
utilizzato dal client alle inattese cadute del collegamento
NFS.
4) rpc.quotad: Gestisce le quote.
5) rpc.lockd: Gestisce i lock sui file (ma ora ci pensa il kernel
linux)
File system distribuiti (NFS)
Configurazione di NFS
Parte server:
1) Editare il file /etc/exports
2) Avviare (o riavviare) i servizi rpc.mountd e
rpc.nfsd (i due che sono strettamente
indispensabili al funzionamento di NFS)
Parte Client:
Montare i filesytem remoti tramite il comando
mount:
mount -t nfs hostname:/dir /dir_locale
E infine (se tutto va bene):
Inserire una riga di configurazione nel file
/etc/fstab
File system distribuiti (NFS)
La sicurezza della rete
L'errore
- Molti utenti ritengono che i loro sistemi non siano
appetibili agli hacker, questi stessi utenti sono
esattamente quelli che gli hacker attaccano.
- Qualsiasi macchina collegata in rete è appetibile,
anche solo per il fatto di costituire essa stessa un
nuovo punto di partenza per futuri attacchi.
- L'hacker ha come obiettivo primario guadagnare
accesso a quante più macchine gli è possibile.
MA SOPRATTUTTO
Molte volte trova la strada spianata e si diverte un
mondo.
La sicurezza della rete
Cosa fa l'hacker (1)
- Cambia i binari peculiari di unix allo scopo di
guadagnare informazioni sugli utenti e di
mantenersi celato (login, libc, etc.)
- Installa nuovo software allo scopo di
implementare servizi nascosti (chat-line, fserv
per scambio file, etc.)
- Utilizza la potenza di calcolo e la banda di rete
disponibile per tentare di guadagnare l'accesso
ad altre macchine.
La sicurezza della rete
Cosa fa l'hacker (2)
- Utilizza lo spazio disco per memorizzare i propri
file.
- Utilizza proprio software per monitorare la rete
(sniffing del traffico).
- Utilizza servizi locali per propri scopi
(spamming di posta etc.)
E ... (buon motivo per tenerlo fuori)
- Se vuole CANCELLA TUTTO.
La sicurezza della rete
Il buffer overflow
Cosa fa
Consente, a chi lo sfrutta, di eseguire codice
arbitrario con privilegi di root.
Come funziona
L'attacco avviene in generale sulle porte di rete
attraverso le quali è presente un servizio (ftp,
telnet, ssh etc.) che contiene un bug di overflow,
l'attaccante sostituisce il programma sotto attacco
con una shell, aprendo così a tutti gli effetti un
accesso con utente root.
La sicurezza della rete
Il Denial of service (Dos)
Cosa fa
Consiste nel tentativo da parte dell'attaccante di
impedire che un servizio sia disponibile agli utenti
che normalmente ne fanno utilizzo.
Come avviene (alcuni esempi)
- Syn Flood (esaurimento delle risorse di rete, con
conseguente blocco della rete della macchina
attaccata)
- Echo ICMP (saturazione della rete con messaggi
ICMP con conseguente blocco di tutta rete.)
La sicurezza della rete
I servizi critici
Storicamente i servizi più critici sono stati
sendmail, ftpd, sshd, telnetd.
In ogni caso è buona norma disabilitare tutti i
servizi che non servono, e se se ne può fare a
meno disabilitare anche ftpd e telnetd (con ssh si
fanno le stesse cose che con questi due servizi)
Come posso disabilitare i servizi ?
Come abbiamo visto precedentemente i servizi
vengono attivati tramite i tre principali meccanismi:
/etc/inittab, /etc/inetd.conf (xinted.d) e
/etc/rc.d/rcX.d. Basta rimuoverli ...
La sicurezza della rete
Usare ssh al posto di telnet:
>ssh
nome_utente@host
Usare scp al posto di ftp:
>scp
file_sorgente
utente@host:file_destinazione
Perchè ssh + scp sono più sicuri di ftp + telnet ?
-Utilizzano un solo servizio, e quindi sono
fisicamente meno vulnerabili.
-Le informazioni che si scambiano client e server
sono tutte criptate quindi non e' possibile
sniffarne le sessioni in modo intelligibile.
Il personal firewall
I dati che viaggiano in rete
-I dati inviati in rete sono spediti non come blocco
unico ma suddivisi in frammenti, chiamati
pacchetti. Ogni pacchetto è costituito da un
header che contiene provenienza, destinazione,
tipologia e altro, e dai dati veri e propri (body).
-Il kernel del computer di destinazione riassembla i
dati in modo da ricostruire il flusso originale.
-Il kernel è quindi in grado in via teorica di scartare
o respingere pacchetti in base alle informazioni
contenute nell'header o nel corpo dei dati.
Il personal firewall
Cosa è un firewall ?
Un firewall è un dispositivo di rete che instrada i
pacchetti verso altri dispositivi di rete, effettuando
su di essi un filtraggio secondo una logica
programmata.
In pratica è un router che fa passare solo ciò che si
vuole.
Cosa è un personal firewall
E' un firewall locale, incorporato nel kernel. Ai dati
è permesso passare attraverso il firewall solo se
soddisfano un insieme di regole (filtri), che
agiscono sulla base del tipo di pacchetto (telnet,
ssh, etc), e su indirizzi e porte di provenienza e
destinazione.
Il personal firewall
Come è implementato
In linux vi sono due principali implementazioni:
1) ipchains (kernel 2.2.x)
2) iptables (kernel 2.4.x)
Iptables è lo standard di oggi, ed è stato
completamente riscritto per avere maggiori
prestazioni e più chiarezza, noi esamineremo
quest'ultimo.
Nel kernel (parte netfilter) ci sono tre tabelle
chiamate catene: INPUT, OUTPUT e FORWARD,
quando il kernel riceve un pacchetto viene gestito
nella modalità seguente:
Il personal firewall
Come è implementato (2)
-All'arrivo del pacchetto, il kernel guarda a chi è destinato (fase di
routing), se e' per la macchina locale allora il pacchetto passa
all'esame della catena INPUT, se è per un'altra macchina sulla
rete e il forward è abilitato (nel kernel) passa all'esame della
catena FORWARD.
-Se un programma eseguito sulla macchina cerca di spedire un
pacchetto, questo pacchetto passa all'esame della catena
OUTPUT.
-Ogni catena è formata da una lista di regole, ogni regola è del
tipo: 'SE IL PACCHETTO E' COSI' ALLORA FAI QUESTO CON IL
PACCHETTO' dove QUESTO può essere: ACCEPT, DROP,
QUEUE, RETURN.
-Il kernel applica la prima regola della catena in esame e se non è
soddisfatta passa a quella successiva, una volta che le regole
sono esaurite applica la POLICY della catena (cioè la regola dei
pacchetti che non soddisfano nessuna regola).
-Per questo motivo la POLICY di ogni catena di regole del
FIREWALL dovrebbe essere impostata a DROP.
Il personal firewall
Implementiamone uno molto semplice
-La prima cosa da fare è impostare la POLICY in modo che
TUTTO CIO' CHE NON E' ESPRESSAMENTE ACCETTATO
VENGA RESPINTO
>/sbin/iptables -P INPUT DROP
E poi abilitare i protocolli da accettare (ssh,dns,pop etc.):
> /sbin/iptables -A INPUT -s 0/0 -d 10.1.2.24 -p tcp --dport ssh -j ACCEPT
> /sbin/iptables -A INPUT -s 0/0 -d 10.1.2.24 -p ... ...... ...... ...
> ..... ....
Ma si può fare anche di più, con i nuovi filtri sullo stato
della connessione (NEW, RELATED, ESTABLISHED), si può
abilitare in maniera flessibile la connessione verso
l'esterno, solo quando è originata dalla macchina locale.
L'intruso
Come accorgersi se un hacker ha preso possesso
della nostra workstation
- Un bravo hacker si nasconde molto bene.
- Gli hacker che entrano in un sistema in genere lo
perturbano perchè:
1) Si aprono delle backdoor
2) Utilizzano la banda di rete per i propri scopi
3) Utilizzano il filesystem locale per i propri scopi
4) Utilizzano la cpu locale per i propri scopi
QUINDI
Dobbiamo cercare nel filesystem, nella rete e controllare i
processi del sistema.
L'intruso
I cambiamenti nel filesystem
- Backdoor:
Per backdoor si intende una via secondaria di accesso al
sistema, che dovrebbe essere disponibile anche se la via
primaria utilizzata dall'hacker viene disabilitata:
- Cosa controllare:
1) Che non siano eseguiti all'avvio programmi che
implementano servizi che non conosciamo o servizi dal nome
sospetto.
2) Che i servizi che lanciamo (ftpd, sshd, telnetd, etc.) siano
REALMENTE quelli che vogliamo lanciare (cioè quelli forniti col
sistema e non quelli compilati dall'hacker)
- Come farlo:
Per tenere traccia dei cambiamenti effettuati al filesystem
esistono prodotti come tripwire, ma è sufficente fare dei
confronti con un backup o con una macchina con la stessa
installazione che non sia stata compromessa.
L'intruso
La banda di rete
-L'hacker utilizza la rete per guadagnare l'accesso
alle altre macchine ma per poterlo fare deve
impostare l'interfaccia di rete nella modalità
promiscua. Quando una scheda di rete è in
questa modalità, prende tutti i pacchetti che
circolano sulla rete come se fossero suoi
(ovviamente senza levarli dalla rete). In questo
modo l'hacker può leggere, ad esempio, le nostre
sessioni telnet, a cominciare dal login (è tutto in
chiaro a differenza di ssh).
-Quindi se troviamo che l'interfaccia della nostra
macchina è in modalità promiscua, è MOLTO
PROBABILE che essa sia stata compromessa.
L'intruso
La banda di rete (2)
-Per controllare la rete è necessario sniffare i pacchetti
della propria interfaccia di rete e verificare che tutto ciò
che passa è realmente roba nostra, è molto utile a questo
scopo installare TCPDUMP, ETHEREAL e NTOP.
-L'accoppiata TCPDUMP + ETHEREAL fornisce un buon
ambiente, con cui siamo in grado di ricostruire le sessioni
TCP e visualizzarle in modalità ascii (nel caso non siano
criptate).
LINK:
www.tcpdump.org
www.ethereal.org
L'intruso
Il carico della CPU
- Controllare il carico della CPU non è banale come sembra.
- I comandi top e ps in genere vengono modificati
dall'hacker per non tenere conto dei propri processi.
E ALLORA ?
Ci viene come al solito in aiuto il buon kernel linux, infatti
esso memorizza nel filesystem /proc una serie di file che
danno informazioni sul sistema, e tra i quali si trova
loadavg (load average):
Quindi da un confronto tra l'output di top e di cat
/proc/loadavg si può capire se eventuali processi nascosti
sono installati nel sistema, a patto che questi ultimi usino
abbastanza CPU.
L'intruso
E se scopro che la mia workstation è stata
compromessa cosa faccio ?
Reinstallo tutto !
(altro buon motivo per sforzarsi di rendere la
propria workstation più sicura)
Scarica

La presentazione in formato Powerpoint