Avanti Indietro Indice

3. Firewall

3.1 Introduzione

Un firewall in genere è composto da uno o più computer che si pongono tra le reti private e quelle esterne (es. internet) con il preciso scopo di controllare ciò che transita da una rete verso l'altra.

In particolare sono utilizzati per stabilire a quali servizi (www, ftp, mail,...) presenti nella rete internet è possibile accedere dalla rete locale, e quali possonono essere resi disponibili alle reti esterne.

La necessità di questi controlli è dovuta al fatto che i sistemi operativi (Windows, Mac, Linux, ...), i protocolli utilizzati per lo scambio dei dati tra le reti (TCP/IP), i programmi hanno una serie di limiti, errori di programmazione che possono esporre la propria rete a diversi attacchi.

Questi attacchi possono permettere ad una persona con le giuste informazioni e con particolari programmi (exploit) di individuare eventuali vulnerabilità e di accedere e modificare una macchina. L'intruso potrebbe quindi apportare delle modifiche che gli consentano di accedere in qualsiasi momento senza essere scoperto (backdoor), oppure di sfruttarla per sottrarre informazioni (progetti confidenziali, password, ...), per coinvolgerla in attacchi DoS (Denial of Service), DDoS (Distribuited Denial of Service) ...

Le soluzioni adottate per proteggere le reti, viste anche le diversità dei sistemi, sono varie. L'ICSA, ente che certifica l'affidabilità di un prodotto firewall, ha individuato tre tipologie di firewall:

packet filtering

Questa probabilmente è la soluzione più semplice e consiste nel controllare ogni pacchetto che transita da una rete all'altra. I pacchetti contengono una serie di informazioni (indirizzo sorgente, indirizzo destinazione, porta sorgente, porta destinazione ...) che possono essere utilizzate per stabilire se il pacchetto può essere accettato e quindi lasciato proseguire oppure no e quindi rifiutato. Questo tipo di firewall non provvede a richiedere e a controllare login e password, quindi ad identificare l'utente che richiede una connessione, l'unico dato disponibile è l'indirizzo sorgente contenuto nell'intestazione del pacchetto.

application gateway

In questo caso un'applicazione detta proxy si occupa di analizzare, autorizzare e inoltrare i pacchetti che transitano. L'autenticazione deve avvenire in modo sicuro e protetto, basato in genere su account e password cifrate. Sono molto diffuse e considerate ottimali le soluzioni che impiegano come firewall una macchina proxy che effettua anche il filtraggio dei pacchetti (packet filtering).

packet inspection

In questo caso oltre al filtraggio, comunque essenziale, si aggiungono ulteriori controlli che riguardano anche le altre informazioni sempre contenute nei pacchetti.

Per valutare l'affidabilità della propria piattaforma (computer, sistema operativo, protocollo di rete) è possibile consultare il sito del CERT (Computer Emergency Response Team) e per ottenere varie informazioni il sito dell' ICSA.

3.2 Norme generali di sicurezza

Ottenere un sistema sicuro e protetto da un qualsiasi attacco è molto difficile, sono molte infatti le variabili che entrano in gioco, è comunque possibile adottare vari accorgimenti per cercare di proteggere al meglio la propria rete.

In genere il punto di partenza per limitare queste vulnerabilità è quello di essere minimalisti, ossia configurare la propria macchina/firewall in modo che abbia lo stretto indispensabile, e di seguire i seguenti accorgimenti:

Aggiornare e compilare il kernel abilitando le voci sulla sicurezza

I kernel minori della versione 2.2.16 sono vulnerabili al TCP root exploit, le versioni minori alla 2.2.11 hanno un bug riguardante IPCHAINS e la frammentazione, aggiornare alle ultime versioni stabili del kernel risolve questi e altri problemi. Quando si compila il kernel è raccomandabile selezionare, se possibile, le voci IP: syn cookies, IP: always defragment. Permettono di risolvere alcuni problemi noti riguardanti la sicurezza.

Installare i programmi strettamente necessari

I programmi in genere sono molto complessi e quindi è inevitabile che ci possano essere degli errori di programmazione (BUG). Questi errori possono essere usati per accedere alle macchine quindi è indispensabile installare possibilmente solo i programmi strettamente necessari e in ogni caso consultare spesso il sito della propria distribuzione Linux per aggiornarli alle ultime versioni, soprattutto se sono stati riscontrati problemi riguardanti la sicurezza. Nota: aggiornare in casi di bachi noti è importante, se l'aggiornamento riguarda solo aggiunta di nuove funzionalità allora è meglio fare attenzione, in quanto potrebbero contenere a loro volta nuovi bug.

