Questa è una descrizione delle opzioni del kernel che riguardano la sicurezza, e una spiegazione di ciò che fanno e di come si usano.
Visto che il kernel controlla il networking del computer, è importante che sia molto sicuro e non venga compromesso. Per evitare alcuni dei recenti attacchi via rete si dovrebbe tentare di mantenere aggiornato il kernel. Si possono trovare nuovi kernel presso � o presso il distributore del proprio sistema.
Esiste anche un gruppo internazionale che fornisce una singola patch crittografica per il kernel principale di Linux. Questa patch fornisce il supporto per una serie di sottosistemi crittografici e caratteristiche che non possono essere incluse nel kernel principale per limiti di esportazione. Per ulteriori informazioni si visiti la loro pagina web presso: http://www.kerneli.org
Per i kernel 2.0.x si applicano le seguenti opzioni. Si dovrebbero vedere durante il processo di configurazione del kernel. Molti dei commenti qui vengono da ./linux/Documentation/Configure.help, che è lo stesso documento che si può leggere usando l'Help durante la fase make config della compilazione del kernel.
Network Firewalls (CONFIG_FIREWALL)
Questa opzione dovrebbe essere attivata se si vuole usare qualche tipo di firewall o masquerading sulla macchina. Se sarà solo un semplice client, si può rispondere no.
IP: forwarding/gatewaying (CONFIG_IP_FORWARD)
Se si abilita L'IP forwarding, la macchina potrà assumere le funzioni di un router. Se la macchina è su una rete, si potranno inoltrare dati da una rete ad un'altra e forse si potrebbe pregiudicare un firewall che era stato messo lì proprio per evitarlo. Chi si connette con un modem può farne a meno, e gli altri dovrebbero riflettere sulle implicazioni di sicurezza. I computer che fanno da firewall lo abiliteranno e lo useranno insieme con un firewall.
Si può abilitare dinamicamente l'IP forwarding usando il seguente comando:
root# echo 1 > /proc/sys/net/ipv4/ip_forward |
root# echo 0 > /proc/sys/net/ipv4/ip_forward |
IP: syn cookies (CONFIG_SYN_COOKIES)
Un "Attacco SYN" è un attacco di denial of service (DoS), o negazione di servizio, che consuma tutte le risorse della macchina, obbligandola al riavvio. Non c'è una ragione per cui non dovreste abilitare questa opzione. Nei kernel 2.2.x questa opzione si limita a permettere i syn cookies, ma non li abilita. Per abilitarli, si deve digitare:
root# echo 1 > /proc/sys/net/ipv4/tcp_syncookies <P> |
IP: Firewalling (CONFIG_IP_FIREWALL)
Questa opzione è necessaria se si vuole usare la macchina come firewall, usare il masquerading o se si vuole proteggere il sistema da qualcuno che entri attraverso l'interfaccia di composizione PPP.
IP: firewall packet logging (CONFIG_IP_FIREWALL_VERBOSE)
Questa opzione dà informazioni sui pacchetti ricevuti dal firewall, come origine, destinazione, porta ecc.
IP: Drop source routed frames (CONFIG_IP_NOSR)
Questa opzione dovrebbe essere abilitata. Questi pacchetti contengono l'intero percorso verso la loro destinazione all'interno. Questo significa che i router da cui passa il pacchetto non lo controllano, lo inoltrano solamente. Questo potrebbe portare nel vostro sistema dati che potrebbero essere un exploit.
IP: masquerading (CONFIG_IP_MASQUERADE)
Se uno dei computer sulla rete locale per cui il server Linux fa da firewall volesse mandare fuori dei pacchetti, il server potrebbe "recitare la parte" di questa macchina, cioè inoltrare il traffico verso la destinazione richiesta, ma facendolo sembrare proveniente dal firewall stesso. Si controlli http://www.indyramp.com/masq se si vogliono altre informazioni.
IP: ICMP masquerading (CONFIG_IP_MASQUERADE_ICMP)
Questa opzione aggiunge il masquerading ICMP alla precedente opzione che maschera solo il traffico TCP o UDP.
IP: transparent proxy support (CONFIG_IP_TRANSPARENT_PROXY)
Questa scelta abilita il firewall Linux a ridirigere in modo trasparente tutto il traffico dalla vostra rete destinato ad un host remoto verso un server locale, detto "server proxy trasparente". Questo fa credere ai computer locali di parlare con l'host remoto, mentre in realtà sono connessi al proxy locale. Si legga l'IP- Masquerading HOWTO e http://www.indyramp.com/masq per ulteriori informazioni.
IP: always defragment (CONFIG_IP_ALWAYS_DEFRAG)
In genere questa opzione è disabilitata ma se si sta costruendo un firewall o un host di masquerading, la si dovrebbe abilitare. Quando vengono mandati dei dati fra un host ed un altro, non sempre vengono spediti come un singolo pacchetto di dati, ma piuttosto vengono scomposti in vari pezzi. Il problema di questo processo è che i numeri delle porte sono scritti solo nel primo frammento. Questo significa che qualcuno potrebbe inserire nei rimanenti pacchetti informazioni che non dovrebbero esserci. Questa opzione protegge da attacchi del genere anche se rivolti contro una macchina interna che non abbia ancora questa protezione.
Packet Signatures (CONFIG_NCPFS_PACKET_SIGNING)
Questa opzione, disponibile nei kernel 2.2.x, firma i pacchetti NCP per avere più sicurezza. Normalmente la si può lasciare fuori, ma rimane nel caso servisse.
IP: Firewall packet netlink device (CONFIG_IP_FIREWALL_NETLINK)
Questa utile opzione permette di analizzare i primi 128 byte dei pacchetti con un programma, per determinare se accettare o respingere il pacchetto a seconda della sua validità.
Per i kernel 2.2.x molte opzioni sono rimaste uguali, ma ne sono state aggiunte di nuove. Molti dei commenti vengono da ./linux/Documentation/Configure.help, che è lo stesso documento che si legge quando viene usato l'Help nella fase make config della compilazione del kernel. Qui sono riportate solo le opzioni nuove. Si consulti la descrizione del 2.0 per avere una lista di altre opzioni necessarie. Il cambiamento più significativo nei kernel 2.2.x è il codice del firewall IP. Ora viene usato il programma ipchains per installare il firewall, invece del ipfwadm usato nei kernel 2.0.
Socket Filtering (CONFIG_FILTER)
Per la maggior parte delle persone, dire no è una scelta sicura. Questa opzione permette di connettere un filtro a qualsiasi socket e determinare se i pacchetti debbano essere accettati o respinti. A meno che non si abbia una necessità particolare e si sia capaci di programmare un tale filtro, dovreste dire di no. Si noti anche che, quando è stato scritto questo documento, erano supportati tutti i protocolli tranne il TCP.
Port Forwarding
Il Port Forwarding (Inoltro di una porta) è un'aggiunta all'IP Masquerading che permette di inoltrare pacchetti dall'esterno all'interno di un firewall su certe porte. Torna utile se, per esempio, volete eseguire un web server dietro un firewall e lasciare che quel server sia accessibile al mondo esterno. Un client esterno manda una richiesta alla porta 80 sul firewall, questo inoltra la richiesta al server web che risponde alla richiesta attraverso il firewall. Il client penserà che sia l'host del firewall ad eseguire il web server. Si può usare questa caratteristica anche per bilanciare il traffico se si hanno una serie di web server identici dietro al firewall.
Informazioni su questa opzione si trovano presso: http://www.monmouth.demon.co.uk/ipsubs/portforwarding.html (per accedere al WWW si deve avere accesso ad una macchina su Internet che abbia un programma come lynx o netscape). Per informazioni generali si legga: ftp://ftp.compsoc.net/users/steve/ipportfw/linux21/
Socket Filtering (CONFIG_FILTER)
Usando questa opzione, certi programmi possono porre un filtro ad un socket qualsiasi e quindi dire al kernel di bloccare o far passare certi dati attraverso quel socket. Il filtraggio dei socket per ora funziona su tutti i tipi di socket, TCP escluso. Si legga il file ./linux/Documentation/networking/filter.txt per maggiori informazioni.
IP: Masquerading
Il masquerading del kernel 2.2 è stato migliorato. Fornisce supporto addizionale per speciali protocolli di masquerading ecc. Ci si assicuri di leggere l'IP Chains HOWTO per ulteriori informazioni.
Nel kernel ci sono alcuni device a blocchi e a caratteri che aiuteranno con la sicurezza.
I due device /dev/random e /dev/urandom sono forniti dal kernel per avere sempre a disposizione dati casuali.
Sia /dev/random che /dev/urandom dovrebbero essere abbastanza sicuri da essere usati per generare chiavi PGP, autenticazioni ssh, ed altre applicazioni in cui servono numeri casuali sicuri. Un attaccante non dovrebbe essere capace di predire il numero seguente, data una qualsiasi sequenza di numeri da queste sorgenti. È stato fatto un grande sforzo perché i numeri ottenuti da questi device siano casuali in ogni senso della parola.
L'unica differenza fra i due device è che /dev/random finisce i byte casuali e vi fa aspettare finché non ce ne sono di nuovi. Si noti che su alcuni sistemi potrebbe bloccarsi per molto tempo in attesa che nuova entropia sia generata dagli utenti. Quindi riflettere prima di usare /dev/random. (Forse la miglior cosa da fare è usarlo quando si deve generare codice importante: si dica agli utenti di scrivere molto sulle tastiere fino a quando dite "Ok, basta".)
/dev/random è entropia di qualità, generata dalla misura dei tempi fra gli interrupt ecc. Si blocca finché non ha abbastanza bit casuali di dati.
/dev/urandom è simile, ma quando la riserva di entropia sta finendo fornisce una replica crittograficamente forte di ciò che rimane. Non è altrettanto sicuro, ma basta per la maggior parte delle applicazioni.
Potete leggere da questi device con qualcosa del genere:
root# head -c 6 /dev/urandom | mimencode |
Si legga /usr/src/linux/drivers/char/random.c per la descrizione dell'algoritmo.
Grazie a Theodore Y. Ts'o, Jon Lewis, e altri sviluppatori del kernel per avere aiutato me (Dave) in questo.