[ precedente ] [ Contenuti ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ A ] [ B ] [ C ] [ D ] [ E ] [ F ] [ G ] [ H ] [ I ] [ successivo ]

Securing Debian Manual
Capitolo 3 - Prima e durante l'installazione


3.1 Scegliere una password per il BIOS

Prima d'installare qualsiasi sistema operativo sul vostro computer, è preferibile inserire una password al BIOS. Dopo l'installazione, non appena attiverete l'avvio dall'hard disk è preferibile impostare la sequenza d'avvio da BIOS disabilitando l'avvio da floppy, da cdrom e dalle altre periferiche che non dovrebbero avviare il computer. Altrimenti ad un cracker basterebbe solo avere l'accesso fisico al computer ed un disco di boot per accedere al sistema.

Disabilitare l'avvio se non viene inserita una password è ancora meglio. Questo può essere molto efficace se avete un server, visto che non viene riavviato frequentemente. Il lato negativo di questa precauzione è che il riavvio della macchina richiede l'intervento umano e può essere problematico se la macchina non è facilmente accessibile.

Nota: molti BIOS hanno una master password (o password universale), che può essere facilmente rinvenuta, senza contare che inoltre esistono delle applicazioni che sono in grado di recuperare la password del BIOS rapidamente. Corollario: si deduce facilmente che non dipende, principalmente, da queste precauzioni la sicurezza dell'accesso al sistema.


3.2 Partizionare il sistema


3.2.1 Scegliere uno schema di partizionamento intelligente

Scegliere uno schema di partizionamento intelligente dipenderà da come sarà usata la macchina. È buona regola creare delle partizioni sufficientemente grandi e prestare attenzione ai seguenti fattori:

Nel caso in cui si gestisca un mail server è importante avere una partizione separata per la directory spool della mail. Gli utenti remoti (sia consapevolmente che inconsapevolmente) possono riempire la directory mail spool (/var/mail o /var/spool/mail). Se la directory spool è in una partizione separata, questa eventualità non bloccherà il sistema . Altrimenti, se la directory spool è sulla stessa partizione di /var, il sistema avrà gravi problemi quali: non potrete creare i file di log, non potrete installare pacchetti aggiuntivi e dei programmi (se usano la directory /var/run) avranno problemi a partire o saranno rallentati.

Inoltre, per le partizioni per le quali non si è sicuri dello spazio che occorre, è preferibile installare Logical Volume Manager (lvm-common e i pacchetti binari per il vostro kernel, questi possono essere lvm10, lvm6, oppure lvm5). Usando lvm si possono creare gruppi di volumi che possono occupare più volumi fisici multipli.


3.2.1.1 Selezionare il file system appropriato

Durante il partizionamento del sistema si deve anche decidere quale file system usare. L'installazione di Debian prevede, come file system predefinito per le partizioni Linux l'ext2. Tuttavia, nei seguenti casi, si raccomanda di passare ad un file system journalling, come ext3, reiserfs, jfs o xfs, per ridurre al minimo i problemi derivanti da un crash di sistema nei seguenti casi:

Lasciando da parte le discussioni sulle prestazioni dei file system journalling (visto che talvolta possono trasformarsi in una guerre di religione), è generalmente meglio usare il file system ext3. Il motivo è che questo è compatibile all'indietro con ext2, così se si dovessero presentare problemi con il journalling, è possibile disabilitarlo e avere comunque un file system funzionante. Inoltre, in caso si debba ripristinare il sistema con un dischetto di avvio (o CDROM) non serve un kernel modificato. Se il kernel è un 2.4 il supporto per ext3 è già  disponibile, se il kernel è un 2.2, pur perdendo le caratteristiche del journalling sarete in grado di avviare il file system. Nel caso stiate usando altri file system journalling potreste non essere in grado di ripristinare, a meno di non avere un kernel 2.4 con i moduli necessari compilati. Se avete un dischetto di salvataggio con kernel 2.2 potrebbe essere ancora più difficile accedere a reiserfs o xfs.

In ogni caso, l'integrità dei dati potrebbe essere meglio garantita da ext3 visto che esegue un file-data journalling mentre gli altri eseguono soltanto il meta-data journalling, vedete in http://lwn.net/2001/0802/a/ext3-modes.php3.


3.3 Non collegarsi ad Internet finché non si è pronti

Il sistema non dovrebbe essere immediatamente connesso ad internet durante l'installazione. Questo potrebbe suonare sciocco, ma l'installazione di rete è un metodo comune. Poiché il sistema, installandosi, attiva immediatamente dei servizi, se è connesso ad Internet e i servizi non sono opportunamente configurati, sarà esposto a possibili attacchi.

