Product SiteDocumentation Site

Capitolo 10. Prima della compromissione

10.1. Mantenere sicuro il proprio sistema
10.1.1. Mantenersi aggiornati sulle vulnerabilità di sicurezza
10.1.2. Aggiornare continuamente il sistema
10.1.3. Evitare di usare il ramo instabile
10.1.4. Supporto alla sicurezza per il ramo testing
10.1.5. Aggiornamento automatico in un sistema Debian GNU/Linux
10.2. Effettuate periodicamente dei controlli sull'integrità del sistema
10.3. Pianificare la ricerca di intrusi
10.3.1. Individuazione delle intrusioni sulla rete
10.3.2. Sistemi per individuare gli intrusi
10.4. Evitare i root-kit
10.4.1. Moduli del kernel caricabili (LKM)
10.4.2. Scoprire i root-kit
10.5. Genius/Paranoia Ideas - what you could do
10.5.1. Costruirsi una honeypot ("trappola al miele")

10.1. Mantenere sicuro il proprio sistema

Dovreste sempre sforzarvi di mantenere il vostro sistema sicuro controllandone l'uso che ne viene fatto e le sue possibili vulnerabilità; tali vulnerabilità andrebbero poi eliminate installando gli aggiornamenti di sicurezza non appena sono disponibili. Anche se siete convinti della robustezza del vostro sistema appena installato, va ricordato che la sicurezza di un sistema si degrada nel tempo, poiché potrebbero venire scoperte nuove vulnerabilità nei servizi offerti dal proprio sistema agli utenti, anche questi ultimi potrebbero compromettere la sicurezza del sistema per scarse cognizioni tecniche (ad esempio, potrebbero accedere al sistema da remoto usando un protocollo di comunicazione non cifrato, o usando delle password banali e dunque facili da indovinare) o perché mirano esplicitamente a compromettere la sicurezza del sistema (per esempio, installano dei servizi aggiuntivi sul sistema usando le risorse del sistema che sono state loro concesse).

10.1.1. Mantenersi aggiornati sulle vulnerabilità di sicurezza

