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.
C'è una serie di buoni strumenti che aiutano con la sicurezza di rete, e un numero sempre maggiore viene incluso nelle distribuzioni Linux.
Uno dei modi più comuni con cui gli intrusi ottengono l'accesso a più sistemi della propria rete, è l'uso di uno sniffer di pacchetti su un host già compromesso. Questo "sniffer" semplicemente ascolta sulla porta Ethernet cose come passwd, login e su nel flusso dei pacchetti e quindi registra il traffico successivo. In questo modo chi lo usa ottiene le password di sistemi in cui non ha neppure tentato effrazioni. 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 account 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 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 di una rete).
Prima di mettere un sistema Linux su QUALSIASI rete la prima cosa da sapere è quali servizi si vogliono offrire. I servizi non desiderati devono essere disabilitati, così da avere una cosa in meno di cui preoccuparsi e un possibile buco in meno per un intruso.
Ci sono molti modi per disabilitare i servizi sotto Linux. Si può leggere il proprio /etc/inetd.conf e vedere quali servizi vengono offerti da inetd. Si possono disabilitare tutti quelli che non servono commentandoli (# all'inizio della linea) e mandando quindi un SIGHUP al processo inetd.
Si potrebbero rimuovere (o commentare) servizi nel proprio /etc/services. Questo ne impedirà l'uso anche da client locali (cioè se si rimuove ftp e si prova a connettersi con ftp ad un host remoto da quella macchina, si otterrà 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 dovrebbero essere disponibili sono:
ftp
telnet (o ssh)
posta, come pop-3 o imap
identd
Se si sa che non serve un particolare pacchetto si può anche cancellarlo del tutto. rpm -e nome_pacchetto nella distribuzione RedHat cancella un pacchetto intero. Nella Debian dpkg --remove fa lo stesso.
Inoltre, si dovrebbe davvero evitare che le utilità rsh/rlogin/rcp, inclusi login (usato da rlogin), shell (usato da rcp) ed exec (usato da rsh) siano avviate da /etc/inetd.conf. Questi protocolli sono molto insicuri e sono stati l'origine di exploit in passato.
Si dovrebbe 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 contenuti in /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 si vuole solo disabilitare un servizio per un particolare run level, si rinomini il giusto link simbolico sostituendo la S maiuscola con una s minuscola, così:
root# cd /etc/rc6.d root# mv S45dhcpd s45dhcpd |
Se si ha file rc in stile BSD, si controlli in /etc/rc* se ci sono programmi che non servono.
Con molte distribuzioni Linux viene distribuito un tcp_wrappers che "incapsula" tutti i 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 servizi TCP. Si dovrebbe creare un file /etc/hosts.allow e aggiungervi solo gli host che devono avere accesso ai servizi della macchina.
Se si ha una connessione telefonica casalinga suggeriamo di negarli TUTTI. Inoltre tcpd segna nei log i tentativi di accesso falliti, per avvertire se si è sotto attacco. Se si aggiungono nuovi servizi ci si deve assicurare di configurarli per usare tcp_wrappers se sono 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, si potrebbero aggiungere le linee seguenti al proprio /etc/hosts.allow:
ALL: 127.
E ovviamente /etc/hosts.deny dovrà contenere:
ALL: ALL
che bloccherà connessioni esterne alla macchina, ma permetterà la connessione a server su Internet.
Si ricordi che tcp_wrapper protegge solo i servizi eseguiti da inetd e pochi altri. Ci potrebbero benissimo essere altri servizi in esecuzione sulla macchina. Si può usare netstat -ta per avere una lista di tutti i servizi offerti.
Tenere aggiornate le informazioni dei DNS su tutti gli host della rete aiuta ad aumentare la sicurezza. Se un host non autorizzato si connette alla rete, lo si può riconoscere dalla sua assenza dal DNS. Molti servizi possono essere configurati per negare l'accesso ad host che non hanno valide voci DNS.
identd è un piccolo programma che in genere è eseguito dal vostro inetd. Tiene nota di quale utente sta eseguendo quale servizio TCP e quindi fa rapporto a chi lo richiede.
Molte persone fraintendono l'utilità di identd, quindi lo disabilitano o bloccano tutte le richieste provenienti dall'esterno. identd non è al servizio di siti remoti. Non c'è modo di sapere se i dati che si ricevono da un identd remoto siano corretti o no. Non c'è autenticazione nelle richieste identd.
Perché eseguirlo allora? Perché aiuta ed è un'informazione in più quando si indaga. Se il proprio identd è integro, allora si saprà che fornisce ai siti esterni, il nome utente o l'uid di chi sta usando i servizi TCP. Se l'amministratore di una rete remota riporta che un certo utente ha provato ad intromettersi nella sua rete, si potranno facilmente prendere provvedimenti. Se non si sta eseguendo identd, si dovranno leggere righe e righe di log, capire chi era nel sistema alla tal ora e in generale sprecare molto tempo a trovarlo.
L' identd che viene fornito con molte distribuzioni è più configurabile di quanto molti pensino. Lo si può disabilitare per utenti specifici, (possono creare un file .noident) si possono avere i log di tutte le richieste identd (è raccomandato) e si può persino far sì che identd risponda con l'uid di un utente o persino con NO-USER.
Il server di posta Postfix è stato scritto da Wietse Venema, autore di Postfix e di alcuni altri prodotti relativi alla sicurezza per Internet, come un "tentativo di fornire un'alternativa all'ampiamente usato Sendmail. Postfix si propone di essere veloce, facile da amministrare e, si spera, sicuro, cercando di essere allo stesso tempo sufficientemente compatibile con Sendmail da non sconvolgere gli utenti."
Si possono trovare ulteriori informazioni su Postfix presso il sito: Postfix e in Configurare e rendere sicuro Postfix.
C'è una serie di differenti pacchetti software che fanno scansioni di porte e servizi di macchine o reti intere. SATAN, ISS, SAINT e Nessus sono alcuni dei più conosciuti. Questi software si connettono con la macchina bersaglio (o tutte le macchine bersaglio su di una rete) su tutte le porte possibili e tentano di capire quale servizio è attivo. Basandosi su queste informazioni, si può dire 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 di una macchina o una rete. È una buona idea usare SATAN sulla rete e sistemare i problemi che trova. Ci si assicuri di avere la copia di SATAN da metalab http://metalab.unc.edu/pub/packages/security/Satan-for-Linux/ 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. Si noti che SATAN non è aggiornato da molto tempo ed alcuni degli altri strumenti indicati sotto potrebbero dare 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. Si guardi alla sua 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. Se ne può sapere 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, si dia un'occhiata a: http://www.nessus.org
Esistono strumenti progettati per avvisare di scansioni da parte di SATAN, ISS ed altri software. Comunque se si usa molto tcp_wrapper, e si leggono spesso i log, si dovrebbero notare certe scansioni. Anche con la configurazione minima, SATAN lascia tracce nei log di un sistema RedHat "di serie".
Esistono anche port scanner "invisibili". Un pacchetto con il bit TCP ACK attivo (come si fa per le connessioni stabilite) probabilmente attraverserebbe un firewall che filtri i pacchetti. Il pacchetto RST in risposta da una porta che _non ha sessioni attive_ viene preso come una prova di vita su quella porta. Non penso che i wrapper TCP lo rilevino.
Si può anche provare SNORT che è un IDS (Sistema di Rilevazione delle Intrusioni) libero che può rilevare molte intrusioni. http://www.snort.org
Uno dei servizi più importanti che si può offrire è 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 si sta usando sendmail è molto importante tenerlo aggiornato. sendmail ha una lunga, lunga storia di exploit di sicurezza. Ci si assicuri di eseguire sempre l'ultima versione da: http://www.sendmail.org.
Si tenga a mente che per spedire la posta non è necessario che sendmail sia in esecuzione. Se si è un utente casalingo, si può disabilitare completamente sendmail e usare il proprio client di posta per spedire. Si potrebbe anche rimuovere l'opzione "-bd" dal file di avvio di sendmail, disabilitando le richieste di posta in arrivo. In altre parole, potete eseguire sendmail dal vostro script di avvio, usando il seguente comando:
# /usr/lib/sendmail -q15m |
Molti amministratori preferiscono non usare sendmail e scelgono invece uno degli altri MTA. Si potrebbe considerare di passare a qmail. qmail è stato progettato da zero tenendo a mente la sicurezza. È veloce, stabile e sicuro. Si trova presso: http://www.qmail.org
In competizione con qmail si pone "postfix", scritto da Wietse Venema, l'autore di tcp_wrappers e altri strumenti di sicurezza. Precedentemente chiamato vmailer e sponsorizzato da IBM, anche questo è un MTA fatto da zero per la sicurezza. Si possono trovare 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. Si noti però che ne nascono in continuazione, quindi questi sono solo esempi. Si leggano le liste di sicurezza di Linux e le liste di bugtraq per informazioni aggiornate.
SYN Flooding - Il SYN flooding è un attacco DoS di rete. Sfrutta un buco nel modo in cui sono create le connessioni TCP. Gli ultimi kernel di Linux (2.0.30 e seguenti) hanno diverse opzioni configurabili per evitare che attacchi del genere neghino l'accesso alle macchine. Si veda la Sezione 7 a proposito delle opzioni adeguate.
Il Bug "F00F" nei Pentium - Si è scoperto recentemente che una serie di codici assembly mandati ad un Pentium Intel originale potrebbero riavviare la macchina. Questo bug affligge tutte le macchine Pentium (non i cloni, i Pentium Pro o i PII), a prescindere dal sistema operativo. I kernel Linux 2.0.32 e successivi contengono un rimedio che impedisce alla macchina di bloccarsi. Il kernel 2.0.33 ha una versione migliore rispetto al 2.0.32. Se usate un Pentium, aggiornate subito il kernel!
Ping Flooding - Il ping flooding ("Inondazione di ping") è un attacco DoS basato sulla forza bruta. L'aggressore invia una enormità di pacchetti ICMP alla macchina. Se lo fa da un host con un'ampiezza di banda maggiore rispetto alla rete aggredita, la macchina non potrà mandare niente sulla rete. Un variazione di questo attacco, chiamato "smurfing", manda ad un terzo host pacchetti ICMP con l'indirizzo IP della macchina da attaccare permettendo una quasi anonimità. Si possono trovare altre informazioni circa lo "smurf" presso http://www.quadrunner.com/~chuegen/smurf.txt
Se si viene attaccati in questo modo, si usi uno strumento come tcpdump per determinare da dove provengono i pacchetti (o da dove sembrano venire), quindi si contatti il proprio provider con queste informazioni. I ping flood possono essere fermati facilmente a livello router o usando un firewall.
Ping della Morte - Il Ping della Morte manda pacchetti ICMP ECHO REQUEST che sono troppo grandi per entrare nelle strutture dati del kernel che li dovrebbero contenere. Poiché mandare un solo grande ping (65,510 byte) causa il blocco o il crash di molti sistemi, questo problema fu subito soprannominato "Ping della Morte". Il fatto è stato risolto da tempo e non è più preoccupante.
Teardrop / New Tear - Uno dei più recenti exploit coinvolge un bug presente nel codice di frammentazione IP sulle piattaforme Linux e Windows. È stato risolto nel kernel 2.0.33 e non richiede la selezione di alcuna opzione di compilazione. Linux non sembra essere vulnerabile al nuovo exploit "newtear".
NFS è un protocollo di condivisione di file molto diffuso. Permette a server che eseguano nfsd e mountd di esportare interi filesystem verso altre macchine che usano il file system NFS nel loro kernel (o qualche altro client di supporto 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. Si può far mappare a nfsd l'utente root remoto (uid=0) sull'utente nobody negando l'accesso totale ai file 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 si deve usare NFS, ci si assicuri di esportare solo verso quelle macchine che lo richiedono. Non si esporti mai la propria intera directory root; si esporti solo il necessario.
Si legga lo NFS HOWTO per ulteriori informazioni su NFS, disponibile presso http://metalab.unc.edu/mdw/HOWTO/NFS-HOWTO.html
Network Information service (ex YP) è 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 file /etc/passwd). Questo permette agli utenti di cambiare la loro password una volta per tutte le macchine nel dominio NIS.
NIS non è affatto sicuro. Non ha mai voluto esserlo. Doveva solo essere comodo ed utile. Chiunque possa indovinare il nome del dominio NIS (ovunque sia nella rete) può ottenere una copia del file delle password ed usare Crack o John the Ripper contro le password degli utenti. Se si deve usare NIS si faccia attenzione ai pericoli cui si va incontro.
Esiste un sostituto molto sicuro di NIS, chiamato NIS+. Si 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 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, permettono di cambiare al volo i tipi di traffico di rete permessi. Si possono anche registrare specifici tipi di traffico di rete.
I firewall sono un'utilissima ed importante tecnica per la sicurezza di rete. Comunque, non pensare mai che solo perché si ha un firewall non sia necessaria la sicurezza delle macchine che copre. Sarebbe un errore fatale. Si veda 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 possono trovare altre informazioni anche nell'IP-Masquerade mini-howto: http://metalab.unc.edu/mdw/HOWTO/mini/IP-Masquerade.html
Altre informazioni su ipfwadm (lo strumento che permette di cambiare le impostazioni del firewall) si trovano presso: http://www.xos.nl/linux/ipfwadm/
Se non si ha esperienza con i firewall e si vuole costruirne per un piano di sicurezza che non sia superficiale, il libro Firewalls di O'Reilly and Associates o qualche altro documento online sui firewall sono letture obbligatorie. Si troveranno 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. Lo si può trovare presso: http://csrc.nist.gov/nistpubs/800-10/main.html. Interessante anche:
Il progetto Freefire -- una lista di strumenti firewall liberi, disponibili presso http://sites.inka.de/sites/lina/freefire-l/index_en.html
SunWorld Firewall Design -- scritto dagli autori del libro della O'Reilly, dà una introduzione di base ai differenti tipi di firewall. È disponibile presso http://www.sunworld.com/swol-01-1996/swol-01-firewall.html
Mason - il costruttore automatico di firewall per Linux. È uno script di firewall che impara cosa vi serve mentre lo fate. Altre informazioni presso: http://www.pobox.com/~wstearns/mason/
IP Chains è un aggiornamento del codice di firewalling dal kernel 2.0 al 2.2. Ha molte più caratteristiche delle versioni precedenti, inclusi:
Manipolazioni dei pacchetti più flessibile.
Accounting più complesso.
Semplici e istantanei cambiamenti di impostazioni
I frammenti possono essere esplicitamente bloccati, rifiutati ecc.
I pacchetti sospetti vengono segnati in un log.
Può gestire protocolli non ICMP/TCP/UDP.
Se si sta usando ipfwadm con il kernel 2.0, sono disponibili degli script per convertire il formato di ipfwadm nel formato che usa ipchains.
Ci si assicuri di leggere l'IP Chains HOWTO per altre informazioni. È disponibile presso http://www.adelaide.net.au/~rustcorp/ipfwchains/ipfwchains.html
Sempre nell'ottica di migliorare il codice di filtraggio dei pacchetti IP, netfilter permette di costruire, mantenere e controllare le regole di firewalling nel nuovo kernel 2.4.
Il sottosistema netfilter è una riscrittura completa dell'implementazione precedente di ipchains e ipfwadm. Mette a disposizione un gran numero di miglioramenti, ed è diventato la soluzione più robusta per la protezione di reti aziendali.
iptables |
Netfilter fornisce una struttura grezza per manipolare i pacchetti mentre attraversano le varie parti del kernel. Parte di questa include il supporto per il masquerading, il filtraggio standard dei pacchetti e un più completo sistema di traduzione degli indirizzi di rete. Include perfino un supporto migliorato per le richieste di bilanciamento del carico di rete, per uno specifico servizio, all'interno di un gruppo di server dietro il firewall.
Le caratteristiche di controllo dello stato sono particolarmente potenti. Il controllo dello stato permette di rintracciare e controllare il flusso di dati che passa il filtro. La capacità di tenere traccia delle informazioni sullo stato di una sessione, rende le regole più semplici e prova ad interpretare i protocolli di più alto livello.
In più, si possono sviluppare piccoli moduli allo scopo di effettuare funzioni specifiche supplementari, come passare i pacchetti da elaborare ai programmi in spazio utente e poi re-inserirli nel normale flusso di pacchetti. La possibilità di sviluppare questi programmi a livello utente riduce la complessità che precedentemente era associata al dover fare cambiamenti direttamente a livello del kernel.
Altri riferimenti a IP Tables:
Il tutorial di Oskar Andreasson su IP Tables -- Oskar Andreasson parla con LinuxSecurity.com del suo esauriente tutorial su IP Tables e di come può essere usato per costruire un robusto firewall per la propria organizzazione.
Hal Burgiss presenta le guide rapide sulla sicurezza di Linux -- Hal Burgiss ha scritto due autorevoli guide su come rendere sicuro Linux, compresa la gestione dei firewall.
Il sito di Netfilter -- Il sito di netfilter/iptables.
La maturazione dei firewall nel kernel Linux 2.4: netfilter -- Questo articolo di LinuxSecurity.com presenta le basi del filtraggio dei pacchetti, come iniziare con iptables, e una lista di nuove funzioni disponibili nell'ultima generazione di firewall per Linux.
Le VPN sono un modo per stabilire una rete "virtuale" su una rete esistente. Questa rete virtuale è spesso crittografata e accetta il traffico solo verso e da entità conosciute. Le VPN sono spesso usate per connettere attraverso Internet qualcuno che lavora da casa ad un rete interna di una organizzazione.
Se si esegue un firewall/masquerading con Linux e si devono passare pacchetti di MS PPTP (un prodotto VPN punto-a-punto della Microsoft), c'è una patch per il kernel di Linux fatta apposta. Si veda: ip-masq-vpn.
Esistono diverse soluzioni VPN per Linux:
vpnd. Si veda http://sunsite.dk/vpnd/.
Free S/Wan, disponibile presso http://www.xs4all.nl/~freeswan/
ssh può essere usato per costruire una VPN. Si veda il VPN mini-howto per altre informazioni.
vps (virtual private server) presso http://www.strongcrypto.com.
yawipin presso http://yavipin.sourceforge.net
Si veda anche la sezione su IPSEC per altre bibliografie e informazioni.