Sapere quali porte di rete siano aperte sul nostro sistema è fondamentale per la sicurezza del sistema stesso. Vi sono diversi modi per identrificare le porte aperte e le eventuali connessioni ad esse ed il primo e più conosciuto di questi è:
# netstat -an -f inet
Active Internet connections (including servers)
Proto Recv-Q Send-Q Local Address Foreign Address (state)
tcp4 0 0 12.123.45.67.50033 195.22.198.15.80 ESTABLISHED
tcp4 0 0 12.123.45.67.50018 195.22.198.15.80 ESTABLISHED
tcp4 0 0 192.168.0.1.65232 217.220.29.16.6667 ESTABLISHED
tcp4 0 0 192.168.0.1.65231 213.92.8.4.6667 ESTABLISHED
tcp4 0 0 192.168.0.1.139 *.* LISTEN
tcp4 0 0 127.0.0.1.3493 127.0.0.1.49154 ESTABLISHED
tcp4 0 0 127.0.0.1.49154 127.0.0.1.3493 ESTABLISHED
tcp4 0 0 127.0.0.1.3493 127.0.0.1.49153 ESTABLISHED
tcp4 0 0 127.0.0.1.49153 127.0.0.1.3493 ESTABLISHED
tcp4 0 0 *.3493 *.* LISTEN
tcp46 0 0 *.80 *.* LISTEN
tcp4 0 0 *.25 *.* LISTEN
tcp4 0 0 *.22 *.* LISTEN
tcp6 0 0 *.22 *.* LISTEN
tcp4 0 0 *.515 *.* LISTEN
tcp6 0 0 *.515 *.* LISTEN
tcp4 0 0 127.0.0.1.53 *.* LISTEN
tcp4 0 0 192.168.0.1.53 *.* LISTEN
udp4 0 0 192.168.0.1.138 *.*
udp4 0 0 192.168.0.1.137 *.*
udp4 0 0 *.138 *.*
udp4 0 0 *.137 *.*
udp4 0 0 *.3493 *.*
udp4 0 0 127.0.0.1.123 *.*
udp4 0 0 192.168.0.1.123 *.*
udp4 0 0 *.123 *.*
udp4 0 0 *.49152 *.*
udp4 0 0 127.0.0.1.53 *.*
udp4 0 0 192.168.0.1.53 *.*
udp4 0 0 *.514 *.*
L'output di netstat può sembrare un po' oscuro a prima
vista: dopo l'identificazione del protocollo si trovano il numero dei pacchetti nelle
code di ricezione e di invio, quindi l'indirizzo locale, composto da 4 campi per
l'indirizzo IP e un quinto per la porta utlizzata. Un eventuale * (asterisco) in sostituzione dell'indirizzo IP evidenzia che la
porta è attiva in ogni indirizzo locale. La quinta colonna indica l'host remoto e la
porta dell'host remoto qualora ci sia una connessione, oppure *.* in caso la porta sia in ascolto e in attesa di una connessione.
L'ultima colonna mostra lo stato della connessione: ESTABLISHED se è attiva e pronta a trasmettere e/o ricevere,
LISTEN se il sistema è in attesa di una connessione su
quella porta. Ci sono altri stati possibili e la consultazione della man page di netstat(1) può
chiarire tutti i dubbi. L'output di netstat è utile per sapere
le connessioni attive, tuttavia se vogliamo chiuderne una e impedire che vengano
effettuate altre connessione da/a quella porta occorre sapere almeno quali applicazioni
e/o servizi utilizzano quella porta e il modo più veloce per venirne a conoscenza
è l'analisi del file /etc/services:
# cat /etc/services | grep 3493
nut 3493/tcp #Network UPS Tools
nut 3493/udp #Network UPS Tools
Un altro tool molto utile per conoscere le porte che stiamo utilizzando in questo momento
è sockstat, che ci fornisce anche utente, comando e
processo di ogni connessione e di ogni porta in ascolto:
# sockstat -46
USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS
bind named 59998 3 udp4 *:58314 *:*
paperino evolution- 59406 26 tcp4 12.123.45.67:51970 216.136.204.117:80
paperino evolution- 59406 27 tcp4 12.123.45.67:51971 63.236.73.26:80
paperino evolution- 59406 28 tcp4 12.123.45.67:51972 204.152.186.46:80
paperino ssh 56858 3 tcp4 12.123.45.67:50565 212.171.15.152:22
paperino irssi 14717 3 tcp4 192.168.0.1:65232 217.220.29.16:6667
paperino irssi 14717 5 tcp4 192.168.0.1:65231 213.92.8.4:6667
www httpd 56922 3 tcp46 *:80 *:*
www httpd 56921 3 tcp46 *:80 *:*
www httpd 56920 3 tcp46 *:80 *:*
www httpd 5115 3 tcp46 *:80 *:*
www httpd 791 3 tcp46 *:80 *:*
root nmbd 639 8 udp4 *:137 *:*
root nmbd 639 9 udp4 *:138 *:*
root nmbd 639 10 udp4 192.168.0.1:137 *:*
root nmbd 639 11 udp4 192.168.0.1:138 *:*
root smbd 637 9 tcp4 192.168.0.1:139 *:*
root upslog 631 3 tcp4 127.0.0.1:49154 127.0.0.1:3493
uucp upsmon 630 3 tcp4 127.0.0.1:49153 127.0.0.1:3493
uucp upsd 626 3 udp4 *:3493 *:*
uucp upsd 626 4 tcp4 *:3493 *:*
uucp upsd 626 8 tcp4 127.0.0.1:3493 127.0.0.1:49153
uucp upsd 626 9 tcp4 127.0.0.1:3493 127.0.0.1:49154
I titoli sopra le colonne spiegano chiaramente i dati di ognuna. Tuttavia l'analisi non
è ancora completa, in quanto sappiamo che porte sono aperte e quali sono in attesa
di una connessione, però alcune potrebbero essere filtrate o chiuse da un firewall
e quindi diventa importante sapere quali porte siano effettivamente raggiungibili
dall'esterno.Un ottimo tool e probabilmente anche il più diffuso per conoscere eventuali
"falle" è security/nmap, uno scanner che interroga tutte
le porte dell'IP specificato e informa su quali siano aperte, filtrate o chiuse.
Ovviamente è necessario eseguire nmap da una macchina
posizionata su una rete esterna rispetto al sistema che vogliamo testare. Ad esempio, per
fare una scansione di target da base:
base# nmap -sS -O target
Starting nmap 3.27 ( www.insecure.org/nmap/ ) at 2003-06-17 13:03 CEST
Insufficient responses for TCP sequencing (3), OS detection may be less accurate
Interesting ports on target (12.34.56.78):
(The 1619 ports scanned but not shown below are in state: closed)
Port State Service
22/tcp open ssh
25/tcp open smtp
53/tcp open domain
80/tcp open http
Remote OS guesses: Mac OS X 10.1.4 (Darwin Kernel 5.4) on iMac, Mac OS X 10.1.5, FreeBSD 4.3 - 4.4PRERELEASE, FreeBSD 5.0-CURRENT (Jan 2003), FreeBSD 5.0-RELEASE (x86)
Uptime 13.967 days (since Tue Jun 3 13:51:42 2003)
Nmap run completed -- 1 IP address (1 host up) scanned in 16.704 seconds
nmap fornisce la porta e il protocollo, lo stato della porta
stessa e il servizio che è attivo su quella porta. Inoltre cerca di individuare il
sistema operativo che gira su target. Ovviamente l'essere a
conoscenza delle porte aperte è solo un primo passo verso la sicurezza di un
sistema.