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.
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:
/home
e /tmp
, deve stare in una
partizione separata. Questo riduce il rischio di un'attacco DoS di riempimento
del mount point "/" che può bloccare il sistema (Nota: questo non è
rigorosamente vero, ci sono sempre degli spazi riservati a root nei quali gli
utenti normali non hanno diritto di accesso e quindi non possono riempirli).
/var
(specialmente
/var/log
) deve stare su una partizione separata. Attenzione, su
un sistema Debian, si deve creare la directory /var
leggermente
più grande di altri sistemi, perché i pacchetti scaricati (nella cache di apt)
sono conservati in /var/cache/apt/archives
.
/opt
oppure /usr/local
. Se queste directory stanno su partizioni
separate, non saranno cancellate se si reinstalla di nuovo Debian.
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.
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
.
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).
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.
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.
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.
Disabilitare i servizi in modalità demone è piuttosto semplice. Ci sono diversi metodi:
/etc/rc${runlevel}.d/
o rinominare i link (in
modo che non comincino con "S").
/etc/init.d/_service_name_
a
/etc/init.d/OFF._service_name_
).
/etc/init.d/_service_name_
.
/etc/init.d/_service_name_
in modo che si
interrompa immediatamente.
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.
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
.
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.
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:
/usr/bin/chkdupexe
del pacchetto util-linux
.
/usr/bin/replay
del pacchetto bsdutils
.
/usr/sbin/cleanup-info
del pacchetto dpkg
.
/usr/sbin/dpkg-divert
del pacchetto dpkg
.
/usr/sbin/dpkg-statoverride
del pacchetto dpkg
.
/usr/sbin/install-info
del pacchetto dpkg
.
/usr/sbin/update-alternatives
del pacchetto dpkg
.
/usr/sbin/update-rc.d
del pacchetto sysvinit
.
/usr/bin/grog
del pacchetto groff-base
.
/usr/sbin/adduser
del pacchetto adduser
.
/usr/sbin/debconf-show
del pacchetto debconf
.
/usr/sbin/deluser
del pacchetto adduser
.
/usr/sbin/dpkg-preconfigure
del pacchetto debconf
.
/usr/sbin/dpkg-reconfigure
del pacchetto debconf
.
/usr/sbin/exigrep
del pacchetto exim
.
/usr/sbin/eximconfig
del pacchetto exim
.
/usr/sbin/eximstats
del pacchetto exim
.
/usr/sbin/exim-upgrade-to-r3
del pacchetto exim
.
/usr/sbin/exiqsumm
del pacchetto exim
.
/usr/sbin/keytab-lilo
del pacchetto lilo
.
/usr/sbin/liloconfig
del pacchetto lilo
.
/usr/sbin/lilo_find_mbr
del pacchetto lilo
.
/usr/sbin/syslogd-listfiles
del pacchetto sysklogd
.
/usr/sbin/syslog-facility
del pacchetto sysklogd
.
/usr/sbin/update-inetd
del pacchetto netbase
.
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.
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.8 per trovare dettagli su questo argomento.
Securing Debian Manual
2.96 14 febrero 2004Sabato, 30 Agosto 2003 18:27:45 +0200jfs@computer.org