La sicurezza di rete diventa sempre più importante perché il tempo di connessione ad Internet è sempre maggiore. Compromettere la sicurezza di rete è spesso molto più facile che compromettere la sicurezza fisica o locale ed è anche molto più comune.
Esiste una serie di buoni strumenti per aiutare nella sicurezza di rete e molti nuovi vengono inclusi nelle distribuzioni Linux.
Uno dei modi più comuni con cui gli intrusori entrano in molti sistemi
della vostra rete è l'uso di uno sniffer di pacchetti su un host già
compromesso. Questo "sniffer" aspetta sulla porta Ethernet dati come passwd
, login
e su
nel flusso dei dati e quindi registra il
traffico successivo. In questo modo chi lo usa ottiene le password di sistemi
a cui non hanno neppure tentato un attacco. Le password in chiaro sono molto
vulnerabili a questo tipo di attacco.
Esempio: L'host A è stato compromesso. L'attaccante installa uno sniffer.
Lo sniffer intercetta l'amministratore mentre fa un login dall'host B al C.
Ottiene la password personale dell'amministratore. Poi, l'amministratore usa
su
per risolvere un problema. Ora si conosce anche la password di root
per l'host B. Più tardi l'amministratore lascia che dal suo acconto
qualcuno usi telnet per connettersi all'host Z. Ora l'attaccante ha il login e
la password per l'host Z.
Oggi l'attaccante non ha neanche più bisogno di compromettere un sistema per usare questa tecnica: potrebbe semplicemente portare un portatile o un PC nell'edificio e connettersi alla vostra rete.
Usare ssh
o altri metodi di crittografia delle password blocca questo
attacco. Anche cose come APOP per gli account POP lo impediscono (I normali
login POP sono molto vulnerabili a questo attacco, come ogni cosa che mandi
password in chiaro su una rete).
Prima di mettere un sistema Linux su QUALSIASI
rete la prima cosa da
sapere è quali servizi volete offrire. I servizi che non volete devono
essere disabilitati, così da avere una cosa in meno di cui preoccuparsi
e un possibile buco in meno per un intrusore.
Ci sono molti modi per disabilitare i servizi sotto Linux. Potete leggere il
vostro /etc/inetd.conf
e vedere quali servizi vengono offerti dal
vostro inetd
. Potete disabilitare tutti quelli che non vi servono
commentandoli (#
all'inizio della linea), e quindi mandando al
processo inetd un SIGHUP.
Potreste rimuovere (o commentare) servizi nel vostro /etc/services
.
Questo impedirà l'uso del servizio anche da client locali (cioè
se rimuovete ftp
e provate a connettervi con ftp ad un host remoto
da quella macchina otterrete solo un messaggio di "servizio sconosciuto").
In genere il gioco non vale la candela, visto che non dà ulteriori
garanzie. Se qualcuno volesse usare ftp
anche se l'avete commentato,
potrebbe farsi un proprio client che usi la porta FTP e funzionerebbe benone.
Alcuni servizi che dovreste lasciare disponibili sono:
ftp
telnet
(o ssh
)pop-3
o imap
identd
Se sapete che non vi serve un pacchetto potete anche cancellarlo del tutto.
rpm -e nome_pacchetto
nella distribuzione RedHat cancella
un pacchetto intero. Nella Debian dpkg --remove
fa lo stesso.
Inoltre, dovreste davvero evitare che le utility rsh/rlogin/rcp, inclusi
login (usato da rlogin
), shell (usato da rcp
) ed exec (usato
da rsh
) siano eseguite da /etc/inetd.conf
.
Questi protocolli sono molto insicuri e sono stati l'origine di exploit in
passato.
Dovreste controllare /etc/rc.d/rc[0-9].d
(sulla Red Hat;
/etc/rc[0-9].d
sulla Debian), e vedere se vengono avviati server che
non sono necessari. I file in quelle directory sono link simbolici ai file
nella directory /etc/rc.d/init.d
(sulla Red Hat; /etc/init.d
sulla Debian). Rinominare i file nella directory init.d
blocca tutti
i link simbolici che puntano a quel file. Se volete solo disabilitare un
servizio per un particolare runlevel, rinominate il giusto link simbolico
sostituendo la S
maiuscola con una minuscola, così:
root# cd /etc/rc6.d
root# mv S45dhcpd s45dhcpd
Se avete file rc rc
in stile BSD, controllate in /etc/rc*
se ci sono programmi che non servono.
Con molte distribuzioni Linux viene distribuito un tcp_wrapper che "incapsula"
tutti i vostri servizi TCP. Un tcp_wrapper(tcpd
) viene invocato da
inetd
al posto del vero server. Quindi tcpd
controlla
l'host che sta richiedendo il servizio ed esegue il server o nega l'accesso
all'host.tcpd
permette di bloccare l'accesso ai vostri servizi TCP.
dovreste creare un file /etc/hosts.allow
e aggiungervi solo gli host
che devono avere accesso ai servizi della macchina.
Se avete una connessione telefonica casalinga dovreste negarli TUTTI. Inoltre
tcpd
segna nei log i tentativi falliti di accedere ai servizi, per
avvertirvi se siete sotto attacco. Se aggiungete nuovi servizi dovreste
configurarli per usare i tcp_wrapper se usano TCP. Per esempio, un normale
utente telefonico può impedire ad altri di connettersi alla propria
macchina, conservando l'accesso alla posta e ad Internet. Per farlo, potreste
aggiungere le linee seguenti al vostro /etc/hosts.allow
:
ALL: 127.
E ovviamente /etc/hosts.deny dovrebbe contenere:
ALL: ALL
che bloccherà connessioni esterne alla macchina, ma permetterà la connessione a server su Internet.
Ricordatevi che i tcp_wrapper proteggono solo i servizi eseguiti da inetd
,
e pochi altri. Ci potrebbero benissimo essere altri servizi in esecuzione sulla
vostra macchina. Potete usare netstat -ta
per avere una lista di tutti
i servizi offerti dalla vostra macchina.
Tenere aggiornate le informazioni dei DNS su tutti gli host della vostra rete aiuta ad aumentare la sicurezza. Se un host non autorizzato si connette alla rete, potete riconoscerlo dalla sua mancata presenza sul DNS. Molti servizi possono essere configurati per negare l'accesso ad host che non sono elencati dal DNS.
identd
identd
è un piccolo programma che in genere è eseguito
dal vostro inetd
. Tiene nota di quale utente sta usando quale servizio
e quindi fa rapporto a chi lo richiede.
Molte persone non capiscono l'utilità di identd
e quindi lo
disabilitano o bloccano tutte le richieste provenienti dall'esterno. identd
non è al servizio di siti remoti. Non c'è modo di saper se i dati
che ricevete da un identd
remoto siano corretti o no. Non c'è
autenticazione nelle richieste ad identd
.
Perché eseguirlo allora? Perché aiuta voi, ed è
un'informazione in più quando indagate. Se il vostro identd
è integro, sapete che rivela ad altri l'user-name o l'uid di chi usa
servizi TCP. Se l'amministratore di una rete remota viene a dire che un certo
utente ha provato ad intromettersi nella sua rete, potrete facilmente prendere
provvedimenti contro l'utente. Se non aveste eseguito identd
, avreste
dovuto leggere log su log, capire chi era nel sistema alla tal ora e in
generale sprecare molto tempo a trovare l'utente.
L'identd
distribuito con molte distribuzioni si può configurare
più di quanto molti pensino. Potete disabilitarlo per utenti specifici,
(con un file .noident
), potete avere i log di tutte le richieste a
identd
(È raccomandato), potete persino far sì che
identd risponda con l'uid di un utente o persino con NO-USER.
C'è una serie di differenti pacchetti software che fanno scansioni di porte e servizi su macchine o reti intere. SATAN, ISS, SAINT e Nessus sono alcuni dei più conosciuti. Questo software si connette con la macchina bersaglio (o tutte le macchine bersaglio su una rete) su tutte le porte possibili e tentano di capire che servizio è attivo. Basandosi su queste informazioni si capisce se la macchina è vulnerabile ad un particolare exploit.
SATAN (Security Administrator's Tool for Analyzing Networks) è un port scanner con un'interfaccia web. Può essere configurato per eseguire controlli leggeri, medi o pesanti su una macchina o una rete. È una buona idea usare SATAN sulla vostra rete e sistemare i problemi che trova. Assicuratevi di avere la copia di SATAN da metalab o da un sito FTP o web affidabile. È stata distribuita in rete una copia trojan di SATAN. http://www.trouble.org/~zen/satan/satan.html. Notate che SATAN non è stato aggiornato da molto tempo, ed altri strumenti potrebbero avere risultati migliori.
ISS (Internet Security Scanner) è un altro port scanner. È più veloce di Satan, quindi potrebbe essere migliore per grandi reti. Comunque Satan in genere fornisce più informazioni.
Abacus è una suite di strumenti che fornisce sicurezza agli host e rilevamento delle intrusioni. Leggete la home page sul web per ulteriori informazioni. http://www.psionic.com/abacus/
SAINT è una versione aggiornata di SATAN. È basata sul web ed ha molti più test aggiornati di SATAN. Potete saperne di più presso: http://www.wwdsi.com/~saint
Nessus è uno scanner di sicurezza libero. Ha una interfaccia grafica GTK per semplicità d'uso. Inoltre è basato su una struttura a plug-in per aggiungere nuovi test. Per ulteriori informazioni, date un'occhiata a: http://www.nessus.org
Esistono strumenti progettati per avvisarvi di scansioni da parte di SATAN, ISS ed altri software di scansione. Comunque se usate molto i tcp_wrapper e leggete spesso i vostri log dovreste notare certe scansioni. Anche al settaggio inferiore SATAN lascia tracce nei log di un sistema RedHat "di serie".
Esistono anche port scanner "silenziosi". Un pacchetto con il bit TCP ACK attivo (come si fa per le connessioni stabilite) probabilmente passerebbe un firewall che filtri i pacchetti. Il pacchetto RST in risposta da una porta che _non aveva comunicazioni in corso_ viene preso come una prova di vita su quella porta. Non penso che i tcp_wrapper lo rilevino.
sendmail
, qmail
e MTA (Agenti di Trasporto di Posta)
Uno dei servizi più importanti che potete fornire è il server di posta. Sfortunatamente, è anche uno dei più vulnerabili agli attacchi, a causa del numero di compiti che esegue e dei privilegi che di solito richiede.
Se state usando sendmail
è molto importante tenerlo aggiornato.sendmail
ha una lunga, lunga storia di exploit di sicurezza.
Assicuratevi di eseguire sempre l'ultima versione da:
http://www.sendmail.org.
Ricordatevi che sendmail non deve per forza essere in esecuzione per spedire posta. Se siete un utente casalingo potete disabilitare del tutto sendmail e usare semplicemente il vostro client di posta per spedire. Potreste anche togliere l'opzione "-bd" da file di avvio di sendmail, disabilitando l'arrivo di richieste di posta. In altre parole, potete eseguire sendmail dal vostro script di avvio usando il seguente comando:
# /usr/lib/sendmail -q15m
In questo modo sendmail riprocesserà ogni 15 minuti i messaggi nella
coda di stampa che non erano stati precedentemente consegnati.
Molti amministratori non usano sendmail, e al suo posto scelgono uno degli
altri MTA. Potreste passare a qmail
.qmail
è stato
progettato da zero tenendo a mente la sicurezza. È veloce, stabile e
sicuro. Qmail si trova presso
http://www.qmail.org
In diretta competizione con qmail si pone "postfix", scritto da Wietse Venema, l'autore di tcp_wrapper ed altri strumenti di sicurezza. Precedentemente intitolato vmailer, e sponsorizzato da IBM, anche questo è un MTA fatto da zero per la sicurezza. Troverete altre informazioni su postfix presso http://www.postfix.org
Un "Denial of Service" (DoS) è un attacco con cui un aggressore tenta di rendere una risorsa troppo occupata per rispondere a richieste legittime o di negare a utenti legittimi l'accesso ad una macchina.
Questi attacchi sono molto aumentati negli ultimi anni. Sotto sono elencati alcuni dei più comuni o recenti. Notate però che ne nascono in continuazione, quindi questi sono solo esempi. Leggete le liste di sicurezza di Linux e le liste di bugtraq per informazioni aggiornate.
Se venite attaccati in questo modo, usate uno strumento come tcpdump
per determinare da dove provengono i pacchetti (o da dove sembrano venire),
quindi contattate il vostro provider con queste informazioni. I ping flood
possono essere fermati facilmente all'altezza del router o usando un firewall.
NFS è un protocollo di condivisione di file molto diffuso. Permette a
server che eseguano nfsd
e mountd
di "esportare" interi
filesystem verso altre macchine usando il supporto per il filesystem NFS compilato
nel kernel (o qualche altro client se non sono macchine Linux).
mountd
tiene traccia dei filesystem montati in /etc/mtab
,
e li mostra con showmount
.
Molti siti usano NFS per fornire le home directory agli utenti di modo che abbiano i loro file da qualunque macchina si colleghino.
È possibile avere un po' di sicurezza quando si esportano filesystem.
Potete far mappare a nfsd
l'utente root remoto (uid=0) sull'utente
nobody
, negando l'accesso totale ai filesystem esportati. Comunque,
visto che i singoli utenti hanno accesso ai propri file (o almeno a quelli con
la stessa uid), l'utente root remoto può fare un login o su con il
loro account ed avere accesso totale ai loro file. Questo è solo un
piccolo ostacolo per un aggressore che ha i privilegi per montare i filesystem
remoti.
Se dovete usare NFS, assicuratevi di esportare solo verso quelle macchine che lo richiedono. Non esportate mai la vostra intera directory root; esportate solo il necessario.
Leggete il NFS HOWTO per ulteriori informazioni su NFS, disponibile presso http://metalab.unc.edu/mdw/HOWTO/NFS-HOWTO.html
Network Information service (servizio di informazione di rete) è un modo
di distribuire informazioni ad un gruppo di macchine. Il master NIS tiene le
tabelle di informazioni e le converte in file mappa di NIS. Queste mappe vengono
distribuite nella rete, permettendo ai client di ottenere informazioni di
login, password, home directory e shell (tutte le informazioni che in genere
stanno in un normale /etc/passwd
). Questo permette agli utenti di
cambiare la loro password una volta per tutte le macchine sul dominio NIS.
NIS non è affatto sicuro. Non ha mai voluto esserlo. Doveva solo essere comodo ed utile. Chiunque possa indovinare il nome del vostro dominio NIS (ovunque sia nella rete) può ottenere una copia del file delle password ed usare Crack o John the Ripper contro le password. Se dovete usare NIS siate consapevoli dei pericoli.
Esiste un sostituto molto sicuro di NIS, chiamato NIS+. Controllate il NIS HOWTO: http://metalab.unc.edu/mdw/HOWTO/NIS-HOWTO.html
I Firewall sono un mezzo per controllare quali informazioni vengono lasciate entrare ed uscire dalla vostra rete locale. Tipicamente l'host firewall è connesso ad Internet e alla LAN locale, ed è l'unico accesso ad Internet dalla LAN; in questo modo controlla cosa entra ed esce.
Ci sono molti tipi di firewall e metodi di impostarli. Le macchine Linux sono
ottimi firewall. Il codice del firewall può essere compilato all'interno
dei kernel 2.0 e superiori. Gli strumenti utente ipfwadm
per i kernel
2.0 e ipchains
per i kernel 2.2, vi permettono di cambiare al volo i
tipi di traffico di rete permessi.
I firewall sono un'utilissima ed importante tecnica per la sicurezza di rete.
Comunque, non pensate mai che solo perché avete un firewall non
sia necessaria la sicurezza delle macchine che copre. Sarebbe un errore fatale.
Controllate l'ottimo Firewall-HOWTO
presso l'archivio metalab per
avere più informazioni sui firewall e Linux.
http://metalab.unc.edu/mdw/HOWTO/Firewall-HOWTO.html
Si trovano altre informazioni anche nell'IP-Masquerade mini-howto: http://metalab.unc.edu/mdw/HOWTO/mini/IP-Masquerade.html
Altre informazioni su ipfwadm
(lo strumento per cambiare impostazioni
al firewall) si trovano presso:
http://www.xos.nl/linux/ipfwadm/
Se non avete esperienza con i firewall e volete metterne su uno per un piano di sicurezza che non sia superficiale, leggere "Firewalls" di O'Reilly and Associates o qualche altro documento online sui firewall è obbligatorio. Troverete altre informazioni su http://www.ora.com. Il National Institute of Standards and Technology (Istituto Nazionale degli Standard e della Tecnologia) ha scritto un eccellente documento sui firewall. Anche se datato 1995, è sempre abbastanza buono. Potete trovarlo anche http://csrc.nist.gov/nistpubs/800-10/main.html.
IP Firewalling Chains è un aggiornamento dal codice di firewalling del kernel 2.0 al 2.2. Ha molte più caratteristiche delle versioni precedenti, inclusi:
Se state usando ipfwadm
con il vostro kernel 2.0, sono disponibili
degli script per convertire il formato di ipfwadm
nel formato che usa
ipchains
.
Assicuratevi di leggere l'IP Chains HOWTO per altre informazioni. È disponibile presso http://www.rustcorp.com/linux/ipchains/HOWTO.html
Le VPN sono un modo per stabilire una rete "virtuale" su una rete esistente. Questa rete virtuale è spesso crittata e passa il traffico solo a e da entità conosciute. Le VPN sono spesso usate per connettere attraverso Internet qualcuno che lavora a casa a un rete interna di una compagnia.
Se eseguite un firewall/masquerading con Linux dovete passare pacchetti di MS PPTP (un prodotto VPN punto-a-punto della Microsoft), c'è una patch per il kernel di Linux fatta apposta. Leggete: ip-masq-vpn.
Esistono diverse soluzioni VPN per Linux:
Controllate anche la sezione su IPSEC per altre bibliografie e informazioni.