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:
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.
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).
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.
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:
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.
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.
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.
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.
Questo è un caso "paranoico" ma spesso anche hardware e driver non necessari possono essere sfruttati per degli attacchi.
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.
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.
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.
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.
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.