Sebbene molti amministratori di sistema vengano a conoscenza di una vulnerabilità del sistema solo quando un aggiornamento diventa disponibile, sarebbe meglio venire a conoscenza delle vulnerabilità di sicurezza il prima possibile, per prevenire gli attacchi, introducendo delle contromisure di emergenza. Ciò è particolarmente utile nel caso in cui stiate amministrando un sistema esposto (ossia connesso ad Internet) che fornisce un servizio. In tal caso gli amministratori di sistema dovrebbero controllare regolarmente delle fonti di informazioni fidate relative alla sicurezza, così da venire a conoscenza il prima possibile se un servizio critico del sistema (o che comunque potrebbe avere degli effetti indesiderati su di esso) è affetto da vulnerabilità.
This typically includes subscribing to the announcement mailing lists, project websites or bug tracking systems provided by the software developers for a specific piece of code. For example, Apache users should regularly review Apache's http://httpd.apache.org/security_report.html and subscribe to the http://httpd.apache.org/lists.html#http-announce mailing list.
In order to track known vulnerabilities affecting the Debian distribution, the Debian Testing Security Team provides a https://security-tracker.debian.org/ that lists all the known vulnerabilities which have not been yet fixed in Debian packages. The information in that tracker is obtained through different public channels and includes known vulnerabilities which are available either through security vulnerability databases or http://www.debian.org/Bugs/. Administrators can search for the known security issues being tracked for https://security-tracker.debian.org/tracker/status/release/stable, https://security-tracker.debian.org/tracker/status/release/oldstable, https://security-tracker.debian.org/tracker/status/release/testing, or https://security-tracker.debian.org/tracker/status/release/unstable.
The tracker has searchable interfaces (by http://cve.mitre.org/ name and package name) and some tools (such as debsecan, see Sezione 10.1.2.4, «Individuazione automatica dei problemi di sicurezza con debsecan») use that database to provide information of vulnerabilities affecting a given system which have not yet been addressed (i.e. those who are pending a fix).
Un amministratore di sistema scrupoloso dovrebbe usare tali informazioni per determinare le falle nella sicurezza del sistema che sta amministrando, determinare la pericolosità di tali falle ed applicare (se possibile) delle contromisure temporanee fintantoché non venga rilasciato un aggiornamento di sicurezza che risolva il problema.
I problemi relativi alla sicurezza, individuati per le versioni di Debian di cui il Team Debian per la Sicurezza si occupa ancora, verranno pubblicati negli avvisi Debian per la sicurezza e i conseguenti aggiornamenti saranno disponibili per tutti gli utenti (vedete al riguardo Sezione 10.1.2, «Aggiornare continuamente il sistema»). Una volta che gli aggiornamenti di sicurezza vengono pubblicati, l'avviso corrispondente viene cancellato dall'archivio, ma è ancora possibile ottenere dettagli sulla vulnerabilità di sicurezza, identificata col suo nome CVE, usando la http://www.debian.org/security/crossreferences che collega gli avvisi Debian ai dati sulle vulnerabilità forniti dal CVE.
Notate, comunque, che il Team per la Sicurezza di Debian Testing gestisce solo vulnerabilità note al pubblico. In alcune occasione invece il Team Debian per la Sicurezza (fate attenzione che sono due entità separate) potrebbe preparare degli Avvisi Debian sulla Sicurezza (l'acronimo inglese di tali documenti è DSA) in base ad informazioni riservate (che gli sono state fornite ad esempio da mailing list private del produttore o da alcuni dei manutentori del software in via confidenziale). Pertanto alcuni problemi di sicurezza, sebbene descritti e risolti tramite un DSA, potrebbero non essere presenti nell'archivio.

10.1.2. Aggiornare continuamente il sistema

You should conduct security updates frequently. The vast majority of exploits result from known vulnerabilities that have not been patched in time, as this http://www.cs.umd.edu/~waa/vulnerability.html (presented at the 2001 IEEE Symposium on Security and Privacy) explains. Updates are described under Sezione 4.2, «Eseguire un aggiornamento per la sicurezza».

10.1.2.1. Controllo manuale degli aggiornamenti di sicurezza disponibili

Debian ha uno strumento apposito per verificare se un sistema deve essere aggiornato, ma molti utenti vorranno semplicemente controllare manualmente se sono disponibili aggiornamenti di sicurezza per il loro sistema.
Se avrete configurato il sistema come descritto in Sezione 4.2, «Eseguire un aggiornamento per la sicurezza», basterà dare il comando:
# apt-get update
# apt-get upgrade -s
[ ... review packages to be upgraded ... ]
# apt-get upgrade 
# checkrestart
[ ... restart services that need to be restarted ... ]
e riavviare quei servizi le cui librerie sono state aggiornate. Notate: leggete in Sezione 4.2, «Eseguire un aggiornamento per la sicurezza» per altre informazioni sugli aggiornamenti delle librerie (e del kernel).
La prima riga scaricherà l'elenco dei pacchetti disponibili tra quelli presenti sul sistema e configurati. L'opzione -s simulerà l'esecuzione, cioè non scaricherà o installerà i pacchetti, ma piuttosto, comunicherà quali dovrebbero essere scaricati/installati. Dal risultato si potrà dedurre quali pacchetti siano stati corretti da Debian e siano disponibili come aggiornamento di sicurezza. Per esempio:
# apt-get upgrade -s
Reading Package Lists... Done
Building Dependency Tree... Done
2 packages upgraded, 0 newly installed, 0 to remove and 0  not upgraded.
Inst cvs (1.11.1p1debian-8.1 Debian-Security:3.0/stable)
Inst libcupsys2 (1.1.14-4.4 Debian-Security:3.0/stable)
Conf cvs (1.11.1p1debian-8.1 Debian-Security:3.0/stable)
Conf libcupsys2 (1.1.14-4.4 Debian-Security:3.0/stable)
In this example, you can see that the system needs to be updated with new cvs and cupsys packages which are being retrieved from woody's security update archive. If you want to understand why these packages are needed, you should go to http://security.debian.org and check which recent Debian Security Advisories have been published related to these packages. In this case, the related DSAs are https://lists.debian.org/debian-security-announce/2003/msg00014.html (for cvs) and https://lists.debian.org/debian-security-announce/2003/msg00013.html (for cupsys).
Notate che il sistema dovrà essere riavviato nel caso vi sia stato un aggiornamento del kernel.

10.1.2.2. Controllo degli aggiornamenti dal Desktop

Since Debian 4.0 lenny Debian provides and installs in a default installation update-notifier. This is a GNOME application that will startup when you enter your Desktop and can be used to keep track of updates available for your system and install them. It uses update-manager for this.
In un sistema stabile gli aggiornamenti sono disponibili solo quando viene rilasciata una patch di sicurezza o al momento dei nuovi rilasci. Di conseguenza, se il sistema è configurato per ricevere gli aggiornamenti di sicurezza, come descritto in Sezione 4.2, «Eseguire un aggiornamento per la sicurezza» e c'è un'istanza di cron che aggiorna le informazioni dei pacchetti, verrete informati attraverso un'icona dell'area di notifica del desktop.
La notifica non è intrusiva e gli utenti non sono obbligati ad installare gli aggiornamenti. Dall'icona di notifica un utente del desktop (con la password di amministratore) può accedere ad una semplice interfaccia grafica per vedere quali sono gli aggiornamenti disponibili ed installarli.
Questa applicazione funziona controllando il database dei pacchetti e comparando il sistema con il suo contenuto. Se il database dei pacchetti viene aggiornato periodicamente attraverso un'istanza di cron, allora il contenuto del database sarà più nuovo dei pacchetti installati nel sistema e quindi una applicazione lo notificherà.
Apt installa un compito (/etc/cron.d/apt) che verrà eseguito a seconda della configurazione di Apt (più nello specifico APT::Periodic). Nell'ambiente GNOME questo valore di configurazione può essere modificato in Sistema > Amministrazione > Sorgenti Software > Aggiornamenti, o eseguendo /usr/bin/software-properties.
Se il sistema è configurato per scaricare la lista dei pacchetti quotidianamente ma non per scaricare i pacchetti stessi, il file /etc/apt/apt.conf.d/10periodic dovrebbe avere questo aspetto:
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "0";
You can use a different cron task, such as the one installed by cron-apt (see Sezione 10.1.2.3, «Controllo automatico degli aggiornamenti con cron-apt»). You can also just manually check for upgrades using this application.
Users of the KDE desktop environment will probably prefer to install adept and adept-notifier instead which offers a similar functionality but is not part of the standard installation.

10.1.2.3. Controllo automatico degli aggiornamenti con cron-apt

Another method for automatic security updates is the use of cron-apt. This package provides a tool to update the system at regular intervals (using a cron job), and can also be configured to send mails to the system administrator using the local mail transport agent. It will just update the package list and download new packages by default but it can be configured to automatically install new updates.
Se volete aggiornare automaticamente il vostro sistema (anche solo scaricandone i pacchetti), controllate la versione della distribuzione, come descritto in Sezione 7.5.3, «Controllo di rilascio per ogni distribuzione»; in mancanza di questo controllo, non potrete essere sicuri che i pacchetti provengano da una fonte fidata.
Ulteriori informazioni sono disponibili presso il sito http://www.debian-administration.org/articles/162.

10.1.2.4. Individuazione automatica dei problemi di sicurezza con debsecan

The debsecan program evaluates the security status of by reporting both missing security updates and security vulnerabilities. Unlike cron-apt, which only provides information related to security updates available, but this tool obtains information from the security vulnerability database maintained by the Debian Security Team which includes also information on vulnerabilities which are not yet fixed through a security update. Consequently, it is more efficient at helping administrators track security vulnerabilities (as described in Sezione 10.1.1, «Mantenersi aggiornati sulle vulnerabilità di sicurezza»).
Upon installing the Debian package debsecan, and if the administrator consents to it, it will generate a cron task that will make it run and send the output to a specific user whenever it finds a vulnerable package. It will also download the information from the Internet. The location of the security database is also part of the questions ask on installation and are later defined /etc/default/debsecan, it can be easily adjusted for systems that do not have Internet access so that they all pull from a local mirror so that there is a single point that access the vulnerability database.
Notate, comunque, che il Team Debian per la sicurezza esamina molte vulnerabilità, incluse quelle a basso rischio che potrebbero essere ignorate e non essere mai risolte tramite un aggiornamento di sicurezza; alcune vulnerabilità che inizialmente sono state identificate come riguardanti anche Debian, potrebbero, in futuro, dopo ulteriori accertamenti, essere invece completamente irrilevanti per Debian. Debsecan elenca tutte queste vulnerabilità, tendendo a fornire dei risultati molto più lunghi da leggere degli altri strumenti descritti in precedenza.
More information is available at the http://www.enyo.de/fw/software/debsecan/.

10.1.2.5. Altri metodi per effettuare aggiornamenti per la sicurezza

There is also the apticron, which, similarly to cron-apt will check for updates and send mails to the administrator. More information on apticron is available at the http://www.debian-administration.org/articles/491.
You might also want to take a look at http://clemens.endorphin.org/secpack/ which is an unofficial program to do security updates from security.debian.org with signature checking written by Fruhwirth Clemens. Or to the Nagios Plugin http://www.unixdaemon.net/nagios_plugins.html#check_debian_packages written by Dean Wilson.

10.1.3. Evitare di usare il ramo instabile

Unless you want to dedicate time to patch packages yourself when a vulnerability arises, you should not use Debian's unstable branch for production-level systems. The main reason for this is that there are no security updates for unstable.
Il fatto è che alcuni problemi di sicurezza potrebbero apparire nella distribuzione unstable e non nella stable. Questo è dovuto alle nuove funzionalità costantemente aggiunte alle applicazioni lì fornite, come anche a nuove applicazioni che vengono incluse senza aver passato un collaudo approfondito.
Per quanto riguarda l'eseguire aggiornamenti di sicurezza nel ramo unstable, dovreste aggiornare completamente alle nuove versioni (che vengono aggiornate più dei pacchetti in questione). Sebbene ci siano alcune eccezioni, solamente le patch di sicurezza vengono riportate nel ramo stable. L'idea di fondo è che tra gli aggiornamenti non venga aggiunto nuovo codice, ma che vengano solamente risolti i problemi importanti per la sicurezza.
Notate che, comunque potete ancora usare l'archivio delle vulnerabilità di sicurezza (come descritto in Sezione 10.1.1, «Mantenersi aggiornati sulle vulnerabilità di sicurezza») per scoprire quali vulnerabilità riguardino la versione di Debian che state usando.

10.1.4. Supporto alla sicurezza per il ramo testing

Se usate il ramo testing, ci sono alcuni aspetti da tenere in considerazione sulla disponibilità degli aggiornamenti di sicurezza:
  • Quando è pronta una correzione di sicurezza, il Team per la Sicurezza appronta il backport della patch a stable (in quanto stable di solito è indietro di qualche versione, minore o maggiore). I manutentori del pacchetto sono responsabili della preparazione dei pacchetti per il ramo unstable, di solito basati su una letteralmente nuova versione. A volte le modifiche avvengono quasi in contemporanea e altre volte uno dei due rami riceve la correzione di sicurezza prima dell'altro. I pacchetti per la distribuzione stable sono soggetti ad un controllo più approfondito di quelli per unstable, in quanto quest'ultima contiene perlopiù la versione più recente (che potrebbe includere nuovi bug ancora sconosciuti).
  • Gli aggiornamenti di sicurezza sono normalmente disponibili per il ramo unstable quando il manutentore del pacchetto crea un nuovo pacchetto e per il branch stable quando il Team per la Sicurezza fa un nuovo caricamento e pubblica un DSA. Notate che nessuno di questi due cambia il ramo di testing.
  • Se nessun (nuovo) errore viene scoperto nella versione unstable del pacchetto, questo si sposta nel ramo testing dopo diversi giorni. Il tempo che occorre per questo procedimento di solito è dieci giorni, anche se dipende dalla priorità di caricamento del cambiamento e se il pacchetto viene bloccato dall'ingresso nel ramo testing dalle sue relazioni di dipendenza. Notate che se il pacchetto viene bloccato dall'entrata in testing la priorità di caricamento non modificherà il tempo che gli occorre per entrare.
Questo comportamento può cambiare in base allo stato di rilascio della distribuzione. Quando un rilascio è quasi imminente, il Team per la Sicurezza o i manutentori del pacchetto possono fornire degli aggiornamenti direttamente al ramo testing.
Additionally, the http://secure-testing-master.debian.net can issue Debian Testing Security Advisories (DTSAs) for packages in the testing branch if there is an immediate need to fix a security issue in that branch and cannot wait for the normal procedure (or the normal procedure is being blocked by some other packages).
Gli utenti che volessero usufruire di questo supporto devono aggiungere le seguenti righe al loro /etc/apt/sources.list (invece delle righe descritte in Sezione 4.2, «Eseguire un aggiornamento per la sicurezza»):
    deb http://security.debian.org testing/updates main contrib non-free
# This line makes it possible to donwload source packages too
    deb-src  http://security.debian.org testing/updates main contrib non-free
For additional information on this support please read the http://lists.debian.org/debian-devel-announce/2006/05/msg00006.html. This support officially started in http://lists.debian.org/debian-devel-announce/2005/09/msg00006.html in a separate repository and was later integrated into the main security archive.

10.1.5. Aggiornamento automatico in un sistema Debian GNU/Linux

Per cominciare, gli aggiornamenti automatici non sono del tutto consigliabili, visto che gli amministratori dovrebbero leggere gli annunci DSA e comprendere l'impatto di ogni aggiornamento di sicurezza.
Se volete aggiornare automaticamente il vostro sistema occorre:
  • Configure apt so that those packages that you do not want to update stay at their current version, either with apt's pinning feature or marking them as hold with aptitude or dpkg.
    To pin the packages under a given release, you must edit /etc/apt/preferences (see apt_preferences(5)) and add:
      Package: *
      Pin: release a=stable
      Pin-Priority: 100
    
    FIXME: verificare se questa configurazione è corretta.
  • Either use cron-apt as described in Sezione 10.1.2.3, «Controllo automatico degli aggiornamenti con cron-apt» and enable it to install downloaded packages or add a cron entry yourself so that the update is run daily, for example:
      apt-get update && apt-get -y upgrade
    
    L'opzione -y farà in modo che apt risponda automaticamente 'yes' a tutte le domande che possono essere poste durante l'aggiornamento. In alcuni casi può essere preferibile usare l'opzione --trivial-only invece di quella --assume-yes (equivalente a -y)[61].
  • Configurare debconf in modo che non ponga nessuna domanda durante l'aggiornamento; in questo modo l'aggiornamento non è interattivo[62].
  • Controllare i risultati dell'esecuzione di cron, che verranno spediti al superutente (a meno che cron non sia stato configurato diversamente con la variabile MAILTO nell'apposito script).
Un'alternativa più sicura potrebbe essere usare l'opzione -d (o --download-only), che scaricherà ma non installerà i pacchetti necessari. L'aggiornamento verrà eseguito manualmente se l'esecuzione di cron mostrerà che il sistema deve essere aggiornato.
Per eseguire questi compiti, il sistema deve essere propriamente configurato per scaricare gli aggiornamenti di sicurezza come visto in Sezione 4.2, «Eseguire un aggiornamento per la sicurezza».
Ad ogni modo questo procedimento non è consigliabile per unstable, senza prima aver effettuato un'accurata analisi, perché potrebbe rendere il sistema inusabile se qualche bug pericoloso si insinuasse in un pacchetto importante e venisse installato nel sistema. Testing è un po' più sicura da questo punto di vista, dal momento che le possibilità di scoprire i bug più gravi prima che il pacchetto sia inserito in testing sono maggiori (tuttavia potreste non avere alcun aggiornamento di sicurezza disponibile, in questo caso).
Se avete una distribuzione mista, cioè una distribuzione stable con alcuni pacchetti presi da testing o unstable, potete utilizzare il sistema del pinning o l'opzione --target-release di apt-get per aggiornare solo quei pacchetti che hanno subito variazioni[63].


[61] Potreste anche utilizzare l'opzione --quiet (-q) per ridurre l'output di apt-get, in modo da non mostrare alcun output se non vengono installati pacchetti.
[62] Bisogna ricordare che alcuni pacchetti potrebbero non utilizzare debconf e l'aggiornamento potrebbe bloccarsi a causa dei pacchetti che richiedono un input da parte dell'utente durante la configurazione.
[63] Questo è un problema comune visto che molti utenti vogliono utilizzare un sistema stable e prendere solo alcuni pacchetti da unstable per disporre di funzionalità più recenti. Questo bisogno nasce dal fatto che alcuni progetti evolvono più rapidamente del tempo che passa tra due versioni stable di Debian.