In questi giorni, nei quali si ha una
continua espansione della rete, a cui corrisponde un'aumento dei tentativi di
intrusione, la sicurezza della vostra rete Linux è essenziale. Molto spesso,
durante il testing, si preferisce mettersi nei panni di un possibile intruso
e tentare una penetrazione della propria rete. Questo articolo descrive una
delle fasi della penetrazione, lo scanning incentrandosi sulle tecniche implementative
di un portscanner e presentando Nmap, uno dei piu avanzati portscanner di pubblico
dominio, disponibili su Linux.
(n.d.NT. Se volete scaricare una versione di Nmap potete usare i potenti motori
di ricerca =) per l'occasione vi consiglio http://linux.box.sk)
1. Introduzione
Supponete di dover espugnare in una possibile
battaglia un forte. Quale è la prima cosa che fareste? Beh, senz'altro una buona
tattica di guerra sarebbe quella di ottenere tutte le informazioni relative alla
struttura e configurazione del forte. Quante guardie vi sono, quali turni fanno,
se hanno cannoni o meno, ecc. Ottenere queste informazioni è essenziale per la
buona riuscita dell'assalto, più informazioni otterremo, maggiori possibilità
di successo avremo. Medesima cosa vale per un server posto in rete, solo che in
questo caso, un possibile intruso suddivide, l'ottenimento delle informazioni
in due passi essenziali, che precedono l'attacco vero e proprio:
- Improntamento. L'improntamento sistematico
di una organizzazione permette al possibile intruso di crearsi un profilo
completo dello stato di sicurezza della data organizzazione. Principalmente
l'intruso cerca di ottenere maggiori informazioni possibili relative a:
- Amministratori di rete e utenti
della rete
- Posizione del server
- Presenza o meno di Intranet
- Sistemi di rilevamento delle intrusioni
- Server DNS e sua configurazione
- Indirizzi IP assegnati
- Eventuale Accesso Telefonico
La maggior parte delle informazioni suddette
sono liberamente disponibili su Internet. Non mi dilungo oltre perchè l'argomento
richiede un articolo a parte, che va oltre i nostri scopi.
- Scanning. Avendo effettuato l'improntamento
sappiamo, come puo essere fatto il nostro "forte", dobbiamo ora
essere sicuri, su come sia fatto esattamente e quali possibili sistemi operativi
e servizi vi sono. Secondo una definizione comunemente accettata, l'arte di
rilevare quali macchine siano attive e raggiungibili via Internet e quali
servizi siano disponibili, usando tecniche come i ping sweep (utili per rilevare
se uno determinato host sia attivo o meno), portscanning, e il rilevamento
del sistema operativo tramite stack TCP/IP fingerprinting viene chiamata scanning.
Noi in questo articolo incentreremo la nostra attenzione sul portscanning.
2. Port Scanning.
La prima cosa, che viene da chiedersi è che
sia il portscanning. Definiamo come portscanning il processo di connessione a
porte TCP e UDP sul sistema nel quale si vuole tentare una penetrazione al fine
di determinare quali servizi siano in esecuzione o stato di LISTENING. L'identificazione
delle porte in LISTENING è critica al fine di determinare il tipo di sistema operativo
e le applicazioni in uso. Un possibile intruso può abusare dei servizi presenti
della vostra macchina Linux, se sono malconfigurati o soggetti a bug, che possono
essere sfruttati per penetrare nel vostro sistema. Negli ultimi anni le tecniche
per creare programmi, che effettuino il portscanning in maniera accettabile, hanno
subito un notevole miglioramento tenendo presente i diversi obiettivi che un possibile
intruso vorrebbe fossero raggiunti quando lo si esegue. Questi includono:
- Identificare i servizi TCP o UDP in
esecuzione sul dato sistema.
- Identificare quale Sistema Operativo,
è presente sul dato sistema.
- Identificare applicazioni specifiche
o versioni di un dato servizio sul sistema.
3. Tipi di Scan
3.1 Connessione TCP : Handshake a tre
vie.
Prima di esaminare i diversi tipi di scan,
è necessario, descrivere brevemente come funziona una connessione TCP (per un
riferimento completo si suggerisce un rapida lettura alla RFC 793 http://www.ietf.org/rfc/rfc0793.txt,
utile anche successivamente quando parleremo dei vari tipi di scan). Quando un
sistema (client) prova a stabilire una connessione TCP in un sistema, che fornisce
un servizio (server), il client e il server scambiano una successione di messaggi,
nel seguente modo:
- Il sistema client inizia una connessione
mandando un messaggio SYN al server
- Il server riconosce il messaggio SYN
mandando il messaggio SYN-ACK al client.
- Il client risponde con un messaggio
di ACK.
A questo punto la connessione è attuata
e si procede allo scambio dei dati tra client e server.
Per fissare le idee, facciamo il seguente
schema:
CLIENT SERVER
SYN dal CLIENT
|------------------------------------>
SYN/ACK dal SERVER
<------------------------------------|
ACK dal CLIENT
|------------------------------------>
Schema 1.1. Handshake a tre vie.
4. Tecniche di PortScanning.
Lo schema di connessione soprastante viene
definito handshake a tre vie, ed è utile al fine di comprendere le diverse tecniche
di portscanning, che si possono riassumersi in :
- Scan TCP connect(). Questo tipo di scan
si connette alle porte dell'host e completa un handshake a tre vie (secondo
lo schema descritto sopra). È facilmente rilevabile dal sistema, che lo subisce
e per questo motivo difficilmente un potenziale intruso lo usa.
- Scan TCP SYN. Questo tipo di scan, viene
considerato come il "cavallo di battaglia" delle varie tecniche
di portscanning, ed è generalmente denominato come "scanning semi-aperto",
in quanto non viene portato a termine l'handshake, e non viene compiuta una
vera e propria connessione. Supponiamo di avere una porta P in un nostro host,
vediamo come funziona uno scan TCP SYN:
- MANDO UN PACCHETTO TCP SYN, alla porta P dell'host di cui sto
facendo il portscanning.
- se RICEVO dalla porta P:
* UN SYN/ACK ==> posso dedurre che P è in LISTENING.
* UN RST/ACK ==> posso dedurre che P non è in LISTENING
- MANDO UN RST/ACK per evitare, che l'handshake si completi.
- Scan TCP FIN. Tecnica di scanning basata
sulla RFC 793, funziona in questo modo:
- MANDO UN PACCHETTO TCP FIN, alla porta P dell'host di cui
sto facendo il portscanning.
- se RICEVO dalla porta P:
* UN RST ==> posso dedurre che la porta è chiusa;
- Scan TCP Xmas Tree. Funziona allo stesso
modo del precedente, solo che manda un pacchetto con FIN, URG e PUSH impostati.
- TCP Null Scan. Questa tecnica manda
un pacchetto con tutti i flag disattivati, e per quanto riguarda l'output
funziona allo stesso modo dello Scan TCP FIN.
- UDP scan. Questa tecnica manda un pacchetto
UDP alla porta dell'host, di cui si vuole fare lo scanning, se la data porta
risponde con il messaggio ICMP port unreacheable, la porta è aperta, altresi
la porta è chiusa.
Ho concluso la descrizione delle principali
tecniche implementative di un portscanner, ora che sappiamo cosa fanno i portscanner,
vediamo come usarli al fine di scoprire, quante e quali informazioni un possibile
intruso potrebbe ottenere mediante portscanning sulla nostra rete. Per fare questi
esempi, utilizzo un portscanner molto noto : Nmap.
5. Introduzione ad Nmap Nmap, prelevabile al http://www.insecure.org/nmap/index.html è un portscanner, che incorpora in se oltre a tutte le tecniche di portscannig
descritte sopra, la rilevazione del sistema operativo, tramite una tecnica chiamata
TCP/IP Stack FingerPrinting, di cui trovate un'ampia descrizione (anche in Italiano)
al http://www.insecure.org/nmap/nmap-fingerprinting-article.html.
Vediamo ora, come usare nmap, al fine di testare la nostra rete con gli occhi
dell'intruso. Supponiamo che l'indirizzo, corrispondente all'host della nostra
rete, che si desidera testare sia il 192.168.1.1, ed eseguiamo tutti i tipi di
portscannig descritti precedentemente:
- Scan TCP connect()
[root@zetanet]# nmap -sT 192.168.1.1
Solo in questo caso, vediamone l'output:
Starting nmap V. 2.3BETA12 by Fyodor (fyodor@dhp.com, www.insecure.org/nmap/)
Interesting ports on (192.168.1.1):
Port State Protocol Service
21 open tcp ftp
23 open tcp telnet
25 open tcp smtp
53 open tcp domain
79 open tcp finger
80 open tcp http
98 open tcp linuxconf
111 open tcp sunrpc
139 open tcp netbios-ssn
# Nmap run completed -- 1 IP address (1 host up) scanned in 301 seconds
- Scan TCP SYN
[root@zetanet]# nmap -sS 192.168.1.1
- Scan TCP FIN
[root@zetanet]# nmap -sF 192.168.1.1
- Scan TCP XMAS
[root@zetanet]# nmap -sX 192.168.1.1
- Scan UDP
[root@zetanet]# nmap -sU 192.168.1.1
- Scan TCP Null
[root@zetanet]# nmap -sN 192.168.1.1
5.1 Funzionalità aggiuntive.
Due funzionalità aggiuntive molto importanti,
che nmap offre, sono la rilevazione del sistema operativo e l'utilizzo dei decoys.
I decoys, letteralmente esche, sono un gruppo di indirizzi IP esistenti posti
durante lo scan assieme al vostro indirizzo, facendo così gli eventuali sistemi
di rilevamento delle intrusioni riportano N indirizzi IP assieme e non solo il
vostro. Per concludere il discorso di vediamo un esempio, di queste due funzionalità:
[root@zetanet]# nmap -sS 192.168.1.1 -O -D 195.210.98.21,212.141.68.248,
ME,62.11.122.15 192.168.1.1
Starting nmap V. 2.3BETA12 by Fyodor (fyodor@dhp.com, www.insecure.org/nmap/)
Interesting ports on (192.168.1.1):
Port State Protocol Service
21 open tcp ftp
23 open tcp telnet
25 open tcp smtp
53 open tcp domain
79 open tcp finger
80 open tcp http
98 open tcp linuxconf
111 open tcp sunrpc
139 open tcp netbios-ssn
TCP Sequence Prediction: Class=random positive increments
Difficulty=632021 (Good luck!)
Remote operating system guess: Linux 2.1.122 - 2.2.13
Nmap run completed -- 1 IP address (1 host up) scanned in 312 seconds
L'opzione -D, permette di specificare i decoys
(ME è il mio indirizzo IP), invece l'opzione -O permette di rilevare il sistema
operativo, quest'ultima opzione è da non confondere con l'opzione -o, che vi permette
di salvare l'output su file. Per le altre opzioni si consulti la man page di Nmap,
che oltre ad essere ben scritta, viene costantemente aggiornata.
6. Contromisure. Probabilmente, alcuni di voi si chiederanno quali strumenti usare contro il portscanning.
Esistono diversi strumenti di difesa per Linux, attivi e passivi al fine di rilevare
o bloccare il portscanning, citiamone alcuni:
- Firewall. La maggior parte dei firewall
possono loggare, ed ipchains/ipfwadm non sono un eccezione, usando l'opzione
-l potete loggare ogni pacchetto e rilevare ogni tentativo di intrusione,
portscanning incluso.
- Psionic PortSentry. Utility facente
parte del progetto Abacus, prelevabile al http://www.psionic.com/abacus/portsentry.
PortSentry può essere configurato per rilevare e bloccare il portscanning.
- Snort. Snort è un sistema di rilevamento
delle intrusioni, che permette di identificare il comportamento di Nmap. Un
buon riferimento su come funziona Snort è al http://www.clark.net/~roesch/security.html
- Network Flight Recorder (NFR). Descrivere
NFR in quattro righe è impossibile per la quantità di operazioni, che consente
fare, avendo al suo interno un vero e proprio linguaggio di scripting, che
vi permette di configurarlo al fine di rilevare un dato tentativo di intrusione.
Se siete interessanti vi rimando al sito http://www.nfr.net.
7. Note finali. Questo articolo, è da considerarsi una semplice
introduzione, e non un riferimento completo. Ho voluto lavorare su due piani:
uno teorico, descrivendo le tecniche di portscanning, e l'altro applicativo, mettendomi
nei panni di un possibile intruso e facendo lo scan di un host presente nella
mia rete. Sul portscanning si può trovare un'infinità di documentazione in Internet.
Un buon sito dove iniziare? Semplice: http://www.securify.com/packetstorm
8. Avvertenze sull'uso. Più volte e' stato chiesto sul newsgroup alt.hackers.cough.cough.cough se il portscanner
è un reato.
IL PORTSCANNER IN SE NON E' UN REATO!!
Cioè non può essere perseguito dalla legge; ma il portscanner può dare fastidio
all'amministratore della rete che state controllando.
Visto che non è un reato l'amministratore della rete che state controllando (chiamiamolo
X [ mannaggia!!! ma proprio "X" dovevi chiamarlo? ;) X al limite è quello
che il port scanning lo fa hihiihiihi <N.D.R.> ] ) non può tecnicamente
fare niente se non controllare i proprio log e farli presente all'amministratore
della vostra rete. Comunque sia X può essere la persona più impaziente sulla facci
della terra ma non potrà fare niente finché non verrà effettuato un vero e proprio
attacco alla sua rete e/o una introduzione.
|