Product SiteDocumentation Site

Appendice B. Appendix

B.1. Il processo di blindatura passo-passo

Di seguito viene riportata una procedura passo-passo, post-installazione, per blindare un sistema Debian GNU/linux 2.2. Questo è un possibile approccio a tale procedura ed è orientato a blindare i servizi di rete. Viene incluso per mostrare l'intero processo che potrebbe essere usato durante la configurazione. Vedete in Sezione B.2, «Verifica della configurazione».
  • Install the system, taking into account the information regarding partitioning included earlier in this document. After base installation, go into custom install. Do not select task packages.
  • Utilizzando dselect, rimuovete tutti i pacchetti selezionati ma non necessari prima di effettuare l'installazione con il comando [I]nstall. Mantenete il minimo numero di pacchetti per il sistema.
  • Aggiornate tutti i programmi dal più recente pacchetto disponibile da security.debian.org come spiegato precedentemente in Sezione 4.2, «Eseguire un aggiornamento per la sicurezza».
  • Applicate i suggerimenti presentati in questo manuale al riguardo delle quote utente, definizioni di login e lilo.
  • Compilate una lista di servizi attivi al momento sul sistema. Eseguite:
      $ ps aux
      $ netstat -pn -l -A inet 
      # /usr/sbin/lsof -i | grep LISTEN
    
    You will need to install lsof-2.2 for the third command to work (run it as root). You should be aware that lsof can translate the word LISTEN to your locale settings.
  • Per rimuovere i servizi non necessari, determinate inizialmente quale pacchetto fornisca il servizio e come si avvii. Questo può essere ottenuto controllando quali programmi ascoltano su di un socket. Il seguente script di shell, che utilizza i programmi lsof e dpkg, fa proprio questo:
    #!/bin/sh
    # FIXME: this is quick and dirty; replace with a more robust script snippet
    for i in `sudo lsof -i | grep LISTEN | cut -d " " -f 1 |sort -u` ; do
      pack=`dpkg -S $i |grep bin |cut -f 1 -d : | uniq`
      echo "Service $i is installed by $pack";
      init=`dpkg -L $pack |grep init.d/ `
      if [ ! -z "$init" ]; then
        echo "and is run by $init"
      fi
    done
    
  • Una volta che avete individuato un qualsiasi servizio che non volete fornire, rimuovete il pacchetto che lo genera (con dpkg --purge), o disabilitate la partenza automatica del servizio all'avvio del sistema utilizzando update-rc.d (vedete in Sezione 3.5.1, «Disabilitare i servizi attivi in modalità demone»).
  • Per i servizi avviati da inetd (lanciati tramite il superdemone), verificate che i servizi siano abilitati in /etc/inetd.conf, utilizzando:
      $ grep -v "^#" /etc/inetd.conf | sort -u
    
    Per disabilitare quei servizi che non desiderate è necessario commentare le righe dello script che li avviano in /etc/inetd.conf, altrimenti, rimuovere il pacchetto che fornisce il servizio, o utilizzare update-inetd.
  • Se avete servizi wrapped (quelli che usano /usr/sbin/tcpd), verificate che i file /etc/hosts.allow e /etc/hosts.deny siano configurati in accordo con la vostra politica di sicurezza.
  • Se il server usa più di una interfaccia con l'esterno, in funzione del servizio, potreste voler limitare il servizio all'ascolto su una specifica interfaccia. Per esempio, se si volesse un accesso FTP esclusivamente dall'interno, fate in modo che il demone FTP sia in ascolto solo sull'interfaccia di gestione e non su tutte le interfacce (p.e. 0.0.0.0:21).
  • Riavviate la macchina, o commutate sulla modalità monoutente e quindi tornate a quella multiutente, utilizzando i comandi:
      # init 1
      (....)
      # init 2
    
  • Controllate i servizi adesso disponibili e se necessario, ripetete i passi appena esposti.
  • Ora installate i servizi che ritenete necessari, se non avete già agito così e configurateli appropriatamente.
  • Usate il seguente comando da shell, per determinare con quale identità ogni servizio disponibile sta girando:
      # for i in `/usr/sbin/lsof -i |grep LISTEN |cut -d " " -f 1 |sort -u`; \
      > do user=`ps ef |grep $i |grep -v grep |cut -f 1 -d " "` ; \
      > echo "Service $i is running as user $user"; done
    
    Valutate l'opportunità di modificare questi servizi associandoli a specifici utenti/gruppi mediante gabbie chroot per avere maggior sicurezza. Potete farlo modificando lo script /etc/init.d che avvia il servizio. La maggior parte dei servizi in Debian usano start-stop-daemon che ha l'opzione (--change-uid e --chroot) per apportare le modifiche di cui sopra. Alcuni avvertimenti al riguardo dei servizi in chroot: potrebbe essere necessario mettere tutti i file installati dal pacchetto (usando dpkg -L) che fornisce il servizio, così come tutti i pacchetti da cui esso dipende, in un ambiente di tipo chroot. Le informazioni per configurare un ambiente chroot per il programma ssh possono essere trovate in Sezione B.7, «Chroot environment for SSH».
  • Ripetete i passi summenzionati al fine di verificare che girino i soli servizi desiderati e che essi stiano girando con la desiderata combinazione utente/gruppo.
  • Verificate i servizi installati per controllare che funzionino come avete previsto.
  • Check the system using a vulnerability assessment scanner (like nessus), in order to determine vulnerabilities in the system (i.e., misconfiguration, old services or unneeded services).
  • Install network and host intrusion measures like snort and logcheck.
  • Ripetete la sequenza dell'esame della rete e verificate che i sistemi di rilevamento delle intrusioni stiano funzionando correttamente.
Se siete persone realmente paranoiche dovreste valutare anche quanto segue:
  • Aggiungere funzionalità "firewall" al sistema, accettando connessioni in ingresso solo per servizi offerti e limitando le connessioni uscenti alle sole autorizzate.
  • Ricontrollare l'installazione con una nuova verifica di vulnerabilità usando uno scanner di rete.
  • Usando un rilevatore di rete, controllare le connessioni uscenti dal sistema verso una macchina esterna e verificare che nessuna connessione trovi il modo di uscire.
FIXME: questa procedura si occupa della blindatura dei servizi, non della blindatura di sistemi a livello utente, includendo le informazioni per controllare i permessi utente, i file SETUID ed il congelamento dei cambiamenti del sistema utilizzando il filesystem ext2.