Si noti inoltre che alcuni servizi potrebbero avere problemi di sicurezza non ancora corretti nei pacchetti usati per l'installazione. Questo accade di solito quando si esegue l'installazione con media vecchi (come i CD-ROM). In questo caso, il sistema potrebbe addirittura essere compromesso prima che si finisca l'installazione!

Poiché l'installazione e l'aggiornamento di Debian possono essere effettuati via Internet, si potrebbe pensare che usare questa caratteristica sia una buona idea. Se il sistema sarà direttamente connesso a Internet (e non sarà protetto da firewall o NAT), è preferibile installare senza essere connessi a Internet, usando un mirror locale dei pacchetti sia per i sorgenti dei pacchetti Debian sia per gli aggiornamenti di sicurezza. Un mirror dei pacchetti per fornire gli archivi al sistema può essere preparato usando un altro sistema connesso ad Internet con strumenti Debian specifici (se è un sistema Debian) come apt-move o apt-proxy, o altri comuni strumenti per il mirroring. Se non è possibile fare questo, potete attivare regole per il firewall che limitino l'accesso al sistema durante l'aggiornamento (vedete in Aggiornamenti di sicurezza protetti da un firewall, Appendice F).


3.4 Assegnare una password a root

Assegnare una buona password a root è il primo requisito fondamentale per avere un sistema sicuro. Vedete passwd(1) per alcuni suggerimenti su come creare una buona password. A questo scopo si può anche usare un programma per la generazione automatica di password (vedete in Generare password per gli utenti, Sezione 4.10.14).

FIXME: Aggiungere riferimenti a risorse su buone password.


3.5 Attivare shadow password e MD5 password

Alla fine dell'installazione verrà chiesto se abilitare le shadow password. Rispondere di sì alla domanda e le password saranno conservate in /etc/shadow. Solo l'utente root e il gruppo shadow possono accedere in lettura a questo file, così che nessun altro possa prendere una copia di questo file e poter lanciare un password cracker. Potete decidere di scegliere tra password shadow e password normali in qualsiasi momento usando shadowconfig.

Per saperne di più sulle password shadow vedete il documento Shadow Password (/usr/share/doc/HOWTO/en-txt/Shadow-Password.txt.gz).

Inoltre verrà chiesto durante l'installazione se volete utilizzare le password MD5. Di solito è una buona idea perché permette di usare password più lunghe di 8 caratteri e ha una migliore cifratura. Se usato correttamente, può rendere difficile trovare password di sistema con un attacco a forza bruta. Le password MD5 sono l'opzione predefinita quando si installa il pacchetto password più recente. È possibile modificarle in qualsiasi momento con dpkg-reconfigure -plow passwd. Potete riconoscere le password md5 nel file /etc/shadow dal prefisso $1$.

Di conseguenza, vengono modificati tutti i file in /etc/pam.d sostituendo la linea delle password ed includendo md5:

           password required pam_unix.so md5 nullok obscure min=6 max=16

Se max non è impostato oltre 8 la modifica non avrà alcuna utilità. Per maggiori informazioni leggete Autenticazione degli utenti: PAM, Sezione 4.10.1.

Note: la configurazione predefinita in Debian, anche attivando le password MD5, non modifica la precedente impostazione del valore max.


3.6 Lanciare i servizi strettamente necessari

I servizi sono programmi come i server ftp e i server web. Poiché restano in attesa di connessioni in ingresso che richiedono il servizio, i computer all'esterno possono collegarvisi. A volte i servizi sono vulnerabili (es: possono essere compromessi da un determinato attacco) e possono rappresentare un rischio per la sicurezza.

Non dovreste installare servizi che non sono necessari sulla vostra macchina. Ogni servizio installato può introdurre nuovi, magari non evidenti (o conosciuti) buchi di sicurezza sul vostro computer.

Come forse già saprete, quando si installa un determinato servizio, l'opzione predefinita è che sia attivo. In un'installazione Debian predefinita, senza servizi installati, l'insieme dei servizi attivi è piuttosto basso e questo è ancora più vero per quanto riguarda i servizi di rete. L'insieme dei servizi attivi in Debian 2.1 non era rigido come in Debian 2.2 (alcuni servizi inetd erano attivati di default) e in Debian 2.2 l'rpc portmapper è attivato sin dall'installazione. Rpc è installato di default perché è necessario per molti servizi, ad esempio per usare NFS. Può comunque essere facilmente rimosso, consultate Disabilitare i servizi attivi in modalità demone, Sezione 3.6.1 per sapere come disabilitarlo.