Abilitare solo quei servizi (telnet, ftp, finger ...) di cui si ha realmente bisogno

Linux permette di offrire tutta una serie di servizi agli utenti: ftp, mail, web. Per ottenere un elenco dei servizi attivi nella propria Linux box è possibile utilizzare il seguente comando:

# netstat --inet -a -p
 

Active Internet connections (servers and established)
Proto Recv-Q Send-Q  Local Address       Foreign Address        State         PID/Program name
tcp        0      0  *:ftp               *:*                    LISTEN        324/inetd
tcp        0      0  *:telnet            *:*                    LISTEN        324/inetd
...

Se sulla propria macchina ad esempio risulta attivo un server ftp e non si ha intenzione di permettere agli utenti di accedervi per effettuare upload/download di file allora è meglio disabilitare il servizio. A questo scopo basta modificare con un editor di testo il file /etc/inetd.conf e aggiungere un '#' all'inizio della riga:

ftp   stream   tcp       nowait   root   /usr/sbin/tcpd   in.ftpd -l -a

Quindi riavviare il processo inetd per rendere attiva la modifica.

Nota: questa modifica non preclude la possibilità di effettuare ftp da questa macchina verso altre, ma solo l'inverso, ossia l'accesso di altre macchine alla propria.

Utilizzare password cifrate (shadow, MD5) e scelte con criterio

E' indispensabile scegliere password che non siano facilmente decifrabili, ossia brevi, appartenenti al dizionario o di uso comune. E' inoltre molto importante cambiarle con una certa frequenza.

Rimuovere hardware non necessario

Questo è un caso "paranoico" ma spesso anche hardware e driver non necessari possono essere sfruttati per degli attacchi.

Controllare quali programmi possono essere pericolosi

Con il comando:

# find / -type f -perm +6000 -exec ls -l {} \;
...
-rwsr-xr-x    1 root       root      35892  Dec  8  1999   /usr/bin/chage
-rwsr-xr-x    1 root       root      37960  Dec  8  1999   /usr/bin/gpasswd
-rwxr-sr-x    1 root       tty        8580  Dec 21  1999   /usr/bin/write
-rwsr-xr-x    1 root       root      22904  Oct 25  1999   /usr/bin/crontab
...

si ottiene una lista dei programmi che hanno particolare privilegi (root). Questi programmi potrebbero contenere dei bug che un intruso potrebbe sfruttare per acquisirne i privilegi e quindi arrecare danni al sistema. Se questi programmi sono indispensabili aggiornali con frequenza, in particolare se sono stati scoperti bachi riguardanti la sicurezza, o se inutili è possibile in molti casi anche eliminarli.

Controllare il file /var/log/messages e verificare eventuali stranezze

Se si utilizza il filtraggio dei pacchetti (con ipchains o iptables) è possibile impostare delle regole per "registrare" eventuali pacchetti anomali. Controllando queste informazioni è possibile stabilire se ci sono state intrusioni o tentativi di accesso.

Usare software che verifichi l'integrità dei file (Tripwire)

Se qualcuno riesce ad accedere ad una macchina potrebbe essere in grado di sostituire un programma o daemon con un "troiano" ossia un file che svolge le stesse funzioni ma che in più permette ad esempio di prelevare dei dati (es. password) dalla macchina della vittima e di inviarli all'intruso. Tripwire è un noto programma che controlla e verifica l'integrità dei file. Se la propria distribuzione utilizza i pacchetti rpm è possibile verificarne l'integrità utilizzando: rpm --verify -a > /tmp/rpm-verify.txt. Se in rpm-verify.txt in una o più linee compare un 5 allora il file associato è stato modificato. In questi casi è meglio controllare se queste modifiche sono proprie, altrimenti qualcuno potrebbe essere penetrato nel sistema. Nota: è sempre meglio fare attenzione ai programmi che si installano in particolare se prelevati da siti internet, floppy, zip di dubbia provenienza.

Utilizzare ssh (secure shell)

Servizi come ad esempio telnet sono insicuri in quanto la trasmissione dei dati avviene in "chiaro", compresi username e password. Quindi qualcuno, utilizzando uno "sniffer", potrebbe essere in grado di leggerle e utilizzarle a proprio vantaggio. ssh provvede a risolvere il problema cifrando le connessioni garantendo così maggior sicurezza.

Consultare i siti dedicati alla sicurezza e alla scoperta di errori o buchi per la sicurezza

Esistono diversi siti che si occupano di segnalare tempestivamente problemi, bachi presenti nei programmi o nei sistemi operativi e le relative precauzioni o soluzioni per risolverli. Tra i più noti packetstorm, securityfocus.


Avanti Indietro Indice