L'importanza di non avviare servizi non necessari è elevata: tramite falle nella loro sicurezza è possibile in molti casi eseguire codice sul server. Ora, se il servizio gira come utente root, "ci siamo giocati" il server intero.
Se, invece, il servizio gira come utente non privilegiato che abbia accesso via filesystem o rete ai suoi soli dati, l'aggressore avrà ottenuto sì il controllo di tali dati (ovviamente), ma se il server è configurato come sopra specificato (e come diremo innanzi), il danno sarà verosimilmente limitato a questi.
In pratica, se un cracker trovasse un exploit su un'applicazione Web e sfruttasse la shell di comandi eventualmente ottenuta, potrebbe solo visualizzare o modificare file e lanciare comandi sui quali l'utente senza privilegi con cui gira Apache ha diritto di lettura, scrittura ed esecuzione.
Eliminare tutti i servizi inutili ai nostri scopi
Diamo uno sguardo a cosa è installato in un sistema di esempio quale il mio computer di sviluppo. Per visualizzare i servizi attivi bisognerà, dalla shell di comando come utente root, digitare i comandi:
netstat -ap | grep LISTEN
Seguirà una lista di servizi attivi in ascolto:
tcp localhost.localdom:8100 LISTEN soffice.bin tcp localhost.localdo:mysql LISTEN mysqld tcp *:sunrpc LISTEN portmap tcp *:auth LISTEN inetd tcp *:3963 LISTEN rpc.statd tcp *:x11 LISTEN X tcp *:x11-1 LISTEN Xvfb tcp6 *:x11 LISTEN X tcp6 *:x11-1 LISTEN Xvfb tcp6 *:https LISTEN apache2 tcp *:5900 LISTEN vino-server
Lo stesso si può ottenere con il software Nmap:
nmap -p1-65535 localhost
Con relativa risposta:
PORT STATE SERVICE 443/tcp open https 111/tcp open rpcbind 113/tcp open auth 3306/tcp open mysql 5900/tcp open vnc 6000/tcp open X11 6001/tcp open X11:1 8100/tcp open unknown
Nel nostro caso, per un PC desktop c'è il necessario ed il superfluo; per un server no, c'è assolutamente troppo: ponendo di essere in ambiente server, cerchiamo di capire cosa non va o a cosa porre attenzione.
- Open Office e MySQL sono qui server per script interni: non c'è necessità che accettino connessioni di rete;
- Per le elaborazioni cui è qui destinato, O.O. richiede un server grafico, che normalmente è X; allo scopo è invece installato un server grafico virtuale, Xvfb, sul quale viene appunto reindirizzato l'output. X non è di conseguenza più necessario (ed è bene disinstallarlo);
- Xvfb deve ricevere solamente connessioni da locale (le connessioni da remoto possono esser bloccate anche sul firewall locale);
- Portmap è un servizio di assegnazione di porta (dinamica) per i servizi RPC da esso controllati (come NIS e NFS) e dev'esser attivo al fine di poter eseguire chiamate di tale tipo. Se per noi non ha utilità, può esser rimosso;
- fare attenzione alla scelta della password di accesso di VNC/ssh (login utente). Indispensabile un tunneling VPN a monte;
- disabilitare i servizi di rete ritenuti inutili (es: auth) puntati da /etc/inetd.conf.