Quando installate un nuovo servizio di rete (demone) in Debian GNU/Linux può essere attivato in 2 modi: per mezzo del superdemone inetd (una linea sarà aggiunta a /etc/inetd.conf) o per mezzo di un programma standalone che si collega all'interfaccia di rete. I programmi standalone sono controllati tramite i file /etc/init.d, che sono chiamati al momento del boot dal meccanismo SysV (o uno alternativo) usando un link simbolico in /etc/rc?.d/* (per maggiori informazioni su come farlo leggete /usr/share/doc/sysvinit/README.runlevels.gz).

Se volete manteneree alcuni servizi ma usarli raramente, utilizzate i comandi di aggiornamento come per es: update-inetd e update-rc.d per rimuoverli dal processo di avvio.


3.6.1 Disabilitare i servizi attivi in modalità demone

Disabilitare i servizi in modalità demone è piuttosto semplice. Ci sono diversi metodi:

Potete rimuovere i link da /etc/rc${runlevel}.d/ manualmente o usando update-rc.d (vedete update-rc.d(8)). Per esempio potete disabilitare un servizio nei runlevel multiutente con:

       update-rc.d stop XX 2 3 4 5 .

Bisogna notare che se non stiamo utilizzando file-rc, update-rc.d -f _service_ remove non funzionerà correttamente, perché tutti i link vengono rimossi ma dopo una reinstallazione o un upgrade del pacchetto i link vengono ricreati (probabilmente non è quello che si desidera). Chi pensa che questo comportamento non sia intuitivo non ha torto (vedete il Bug 67095). Dalla manpage:

       Se  esistono   già  dei  file   /etc/rcrunlevel.d/[SK]??nome  allora
       update-rc.d non fa nulla. In questo modo l'amministratore di sistema
       può risistemare i link, sempre  che abbiate lasciato almeno un link,
       senza dover sovrascrivere la loro configurazione.

Se si usa file-rc tutte le informazioni che riguardano l'avvio dei servizi sono gestite da un file di configurazione comune e sono conservate anche se i pacchetti vengono disinstallati dal sistema.

È possibile usare la TUI (Text User Interface, cioè interfaccia utente in modalità testuale) fornita da rcconf per apportare queste modifiche facilmente (rcconf funziona sia per file-rc che per i normali runlevel System V).

Altri metodi (non raccomandati) per disabilitare i servizi sono: chmod 644 /etc/init.d/daemon (ma così si ottiene un messaggio di errore al boot) oppure modificare lo script /etc/init.d/daemon (aggiungendo una linea con exit 0 all'inizio o commentando la parte start-stop-daemon nello script). Dal momento che i file contenuti in init.d sono file di configurazione, non vengono sovrascritti durante gli upgrade.

Sfortunatamente, al contrario di altri sistemi operativi (UNIX), in Debian i servizi non possono essere disabilitati modificando i file in /etc/default/_servicename_.

FIXME: Aggiungere informazioni su come gestire i demoni con file-rc.


3.6.2 Disabilitare i servizi gestiti da inetd

Sarebbe bene arrestare tutti servizi non necessari nel proprio sistema, come echo, chargen, discard, daytime, time, talk, ntalk e gli r-services (rsh, rlogin e rcp) che sono considerati MOLTO insicuri (meglio usare ssh al loro posto). Dopo aver disabilitato questi servizi è bene controllare se davvero è necessario il demone inetd. Molta gente preferisce usare dei demoni piuttosto che lanciare i servizi attraverso inetd. Attraverso inetd esiste la possibilità di subire attacchi del tipo Denial of Service, che aumentano enormemente il carico di lavoro della macchina. Se si vogliono comunque utilizzare dei servizi gestiti tramite inetd meglio passare ad un demone inet più configurabile, come xinetd o rlinetd.

Potete disabilitare dei servizi modificando direttamente /etc/inetd.conf, ma Debian fornisce un'alternativa migliore: update-inetd (che commenta i servizi in modo che possano essere facilmente riattivati). Potete rimuovere il demone telnet eseguendo questo comando per cambiare il file di configurazione e riavviando il demone (in questo caso il servizio telnet viene disabilitato):

       /usr/sbin/update-inetd --disable telnet

Se davvero desiderate servizi in ascolto, ma non volete che stiano in ascolto su tutti gli indirizzi IP del vostro host, probabilmente vorrete utilizzare una funzione non documentata di inetd. O usare un demone inetd alternativo, come xinetd.


3.7 Installare il software strettamente necessario

Debian include molto software, per esempio Debian 3.0 woody include quasi 6 CD-ROM di software e migliaia di pacchetti. Con così tanto software, anche se l'installazione del sistema base è ridotta [2] potreste essere tentati di installare più software di quello necessario alle vostre esigenze.

Poiché sappiamo già a cosa servirà il sistema (o no?), dovreste installare solo il software che è realmente necessario per farlo funzionare. Qualsiasi tool non necessario potrebbe essere usato da un utente che vuole compromettere il sistema o da un intruso esterno che ha ottenuto l'accesso ad una shell (o l'esecuzione di codice da remoto attraverso un servizio che lo consenta).

La presenza, ad esempio, di utility di sviluppo (un compilatore per il linguaggio C) o di linguaggi interpretati (come perl - ma vedete sotto -, python, tcl...) potrebbero aiutare colui che attacca a compromettere il sistema, in particolare:

Ovviamente, un intruso con accesso locale ad una shell può scaricare gli strumenti che gli servono ed eseguirli, ma anche la shell stessa può essere usata per scrivere programmi complessi. Rimuovere il software non necessario non aiuterà a prevenire il problema, ma renderà un po' più difficile l'azione dell'intruso (ed alcuni potrebbero rinunciare se si trovano in questa situazione, cercando un bersaglio più facile). Quindi, lasciando installati detti strumenti su un sistema in produzione, che può essere usato per attaccare sistemi da remoto (si veda Strumenti per la valutazione delle vulnerabilità da remoto, Sezione 8.1) è lecito aspettarsi che un intruso li utilizzi, se disponibili.


3.7.1 Rimuovere Perl

Dovreste tener conto che rimuovere perl potrebbe non essere troppo facile (in realtà potrebbe essere anche abbastanza difficile) in un sistema Debian poiché è usato da molte utility di sistema. Inoltre, il pacchetto perl-base è Priority: required (il che dice tutto). La rimozione è ancora fattibile, ma non potrete eseguire nessuna applicazione perl presente nel sistema. Dovrete inoltre ingannare il sistema di gestione dei pacchetti per fargli credere che il pacchetto perl-base sia installato anche se non lo è. [4]

Quali sono le utility che usano perl? Potete scoprirlo da soli:

       $ for i in /bin/* /sbin/* /usr/bin/* /usr/sbin/*; do [ -f $i ] && {
       type=`file $i | grep -il perl`; [ -n "$type" ] && echo $i; }; done

Incluse le seguenti utility contenute in pacchetti con priorità required o important:

Quindi, senza Perl e a meno che non riscriviate queste utility come script di shell, probabilmente non potrete gestire alcun pacchetto (quindi neanche aggiornare il sistema, il che non è una buona cosa).

Se siete determinati a rimuovere Perl dal sistema base di Debian e avete tempo libero, mandate rapporti sui bachi ai pacchetti sopracitati includendo (in forma di patch) sostituti alle utility scritti come script di shell.


3.8 Leggere la mailing list debian security

Non sarebbe sbagliato dare uno sguardo alla mailing-list debian-security-announce, dove vengono annunciate migliorie ai pacchetti rilasciati da parte del Debian security team, o in mailto:debian-security@lists.debian.org, dove potrete partecipare alle discussioni riguardanti la sicurezza in Debian.

Per ricevere gli avvisi degli aggiornamenti di sicurezza, inviate un'e-mail a debian-security-announce-request@lists.debian.org, scrivendo la parola "subscribe" nella linea dedicata all'oggetto dell'e-mail. Potete altresì iscrivervi a questa lista moderata via web dalla pagina: http://www.debian.org/MailingLists/subscribe.

Questa mailing list ha un basso volume e iscrivendosi si è immediatamente allertati sugli aggiornamenti di sicurezza riguardanti Debian. Questo permette di scaricare tempestivamente i nuovi pacchetti con le soluzioni ai bachi di sicurezza, ciò è veramente importante per mantenere un sistema sicuro. Leggete Eseguire un security update, Sezione 4.2 per trovare dettagli su questo argomento.


[ precedente ] [ Contenuti ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ A ] [ B ] [ C ] [ D ] [ E ] [ F ] [ G ] [ H ] [ I ] [ successivo ]

Securing Debian Manual

2.97 5 marzo 2004Ven, 3 Ott 2003 22:23:28 +0200

Javier Fernández-Sanguino Peña jfs@computer.org
Per la traduzione si veda l'Appendice I